Previous 199869 Revisions Next

r33720 Saturday 6th December, 2014 at 21:55:29 UTC by R. Belmont
Merge pull request #60 from mbcoguno/libsdl2-osx

SDL: Fix build with non-framework SDL 2 issue on OS X [mbcoguno]
[docs]floppy.txt
[hash]adam_cass.xml coco_flop.xml gamate.xml leapster.xml mc1000_cass.xml* neogeo.xml nes.xml osborne1.xml psx.xml tvc_flop.xml* vsmile_cart.xml
[src/emu]emupal.c emupal.h luaengine.c luaengine.h rendlay.c rendlay.h
[src/emu/bus/isa]sc499.c sc499.h
[src/emu/bus/psx]memcard.h multitap.c
[src/emu/cpu]cpu.mak
[src/emu/cpu/alto2]a2disp.h a2ether.c
[src/emu/cpu/arc]arc.c* arc.h* arcdasm.c*
[src/emu/cpu/arcompact]arcompact.c* arcompact.h* arcompactdasm.c*
[src/emu/cpu/i86]i86.c
[src/emu/cpu/pps4]pps4.c pps4.h pps4dasm.c
[src/emu/cpu/tms0980]tms0980.c tms0980.h
[src/emu/video]poly.h
[src/lib]lib.mak
[src/lib/formats]flopimg.c victor9k_dsk.c victor9k_dsk.h
[src/lib/libflac/include/private]all.h bitmath.h bitreader.h bitwriter.h cpu.h crc.h fixed.h float.h format.h lpc.h md5.h memory.h metadata.h stream_encoder_framing.h window.h
[src/lib/libflac/include/protected]all.h stream_decoder.h stream_encoder.h
[src/lib/libflac/libFLAC/include/private]all.h* bitmath.h* bitreader.h* bitwriter.h* cpu.h* crc.h* fixed.h* float.h* format.h* lpc.h* md5.h* memory.h* metadata.h* stream_encoder_framing.h* window.h*
[src/lib/libflac/libFLAC/include/protected]all.h* stream_decoder.h* stream_encoder.h*
[src/mame]mame.lst mame.mak
[src/mame/audio]dcs.c gottlieb.c
[src/mame/drivers]40love.c alpha68k.c atvtrack.c bagman.c bfm_sc4h.c bionicc.c bottom9.c champbas.c chihiro.c cps1.c crystal.c cultures.c dietgo.c ecoinfr.c gaelco3d.c galpani2.c gts1.c igs_m036.c lindbergh.c m62.c mjkjidai.c multfish_ref.c naomi.c neogeo_noslot.c nova2001.c r2dx_v33.c raiden2.c re900.c relief.c renegade.c starwars.c supduck.c system16.c thedeep.c tigeroad.c vsnes.c wallc.c wc90b.c yunsun16.c
[src/mame/includes]bionicc.h chihiro.h* galpani2.h mjkjidai.h relief.h renegade.h tigeroad.h toaplan1.h yunsun16.h
[src/mame/layout]gts1.lay*
[src/mame/machine]mie.c naomicrypt.c naomim4.c pgmprot_igs027a_type3.c raiden2cop.c
[src/mame/video]bionicc.c bosco.c btime.c chihiro.c* galpani2.c mjkjidai.c renegade.c tankbust.c tigeroad.c tigeroad_spr.c* tigeroad_spr.h* yunsun16.c
[src/mess]mess.lst mess.mak
[src/mess/audio]upd1771.c
[src/mess/drivers]cnsector.c* comp4.c gamate.c leapster.c mc1000.c megadriv.c merlin.c microvsn.c ngen.c simon.c starwbc.c* stopthie.c ticalc1x.c tvc.c victor9k.c
[src/mess/layout]cnsector.lay* comp4.lay* merlin.lay starwbc.lay* stopthie.lay ti1270.lay* ti30.lay* tisr16.lay* wizatron.lay*
[src/mess/machine]ngen_kb.c* ngen_kb.h* victor9k_fdc.c victor9k_fdc.h
[src/mess/tools/imgtool/modules]os9.c
[src/mess/video]maria.c

trunk/docs/floppy.txt
r242231r242232
329329- FM-encoded sector data followed by two bytes of crc
330330- A number of FM-encoded 0xff (usually 48, very variable)
331331
332The the track is finished with a stream of '1' cells.
332The track is finished with a stream of '1' cells.
333333
334334The 125KHz pulse trains are used to lock the PLL to the signal
335335correctly.  The specific 16-cells streams allow to distinguish between
trunk/hash/adam_cass.xml
r242231r242232
6969      <publisher>Reedy Software</publisher>
7070
7171      <part name="cass1" interface="adam_cass">
72           <dataarea name="cass" size="262144">
73               <rom name="addictus (1989) (reedy software).ddp" size="262144" crc="30584c67" sha1="7c6b6a44647e6fff3f1be207174cb30503f92e2b" offset="0" />
74           </dataarea>
75       </part>
72         <dataarea name="cass" size="262144">
73            <rom name="addictus (1989) (reedy software).ddp" size="262144" crc="30584c67" sha1="7c6b6a44647e6fff3f1be207174cb30503f92e2b" offset="0" />
74         </dataarea>
75      </part>
7676   </software>
7777
7878   <software name="addrbook">
79       <description>Address Book Filer with AutoDialer</description>
80       <year>1984</year>
81       <publisher>Coleco</publisher>
79      <description>Address Book Filer with AutoDialer</description>
80      <year>1984</year>
81      <publisher>Coleco</publisher>
8282
83       <part name="cass1" interface="adam_cass">
84           <dataarea name="cass" size="262144">
85               <rom name="address book filer with autodialer (1984) (coleco).ddp" size="262144" crc="8fba1389" sha1="47b5737eafd9e778aba2a05c93f4551a4b3eb21a" offset="0" />
86           </dataarea>
87       </part>
83      <part name="cass1" interface="adam_cass">
84         <dataarea name="cass" size="262144">
85            <rom name="address book filer with autodialer (1984) (coleco).ddp" size="262144" crc="8fba1389" sha1="47b5737eafd9e778aba2a05c93f4551a4b3eb21a" offset="0" />
86         </dataarea>
87      </part>
8888   </software>
8989
9090   <software name="autoaid">
91       <description>Auto-AID for SmartBASIC</description>
92       <year>1984</year>
93       <publisher>FutureVision</publisher>
91      <description>Auto-AID for SmartBASIC</description>
92      <year>1984</year>
93      <publisher>FutureVision</publisher>
9494
95       <part name="cass1" interface="adam_cass">
96           <dataarea name="cass" size="262144">
97               <rom name="auto-aid for smartbasic v1.0 (1984) (futurevision).ddp" size="262144" crc="394284af" sha1="3c98d98665fe4e12265455419f460e97faf79c41" offset="0" />
98           </dataarea>
99       </part>
95      <part name="cass1" interface="adam_cass">
96         <dataarea name="cass" size="262144">
97            <rom name="auto-aid for smartbasic v1.0 (1984) (futurevision).ddp" size="262144" crc="394284af" sha1="3c98d98665fe4e12265455419f460e97faf79c41" offset="0" />
98         </dataarea>
99      </part>
100100   </software>
101101
102102   <software name="autobckp">
103       <description>AutoBackup</description>
104       <year>198?</year>
105       <publisher>Walters Software Co.</publisher>
103      <description>AutoBackup</description>
104      <year>198?</year>
105      <publisher>Walters Software Co.</publisher>
106106
107       <part name="cass1" interface="adam_cass">
108           <feature name="part_id" value="AutoSave" />
109           <dataarea name="cass" size="262144">
110               <rom name="autobackup - autosave (198x) (walters software co.).ddp" size="262144" crc="13f5f1ad" sha1="2a7c0fb50fbd1a9d64fb1d53b1354222b5f426f7" offset="0" />
111           </dataarea>
112       </part>
113       <part name="cass2" interface="adam_cass">
114           <feature name="part_id" value="AutoLoad" />
115           <dataarea name="cass" size="262144">
116               <rom name="autobackup - autoload (198x) (walters software co.).ddp" size="262144" crc="55b9ccf1" sha1="a1196b2c9a91042e1c549afbf3a0d40413dc24a9" offset="0" />
117           </dataarea>
118       </part>
107      <part name="cass1" interface="adam_cass">
108         <feature name="part_id" value="AutoSave" />
109         <dataarea name="cass" size="262144">
110            <rom name="autobackup - autosave (198x) (walters software co.).ddp" size="262144" crc="13f5f1ad" sha1="2a7c0fb50fbd1a9d64fb1d53b1354222b5f426f7" offset="0" />
111         </dataarea>
112      </part>
113      <part name="cass2" interface="adam_cass">
114         <feature name="part_id" value="AutoLoad" />
115         <dataarea name="cass" size="262144">
116            <rom name="autobackup - autoload (198x) (walters software co.).ddp" size="262144" crc="55b9ccf1" sha1="a1196b2c9a91042e1c549afbf3a0d40413dc24a9" offset="0" />
117         </dataarea>
118      </part>
119119   </software>
120120
121121   <software name="bestbrod">
122       <description>The Best of Brøderbund</description>
123       <year>1984</year>
124       <publisher>Coleco</publisher>
122      <description>The Best of Brøderbund</description>
123      <year>1984</year>
124      <publisher>Coleco</publisher>
125125
126       <part name="cass1" interface="adam_cass">
127           <dataarea name="cass" size="262144">
128               <rom name="best of broderbund, the (1984) (coleco).ddp" size="262144" crc="8a1d3ab5" sha1="a6646acea19a2d96cc262f478225f8216fdbb2fa" offset="0" />
129           </dataarea>
130       </part>
126      <part name="cass1" interface="adam_cass">
127         <dataarea name="cass" size="262144">
128            <rom name="best of broderbund, the (1984) (coleco).ddp" size="262144" crc="8a1d3ab5" sha1="a6646acea19a2d96cc262f478225f8216fdbb2fa" offset="0" />
129         </dataarea>
130      </part>
131131   </software>
132132
133133   <software name="bestbroda" cloneof="bestbrod">
134       <description>The Best of Brøderbund (Alt)</description>
135       <year>1984</year>
136       <publisher>Coleco</publisher>
134      <description>The Best of Brøderbund (Alt)</description>
135      <year>1984</year>
136      <publisher>Coleco</publisher>
137137
138       <part name="cass1" interface="adam_cass">
139           <dataarea name="cass" size="262144">
140               <rom name="best of broderbund, the (1984) (coleco) [a1].ddp" size="262144" crc="cc8d3dc4" sha1="dabbdc85d4cd22c98a864d337958d3e7b48ff120" offset="0" />
141           </dataarea>
142       </part>
138      <part name="cass1" interface="adam_cass">
139         <dataarea name="cass" size="262144">
140            <rom name="best of broderbund, the (1984) (coleco) [a1].ddp" size="262144" crc="cc8d3dc4" sha1="dabbdc85d4cd22c98a864d337958d3e7b48ff120" offset="0" />
141         </dataarea>
142      </part>
143143   </software>
144144
145145   <software name="bestea">
r242231r242232
172172      <publisher>Coleco</publisher>
173173
174174      <part name="cass1" interface="adam_cass">
175           <dataarea name="cass" size="262144">
176               <rom name="super buck rogers - planet of zoom (1983) (coleco) [a1].ddp" size="262144" crc="69aa76a7" sha1="f394b00b027ea4459eaccb03d1bff4c3dc231cab" offset="0" />
177           </dataarea>
178       </part>
175         <dataarea name="cass" size="262144">
176            <rom name="super buck rogers - planet of zoom (1983) (coleco) [a1].ddp" size="262144" crc="69aa76a7" sha1="f394b00b027ea4459eaccb03d1bff4c3dc231cab" offset="0" />
177         </dataarea>
178      </part>
179179   </software>
180180
181181   <software name="softadam">
r242231r242232
191191   </software>
192192
193193   <software name="cartcopy">
194       <description>Coleco Game Cartridge Copy</description>
195       <year>1984</year>
196       <publisher>Coleco</publisher>
194      <description>Coleco Game Cartridge Copy</description>
195      <year>1984</year>
196      <publisher>Coleco</publisher>
197197
198       <part name="cass1" interface="adam_cass">
199           <dataarea name="cass" size="262144">
200               <rom name="coleco game cartridge copy (1984) (coleco).ddp" size="262144" crc="cda050a1" sha1="2227328bf2f15eb8bf784e1fc331c1a8a3f2867b" offset="0" />
201           </dataarea>
202       </part>
198      <part name="cass1" interface="adam_cass">
199         <dataarea name="cass" size="262144">
200            <rom name="coleco game cartridge copy (1984) (coleco).ddp" size="262144" crc="cda050a1" sha1="2227328bf2f15eb8bf784e1fc331c1a8a3f2867b" offset="0" />
201         </dataarea>
202      </part>
203203   </software>
204204
205205   <software name="conlife">
206       <description>Conway's Game of Life</description>
207       <year>199?</year>
208       <publisher>&lt;unknown&gt;</publisher>
206      <description>Conway's Game of Life</description>
207      <year>199?</year>
208      <publisher>&lt;unknown&gt;</publisher>
209209
210       <part name="cass1" interface="adam_cass">
211           <dataarea name="cass" size="262144">
212               <rom name="conway's game of life (199x) (unknown).ddp" size="262144" crc="f4286eaa" sha1="dc1c9dc5db9103240e7c68c17f222a216fb2e18e" offset="0" />
213           </dataarea>
214       </part>
210      <part name="cass1" interface="adam_cass">
211         <dataarea name="cass" size="262144">
212            <rom name="conway's game of life (199x) (unknown).ddp" size="262144" crc="f4286eaa" sha1="dc1c9dc5db9103240e7c68c17f222a216fb2e18e" offset="0" />
213         </dataarea>
214      </part>
215215   </software>
216216
217217   <software name="copyutil">
218       <description>Copy Utilities (v2.0)</description>
219       <year>19??</year>
220       <publisher>&lt;unknown&gt;</publisher>
218      <description>Copy Utilities (v2.0)</description>
219      <year>19??</year>
220      <publisher>&lt;unknown&gt;</publisher>
221221
222       <part name="cass1" interface="adam_cass">
223           <dataarea name="cass" size="262144">
224               <rom name="copy utilities v2.0.ddp" size="262144" crc="a36d2f6b" sha1="54546df91844998092eabe0348ad3d7a4b36123d" offset="0" />
225           </dataarea>
226       </part>
222      <part name="cass1" interface="adam_cass">
223         <dataarea name="cass" size="262144">
224            <rom name="copy utilities v2.0.ddp" size="262144" crc="a36d2f6b" sha1="54546df91844998092eabe0348ad3d7a4b36123d" offset="0" />
225         </dataarea>
226      </part>
227227   </software>
228228
229229   <software name="copycart">
r242231r242232
255255      <year>1984</year>
256256      <publisher>Coleco</publisher>
257257
258       <part name="cass1" interface="adam_cass">
259           <dataarea name="cass" size="262144">
260               <rom name="super donkey kong junior (1984) (coleco).ddp" size="262144" crc="819ea0fc" sha1="edb51bdc1e3336906afe2ed65062eaccdb4742b4" offset="0" />
261           </dataarea>
262       </part>
258      <part name="cass1" interface="adam_cass">
259         <dataarea name="cass" size="262144">
260            <rom name="super donkey kong junior (1984) (coleco).ddp" size="262144" crc="819ea0fc" sha1="edb51bdc1e3336906afe2ed65062eaccdb4742b4" offset="0" />
261         </dataarea>
262      </part>
263263   </software>
264264
265265   <software name="dkongjrp14" cloneof="dkongjr">
r242231r242232
279279      <year>1984</year>
280280      <publisher>Coleco</publisher>
281281
282       <part name="cass1" interface="adam_cass">
283           <dataarea name="cass" size="262144">
284               <rom name="super donkey kong junior - 5 screen (1984) (coleco) (prototype) (rev. 13).ddp" size="262144" crc="d1fb3bc9" sha1="794fb6a66b1bfc6bf9b056e4dcd887285cb61c32" offset="0" />
285           </dataarea>
286       </part>
282      <part name="cass1" interface="adam_cass">
283         <dataarea name="cass" size="262144">
284            <rom name="super donkey kong junior - 5 screen (1984) (coleco) (prototype) (rev. 13).ddp" size="262144" crc="d1fb3bc9" sha1="794fb6a66b1bfc6bf9b056e4dcd887285cb61c32" offset="0" />
285         </dataarea>
286      </part>
287287   </software>
288288
289289   <software name="dlair">
290       <description>Dragon's Lair</description>
291       <year>1984</year>
292       <publisher>Coleco</publisher>
290      <description>Dragon's Lair</description>
291      <year>1984</year>
292      <publisher>Coleco</publisher>
293293
294       <part name="cass1" interface="adam_cass">
295           <dataarea name="cass" size="262144">
296               <rom name="dragon's lair (1984) (coleco).ddp" size="262144" crc="690b2172" sha1="55624e0adbf35f2ad6e5cada6612f65a22b88ef1" offset="0" />
297           </dataarea>
298       </part>
294      <part name="cass1" interface="adam_cass">
295         <dataarea name="cass" size="262144">
296            <rom name="dragon's lair (1984) (coleco).ddp" size="262144" crc="690b2172" sha1="55624e0adbf35f2ad6e5cada6612f65a22b88ef1" offset="0" />
297         </dataarea>
298      </part>
299299   </software>
300300
301301   <software name="eosdisk">
302       <description>E.O.S. Disk Manager</description>
303       <year>1984</year>
304       <publisher>Coleco</publisher>
302      <description>E.O.S. Disk Manager</description>
303      <year>1984</year>
304      <publisher>Coleco</publisher>
305305
306       <part name="cass1" interface="adam_cass">
307           <dataarea name="cass" size="262144">
308               <rom name="e.o.s. disk manager (1984) (coleco).ddp" size="262144" crc="53fbaf72" sha1="a78466b931597543f4de77620031175173ad2bc0" offset="0" />
309           </dataarea>
310       </part>
306      <part name="cass1" interface="adam_cass">
307         <dataarea name="cass" size="262144">
308            <rom name="e.o.s. disk manager (1984) (coleco).ddp" size="262144" crc="53fbaf72" sha1="a78466b931597543f4de77620031175173ad2bc0" offset="0" />
309         </dataarea>
310      </part>
311311   </software>
312312
313313   <software name="xbasutil">
314       <description>EBU - Extended BASIC Utilities v1.0</description>
315       <year>198?</year>
316       <publisher>Extended Software</publisher>
314      <description>EBU - Extended BASIC Utilities v1.0</description>
315      <year>198?</year>
316      <publisher>Extended Software</publisher>
317317
318       <part name="cass1" interface="adam_cass">
319           <dataarea name="cass" size="262144">
320               <rom name="extended basic utilities (198x) (extended software).ddp" size="262144" crc="fd48e2c4" sha1="516b9ea4aa64a8269da1ff354774667806973795" offset="0" />
321           </dataarea>
322       </part>
318      <part name="cass1" interface="adam_cass">
319         <dataarea name="cass" size="262144">
320            <rom name="extended basic utilities (198x) (extended software).ddp" size="262144" crc="fd48e2c4" sha1="516b9ea4aa64a8269da1ff354774667806973795" offset="0" />
321         </dataarea>
322      </part>
323323   </software>
324324
325325   <software name="fla_alg">
326       <description>Electronic Flashcard Maker - Algebra I</description>
327       <year>198?</year>
326      <description>Electronic Flashcard Maker - Algebra I</description>
327      <year>198?</year>
328328      <publisher>Coleco?</publisher>
329329
330       <part name="cass1" interface="adam_cass">
331           <dataarea name="cass" size="262144">
332               <rom name="electronic flashcard maker - algebra i (198x) (unknown).ddp" size="262144" crc="0c21ac4a" sha1="6d074161a443a4ecb37b6dda4f5d00ffb916af09" offset="0" />
333           </dataarea>
334       </part>
330      <part name="cass1" interface="adam_cass">
331         <dataarea name="cass" size="262144">
332            <rom name="electronic flashcard maker - algebra i (198x) (unknown).ddp" size="262144" crc="0c21ac4a" sha1="6d074161a443a4ecb37b6dda4f5d00ffb916af09" offset="0" />
333         </dataarea>
334      </part>
335335   </software>
336336
337337   <software name="fla_his1">
338       <description>Electronic Flashcard Maker - American History I</description>
339       <year>198?</year>
338      <description>Electronic Flashcard Maker - American History I</description>
339      <year>198?</year>
340340      <publisher>Coleco?</publisher>
341341
342       <part name="cass1" interface="adam_cass">
343           <dataarea name="cass" size="262144">
344               <rom name="electronic flashcard maker - american history i (198x) (unknown).ddp" size="262144" crc="3f67783a" sha1="727f6b5e0fed746fc6bcbc10d226a19a01694140" offset="0" />
345           </dataarea>
346       </part>
342      <part name="cass1" interface="adam_cass">
343         <dataarea name="cass" size="262144">
344            <rom name="electronic flashcard maker - american history i (198x) (unknown).ddp" size="262144" crc="3f67783a" sha1="727f6b5e0fed746fc6bcbc10d226a19a01694140" offset="0" />
345         </dataarea>
346      </part>
347347   </software>
348348
349349   <software name="fla_his2">
350       <description>Electronic Flashcard Maker - American History II</description>
351       <year>198?</year>
350      <description>Electronic Flashcard Maker - American History II</description>
351      <year>198?</year>
352352      <publisher>Coleco?</publisher>
353353
354       <part name="cass1" interface="adam_cass">
355           <dataarea name="cass" size="262144">
356               <rom name="electronic flashcard maker - american history ii (198x) (unknown).ddp" size="262144" crc="d87b7811" sha1="f58a7657de63de5544c121247be1f0fecd06534b" offset="0" />
357           </dataarea>
358       </part>
354      <part name="cass1" interface="adam_cass">
355         <dataarea name="cass" size="262144">
356            <rom name="electronic flashcard maker - american history ii (198x) (unknown).ddp" size="262144" crc="d87b7811" sha1="f58a7657de63de5544c121247be1f0fecd06534b" offset="0" />
357         </dataarea>
358      </part>
359359   </software>
360360
361361   <software name="egp2">
r242231r242232
395395   </software>
396396
397397   <software name="famfeud">
398       <description>Family Feud</description>
399       <year>1984</year>
400       <publisher>Coleco</publisher>
398      <description>Family Feud</description>
399      <year>1984</year>
400      <publisher>Coleco</publisher>
401401
402       <part name="cass1" interface="adam_cass">
403           <dataarea name="cass" size="262144">
404               <rom name="family feud (1984) (coleco).ddp" size="262144" crc="ca1cc594" sha1="6f3a544007826610ef0c5db40804023736af0312" offset="0" />
405           </dataarea>
406       </part>
402      <part name="cass1" interface="adam_cass">
403         <dataarea name="cass" size="262144">
404            <rom name="family feud (1984) (coleco).ddp" size="262144" crc="ca1cc594" sha1="6f3a544007826610ef0c5db40804023736af0312" offset="0" />
405         </dataarea>
406      </part>
407407   </software>
408408
409409   <software name="fffback">
410       <description>Flash Facts - Flashbacks</description>
411       <year>1984</year>
412       <publisher>Coleco</publisher>
410      <description>Flash Facts - Flashbacks</description>
411      <year>1984</year>
412      <publisher>Coleco</publisher>
413413
414       <part name="cass1" interface="adam_cass">
415           <dataarea name="cass" size="262144">
416               <rom name="flash facts - flashbacks (1984) (coleco).ddp" size="262144" crc="3bce9ea3" sha1="aeb6850b90dd38539ab033d2f391305cec8da3ab" offset="0" />
417           </dataarea>
418       </part>
414      <part name="cass1" interface="adam_cass">
415         <dataarea name="cass" size="262144">
416            <rom name="flash facts - flashbacks (1984) (coleco).ddp" size="262144" crc="3bce9ea3" sha1="aeb6850b90dd38539ab033d2f391305cec8da3ab" offset="0" />
417         </dataarea>
418      </part>
419419   </software>
420420
421421   <software name="fffbacka" cloneof="fffback">
422       <description>Flash Facts - Flashbacks (Alt)</description>
423       <year>1984</year>
424       <publisher>Coleco</publisher>
422      <description>Flash Facts - Flashbacks (Alt)</description>
423      <year>1984</year>
424      <publisher>Coleco</publisher>
425425
426       <part name="cass1" interface="adam_cass">
427           <dataarea name="cass" size="262144">
428               <rom name="flash facts - flashbacks (1984) (coleco) [a1].ddp" size="262144" crc="97847c0f" sha1="62328cd04d99859e3e633d32391e477bf1733db6" offset="0" />
429           </dataarea>
430       </part>
426      <part name="cass1" interface="adam_cass">
427         <dataarea name="cass" size="262144">
428            <rom name="flash facts - flashbacks (1984) (coleco) [a1].ddp" size="262144" crc="97847c0f" sha1="62328cd04d99859e3e633d32391e477bf1733db6" offset="0" />
429         </dataarea>
430      </part>
431431   </software>
432432
433433   <software name="fftrivia">
r242231r242232
455455   </software>
456456
457457   <software name="godosd">
458       <description>GoDOS (v1.2, Demo)</description>
459       <year>1990</year>
460       <publisher>Phoenix 2000</publisher>
458      <description>GoDOS (v1.2, Demo)</description>
459      <year>1990</year>
460      <publisher>Phoenix 2000</publisher>
461461
462       <part name="cass1" interface="adam_cass">
463           <dataarea name="cass" size="262144">
464               <rom name="godos v1.2 demo (ddp #01) (1990) (phoenix 2000).ddp" size="262144" crc="205f65c0" sha1="09a69e6b6f209b3c46e2e8bf774ce7021e7e1be0" offset="0" />
465           </dataarea>
466       </part>
462      <part name="cass1" interface="adam_cass">
463         <dataarea name="cass" size="262144">
464            <rom name="godos v1.2 demo (ddp #01) (1990) (phoenix 2000).ddp" size="262144" crc="205f65c0" sha1="09a69e6b6f209b3c46e2e8bf774ce7021e7e1be0" offset="0" />
465         </dataarea>
466      </part>
467467   </software>
468468
469469   <software name="godosda" cloneof="godosd">
470       <description>GoDOS (v1.2, Demo, Alt)</description>
471       <year>1990</year>
472       <publisher>Phoenix 2000</publisher>
470      <description>GoDOS (v1.2, Demo, Alt)</description>
471      <year>1990</year>
472      <publisher>Phoenix 2000</publisher>
473473
474       <part name="cass1" interface="adam_cass">
475           <dataarea name="cass" size="262144">
476               <rom name="godos v1.2 demo (ddp #02) (1990) (phoenix 2000).ddp" size="262144" crc="99ed9b19" sha1="cdaf8032571708471d59ce3ddd4bd1f21ee84367" offset="0" />
477           </dataarea>
478       </part>
474      <part name="cass1" interface="adam_cass">
475         <dataarea name="cass" size="262144">
476            <rom name="godos v1.2 demo (ddp #02) (1990) (phoenix 2000).ddp" size="262144" crc="99ed9b19" sha1="cdaf8032571708471d59ce3ddd4bd1f21ee84367" offset="0" />
477         </dataarea>
478      </part>
479479   </software>
480480
481481   <software name="godosprg">
482       <description>GoDOS BASIC Programs #01</description>
483       <year>1990</year>
484       <publisher>Joe Quinn</publisher>
482      <description>GoDOS BASIC Programs #01</description>
483      <year>1990</year>
484      <publisher>Joe Quinn</publisher>
485485
486       <part name="cass1" interface="adam_cass">
487           <dataarea name="cass" size="262144">
488               <rom name="godos basic programs #01 (1990) (joe quinn).ddp" size="262144" crc="cc6ef8d6" sha1="0608b4a8e9555bed6e0c20cffda27df473ee7915" offset="0" />
489           </dataarea>
490       </part>
486      <part name="cass1" interface="adam_cass">
487         <dataarea name="cass" size="262144">
488            <rom name="godos basic programs #01 (1990) (joe quinn).ddp" size="262144" crc="cc6ef8d6" sha1="0608b4a8e9555bed6e0c20cffda27df473ee7915" offset="0" />
489         </dataarea>
490      </part>
491491   </software>
492492
493493   <software name="hackguid">
494       <description>Hacker's Guide to ADAM</description>
495       <year>1985</year>
496       <publisher>Peter &amp; Ben Hinkle</publisher>
494      <description>Hacker's Guide to ADAM</description>
495      <year>1985</year>
496      <publisher>Peter &amp; Ben Hinkle</publisher>
497497
498       <part name="cass1" interface="adam_cass">
499           <dataarea name="cass" size="262144">
500               <rom name="hacker's guide to adam (1985) (peter &amp; ben hinkle).ddp" size="262144" crc="fa9e0844" sha1="96bdecbc9fe060a8eb7247161029cfda6ca18139" offset="0" />
501           </dataarea>
502       </part>
498      <part name="cass1" interface="adam_cass">
499         <dataarea name="cass" size="262144">
500            <rom name="hacker's guide to adam (1985) (peter &amp; ben hinkle).ddp" size="262144" crc="fa9e0844" sha1="96bdecbc9fe060a8eb7247161029cfda6ca18139" offset="0" />
501         </dataarea>
502      </part>
503503   </software>
504504
505505   <software name="jeopardy">
r242231r242232
527527   </software>
528528
529529   <software name="labelwrk">
530       <description>The Label Works</description>
531       <year>198?</year>
532       <publisher>Walters Software</publisher>
530      <description>The Label Works</description>
531      <year>198?</year>
532      <publisher>Walters Software</publisher>
533533
534       <part name="cass1" interface="adam_cass">
535           <dataarea name="cass" size="262144">
536               <rom name="label works, the (198x) (walters software co.).ddp" size="262144" crc="eedbf0d0" sha1="2d0904aac4794d24dd24e6116f36f9b38d366fa1" offset="0" />
537           </dataarea>
538       </part>
534      <part name="cass1" interface="adam_cass">
535         <dataarea name="cass" size="262144">
536            <rom name="label works, the (198x) (walters software co.).ddp" size="262144" crc="eedbf0d0" sha1="2d0904aac4794d24dd24e6116f36f9b38d366fa1" offset="0" />
537         </dataarea>
538      </part>
539539   </software>
540540
541541   <software name="malhow1">
542       <description>M.A.L. How To Vol. I - Install a Phone Outlet</description>
543       <year>199?</year>
544       <publisher>Maine ADAM Library</publisher>
542      <description>M.A.L. How To Vol. I - Install a Phone Outlet</description>
543      <year>199?</year>
544      <publisher>Maine ADAM Library</publisher>
545545
546       <part name="cass1" interface="adam_cass">
547           <dataarea name="cass" size="262144">
548               <rom name="m.a.l. how to vol. i - install a phone outlet (199x) (maine adam library).ddp" size="262144" crc="017503bd" sha1="966e659b2e94cd7ff1d147e23a0d79ae80d0d76c" offset="0" />
549           </dataarea>
550       </part>
546      <part name="cass1" interface="adam_cass">
547         <dataarea name="cass" size="262144">
548            <rom name="m.a.l. how to vol. i - install a phone outlet (199x) (maine adam library).ddp" size="262144" crc="017503bd" sha1="966e659b2e94cd7ff1d147e23a0d79ae80d0d76c" offset="0" />
549         </dataarea>
550      </part>
551551   </software>
552552
553553   <software name="malhow2">
554       <description>M.A.L. How To Vol. II - Build Your Own Computer Desk Hutch</description>
555       <year>199?</year>
556       <publisher>Maine ADAM Library</publisher>
554      <description>M.A.L. How To Vol. II - Build Your Own Computer Desk Hutch</description>
555      <year>199?</year>
556      <publisher>Maine ADAM Library</publisher>
557557
558       <part name="cass1" interface="adam_cass">
559           <dataarea name="cass" size="262144">
560               <rom name="m.a.l. how to vol. ii - build your own computer desk hutch (199x) (maine adam library).ddp" size="262144" crc="b472434d" sha1="244985d48da47ee66da000c04c39a3c7a578703e" offset="0" />
561           </dataarea>
562       </part>
558      <part name="cass1" interface="adam_cass">
559         <dataarea name="cass" size="262144">
560            <rom name="m.a.l. how to vol. ii - build your own computer desk hutch (199x) (maine adam library).ddp" size="262144" crc="b472434d" sha1="244985d48da47ee66da000c04c39a3c7a578703e" offset="0" />
561         </dataarea>
562      </part>
563563   </software>
564564
565565   <software name="malhow5">
566       <description>M.A.L. How To Vol. V - How to Build an Acoustic Printer Stand</description>
567       <year>199?</year>
568       <publisher>Maine ADAM Library</publisher>
566      <description>M.A.L. How To Vol. V - How to Build an Acoustic Printer Stand</description>
567      <year>199?</year>
568      <publisher>Maine ADAM Library</publisher>
569569
570       <part name="cass1" interface="adam_cass">
571           <dataarea name="cass" size="262144">
572               <rom name="m.a.l. how to vol. v - how to build an acoustic printer stand (199x) (maine adam library).ddp" size="262144" crc="e22f74ad" sha1="a680c3b03a1f6f2661a09285ea61bd41ddac941c" offset="0" />
573           </dataarea>
574       </part>
570      <part name="cass1" interface="adam_cass">
571         <dataarea name="cass" size="262144">
572            <rom name="m.a.l. how to vol. v - how to build an acoustic printer stand (199x) (maine adam library).ddp" size="262144" crc="e22f74ad" sha1="a680c3b03a1f6f2661a09285ea61bd41ddac941c" offset="0" />
573         </dataarea>
574      </part>
575575   </software>
576576
577577   <software name="malcal93">
r242231r242232
599599   </software>
600600
601601   <software name="multibkp">
602       <description>Multicart Backup</description>
603       <year>198?</year>
604       <publisher>&lt;unknown&gt;</publisher>
602      <description>Multicart Backup</description>
603      <year>198?</year>
604      <publisher>&lt;unknown&gt;</publisher>
605605
606       <part name="cass1" interface="adam_cass">
607           <dataarea name="cass" size="262144">
608               <rom name="multicart backup (198x) (unknown).ddp" size="262144" crc="f9f1ce7e" sha1="ec1fb7636de040860c01230b3a05426f896f91c6" offset="0" />
609           </dataarea>
610       </part>
606      <part name="cass1" interface="adam_cass">
607         <dataarea name="cass" size="262144">
608            <rom name="multicart backup (198x) (unknown).ddp" size="262144" crc="f9f1ce7e" sha1="ec1fb7636de040860c01230b3a05426f896f91c6" offset="0" />
609         </dataarea>
610      </part>
611611   </software>
612612
613613   <software name="recipefi">
614       <description>Recipe Filer</description>
615       <year>1984</year>
616       <publisher>Coleco</publisher>
614      <description>Recipe Filer</description>
615      <year>1984</year>
616      <publisher>Coleco</publisher>
617617
618       <part name="cass1" interface="adam_cass">
619           <dataarea name="cass" size="262144">
620               <rom name="recipe filer (1984) (coleco).ddp" size="262144" crc="a9c479bc" sha1="543c2f66103f598dfcbe2bf9e39af5266b778e6a" offset="0" />
621           </dataarea>
622       </part>
618      <part name="cass1" interface="adam_cass">
619         <dataarea name="cass" size="262144">
620            <rom name="recipe filer (1984) (coleco).ddp" size="262144" crc="a9c479bc" sha1="543c2f66103f598dfcbe2bf9e39af5266b778e6a" offset="0" />
621         </dataarea>
622      </part>
623623   </software>
624624
625625   <software name="scarry">
626       <description>Richard Scarry's Best Electronic Wordbook Ever</description>
627       <year>1984</year>
628       <publisher>Coleco</publisher>
626      <description>Richard Scarry's Best Electronic Wordbook Ever</description>
627      <year>1984</year>
628      <publisher>Coleco</publisher>
629629
630       <part name="cass1" interface="adam_cass">
631           <dataarea name="cass" size="262144">
632               <rom name="richard scarry's best electronic wordbook ever (1984) (coleco).ddp" size="262144" crc="dcba7f52" sha1="19274fc480154af210a85bb17d17fb0a8df52887" offset="0" />
633           </dataarea>
634       </part>
630      <part name="cass1" interface="adam_cass">
631         <dataarea name="cass" size="262144">
632            <rom name="richard scarry's best electronic wordbook ever (1984) (coleco).ddp" size="262144" crc="dcba7f52" sha1="19274fc480154af210a85bb17d17fb0a8df52887" offset="0" />
633         </dataarea>
634      </part>
635635   </software>
636636
637637   <software name="scarrya" cloneof="scarry">
638       <description>Richard Scarry's Best Electronic Wordbook Ever (Alt)</description>
639       <year>1984</year>
640       <publisher>Coleco</publisher>
638      <description>Richard Scarry's Best Electronic Wordbook Ever (Alt)</description>
639      <year>1984</year>
640      <publisher>Coleco</publisher>
641641
642       <part name="cass1" interface="adam_cass">
643           <dataarea name="cass" size="262144">
644               <rom name="richard scarry's best electronic wordbook ever (1984) (coleco) [a1].ddp" size="262144" crc="bf33f35b" sha1="5ed65eaafe8075b4f05876bb3158a8742a07817c" offset="0" />
645           </dataarea>
646       </part>
642      <part name="cass1" interface="adam_cass">
643         <dataarea name="cass" size="262144">
644            <rom name="richard scarry's best electronic wordbook ever (1984) (coleco) [a1].ddp" size="262144" crc="bf33f35b" sha1="5ed65eaafe8075b4f05876bb3158a8742a07817c" offset="0" />
645         </dataarea>
646      </part>
647647   </software>
648648
649649   <software name="smartfil">
r242231r242232
671671   </software>
672672
673673   <software name="smarttyp">
674       <description>Smart Type (v1.1)</description>
675       <year>1985</year>
676       <publisher>Reedy Software</publisher>
674      <description>Smart Type (v1.1)</description>
675      <year>1985</year>
676      <publisher>Reedy Software</publisher>
677677
678       <part name="cass1" interface="adam_cass">
679           <dataarea name="cass" size="262144">
680               <rom name="smarttype v1.1 (1985) (reedy software).ddp" size="262144" crc="ab1a4ffd" sha1="d14ec9688be8d37339a6d9338a242a108df5e46c" offset="0" />
681           </dataarea>
682       </part>
678      <part name="cass1" interface="adam_cass">
679         <dataarea name="cass" size="262144">
680            <rom name="smarttype v1.1 (1985) (reedy software).ddp" size="262144" crc="ab1a4ffd" sha1="d14ec9688be8d37339a6d9338a242a108df5e46c" offset="0" />
681         </dataarea>
682      </part>
683683   </software>
684684
685685   <software name="smartbas">
686       <description>SmartBASIC (v1.0)</description>
687       <year>1983</year>
688       <publisher>Coleco</publisher>
686      <description>SmartBASIC (v1.0)</description>
687      <year>1983</year>
688      <publisher>Coleco</publisher>
689689
690       <part name="cass1" interface="adam_cass">
691           <dataarea name="cass" size="262144">
692               <rom name="smartbasic v1.0 (1983) (coleco).ddp" size="262144" crc="aa52c12f" sha1="bce8367bde3ac49f27480cb5d6a21a657e44255b" offset="0" />
693           </dataarea>
694       </part>
690      <part name="cass1" interface="adam_cass">
691         <dataarea name="cass" size="262144">
692            <rom name="smartbasic v1.0 (1983) (coleco).ddp" size="262144" crc="aa52c12f" sha1="bce8367bde3ac49f27480cb5d6a21a657e44255b" offset="0" />
693         </dataarea>
694      </part>
695695   </software>
696696
697697   <software name="smartbasa" cloneof="smartbas">
698       <description>SmartBASIC (v1.0, Alt)</description>
699       <year>1983</year>
700       <publisher>Coleco</publisher>
698      <description>SmartBASIC (v1.0, Alt)</description>
699      <year>1983</year>
700      <publisher>Coleco</publisher>
701701
702       <part name="cass1" interface="adam_cass">
703           <dataarea name="cass" size="262144">
704               <rom name="smartbasic v1.0 (1983) (coleco) [a1].ddp" size="262144" crc="e27df400" sha1="280e5c07f0323f819c9a552445135bbfc8728d1c" offset="0" />
705           </dataarea>
706       </part>
702      <part name="cass1" interface="adam_cass">
703         <dataarea name="cass" size="262144">
704            <rom name="smartbasic v1.0 (1983) (coleco) [a1].ddp" size="262144" crc="e27df400" sha1="280e5c07f0323f819c9a552445135bbfc8728d1c" offset="0" />
705         </dataarea>
706      </part>
707707   </software>
708708
709709   <software name="smartbon">
710       <description>SmartBASIC Bonanza</description>
711       <year>1985</year>
712       <publisher>Martin Consulting</publisher>
710      <description>SmartBASIC Bonanza</description>
711      <year>1985</year>
712      <publisher>Martin Consulting</publisher>
713713
714       <part name="cass1" interface="adam_cass">
715           <dataarea name="cass" size="262144">
716               <rom name="smartbasic bonanza (1985) (martin consulting ltd.).ddp" size="262144" crc="5550b3d9" sha1="a4644160cae98e1d3ad4e1a8bf4b292a667fe583" offset="0" />
717           </dataarea>
718       </part>
714      <part name="cass1" interface="adam_cass">
715         <dataarea name="cass" size="262144">
716            <rom name="smartbasic bonanza (1985) (martin consulting ltd.).ddp" size="262144" crc="5550b3d9" sha1="a4644160cae98e1d3ad4e1a8bf4b292a667fe583" offset="0" />
717         </dataarea>
718      </part>
719719   </software>
720720
721721   <software name="smartlog">
r242231r242232
731731   </software>
732732
733733   <software name="smartspl">
734       <description>SmartSPELLER</description>
735       <year>198?</year>
736       <publisher>Strategic Software Inc.</publisher>
734      <description>SmartSPELLER</description>
735      <year>198?</year>
736      <publisher>Strategic Software Inc.</publisher>
737737
738       <part name="cass1" interface="adam_cass">
739           <dataarea name="cass" size="262144">
740               <rom name="smartspeller (198x) (strategic software inc.).ddp" size="262144" crc="45616de4" sha1="883a987c71cf6e148ecc5ec88d17e05a25ab407d" offset="0" />
741           </dataarea>
742       </part>
738      <part name="cass1" interface="adam_cass">
739         <dataarea name="cass" size="262144">
740            <rom name="smartspeller (198x) (strategic software inc.).ddp" size="262144" crc="45616de4" sha1="883a987c71cf6e148ecc5ec88d17e05a25ab407d" offset="0" />
741         </dataarea>
742      </part>
743743   </software>
744744
745745   <software name="smartwri">
746       <description>SmartWRITER Elite</description>
747       <year>199?</year>
748       <publisher>Walters Software Co.</publisher>
746      <description>SmartWRITER Elite</description>
747      <year>199?</year>
748      <publisher>Walters Software Co.</publisher>
749749
750       <part name="cass1" interface="adam_cass">
751           <dataarea name="cass" size="262144">
752               <rom name="smartwriter elite (199x) (walters software co.).ddp" size="262144" crc="0644a754" sha1="c76a1e20a08eeccbf017ca89a1bbe120f974db7f" offset="0" />
753           </dataarea>
754       </part>
750      <part name="cass1" interface="adam_cass">
751         <dataarea name="cass" size="262144">
752            <rom name="smartwriter elite (199x) (walters software co.).ddp" size="262144" crc="0644a754" sha1="c76a1e20a08eeccbf017ca89a1bbe120f974db7f" offset="0" />
753         </dataarea>
754      </part>
755755   </software>
756756
757757   <software name="stellar5">
758       <description>Stellar 5</description>
759       <year>1985</year>
760       <publisher>Hanania Enterprises</publisher>
758      <description>Stellar 5</description>
759      <year>1985</year>
760      <publisher>Hanania Enterprises</publisher>
761761
762       <part name="cass1" interface="adam_cass">
763           <dataarea name="cass" size="262144">
764               <rom name="stellar 5 (1985) (hanania enterprises).ddp" size="262144" crc="c54fbe05" sha1="9a3a553822c103c17af199ced00d8c6a97fa09ae" offset="0" />
765           </dataarea>
766       </part>
762      <part name="cass1" interface="adam_cass">
763         <dataarea name="cass" size="262144">
764            <rom name="stellar 5 (1985) (hanania enterprises).ddp" size="262144" crc="c54fbe05" sha1="9a3a553822c103c17af199ced00d8c6a97fa09ae" offset="0" />
765         </dataarea>
766      </part>
767767   </software>
768768
769769   <software name="subroc">
r242231r242232
779779   </software>
780780
781781   <software name="snowdrag">
782       <description>Temple of the Snow Dragon</description>
783       <year>1988</year>
784       <publisher>Digital Adventures</publisher>
782      <description>Temple of the Snow Dragon</description>
783      <year>1988</year>
784      <publisher>Digital Adventures</publisher>
785785
786       <part name="cass1" interface="adam_cass">
787           <dataarea name="cass" size="262144">
788               <rom name="temple of the snow dragon (1988) (digital adventures).ddp" size="262144" crc="1a7aaf37" sha1="57ddb806366c334d0f0a902a4b6c50b03db97e70" offset="0" />
789           </dataarea>
790       </part>
786      <part name="cass1" interface="adam_cass">
787         <dataarea name="cass" size="262144">
788            <rom name="temple of the snow dragon (1988) (digital adventures).ddp" size="262144" crc="1a7aaf37" sha1="57ddb806366c334d0f0a902a4b6c50b03db97e70" offset="0" />
789         </dataarea>
790      </part>
791791   </software>
792792
793793   <software name="troltale">
r242231r242232
815815   </software>
816816
817817   <software name="wackywrd">
818       <description>Wacky Word Games</description>
819       <year>1984</year>
820       <publisher>Coleco</publisher>
818      <description>Wacky Word Games</description>
819      <year>1984</year>
820      <publisher>Coleco</publisher>
821821
822       <part name="cass1" interface="adam_cass">
823           <dataarea name="cass" size="262144">
824               <rom name="wacky word games (1984) (coleco).ddp" size="262144" crc="262ff8c4" sha1="d035bb85856b7a8408f95f1d4fb3e7b5c511eac5" offset="0" />
825           </dataarea>
826       </part>
822      <part name="cass1" interface="adam_cass">
823         <dataarea name="cass" size="262144">
824            <rom name="wacky word games (1984) (coleco).ddp" size="262144" crc="262ff8c4" sha1="d035bb85856b7a8408f95f1d4fb3e7b5c511eac5" offset="0" />
825         </dataarea>
826      </part>
827827   </software>
828828
829829   <software name="wizpin">
830       <description>Wizard's Pinball Arcade</description>
831       <year>1987</year>
832       <publisher>Wizard's Lair Software</publisher>
830      <description>Wizard's Pinball Arcade</description>
831      <year>1987</year>
832      <publisher>Wizard's Lair Software</publisher>
833833
834       <part name="cass1" interface="adam_cass">
835           <dataarea name="cass" size="262144">
836               <rom name="wizard's pinball arcade (1987) (wizard's lair software).ddp" size="262144" crc="01017fc4" sha1="d0670fba4967ca63bb45d9c0818522bc20e3ef2d" offset="0" />
837           </dataarea>
838       </part>
834      <part name="cass1" interface="adam_cass">
835         <dataarea name="cass" size="262144">
836            <rom name="wizard's pinball arcade (1987) (wizard's lair software).ddp" size="262144" crc="01017fc4" sha1="d0670fba4967ca63bb45d9c0818522bc20e3ef2d" offset="0" />
837         </dataarea>
838      </part>
839839   </software>
840840
841841   <software name="zaxxon">
842       <description>Zaxxon</description>
843       <year>1984</year>
844       <publisher>Coleco</publisher>
842      <description>Zaxxon</description>
843      <year>1984</year>
844      <publisher>Coleco</publisher>
845845
846       <part name="cass1" interface="adam_cass">
847           <dataarea name="cass" size="262144">
848               <rom name="super zaxxon (1984) (coleco).ddp" size="262144" crc="f12489a7" sha1="7fb6e8204e745d481abaff53735f3ffffa5f65bc" offset="0" />
849           </dataarea>
850       </part>
846      <part name="cass1" interface="adam_cass">
847         <dataarea name="cass" size="262144">
848            <rom name="super zaxxon (1984) (coleco).ddp" size="262144" crc="f12489a7" sha1="7fb6e8204e745d481abaff53735f3ffffa5f65bc" offset="0" />
849         </dataarea>
850      </part>
851851   </software>
852852
853853
r242231r242232
892892   </software>
893893
894894   <software name="ghaaug04">
895       <description>gHAAUG #04 - SmartBASIC - Game Arc #4</description>
896       <year>19??</year>
897       <publisher>gHAAUG</publisher>
895      <description>gHAAUG #04 - SmartBASIC - Game Arc #4</description>
896      <year>19??</year>
897      <publisher>gHAAUG</publisher>
898898
899       <part name="cass1" interface="adam_cass">
900           <dataarea name="cass" size="262144">
901               <rom name="ghaaug #04 - smartbasic - game arc #4.ddp" size="262144" crc="03c75aa4" sha1="9fd49907dd711d9d78b03ff1c1af72f5b66e8353" offset="0" />
902           </dataarea>
903       </part>
899      <part name="cass1" interface="adam_cass">
900         <dataarea name="cass" size="262144">
901            <rom name="ghaaug #04 - smartbasic - game arc #4.ddp" size="262144" crc="03c75aa4" sha1="9fd49907dd711d9d78b03ff1c1af72f5b66e8353" offset="0" />
902         </dataarea>
903      </part>
904904   </software>
905905
906906   <software name="undv2">
r242231r242232
919919
920920   <!-- Related to NIAD and SmartBASIC: investigate! -->
921921   <software name="basicpgm">
922       <description>basicpgm</description>
923       <year>19??</year>
924       <publisher>&lt;unknown&gt;</publisher>
922      <description>basicpgm</description>
923      <year>19??</year>
924      <publisher>&lt;unknown&gt;</publisher>
925925
926       <part name="cass1" interface="adam_cass">
927           <dataarea name="cass" size="262144">
928               <rom name="basicpgm.ddp" size="262144" crc="50668433" sha1="1853f441cfe8cc9a679a0a8186364a735e9d2d9c" offset="0" />
929           </dataarea>
930       </part>
926      <part name="cass1" interface="adam_cass">
927         <dataarea name="cass" size="262144">
928            <rom name="basicpgm.ddp" size="262144" crc="50668433" sha1="1853f441cfe8cc9a679a0a8186364a735e9d2d9c" offset="0" />
929         </dataarea>
930      </part>
931931   </software>
932932
933933   <!-- what is this? investigate! -->
934934   <software name="smarttrx">
935       <description>SmartTrix I - Data Doctor</description>
936       <year>19??</year>
937       <publisher>&lt;unknown&gt;</publisher>
935      <description>SmartTrix I - Data Doctor</description>
936      <year>19??</year>
937      <publisher>&lt;unknown&gt;</publisher>
938938
939       <part name="cass1" interface="adam_cass">
940           <dataarea name="cass" size="262144">
941               <rom name="smarttrix i - data doctor.ddp" size="262144" crc="e2e98c26" sha1="b49735b212c8277729eaff256437b5bce3b9685f" offset="0" />
942           </dataarea>
943       </part>
939      <part name="cass1" interface="adam_cass">
940         <dataarea name="cass" size="262144">
941            <rom name="smarttrix i - data doctor.ddp" size="262144" crc="e2e98c26" sha1="b49735b212c8277729eaff256437b5bce3b9685f" offset="0" />
942         </dataarea>
943      </part>
944944   </software>
945945
946946   <software name="blankddp">
947       <description>Blank Digital Data Pack</description>
948       <year>19??</year>
949       <publisher>&lt;unknown&gt;</publisher>
947      <description>Blank Digital Data Pack</description>
948      <year>19??</year>
949      <publisher>&lt;unknown&gt;</publisher>
950950
951       <part name="cass1" interface="adam_cass">
952           <dataarea name="cass" size="262144">
953               <rom name="256k digital data pack.ddp" size="262144" crc="3fe56492" sha1="71b8e1122f2693eda166efc29f674d6bc01c3400" offset="0" />
954           </dataarea>
955       </part>
951      <part name="cass1" interface="adam_cass">
952         <dataarea name="cass" size="262144">
953            <rom name="256k digital data pack.ddp" size="262144" crc="3fe56492" sha1="71b8e1122f2693eda166efc29f674d6bc01c3400" offset="0" />
954         </dataarea>
955      </part>
956956   </software>
957957
958958   <software name="blankddpa" cloneof="blankddp">
959       <description>Blank Digital Data Pack (Alt)</description>
960       <year>19??</year>
961       <publisher>&lt;unknown&gt;</publisher>
959      <description>Blank Digital Data Pack (Alt)</description>
960      <year>19??</year>
961      <publisher>&lt;unknown&gt;</publisher>
962962
963       <part name="cass1" interface="adam_cass">
964           <dataarea name="cass" size="262144">
965               <rom name="256k digital data pack [a1].ddp" size="262144" crc="03781521" sha1="e1a73a5e7df3627c37d13e35ef2a58549d59353a" offset="0" />
966           </dataarea>
967       </part>
963      <part name="cass1" interface="adam_cass">
964         <dataarea name="cass" size="262144">
965            <rom name="256k digital data pack [a1].ddp" size="262144" crc="03781521" sha1="e1a73a5e7df3627c37d13e35ef2a58549d59353a" offset="0" />
966         </dataarea>
967      </part>
968968   </software>
969969
970970<!--
trunk/hash/coco_flop.xml
r242231r242232
33
44<softwarelist name="coco_flop" description="Tandy Radio Shack Color Computer disk images">
55
6   <!-- coco3 only requires 512Kb, audio is a farty, run best with a a 6309? - coco3h driver) -->
6   <!-- coco3 only requires 512Kb, audio is a farty, run best with a 6309? - coco3h driver) -->
77   <!-- RUN"DONKEY" -->
88   <software name="dkong" supported ="partial">
99      <description>Donkey Kong (Sock Master's Donkey Kong Emulator for CoCo 3) (512Kb)</description>
trunk/hash/gamate.xml
r242231r242232
11<?xml version="1.0"?>
22<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
33
4<!--
5Undumped carts, based on Wikipedia list
6C1010 - Bump N' Run
7C1016 - Volcano Panic
8C1020 - Bad Bud Chou Chu's Adventure
9C1025 - Jackpot
10C1030 - Beach Volleyball
11C1033 - Fist of Thunder
12C1034 - Superboy
13C1036 - Jewelriss
14C1038 - Mars Voyage
15C1039 - Fortress of Fierceness
16C1040 - Incantational Couple
17C1041 - Mighty Boxer
18C1042 - Flying Goblin
19C1045 - World Cup Soccer
20C1046 - Kiki Island
21C1047 - Fortune 'n Luck
22C1048 - Baseball (or Super Baseball)
23C1049 - Punk Boy
24C1050 - Fortress of Fierceness II
25C1051 - ??
26C1052 - Famous
27C1053 - Metamorphosiser
28C1055 - ??
29C1056 - GP Race
30C1057 - Fantasy Travel
31C1058 - Heaven Clash
32C1059 - ??
33C1060 - Further Adventures of Hannibal The Cat
34C1062 - ??
35C1063 - Basketball
36C1064 - Bao Qing Tian
37C1065 - Hot Hero
38C1066 - ??
39C1067 - Robin Hood
40C1069 - Riddle of the Ancient Tomb
41C1070 - Insect War
42-->
43
444<softwarelist name="gamate" description="Bit Corp Gamate cartridges">
545
646   <software name="cubeup" supported="no">
747      <description>Cube Up</description>
8      <year>19??</year>
9      <publisher>Bit Corp</publisher>
48      <year>1990</year>
49      <publisher>Bit Corp.</publisher>
50      <info name="serial" value="C1001" />
1051      <part name="cart" interface="gamate_cart">
1152         <dataarea name="rom" size="16384">
1253            <rom name="cube up.bin" size="16384" crc="2a911e57" sha1="9d3b28887b6f375600bff29f8f233087b9152a60" offset="0x00000" />
r242231r242232
1455      </part>
1556   </software>
1657
58   <software name="wittyape" supported="no">
59      <description>Witty Apee</description>
60      <year>1990</year>
61      <publisher>Bit Corp.</publisher>
62      <info name="serial" value="C1002" />
63      <part name="cart" interface="gamate_cart">
64         <dataarea name="rom" size="32768">
65            <rom name="c1002_witty_apee.bin" size="32768" crc="f1190956" sha1="0c0579472260b1a0f5bfbda4cba8043b2a75aa54" offset="0" />
66         </dataarea>
67      </part>
68   </software>
1769
70   <software name="boxforum" supported="no">
71      <description>Box Forum</description>
72      <year>1991</year>
73      <publisher>Bit Corp.</publisher>
74      <info name="serial" value="C1003" />
75      <part name="cart" interface="gamate_cart">
76         <dataarea name="rom" size="32768">
77            <rom name="c1003_box_forum.bin" size="32768" crc="82c6f1d5" sha1="a4c826d85b990b4c01d17e81b722cc54f7ae9e93" offset="0" />
78         </dataarea>
79      </part>
80   </software>
81
82   <software name="mightytk" supported="no">
83      <description>Mighty Tank</description>
84      <year>19??</year>
85      <publisher>Bit Corp.</publisher>
86      <info name="serial" value="C1004" />
87      <part name="cart" interface="gamate_cart">
88         <dataarea name="rom" size="32768">
89            <rom name="c1004_mighty_tank.bin" size="32768" crc="f24379fd" sha1="ef3a555860b09431fbf1600238e7a4865d7af792" offset="0" />
90         </dataarea>
91      </part>
92   </software>
93
94   <software name="encbrick" supported="no">
95      <description>Enchanted Bricks</description>
96      <year>1990</year>
97      <publisher>Bit Corp.</publisher>
98      <info name="serial" value="C1005" />
99      <part name="cart" interface="gamate_cart">
100         <dataarea name="rom" size="32768">
101            <rom name="c1005_enchanted_bricks.bin" size="32768" crc="3dcdf55a" sha1="d722c5334a063c1f05e7bcd17fcc645cc3571127" offset="0" />
102         </dataarea>
103      </part>
104   </software>
105
106   <software name="minigolf" supported="no">
107      <description>Mini Golf</description>
108      <year>1990</year>
109      <publisher>Bit Corp.</publisher>
110      <info name="serial" value="C1006" />
111      <part name="cart" interface="gamate_cart">
112         <dataarea name="rom" size="32768">
113            <rom name="c1006_mini_golf.bin" size="32768" crc="59781e23" sha1="527d6cd2069086e76596bc365be5c807dfffcb64" offset="0" />
114         </dataarea>
115      </part>
116   </software>
117
118   <software name="galaxinv" supported="no">
119      <description>Galaxy Invaders</description>
120      <year>1990</year>
121      <publisher>Bit Corp.</publisher>
122      <info name="serial" value="C1007" />
123      <part name="cart" interface="gamate_cart">
124         <dataarea name="rom" size="32768">
125            <rom name="c1007_galaxy_invaders.bin" size="32768" crc="93afad9b" sha1="03f9c3d6cb3192f5bf91f2ac0e578bc65c8b1825" offset="0" />
126         </dataarea>
127      </part>
128   </software>
129
130   <software name="dknight" supported="no">
131      <description>Legend of Dragon Knight</description>
132      <year>1991</year>
133      <publisher>Bit Corp.</publisher>
134      <info name="serial" value="C1008" />
135      <part name="cart" interface="gamate_cart">
136         <dataarea name="rom" size="16384">
137            <rom name="c1008_legend_of_dragon_knight.bin" size="16384" crc="d65d1f4b" sha1="d247193a22ba34e6dc0e606d71460bd5dd1ccab5" offset="0" />
138         </dataarea>
139      </part>
140   </software>
141
142   <software name="tornado" supported="no">
143      <description>Tornado</description>
144      <year>1991</year>
145      <publisher>Bit Corp.</publisher>
146      <info name="serial" value="C1009" />
147      <part name="cart" interface="gamate_cart">
148         <dataarea name="rom" size="32768">
149            <rom name="c1009_tornado.bin" size="32768" crc="4cd6118e" sha1="671ea650ef462e7dcb4cb02b07ddbc300002707b" offset="0" />
150         </dataarea>
151      </part>
152   </software>
153
154   <software name="moneymaz" supported="no">
155      <description>Money Maze</description>
156      <year>19??</year>
157      <publisher>&lt;unknown&gt;</publisher>
158      <info name="serial" value="C1011" />
159      <part name="cart" interface="gamate_cart">
160         <dataarea name="rom" size="32768">
161            <rom name="c1011_money_maze.bin" size="32768" crc="4d9bfd91" sha1="814f4ff6fffb6a86c9936f74f50049b34bc0d362" offset="0" />
162         </dataarea>
163      </part>
164   </software>
165
166   <software name="pharaoh" supported="no">
167      <description>Pharaoh Revenger</description>
168      <year>1991</year>
169      <publisher>Bit Corp.</publisher>
170      <info name="serial" value="C1012" />
171      <part name="cart" interface="gamate_cart">
172         <dataarea name="rom" size="32768">
173            <rom name="c1012_pharaoh_revenger.bin" size="32768" crc="daac7932" sha1="a1b2846613341fe7d92e4ceb40e5525fce5c1cdd" offset="0" />
174         </dataarea>
175      </part>
176   </software>
177
178   <software name="dinobibo" supported="no">
179      <description>Dino Bibo</description>
180      <year>19??</year>
181      <publisher>&lt;unknown&gt;</publisher>
182      <info name="serial" value="C1013" />
183      <part name="cart" interface="gamate_cart">
184         <dataarea name="rom" size="32768">
185            <rom name="c1013_dino_bibo.bin" size="32768" crc="d6e1f1b7" sha1="7e7ba0b7b919e89e2d8a904de30f5ee34ffba822" offset="0" />
186         </dataarea>
187      </part>
188   </software>
189
190   <software name="timewarr" supported="no">
191      <description>Time Warrior</description>
192      <year>1990</year>
193      <publisher>Bit Corp.</publisher>
194      <info name="serial" value="C1014" />
195      <part name="cart" interface="gamate_cart">
196         <dataarea name="rom" size="32768">
197            <rom name="c1014_time_warrior.bin" size="32768" crc="1502d7e3" sha1="8d15793fbea07cfda8d68d7eb96fe0eccc978317" offset="0" />
198         </dataarea>
199      </part>
200   </software>
201
202   <software name="killshot" supported="no">
203      <description>Kill Shot</description>
204      <year>19??</year>
205      <publisher>&lt;unknown&gt;</publisher>
206      <info name="serial" value="C1015" />
207      <part name="cart" interface="gamate_cart">
208         <dataarea name="rom" size="32768">
209            <rom name="c1015_kill_shot.bin" size="32768" crc="69bc6a30" sha1="a4310f285f68c1837b4e92a2e127e22e7f0fd4f2" offset="0" />
210         </dataarea>
211      </part>
212   </software>
213
214   <software name="dvcastle" supported="no">
215      <description>Devil Castle</description>
216      <year>1991</year>
217      <publisher>Bit Corp.</publisher>
218      <info name="serial" value="C1017" />
219      <part name="cart" interface="gamate_cart">
220         <dataarea name="rom" size="32768">
221            <rom name="c1017_devilcastle.bin" size="32768" crc="2f4dfa71" sha1="175994971c157e51ff0b5dd0e46c9e8c92cf2a50" offset="0" />
222         </dataarea>
223      </part>
224   </software>
225
226   <software name="kungfu" supported="no">
227      <description>Kung-Fu Fighter</description>
228      <year>1990</year>
229      <publisher>Bit Corp.</publisher>
230      <info name="serial" value="C1018" />
231      <part name="cart" interface="gamate_cart">
232         <dataarea name="rom" size="32768">
233            <rom name="c1018_kung-fu_fighter.bin" size="32768" crc="4ba40206" sha1="7188b9265e43d4c51eab016462ced23a2fcb9972" offset="0" />
234         </dataarea>
235      </part>
236   </software>
237
238   <software name="dinoball" supported="no">
239      <description>Dino Ball</description>
240      <year>1991</year>
241      <publisher>Bit Corp.</publisher>
242      <info name="serial" value="C1019" />
243      <part name="cart" interface="gamate_cart">
244         <dataarea name="rom" size="32768">
245            <rom name="c1019_dino_ball.bin" size="32768" crc="b609871f" sha1="b9c1817bca6e5a580dabd87a4fe8b757c973403f" offset="0" />
246         </dataarea>
247      </part>
248   </software>
249
250   <software name="mythasam" supported="no">
251      <description>Myth of Asamia</description>
252      <year>1990</year>
253      <publisher>Bit Corp.</publisher>
254      <info name="serial" value="C1021" />
255      <part name="cart" interface="gamate_cart">
256         <dataarea name="rom" size="32768">
257            <rom name="c1021_mith_of_asamia.bin" size="32768" crc="3871a86c" sha1="70082452deb9d11c91ff3e1ad88ee8cbf24723ad" offset="0" />
258         </dataarea>
259      </part>
260   </software>
261
262   <software name="pipemani" supported="no">
263      <description>Pipemania</description>
264      <year>19??</year>
265      <publisher>&lt;unknown&gt;</publisher>
266      <info name="serial" value="C1022" />
267      <part name="cart" interface="gamate_cart">
268         <dataarea name="rom" size="32768">
269            <rom name="c1022_pipemania.bin" size="32768" crc="ae5978bd" sha1="a86fb7f4cc0f12b0c2d262a6618df76267c1513e" offset="0" />
270         </dataarea>
271      </part>
272   </software>
273
274   <software name="tennis" supported="no">
275      <description>Tennis</description>
276      <year>1991</year>
277      <publisher>Bit Corp.</publisher>
278      <info name="serial" value="C1023" />
279      <part name="cart" interface="gamate_cart">
280         <dataarea name="rom" size="32768">
281            <rom name="c1023_tennis.bin" size="32768" crc="93adefb1" sha1="ef5ae26d0f9a744c73eec364ac7bee2fd6eb1ed9" offset="0" />
282         </dataarea>
283      </part>
284   </software>
285
286   <software name="marauder" supported="no">
287      <description>Marauder</description>
288      <year>19??</year>
289      <publisher>&lt;unknown&gt;</publisher>
290      <info name="serial" value="C1024" />
291      <part name="cart" interface="gamate_cart">
292         <dataarea name="rom" size="32768">
293            <rom name="c1024_marauder.bin" size="32768" crc="c0a8607b" sha1="f41dab120bf7b3d7e2b21a408c8b89b4224bf825" offset="0" />
294         </dataarea>
295      </part>
296   </software>
297
298   <software name="flipuzle" supported="no">
299      <description>Flipuzzle</description>
300      <year>1991</year>
301      <publisher>Bit Corp.</publisher>
302      <info name="serial" value="C1026" />
303      <part name="cart" interface="gamate_cart">
304         <dataarea name="rom" size="32768">
305            <rom name="c1026_flipuzzle.bin" size="32768" crc="f4bd2a05" sha1="3928cd356f23f595d8023e4d4a46a98308cf4662" offset="0" />
306         </dataarea>
307      </part>
308   </software>
309
310   <software name="monstpit" supported="no">
311      <description>Monster Pitfall</description>
312      <year>1990</year>
313      <publisher>Bit Corp.</publisher>
314      <info name="serial" value="C1027" />
315      <part name="cart" interface="gamate_cart">
316         <dataarea name="rom" size="32768">
317            <rom name="c1027_monster_pitfall.bin" size="32768" crc="be6eda47" sha1="bc35475cfea02de98d2f4646f6ae4a9f48e138f5" offset="0" />
318         </dataarea>
319      </part>
320   </software>
321
322   <software name="vindicat" supported="no">
323      <description>Vindicators</description>
324      <year>1990</year>
325      <publisher>Bit Corp.</publisher>
326      <info name="serial" value="C1028" />
327      <part name="cart" interface="gamate_cart">
328         <dataarea name="rom" size="32768">
329            <rom name="c1028_vindicators.bin" size="32768" crc="7b99ee4c" sha1="b858479fc168572e684d3bb2330ae6826470f69f" offset="0" />
330         </dataarea>
331      </part>
332   </software>
333
334   <software name="brikblst" supported="no">
335      <description>Brick Blaster</description>
336      <year>1990</year>
337      <publisher>Bit Corp.</publisher>
338      <info name="serial" value="C1029" />
339      <part name="cart" interface="gamate_cart">
340         <dataarea name="rom" size="32768">
341            <rom name="c1029_brick_blaster.bin" size="32768" crc="76f5f2f1" sha1="a4e2d675ef6fd844b33d0aa40ce75ecaa6e65002" offset="0" />
342         </dataarea>
343      </part>
344   </software>
345
346   <software name="bomblast" supported="no">
347      <description>Bomb Blaster</description>
348      <year>1990</year>
349      <publisher>Bit Corp.</publisher>
350      <info name="serial" value="C1031" />
351      <part name="cart" interface="gamate_cart">
352         <dataarea name="rom" size="32768">
353            <rom name="c1031_bomb_blast.bin" size="32768" crc="33fd30f4" sha1="069928d2577c05a17f42a96f4183a90773e58539" offset="0" />
354         </dataarea>
355      </part>
356   </software>
357
358<!-- This maybe comes from a cart with "Bomb Blaster" label? -->
359   <software name="bomblasta" cloneof="bomblast" supported="no">
360      <description>Bomb Blaster (Alt)</description>
361      <year>1990</year>
362      <publisher>Bit Corp.</publisher>
363      <info name="serial" value="C1031" />
364      <part name="cart" interface="gamate_cart">
365         <dataarea name="rom" size="32768">
366            <rom name="c1031_bomb_blaster.bin" size="32768" crc="81ffb896" sha1="e79fa833714111a70b4700774dc2575d8cd84f3e" offset="0" />
367         </dataarea>
368      </part>
369   </software>
370
371   <software name="cosmicfg" supported="no">
372      <description>Cosmic Fighter</description>
373      <year>1990</year>
374      <publisher>Bit Corp.</publisher>
375      <info name="serial" value="C1032" />
376      <part name="cart" interface="gamate_cart">
377         <dataarea name="rom" size="32768">
378            <rom name="c1032_cosmic_fighter.bin" size="32768" crc="d24df424" sha1="df4ebdd1bfb63fa74b7fe83d0f3ce4b403bb5cde" offset="0" />
379         </dataarea>
380      </part>
381   </software>
382
383   <software name="treashnt" supported="no">
384      <description>Treasure Hunter</description>
385      <year>1990</year>
386      <publisher>Bit Corp.</publisher>
387      <info name="serial" value="C1035" />
388      <part name="cart" interface="gamate_cart">
389         <dataarea name="rom" size="32768">
390            <rom name="c1035_treasure_hunter.bin" size="32768" crc="3bed5e9c" sha1="c724b40b97a7f97abfb33e31e5c315ae986b669a" offset="0" />
391         </dataarea>
392      </part>
393   </software>
394
395   <software name="santa" supported="no">
396      <description>Nightmare of Santa Claus</description>
397      <year>1991</year>
398      <publisher>Bit Corp.</publisher>
399      <info name="serial" value="C1037" />
400      <part name="cart" interface="gamate_cart">
401         <dataarea name="rom" size="32768">
402            <rom name="c1037_nightmare_of_santa_claus.bin" size="32768" crc="ed243824" sha1="ff3ad53998dd5858f1176767786ec187ea8b059b" offset="0" />
403         </dataarea>
404      </part>
405   </software>
406
407   <software name="boom" supported="no">
408      <description>Boom</description>
409      <year>1991</year>
410      <publisher>Bit Corp.</publisher>
411      <info name="serial" value="C1043" />
412      <part name="cart" interface="gamate_cart">
413         <dataarea name="rom" size="32768">
414            <rom name="c1043_boom.bin" size="32768" crc="20fda0f7" sha1="02f9a07b251bc29d0e5b3d6a4dfde0ab63bd65a3" offset="0" />
415         </dataarea>
416      </part>
417   </software>
418
419   <software name="snowman" supported="no">
420      <description>Snowman Legend</description>
421      <year>1991</year>
422      <publisher>Bit Corp.</publisher>
423      <info name="serial" value="C1044" />
424      <part name="cart" interface="gamate_cart">
425         <dataarea name="rom" size="32768">
426            <rom name="c1044_snowman_legend.bin" size="32768" crc="bfdf356f" sha1="19184793176d7aba7e353819aca57030254666ae" offset="0" />
427         </dataarea>
428      </part>
429   </software>
430
431   <software name="mjigsaw" supported="no">
432      <description>Magic Jigsaw</description>
433      <year>1991</year>
434      <publisher>Bit Corp.</publisher>
435      <info name="serial" value="C1054" />
436      <part name="cart" interface="gamate_cart">
437         <dataarea name="rom" size="32768">
438            <rom name="c1054_magic_jigsaw.bin" size="32768" crc="1098bcd3" sha1="75004583a83225e8379fa3f34433e0a76222e1f7" offset="0" />
439         </dataarea>
440      </part>
441   </software>
442
443<!-- This does not display anything, so it might not be this game! -->
444   <software name="dinopark" supported="no">
445      <description>Dinosaur Park</description>
446      <year>19??</year>
447      <publisher>&lt;unknown&gt;</publisher>
448      <info name="serial" value="C1061" />
449      <part name="cart" interface="gamate_cart">
450         <dataarea name="rom" size="16384">
451            <rom name="c1061_gamate_card.bin" size="16384" crc="c05d20b5" sha1="e45a028809738bfa265661414f755691a5b63ad0" offset="0" />
452         </dataarea>
453      </part>
454   </software>
455
456<!-- This does not display anything, so it might not be this game! -->
457   <software name="goldpyra" supported="no">
458      <description>The Golden Pyramid</description>
459      <year>19??</year>
460      <publisher>&lt;unknown&gt;</publisher>
461      <info name="serial" value="C1068" />
462      <part name="cart" interface="gamate_cart">
463         <dataarea name="rom" size="16384">
464            <rom name="c1068_gamate_card.bin" size="16384" crc="fdd4dce6" sha1="156211b19d8e38f58955f95f9329cfa9d8b1c74c" offset="0" />
465         </dataarea>
466      </part>
467   </software>
468
18469</softwarelist>
trunk/hash/leapster.xml
r242231r242232
117117      <publisher>LeapFrog</publisher>
118118      <part name="cart" interface="leapster_cart">
119119         <dataarea name="rom" size="0x800000">
120            <rom name="500-11078-a - lernen mit leap (german)" size="0x800000" crc="e1f505e7" sha1="935eb17d3b6f9df2115a12445b3c8c977005481a" offset="0x00000" />
120            <rom name="500-11078-a - lernen mit leap (german).bin" size="0x800000" crc="e1f505e7" sha1="935eb17d3b6f9df2115a12445b3c8c977005481a" offset="0x00000" />
121121         </dataarea>
122122      </part>
123123   </software>
r242231r242232
143143         </dataarea>
144144      </part>
145145   </software>
146
147   <software name="dora" supported="no">
148      <description>Dora - Retter der Wildnis (German)</description>
149      <year>2003</year>
150      <publisher>LeapFrog</publisher>
151      <part name="cart" interface="leapster_cart">
152         <dataarea name="rom" size="0x800000">
153            <rom name="500-12562-b - dora - retter der wildnis (german).bin" size="0x800000" crc="242907d4" sha1="262ee3e208fff0fc362bc879416cbdf31bf38304" offset="0x00000" />
154         </dataarea>
155      </part>
156   </software>
157
158   <software name="vorschul" supported="no">
159      <description>Vorschule (German)</description>
160      <year>2003</year>
161      <publisher>LeapFrog</publisher>
162      <part name="cart" interface="leapster_cart">
163         <dataarea name="rom" size="0x800000">
164            <rom name="500-10934-a - vorschule (german).bin" size="0x800000" crc="4c5e775e" sha1="87819e1a95f0d435fc94697423fcfca13f463a34" offset="0x00000" />
165         </dataarea>
166      </part>
167   </software>
168
169   <software name="weltmath" supported="no">
170      <description>Weltraum-Mathe - Lernen im Arcade-Stil! (German)</description>
171      <year>2003</year>
172      <publisher>LeapFrog</publisher>
173      <part name="cart" interface="leapster_cart">
174         <dataarea name="rom" size="0x800000">
175            <rom name="500-12140-a - weltraum-mathe - lernen im arcade-stil! (german).bin" size="0x400000" crc="75164c8e" sha1="6bebaef0d3b6f8a1a4b2bb957a00a0cce4ed65a2" offset="0x00000" />
176         </dataarea>
177      </part>
178   </software>
179
180
181   <software name="jedimath" supported="no">
182      <description>Star Wars - Jedi Math (US)</description>
183      <year>2003</year>
184      <publisher>LeapFrog</publisher>
185      <part name="cart" interface="leapster_cart">
186         <dataarea name="rom" size="0x800000">
187            <rom name="500-13306-a - star wars - jedi math (us).bin" size="0x800000" crc="27000674" sha1="a7e8e63ab74931ad9546aba20755714df572badb" offset="0x00000" />
188         </dataarea>
189      </part>
190   </software>
191
192   <software name="carssc" supported="no">
193      <description>Cars - Supercharged (US)</description>
194      <year>2003</year>
195      <publisher>LeapFrog</publisher>
196      <part name="cart" interface="leapster_cart">
197         <dataarea name="rom" size="0x800000">
198            <rom name="500-12712-a - cars - supercharged (us).bin" size="0x800000" crc="beca3909" sha1="8cda80251d6e45427dba6acbae5dff306eb84d34" offset="0x00000" />
199         </dataarea>
200      </part>
201   </software>
202
203   <software name="clifread" supported="no">
204      <description>Clifford - The big red dog - Reading (US)</description>
205      <year>2003</year>
206      <publisher>LeapFrog</publisher>
207      <part name="cart" interface="leapster_cart">
208         <dataarea name="rom" size="0x800000">
209            <rom name="500-12466-a - clifford - the big red dog - reading (us).bin" size="0x800000" crc="0134af49" sha1="29c3e2e9d56aeee09c752776bfd8c096e02b75c5" offset="0x00000" />
210         </dataarea>
211      </part>
212   </software>
213
214  <software name="digdino" supported="no">
215      <description>Digging for Dinosaurs (US)</description>
216      <year>2003</year>
217      <publisher>LeapFrog</publisher>
218      <part name="cart" interface="leapster_cart">
219         <dataarea name="rom" size="0x800000">
220            <rom name="500-13681-a - digging for dinosaurs (us).bin" size="0x800000" crc="822ca3da" sha1="ff0ac7f5fded346553e1a4697b45c27fc04ee3fe" offset="0x00000" />
221         </dataarea>
222      </part>
223   </software>
224
225   <software name="getpuzld" supported="no">
226      <description>Get Puzzled! (US)</description>
227      <year>2003</year>
228      <publisher>LeapFrog</publisher>
229      <part name="cart" interface="leapster_cart">
230         <dataarea name="rom" size="0x800000">
231            <rom name="500-12692-a - get puzzled! (us).bin" size="0x800000" crc="05b608f0" sha1="04b3181f39e88b6cd47e39a7efb50fa14618ff2c" offset="0x00000" />
232         </dataarea>
233      </part>
234   </software>
235
236   <software name="hugenose" supported="no">
237      <description>Reading with Phonics - Mole's Huge Nose (US)</description>
238      <year>2003</year>
239      <publisher>LeapFrog</publisher>
240      <part name="cart" interface="leapster_cart">
241         <dataarea name="rom" size="0x800000">
242            <rom name="500-10829-a - reading with phonics - mole's huge nose (us).bin" size="0x800000" crc="2c6e623e" sha1="c298181f00109b7f863fdb12b5bd462085c4ff4f" offset="0x00000" />
243         </dataarea>
244      </part>
245   </software>
246
247   <software name="imagfrnd" supported="no">
248      <description>Foster's Home for Imaginary Friends (US)</description>
249      <year>2003</year>
250      <publisher>LeapFrog</publisher>
251      <part name="cart" interface="leapster_cart">
252         <dataarea name="rom" size="0x800000">
253            <rom name="500-12715-a - foster's home for imaginary friends (us).bin" size="0x800000" crc="e62d1684" sha1="e43820efe9dbd8dddf6312493a7967c75a29431a" offset="0x00000" />
254         </dataarea>
255      </part>
256   </software>
257
146258</softwarelist>
trunk/hash/mc1000_cass.xml
r0r242232
1<?xml version="1.0"?>
2<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
3
4<!-- Info for original games comes from http://mc-1000.wikispaces.com/fitas+cce -->
5
6
7<!-- Undumped (?):
8     F-16 - Unknown
9     F-17 - Unknown
10     F-19 - Controle de Despesas
11     F-23 - Unknown
12     F-29 - Unknown
13-->
14
15<softwarelist name="mc1000_cass" description="CCE MC-1000 cassettes">
16
17   <!-- Original programs -->
18
19   <software name="analeco">
20      <description>Analise Economica</description>
21      <year>198?</year>
22      <publisher>CCE Soft</publisher>
23      <info name="usage" value="Load with LOAD" />
24      <info name="serial" value="F-30" />
25
26      <part name="cass1" interface="mc1000_cass">
27         <dataarea name="cass" size="426028">
28            <rom name="f30.wav" size="426028" crc="e30fcc63" sha1="531e49cbd37cb08af45efe2f979cf8fd54ebb706" offset="0" />
29         </dataarea>
30      </part>
31   </software>
32
33   <software name="analfin">
34      <description>Analise Financiera</description>
35      <year>198?</year>
36      <publisher>CCE Soft</publisher>
37      <info name="usage" value="Load with LOAD"/>
38      <info name="serial" value="F-28" />
39
40      <part name="cass1" interface="mc1000_cass">
41         <dataarea name="cass" size="632348">
42            <rom name="f28.wav" size="632348" crc="c7ced86d" sha1="256b04ad5a3442308604bc9917a063174b4b9d02" offset="0" />
43         </dataarea>
44      </part>
45   </software>
46
47   <software name="anapatri">
48      <description>Analise Patrimonial</description>
49      <year>198?</year>
50      <publisher>CCE Soft</publisher>
51      <info name="usage" value="Load with LOAD" />
52      <info name="serial" value="F-24" />
53
54      <part name="cass1" interface="mc1000_cass">
55         <dataarea name="cass" size="631660">
56            <rom name="f24.wav" size="631660" crc="b9015ca2" sha1="2c5f75e41c0dfadff0b5b75ddbf6c5bd4a0350ba" offset="0" />
57         </dataarea>
58      </part>
59   </software>
60
61   <software name="bataero">
62      <description>Batalha Aeronaval</description>
63      <year>198?</year>
64      <publisher>CCE Soft</publisher>
65      <info name="usage" value="Load with TLOAD" />
66      <info name="serial" value="F-15" />
67
68      <part name="cass1" interface="mc1000_cass">
69         <dataarea name="cass" size="664652">
70            <rom name="f15.wav" size="664652" crc="d3bc5c32" sha1="c49a094603221fe1a01324f8d973e26cef86198d" offset="0" />
71         </dataarea>
72      </part>
73   </software>
74
75   <software name="batmate">
76      <description>Batalha de Matematica</description>
77      <year>198?</year>
78      <publisher>CCE Soft</publisher>
79      <info name="usage" value="Load with TLOAD" />
80      <info name="serial" value="F-7" />
81
82      <part name="cass1" interface="mc1000_cass">
83         <dataarea name="cass" size="583692">
84            <rom name="f7.wav" size="583692" crc="46caaae3" sha1="67cc7540211a9847d8d4b4ed9de9629383f67a4e" offset="0" />
85         </dataarea>
86      </part>
87   </software>
88
89   <software name="calcfin">
90      <description>Calculo Financiero</description>
91      <year>198?</year>
92      <publisher>CCE Soft</publisher>
93      <info name="usage" value="Load with LOAD" />
94      <info name="serial" value="F-25" />
95
96      <part name="cass1" interface="mc1000_cass">
97         <dataarea name="cass" size="752876">
98            <rom name="f25.wav" size="752876" crc="98e3c4a7" sha1="d3869dd3f652430852bed38d8d9ba1a8ad8d81b2" offset="0" />
99         </dataarea>
100      </part>
101   </software>
102
103   <software name="calcprec">
104      <description>Calculo de Preco de Venda</description>
105      <year>198?</year>
106      <publisher>CCE Soft</publisher>
107      <info name="usage" value="Load with LOAD" />
108      <info name="serial" value="F-18" />
109
110      <part name="cass1" interface="mc1000_cass">
111         <dataarea name="cass" size="666732">
112            <rom name="f18.wav" size="666732" crc="cf7bc405" sha1="3f32491f4394db419310988751d1bc16338f553a" offset="0" />
113         </dataarea>
114      </part>
115   </software>
116
117   <software name="calendar">
118      <description>Calendario</description>
119      <year>198?</year>
120      <publisher>CCE Soft</publisher>
121      <info name="usage" value="Load with LOAD" />
122      <info name="serial" value="F-21" />
123
124      <part name="cass1" interface="mc1000_cass">
125         <dataarea name="cass" size="266220">
126            <rom name="f21.wav" size="266220" crc="9d37708a" sha1="d0345d44fe6d4c16a2523e04a8ccbe42624e0d2e" offset="0" />
127         </dataarea>
128      </part>
129   </software>
130
131   <software name="carro">
132      <description>Carro Maluco</description>
133      <year>198?</year>
134      <publisher>CCE Soft</publisher>
135      <info name="usage" value="Load with TLOAD" />
136      <info name="serial" value="F-11" />
137
138      <part name="cass1" interface="mc1000_cass">
139         <dataarea name="cass" size="316028">
140            <rom name="f11.wav" size="316028" crc="36f856b3" sha1="a9074f500b1a7eb3832b7dba89fe78a4d2aff285" offset="0" />
141         </dataarea>
142      </part>
143   </software>
144
145   <software name="compara">
146      <description>Comparacao de Recitas</description>
147      <year>198?</year>
148      <publisher>CCE Soft</publisher>
149      <info name="usage" value="Load with LOAD" />
150      <info name="serial" value="F-26" />
151
152      <part name="cass1" interface="mc1000_cass">
153         <dataarea name="cass" size="507772">
154            <rom name="f26.wav" size="507772" crc="c285fa48" sha1="d48ea00356f65af4d241a113457f6db6f8611423" offset="0" />
155         </dataarea>
156      </part>
157   </software>
158
159   <software name="guerrobo">
160      <description>Guerra de Robos</description>
161      <year>198?</year>
162      <publisher>CCE Soft</publisher>
163      <info name="usage" value="Load with TLOAD" />
164      <info name="serial" value="F-14" />
165
166      <part name="cass1" interface="mc1000_cass">
167         <dataarea name="cass" size="735692">
168            <rom name="f14.wav" size="735692" crc="5b770716" sha1="fafff9f95759106bcf2734a051eba42fba10e464" offset="0" />
169         </dataarea>
170      </part>
171   </software>
172
173   <software name="invasor">
174      <description>Invasores do Espaco</description>
175      <year>198?</year>
176      <publisher>CCE Soft</publisher>
177      <info name="usage" value="Load with TLOAD" />
178      <info name="serial" value="F-9" />
179
180      <part name="cass1" interface="mc1000_cass">
181         <dataarea name="cass" size="597644">
182            <rom name="f9.wav" size="597644" crc="22102133" sha1="e02db15bd6bb36a0e48691a58aa4b93cbea3c79a" offset="0" />
183         </dataarea>
184      </part>
185   </software>
186
187   <software name="jipeguer">
188      <description>Jipe de Guerra</description>
189      <year>198?</year>
190      <publisher>CCE Soft</publisher>
191      <info name="usage" value="Load with TLOAD" />
192      <info name="serial" value="F-10" />
193
194      <part name="cass1" interface="mc1000_cass">
195         <dataarea name="cass" size="738908">
196            <rom name="f10.wav" size="738908" crc="459d1c03" sha1="39411d342cd1624b608f275f459c5919a6d1cdcd" offset="0" />
197         </dataarea>
198      </part>
199   </software>
200
201   <software name="jogforc2" cloneof="jogforca">
202      <description>Jogo da Forca II</description>
203      <year>198?</year>
204      <publisher>CCE Soft</publisher>
205      <info name="usage" value="Load with TLOAD" />
206      <info name="serial" value="F-13" />
207
208      <part name="cass1" interface="mc1000_cass">
209         <dataarea name="cass" size="845372">
210            <rom name="f13.wav" size="845372" crc="d6826e26" sha1="fa88292f2a7b148f0a0ff35d5a23ca01747b808c" offset="0" />
211         </dataarea>
212      </part>
213   </software>
214
215   <software name="jogforca">
216      <description>Jogo da Forca I</description>
217      <year>198?</year>
218      <publisher>CCE Soft</publisher>
219      <info name="usage" value="Load with TLOAD" />
220      <info name="serial" value="F-12" />
221
222      <part name="cass1" interface="mc1000_cass">
223         <dataarea name="cass" size="859020">
224            <rom name="f12.wav" size="859020" crc="6fb78310" sha1="8e7676c17a2bc2da6d0aa68a0874ee880aacf665" offset="0" />
225         </dataarea>
226      </part>
227   </software>
228
229   <software name="livroraz">
230      <description>Livro Razao Geral</description>
231      <year>198?</year>
232      <publisher>CCE Soft</publisher>
233      <info name="usage" value="Load with LOAD" />
234      <info name="serial" value="F-27" />
235
236      <part name="cass1" interface="mc1000_cass">
237         <dataarea name="cass" size="876460">
238            <rom name="f27.wav" size="876460" crc="ea528fac" sha1="71defb4fe12afe7dd91b0f0512641f35630ff456" offset="0" />
239         </dataarea>
240      </part>
241   </software>
242
243   <software name="memoria">
244      <description>Jogo de Memoria</description>
245      <year>198?</year>
246      <publisher>CCE Soft</publisher>
247      <info name="usage" value="Load with TLOAD" />
248      <info name="serial" value="F-1" />
249
250      <part name="cass1" interface="mc1000_cass">
251         <dataarea name="cass" size="359596">
252            <rom name="f1.wav" size="359596" crc="75478925" sha1="57651331d3da445392ff936e8e382fa90d29f844" offset="0" />
253         </dataarea>
254      </part>
255   </software>
256
257   <software name="olimpmat">
258      <description>Olimpiada de Matematica</description>
259      <year>198?</year>
260      <publisher>CCE Soft</publisher>
261      <info name="usage" value="Load with TLOAD" />
262      <info name="serial" value="F-8" />
263
264      <part name="cass1" interface="mc1000_cass">
265         <dataarea name="cass" size="326124">
266            <rom name="f8a.wav" size="326124" crc="42e029d3" sha1="1c049bc4193404d66fc80a8ae10ac780b0e00c50" offset="0" />
267         </dataarea>
268      </part>
269      <part name="cass2" interface="mc1000_cass">
270         <dataarea name="cass" size="375132">
271            <rom name="f8b.wav" size="375132" crc="23ee6191" sha1="eb470c77ee09304f732604afdd102490209b76fe" offset="0" />
272         </dataarea>
273      </part>
274   </software>
275
276   <software name="othello">
277      <description>Othello</description>
278      <year>198?</year>
279      <publisher>CCE Soft</publisher>
280      <info name="usage" value="Load with TLOAD" />
281      <info name="serial" value="F-4" />
282
283      <part name="cass1" interface="mc1000_cass">
284         <dataarea name="cass" size="506316">
285            <rom name="f4.wav" size="506316" crc="24e478b1" sha1="1479d86212677107b505635396d22065deb28535" offset="0" />
286         </dataarea>
287      </part>
288   </software>
289
290   <software name="persegui">
291      <description>Perseguicao Policial</description>
292      <year>198?</year>
293      <publisher>CCE Soft</publisher>
294      <info name="usage" value="Load with TLOAD" />
295      <info name="serial" value="F-3" />
296
297      <part name="cass1" interface="mc1000_cass">
298         <dataarea name="cass" size="578092">
299            <rom name="f3.wav" size="578092" crc="45e7b9d0" sha1="e9433a8e234466c199d83876911049d09b3be87c" offset="0" />
300         </dataarea>
301      </part>
302   </software>
303
304   <software name="quebra">
305      <description>Quebra Cabecas</description>
306      <year>198?</year>
307      <publisher>CCE Soft</publisher>
308      <info name="usage" value="Load with TLOAD" />
309      <info name="serial" value="F-6" />
310
311      <part name="cass1" interface="mc1000_cass">
312         <dataarea name="cass" size="740636">
313            <rom name="f6.wav" size="740636" crc="14055426" sha1="78d74d0b54743fb2fba752d3e350ed6d94f0f47f" offset="0" />
314         </dataarea>
315      </part>
316   </software>
317
318   <software name="redepert">
319      <description>Rede Pert - Caminho Critico</description>
320      <year>198?</year>
321      <publisher>CCE Soft</publisher>
322      <info name="usage" value="Load with LOAD" />
323      <info name="serial" value="F-20" />
324
325      <part name="cass1" interface="mc1000_cass">
326         <dataarea name="cass" size="1810012">
327            <rom name="f20.wav" size="1810012" crc="3f32b010" sha1="5b281c9a6dfaf610ab9495feeb2da55607201e82" offset="0" />
328         </dataarea>
329      </part>
330   </software>
331
332   <software name="resta">
333      <description>Resta Um</description>
334      <year>198?</year>
335      <publisher>CCE Soft</publisher>
336      <info name="usage" value="Load with TLOAD" />
337      <info name="serial" value="F-5" />
338
339      <part name="cass1" interface="mc1000_cass">
340         <dataarea name="cass" size="670908">
341            <rom name="f5.wav" size="670908" crc="6ef25fb5" sha1="223862aa232d1ee03ad747198498d5ea8bc6638c" offset="0" />
342         </dataarea>
343      </part>
344   </software>
345
346   <software name="senha">
347      <description>Senha</description>
348      <year>198?</year>
349      <publisher>CCE Soft</publisher>
350      <info name="usage" value="Load with TLOAD" />
351      <info name="serial" value="F-2" />
352
353      <part name="cass1" interface="mc1000_cass">
354         <dataarea name="cass" size="531324">
355            <rom name="f2.wav" size="531324" crc="d9d1c328" sha1="984b58745e6ee79d39b74f049748e39682acd61c" offset="0" />
356         </dataarea>
357      </part>
358   </software>
359
360   <software name="teoria">
361      <description>Teoria da Estimativa Estatistica</description>
362      <year>198?</year>
363      <publisher>CCE Soft</publisher>
364      <info name="usage" value="Load with LOAD" />
365      <info name="serial" value="F-22" />
366
367      <part name="cass1" interface="mc1000_cass">
368         <dataarea name="cass" size="401852">
369            <rom name="f22.wav" size="401852" crc="a172953b" sha1="bd9324a63f186e5be4e346c10d097b921bf52619" offset="0" />
370         </dataarea>
371      </part>
372   </software>
373
374   <software name="manualba">
375      <description>Manual do BASIC</description>
376      <year>198?</year>
377      <publisher>CCE Soft</publisher>
378      <info name="usage" value="Load all programs with TLOAD" />
379
380      <part name="cass1" interface="mc1000_cass">
381         <feature name="part_id" value="Compositor de Musica"/>
382         <dataarea name="cass" size="609500">
383            <rom name="mc1000_1_1_compositor_de_musicas.wav" size="609500" crc="ae66d227" sha1="ba33f588a580b6893713ac7437f9b4d98cb7ffac" offset="0" status="baddump" />
384         </dataarea>
385      </part>
386      <part name="cass2" interface="mc1000_cass">
387         <feature name="part_id" value="Aterrissagem em Marte"/>
388         <dataarea name="cass" size="461580">
389            <rom name="mc1000_1_2_aterrissagem_em_marte.wav" size="461580" crc="cdfc08b8" sha1="807b60925135de67f258568d784c16993a10dbb8" offset="0" status="baddump" />
390         </dataarea>
391      </part>
392      <part name="cass3" interface="mc1000_cass">
393         <feature name="part_id" value="Bombardeio na Cidade"/>
394         <dataarea name="cass" size="339596">
395            <rom name="mc1000_1_3_bombardeio_na_cidade.wav" size="339596" crc="c74f3b26" sha1="9ed8a57a808727752dd3bb37af7eb0eb5db375f1" offset="0" status="baddump" />
396         </dataarea>
397      </part>
398      <part name="cass4" interface="mc1000_cass">
399         <feature name="part_id" value="Matematica para Jardim de Infancia"/>
400         <dataarea name="cass" size="659084">
401            <rom name="mc1000_1_4_matematica_para_jardim_de_infancia.wav" size="659084" crc="ff0a069c" sha1="8839cbe36e107d4134903d0204b1d9156aeb0460" offset="0" status="baddump" />
402         </dataarea>
403      </part>
404      <part name="cass5" interface="mc1000_cass">
405         <feature name="part_id" value="Batalha com Tanques"/>
406         <dataarea name="cass" size="554828">
407            <rom name="mc1000_1_5_batalha_com_tanques.wav" size="554828" crc="62237abf" sha1="709e7e7f85841782dd0fba952f95dbc621ff8301" offset="0" status="baddump" />
408         </dataarea>
409      </part>
410   </software>
411
412   <software name="50progs">
413      <description>50 Programas Para Voce</description>
414      <year>198?</year>
415      <publisher>CCE Soft</publisher>
416      <info name="usage" value="Load all programs with LOAD + the name in parentheses (e.g. LOAD APRE)" />
417
418      <part name="cass1" interface="mc1000_cass">
419         <feature name="part_id" value="Apresentacao (APRE)"/>
420         <dataarea name="cass" size="489228">
421            <rom name="mc1000_fita_50_programas_01_apresentacao_apre.wav" size="489228" crc="b8473115" sha1="af2eb19c9d6b98912ef3aeff95b3d0b005fb007a" offset="0" status="baddump" />
422         </dataarea>
423      </part>
424      <part name="cass2" interface="mc1000_cass">
425         <feature name="part_id" value="Desenhando (DESE)"/>
426         <dataarea name="cass" size="266348">
427            <rom name="mc1000_fita_50_programas_02_desenhando_dese.wav" size="266348" crc="0e4531b0" sha1="cf5b326eb76a58371b4f8d6416577b666acb7c9c" offset="0" status="baddump" />
428         </dataarea>
429      </part>
430      <part name="cass3" interface="mc1000_cass">
431         <feature name="part_id" value="Some sounds (SONS)"/>
432         <dataarea name="cass" size="213468">
433            <rom name="mc1000_fita_50_programas_03_some_sounds_sons.wav" size="213468" crc="18f475dd" sha1="7b911f61283de969e549e05ef02f0e36a858e348" offset="0" status="baddump" />
434         </dataarea>
435      </part>
436      <part name="cass4" interface="mc1000_cass">
437         <feature name="part_id" value="Grafimania (GRAF)"/>
438         <dataarea name="cass" size="163004">
439            <rom name="mc1000_fita_50_programas_04_grafimania_graf.wav" size="163004" crc="6361305d" sha1="090fbaf586f06d3198957e36721003da20ff3561" offset="0" status="baddump" />
440         </dataarea>
441      </part>
442      <part name="cass5" interface="mc1000_cass">
443         <feature name="part_id" value="Dente-de-leao (DENT)"/>
444         <dataarea name="cass" size="101292">
445            <rom name="mc1000_fita_50_programas_05_dente_de_leao_dent.wav" size="101292" crc="7d4f6569" sha1="f0bf86473d031a701b21891131de20d8919d9d3d" offset="0" status="baddump" />
446         </dataarea>
447      </part>
448      <part name="cass6" interface="mc1000_cass">
449         <feature name="part_id" value="Caleidoscopio (CALE)"/>
450         <dataarea name="cass" size="87196">
451            <rom name="mc1000_fita_50_programas_06_caleidoscopio_cale.wav" size="87196" crc="2b4fa79f" sha1="f57938771f18f84900483ba97c2b7167b17a2756" offset="0" status="baddump" />
452         </dataarea>
453      </part>
454      <part name="cass7" interface="mc1000_cass">
455         <feature name="part_id" value="3 telas (TELA)"/>
456         <dataarea name="cass" size="94860">
457            <rom name="mc1000_fita_50_programas_07_3_telas_tela.wav" size="94860" crc="a74164b6" sha1="adde65a5d38772e5e3ab866ca698952d192b9e80" offset="0" status="baddump" />
458         </dataarea>
459      </part>
460      <part name="cass8" interface="mc1000_cass">
461         <feature name="part_id" value="Teias (TEIA)"/>
462         <dataarea name="cass" size="102284">
463            <rom name="mc1000_fita_50_programas_08_teias_teia.wav" size="102284" crc="00c89aab" sha1="15cc023730d947c42aa8e59d6b92c15a3334a1b8" offset="0" status="baddump" />
464         </dataarea>
465      </part>
466      <part name="cass9" interface="mc1000_cass">
467         <feature name="part_id" value="Reflexo (REFL)"/>
468         <dataarea name="cass" size="94684">
469            <rom name="mc1000_fita_50_programas_09_reflexo_refl.wav" size="94684" crc="f5b23b22" sha1="c073344e2e90a1034bd2d52c2a90e7c61c8782c0" offset="0" status="baddump" />
470         </dataarea>
471      </part>
472      <part name="cass10" interface="mc1000_cass">
473         <feature name="part_id" value="Linhas (LINH)"/>
474         <dataarea name="cass" size="99052">
475            <rom name="mc1000_fita_50_programas_10_linhas_linh.wav" size="99052" crc="62f69360" sha1="ae03a492a971a43232c58ad9bcc12181da49d36a" offset="0" status="baddump" />
476         </dataarea>
477      </part>
478      <part name="cass11" interface="mc1000_cass">
479         <feature name="part_id" value="Cicloide (CICL)"/>
480         <dataarea name="cass" size="81212">
481            <rom name="mc1000_fita_50_programas_11_cicloide_cicl.wav" size="81212" crc="ff5825d8" sha1="a1338fd93b3671a378f52224b50d26bedd9e1bab" offset="0" status="baddump" />
482         </dataarea>
483      </part>
484      <part name="cass12" interface="mc1000_cass">
485         <feature name="part_id" value="Senoides (SENO)"/>
486         <dataarea name="cass" size="82124">
487            <rom name="mc1000_fita_50_programas_12_senoides_seno.wav" size="82124" crc="37712d8a" sha1="7de98cd758cd0c7227ba57fe8b41a13f7721044d" offset="0" status="baddump" />
488         </dataarea>
489      </part>
490      <part name="cass13" interface="mc1000_cass">
491         <feature name="part_id" value="Histograma (HIST)"/>
492         <dataarea name="cass" size="425964">
493            <rom name="mc1000_fita_50_programas_13_histograma_hist.wav" size="425964" crc="b4ec3d5e" sha1="b6a6b8a92319124b1328c40e0a04e819e91ff608" offset="0" status="baddump" />
494         </dataarea>
495      </part>
496      <part name="cass14" interface="mc1000_cass">
497         <feature name="part_id" value="Jogo de dados (DADO)"/>
498         <dataarea name="cass" size="229164">
499            <rom name="mc1000_fita_50_programas_14_jogo_de_dados_dado.wav" size="229164" crc="f881f923" sha1="7d55813fdc1deb58001e9fd2c1687501a13acba5" offset="0" status="baddump" />
500         </dataarea>
501      </part>
502      <part name="cass15" interface="mc1000_cass">
503         <feature name="part_id" value="Frases (FRAS)"/>
504         <dataarea name="cass" size="291996">
505            <rom name="mc1000_fita_50_programas_15_frases_fras.wav" size="291996" crc="6a51544e" sha1="119de9fcb145369f92f515b4a8aed49d98b9b830" offset="0" status="baddump" />
506         </dataarea>
507      </part>
508      <part name="cass16" interface="mc1000_cass">
509         <feature name="part_id" value="Numero oculto (NUME)"/>
510         <dataarea name="cass" size="124460">
511            <rom name="mc1000_fita_50_programas_16_numero_oculto_nume.wav" size="124460" crc="b00af10e" sha1="7e12c7bf6727a9c73a309364a89334c4016965ae" offset="0" status="baddump" />
512         </dataarea>
513      </part>
514      <part name="cass17" interface="mc1000_cass">
515         <feature name="part_id" value="Reverso (REVE)"/>
516         <dataarea name="cass" size="399420">
517            <rom name="mc1000_fita_50_programas_17_reverso_reve.wav" size="399420" crc="919148c4" sha1="9c4ab207f0f6abaf6cac91d3decea8372142ba49" offset="0" status="baddump" />
518         </dataarea>
519      </part>
520      <part name="cass18" interface="mc1000_cass">
521         <feature name="part_id" value="Calendario (CALE)"/>
522         <dataarea name="cass" size="260380">
523            <rom name="mc1000_fita_50_programas_18_calendario_cale.wav" size="260380" crc="1476eba6" sha1="ac1d1168272e81a1026333109564885a364af22a" offset="0" status="baddump" />
524         </dataarea>
525      </part>
526      <part name="cass19" interface="mc1000_cass">
527         <feature name="part_id" value="Tira-letras (TIRA)"/>
528         <dataarea name="cass" size="127628">
529            <rom name="mc1000_fita_50_programas_19_tira_letras_tira.wav" size="127628" crc="87fc6b3e" sha1="8f753ce79f610ac0fdab6f0aabb9a231f6f2b7a0" offset="0" status="baddump" />
530         </dataarea>
531      </part>
532      <part name="cass20" interface="mc1000_cass">
533         <feature name="part_id" value="Espelho (ESPE)"/>
534         <dataarea name="cass" size="120220">
535            <rom name="mc1000_fita_50_programas_20_espelho_espe.wav" size="120220" crc="ab87857e" sha1="b36a5ca2959dd75457548420ad544b06f63027f3" offset="0" status="baddump" />
536         </dataarea>
537      </part>
538      <part name="cass21" interface="mc1000_cass">
539         <feature name="part_id" value="Negativo (NEGT)"/>
540         <dataarea name="cass" size="117484">
541            <rom name="mc1000_fita_50_programas_21_negativo_negt.wav" size="117484" crc="f83b0d4a" sha1="4db22774a8f880c2e562fea683d192ac616a5d52" offset="0" status="baddump" />
542         </dataarea>
543      </part>
544      <part name="cass22" interface="mc1000_cass">
545         <feature name="part_id" value="Moldura (MOLD)"/>
546         <dataarea name="cass" size="167708">
547            <rom name="mc1000_fita_50_programas_22_moldura_mold.wav" size="167708" crc="cb7a3be8" sha1="390002d6f241e3909e846bf9204c9a250e3c54e4" offset="0" status="baddump" />
548         </dataarea>
549      </part>
550      <part name="cass23" interface="mc1000_cass">
551         <feature name="part_id" value="Ordenador alfabetico (SORT)"/>
552         <dataarea name="cass" size="218428">
553            <rom name="mc1000_fita_50_programas_23_ordenador_alfabetico_sort.wav" size="218428" crc="933c05d7" sha1="942889490e378ac83b3513963bb4bfb15a337179" offset="0" status="baddump" />
554         </dataarea>
555      </part>
556      <part name="cass24" interface="mc1000_cass">
557         <feature name="part_id" value="Conversor arabicos-romanos (ROMA)"/>
558         <dataarea name="cass" size="138668">
559            <rom name="mc1000_fita_50_programas_24_conversao_arabicos_romanos_roma.wav" size="138668" crc="858e4fca" sha1="bee6207043b42e0788414f09222035a9c970df36" offset="0" status="baddump" />
560         </dataarea>
561      </part>
562      <part name="cass25" interface="mc1000_cass">
563         <feature name="part_id" value="Palpites para loto (LOTO)"/>
564         <dataarea name="cass" size="159804">
565            <rom name="mc1000_fita_50_programas_25_palpites_para_loto_loto.wav" size="159804" crc="83fd51af" sha1="4969800ada5688e9bccbdb1eb8a738294d0be870" offset="0" status="baddump" />
566         </dataarea>
567      </part>
568      <part name="cass26" interface="mc1000_cass">
569         <feature name="part_id" value="C.P.F. (CPF)"/>
570         <dataarea name="cass" size="133692">
571            <rom name="mc1000_fita_50_programas_26_cpf_cpf.wav" size="133692" crc="23ff1845" sha1="ef85e05da81416e374446186fee0be63a5a8faae" offset="0" status="baddump" />
572         </dataarea>
573      </part>
574      <part name="cass27" interface="mc1000_cass">
575         <feature name="part_id" value="Conversao graus Celsius-Fahrenheit-Celsius (CFC)"/>
576         <dataarea name="cass" size="132476">
577            <rom name="mc1000_fita_50_programas_27_conversao_celsius_fahrenheit_celsius_cfc.wav" size="132476" crc="194f9c50" sha1="f49a222b9374d911b2eac8b9153fd8692ef0955e" offset="0" status="baddump" />
578         </dataarea>
579      </part>
580      <part name="cass28" interface="mc1000_cass">
581         <feature name="part_id" value="Palindromas (PALI)"/>
582         <dataarea name="cass" size="135260">
583            <rom name="mc1000_fita_50_programas_28_palindromas_pali.wav" size="135260" crc="507fd2a5" sha1="75c01363aa2b9203ba2e8f547ecf937de88bf05f" offset="0" status="baddump" />
584         </dataarea>
585      </part>
586      <part name="cass29" interface="mc1000_cass">
587         <feature name="part_id" value="Agenda telefonica (AGEN)"/>
588         <dataarea name="cass" size="359692">
589            <rom name="mc1000_fita_50_programas_29_agenda_telefonica_agen.wav" size="359692" crc="236b88e3" sha1="fcc1eb66523c9b2a2a147f2dad3112cb4292a408" offset="0" status="baddump" />
590         </dataarea>
591      </part>
592      <part name="cass30" interface="mc1000_cass">
593         <feature name="part_id" value="Econometro (ECON)"/>
594         <dataarea name="cass" size="186316">
595            <rom name="mc1000_fita_50_programas_30_econometro_econ.wav" size="186316" crc="b258d7b0" sha1="9750b6ed75eac0245e3db6cb2f8e3f8d32e068eb" offset="0" status="baddump" />
596         </dataarea>
597      </part>
598      <part name="cass31" interface="mc1000_cass">
599         <feature name="part_id" value="Alfabeto I (ALFI)"/>
600         <dataarea name="cass" size="115596">
601            <rom name="mc1000_fita_50_programas_31_alfabeto_i_alfi.wav" size="115596" crc="5b943d8c" sha1="dd13faa2147dd93fb1acd3d4abce91464d2bacb1" offset="0" status="baddump" />
602         </dataarea>
603      </part>
604      <part name="cass32" interface="mc1000_cass">
605         <feature name="part_id" value="Alfabeto II (ALII)"/>
606         <dataarea name="cass" size="99164">
607            <rom name="mc1000_fita_50_programas_32_alfabeto_ii_alii.wav" size="99164" crc="8f1d2005" sha1="e21cbeb7833c40e054f870a2622f70d245ef17dc" offset="0" status="baddump" />
608         </dataarea>
609      </part>
610      <part name="cass33" interface="mc1000_cass">
611         <feature name="part_id" value="Codigo Morse (MORS)"/>
612         <dataarea name="cass" size="120316">
613            <rom name="mc1000_fita_50_programas_33_codigo_morse_mors.wav" size="120316" crc="9ac62da7" sha1="ba1f20925b66641185eb64e4c3a0cb6c4fcb5df1" offset="0" status="baddump" />
614         </dataarea>
615      </part>
616      <part name="cass34" interface="mc1000_cass">
617         <feature name="part_id" value="Cebolinha (CEBO)"/>
618         <dataarea name="cass" size="139084">
619            <rom name="mc1000_fita_50_programas_34_cebolinha_cebo.wav" size="139084" crc="53c2e0ec" sha1="378cba2f77cc6c3cdbe691b94270fa6124ecd459" offset="0" status="baddump" />
620         </dataarea>
621      </part>
622      <part name="cass35" interface="mc1000_cass">
623         <feature name="part_id" value="Numeros primos (PRIM)"/>
624         <dataarea name="cass" size="168396">
625            <rom name="mc1000_fita_50_programas_35_numeros_primos_prim.wav" size="168396" crc="8e9d948c" sha1="d72a8ff1dd6b07df67abfbc636b963eba2e9271d" offset="0" status="baddump" />
626         </dataarea>
627      </part>
628      <part name="cass36" interface="mc1000_cass">
629         <feature name="part_id" value="Fatorial (FACT)"/>
630         <dataarea name="cass" size="217244">
631            <rom name="mc1000_fita_50_programas_36_fatorial_fact.wav" size="217244" crc="5e0a46fb" sha1="9ab8dd65a480d06c3a85484e199e21e72f960660" offset="0" status="baddump" />
632         </dataarea>
633      </part>
634      <part name="cass37" interface="mc1000_cass">
635         <feature name="part_id" value="Calculo de pi (PI)"/>
636         <dataarea name="cass" size="100748">
637            <rom name="mc1000_fita_50_programas_37_calculo_de_pi_pi.wav" size="100748" crc="b99403ca" sha1="bb19192f77dccb1196268ac6f756b238fc234372" offset="0" status="baddump" />
638         </dataarea>
639      </part>
640      <part name="cass38" interface="mc1000_cass">
641         <feature name="part_id" value="Triangulos (TRAI)"/>
642         <dataarea name="cass" size="138764">
643            <rom name="mc1000_fita_50_programas_38_triangulos_tria.wav" size="138764" crc="15d70dbb" sha1="8762c4564660d43f812a418105f38674378b701d" offset="0" status="baddump" />
644         </dataarea>
645      </part>
646      <part name="cass39" interface="mc1000_cass">
647         <feature name="part_id" value="Raiz de polinomios (RAIZ)"/>
648         <dataarea name="cass" size="142812">
649            <rom name="mc1000_fita_50_programas_39_raiz_de_polinomios_raiz.wav" size="142812" crc="280fee83" sha1="03a10961527bbdadda6be56935f58d234bc450d7" offset="0" status="baddump" />
650         </dataarea>
651      </part>
652      <part name="cass40" interface="mc1000_cass">
653         <feature name="part_id" value="Fatores primos (FAPR)"/>
654         <dataarea name="cass" size="141724">
655            <rom name="mc1000_fita_50_programas_40_fatores_primos_fapr.wav" size="141724" crc="8a5af03d" sha1="daf3f1ebf4704a101a2f13b601fd9434e9532abc" offset="0" status="baddump" />
656         </dataarea>
657      </part>
658      <part name="cass41" interface="mc1000_cass">
659         <feature name="part_id" value="Conversao de base (BASE)"/>
660         <dataarea name="cass" size="132508">
661            <rom name="mc1000_fita_50_programas_41_conversao_de_base_base.wav" size="132508" crc="4c8807e2" sha1="f08e2da6284d95c8558b32bf7352d13dd196a214" offset="0" status="baddump" />
662         </dataarea>
663      </part>
664      <part name="cass42" interface="mc1000_cass">
665         <feature name="part_id" value="Regressao linear (RLIN)"/>
666         <dataarea name="cass" size="157036">
667            <rom name="mc1000_fita_50_programas_42_regressao_linear_rlin.wav" size="157036" crc="ec5ed7d0" sha1="390570d7ac5c7d6e439efed7d6a1a512d1cf6aa5" offset="0" status="baddump" />
668         </dataarea>
669      </part>
670      <part name="cass43" interface="mc1000_cass">
671         <feature name="part_id" value="Exponenciais (EXPO)"/>
672         <dataarea name="cass" size="160460">
673            <rom name="mc1000_fita_50_programas_43_exponenciais_expo.wav" size="160460" crc="c69db959" sha1="3f0bebf891261fbccdbe52ca59e0914d3eae1dde" offset="0" status="baddump" />
674         </dataarea>
675      </part>
676      <part name="cass44" interface="mc1000_cass">
677         <feature name="part_id" value="Soma de matrizes (MATR)"/>
678         <dataarea name="cass" size="149052">
679            <rom name="mc1000_fita_50_programas_44_soma_de_matrizes_matr.wav" size="149052" crc="48d634c6" sha1="82f2d441ad8808376c9753889f3a4f64d298aa95" offset="0" status="baddump" />
680         </dataarea>
681      </part>
682      <part name="cass45" interface="mc1000_cass">
683         <feature name="part_id" value="Teste de aritmetica (ARIT)"/>
684         <dataarea name="cass" size="237500">
685            <rom name="mc1000_fita_50_programas_45_teste_de_aritmetica_arit.wav" size="237500" crc="e575db54" sha1="740ac672a2912df76df297ec85e393c6b24bc41e" offset="0" status="baddump" />
686         </dataarea>
687      </part>
688      <part name="cass46" interface="mc1000_cass">
689         <feature name="part_id" value="Grafico de funcoes (GRSI)"/>
690         <dataarea name="cass" size="343884">
691            <rom name="mc1000_fita_50_programas_46_grafico_de_funcoes_grsi.wav" size="343884" crc="d492eb00" sha1="cf61cc433711f4dd138df076ce37fd364ad85774" offset="0" status="baddump" />
692         </dataarea>
693      </part>
694      <part name="cass47" interface="mc1000_cass">
695         <feature name="part_id" value="Invasao das formigas (FORM)"/>
696         <dataarea name="cass" size="81452">
697            <rom name="mc1000_fita_50_programas_47_invasao_das_formigas_form.wav" size="81452" crc="2637f2ea" sha1="db4f01f47412f14a5fb8d4adc731d2e67c527b94" offset="0" status="baddump" />
698         </dataarea>
699      </part>
700      <part name="cass48" interface="mc1000_cass">
701         <feature name="part_id" value="Graficos simulados (GSIM)"/>
702         <dataarea name="cass" size="95724">
703            <rom name="mc1000_fita_50_programas_48_graficos_simulados_gsim.wav" size="95724" crc="ff2a8bde" sha1="9aa83ed550afa5de4eb3b7c565ca80475ce7a7d9" offset="0" status="baddump" />
704         </dataarea>
705      </part>
706      <part name="cass49" interface="mc1000_cass">
707         <feature name="part_id" value="Calculo de volumes (VOLM)"/>
708         <dataarea name="cass" size="745180">
709            <rom name="mc1000_fita_50_programas_49_calculo_de_volumes_volm.wav" size="745180" crc="2a680b2a" sha1="d18713b8aa7bac81559355457e6a1daa07e8cb3c" offset="0" status="baddump" />
710         </dataarea>
711      </part>
712      <part name="cass50" interface="mc1000_cass">
713         <feature name="part_id" value="Demo printer (IMPR)"/>
714         <dataarea name="cass" size="288876">
715            <rom name="mc1000_fita_50_programas_50_demo_printer_impr.wav" size="288876" crc="da769bbb" sha1="35ea4431c53a3e7f30ea8c8ad581d0005d80c99a" offset="0" status="baddump" />
716         </dataarea>
717      </part>
718   </software>
719
720   <software name="cursobas">
721      <description>Curso de BASIC</description>
722      <year>198?</year>
723      <publisher>CCE Soft</publisher>
724      <info name="usage" value="Load all programs with LOAD" />
725
726      <part name="cass1" interface="mc1000_cass">
727         <feature name="part_id" value="Side A Part 1"/>
728         <dataarea name="cass" size="1772988">
729            <rom name="mc1000_fita_curso_de_basic_1.wav" size="1772988" crc="7b42f631" sha1="1de0291dfd856da05f189065c6cae13f6ee34718" offset="0" />
730         </dataarea>
731      </part>
732      <part name="cass2" interface="mc1000_cass">
733         <feature name="part_id" value="Side A Part 2"/>
734         <dataarea name="cass" size="1626828">
735            <rom name="mc1000_fita_curso_de_basic_2.wav" size="1626828" crc="fef12eac" sha1="8dc428cb1c4c0d6cdeab356f7c5c8f6296422e98" offset="0" />
736         </dataarea>
737      </part>
738      <part name="cass3" interface="mc1000_cass">
739         <feature name="part_id" value="Side B Part 1"/>
740         <dataarea name="cass" size="1486428">
741            <rom name="mc1000_fita_curso_de_basic_3.wav" size="1486428" crc="26d63ca2" sha1="dfa4cababf20095cce4fbf5be11a3ae94322d49a" offset="0" />
742         </dataarea>
743      </part>
744      <part name="cass4" interface="mc1000_cass">
745         <feature name="part_id" value="Side B Part 2"/>
746         <dataarea name="cass" size="1177628">
747            <rom name="mc1000_fita_curso_de_basic_4.wav" size="1177628" crc="62a84f2c" sha1="7653cc92186de419b1cc4bb43e7b97704b6a0aac" offset="0" />
748         </dataarea>
749      </part>
750   </software>
751
752   <!-- Type-in BASIC programs -->
753
754   <!--
755   These programs were downloaded as .bas files, converted to .bin and then converted to .wav, thanks to the tools by Ensjo at
756   http://mc-1000.wikispaces.com/file/view/aplicativos-cassete-mc1000.zip/267884614/aplicativos-cassete-mc1000.zip (Requires Java)
757   -->
758
759<!--
760    <software name="amazing">
761        <description>Amazing</description>
762        <year>19??</year>
763        <publisher>&lt;type-in&gt;</publisher>
764
765        <part name="cass1" interface="mc1000_cass">
766            <dataarea name="cass" size="302892">
767                <rom name="amazing 2.wav" size="302892" crc="93239a52" sha1="ae135b159cb8246d8617097d3a239959ff9cb929" offset="0" />
768            </dataarea>
769        </part>
770        <part name="cass2" interface="mc1000_cass">
771            <dataarea name="cass" size="325164">
772                <rom name="amazing 3.wav" size="325164" crc="53bb3ffd" sha1="6066742b1e36f05887c3de7c0cdba3715e56d50c" offset="0" />
773            </dataarea>
774        </part>
775        <part name="cass3" interface="mc1000_cass">
776            <dataarea name="cass" size="232668">
777                <rom name="amazing.wav" size="232668" crc="9dec1422" sha1="33e5386fe8ef60cf5501b1891a30b36651761c6c" offset="0" />
778            </dataarea>
779        </part>
780    </software>
781
782    <software name="arquivo">
783        <description>Mostra Nome de Arquivo</description>
784        <year>19??</year>
785        <publisher>&lt;type-in&gt;</publisher>
786
787        <part name="cass1" interface="mc1000_cass">
788            <dataarea name="cass" size="68844">
789                <rom name="mostra nome de arquivo.wav" size="68844" crc="1dbd1e56" sha1="394f0e1f93b777329eae3c79314d352a84c84815" offset="0" />
790            </dataarea>
791        </part>
792    </software>
793
794    <software name="aventura">
795        <description>Aventura</description>
796        <year>19??</year>
797        <publisher>&lt;type-in&gt;</publisher>
798
799        <part name="cass1" interface="mc1000_cass">
800            <dataarea name="cass" size="702764">
801                <rom name="aventura.wav" size="702764" crc="82a6263b" sha1="834d9511e22f5c34244923108366201e82b89179" offset="0" />
802            </dataarea>
803        </part>
804    </software>
805
806    <software name="awari">
807        <description>Awari</description>
808        <year>19??</year>
809        <publisher>&lt;type-in&gt;</publisher>
810
811        <part name="cass1" interface="mc1000_cass">
812            <dataarea name="cass" size="216444">
813                <rom name="awari.wav" size="216444" crc="4e695eeb" sha1="daf34c61a385a6044f52d3b3a0fead5bc25786b6" offset="0" />
814            </dataarea>
815        </part>
816    </software>
817
818    <software name="boneco">
819        <description>Boneco Animado SG6</description>
820        <year>19??</year>
821        <publisher>&lt;type-in&gt;</publisher>
822
823        <part name="cass1" interface="mc1000_cass">
824            <dataarea name="cass" size="266668">
825                <rom name="boneco animado sg6.wav" size="266668" crc="066c1f17" sha1="d4ef4e152f892e8566c7a789dc591d9451e5bb73" offset="0" />
826            </dataarea>
827        </part>
828    </software>
829
830    <software name="capaesp">
831        <description>Capa e Espada</description>
832        <year>19??</year>
833        <publisher>&lt;type-in&gt;</publisher>
834
835        <part name="cass1" interface="mc1000_cass">
836            <dataarea name="cass" size="1224700">
837                <rom name="capa e espada alt.wav" size="1224700" crc="1b4ee35e" sha1="1d02c0bb984d83a14c170655c7c704e52bf5824a" offset="0" />
838            </dataarea>
839        </part>
840        <part name="cass2" interface="mc1000_cass">
841            <dataarea name="cass" size="1224028">
842                <rom name="capa e espada.wav" size="1224028" crc="6dfde138" sha1="6a6395381cf29111a5143a5bae5e517d8150277e" offset="0" />
843            </dataarea>
844        </part>
845    </software>
846
847    <software name="circulos">
848        <description>Circulos</description>
849        <year>19??</year>
850        <publisher>&lt;type-in&gt;</publisher>
851
852        <part name="cass1" interface="mc1000_cass">
853            <dataarea name="cass" size="176812">
854                <rom name="circulos.wav" size="176812" crc="402caaea" sha1="614201ff32f80c91bf433243bc046eee78e190bf" offset="0" />
855            </dataarea>
856        </part>
857    </software>
858
859    <software name="comecome">
860        <description>Come Come</description>
861        <year>19??</year>
862        <publisher>&lt;type-in&gt;</publisher>
863
864        <part name="cass1" interface="mc1000_cass">
865            <dataarea name="cass" size="290236">
866                <rom name="come come.wav" size="290236" crc="2aff8ec3" sha1="622bb22f427cf583064e943d02fe9a8a57d61d87" offset="0" />
867            </dataarea>
868        </part>
869    </software>
870
871    <software name="damas">
872        <description>Damas</description>
873        <year>19??</year>
874        <publisher>&lt;type-in&gt;</publisher>
875
876        <part name="cass1" interface="mc1000_cass">
877            <dataarea name="cass" size="333484">
878                <rom name="damas.wav" size="333484" crc="323edc1f" sha1="ad04c3568d598879f63e4a45a89270812bdcafe6" offset="0" />
879            </dataarea>
880        </part>
881    </software>
882
883    <software name="drawprnt">
884        <description>Draw Print</description>
885        <year>19??</year>
886        <publisher>&lt;type-in&gt;</publisher>
887
888        <part name="cass1" interface="mc1000_cass">
889            <dataarea name="cass" size="412892">
890                <rom name="draw print.wav" size="412892" crc="2e8b4101" sha1="0693a63c7a65a864c15dd899f3d4a4dfd31606f0" offset="0" />
891            </dataarea>
892        </part>
893    </software>
894
895    <software name="enginead">
896        <description>Engine para Adventures</description>
897        <year>19??</year>
898        <publisher>&lt;type-in&gt;</publisher>
899
900        <part name="cass1" interface="mc1000_cass">
901            <dataarea name="cass" size="757388">
902                <rom name="engine para adventures 2.wav" size="757388" crc="84577d7e" sha1="e34884828bd8902ae63c1d8b407035db25b102a5" offset="0" />
903            </dataarea>
904        </part>
905        <part name="cass2" interface="mc1000_cass">
906            <dataarea name="cass" size="615356">
907                <rom name="engine para adventures.wav" size="615356" crc="2b6aaeba" sha1="aec9b2ab7e82dd5884a352e20a04741640819ad1" offset="0" />
908            </dataarea>
909        </part>
910    </software>
911
912    <software name="explosao">
913        <description>Explosao</description>
914        <year>19??</year>
915        <publisher>&lt;type-in&gt;</publisher>
916
917        <part name="cass1" interface="mc1000_cass">
918            <dataarea name="cass" size="549964">
919                <rom name="explosao.wav" size="549964" crc="d231d3af" sha1="a3cce871efa9f8762257ac7ea47c71311f25920f" offset="0" />
920            </dataarea>
921        </part>
922    </software>
923
924    <software name="grafic3d">
925        <description>Graficos em 3D</description>
926        <year>19??</year>
927        <publisher>&lt;type-in&gt;</publisher>
928
929        <part name="cass1" interface="mc1000_cass">
930            <dataarea name="cass" size="161212">
931                <rom name="graficos em 3d 2.wav" size="161212" crc="2b66d72c" sha1="ae267b2e917c3aeaf2b509df396071a6391c03d7" offset="0" />
932            </dataarea>
933        </part>
934        <part name="cass2" interface="mc1000_cass">
935            <dataarea name="cass" size="312092">
936                <rom name="graficos em 3d 3.wav" size="312092" crc="25eeda66" sha1="66515ed2845ecbc2a2bfdc92ed2b014127d10424" offset="0" />
937            </dataarea>
938        </part>
939        <part name="cass3" interface="mc1000_cass">
940            <dataarea name="cass" size="108092">
941                <rom name="graficos em 3d.wav" size="108092" crc="2afb2dd1" sha1="b7712378f87b0aa442511f909cdf394fe3171c6a" offset="0" />
942            </dataarea>
943        </part>
944    </software>
945
946    <software name="hamurabi">
947        <description>Hamurabi</description>
948        <year>19??</year>
949        <publisher>&lt;type-in&gt;</publisher>
950
951        <part name="cass1" interface="mc1000_cass">
952            <dataarea name="cass" size="482092">
953                <rom name="hamurabi.wav" size="482092" crc="4d894a09" sha1="fc9bb4eb7cab0c544e623a7a1731910b824b8107" offset="0" />
954            </dataarea>
955        </part>
956    </software>
957
958    <software name="hanoisol">
959        <description>Hanoi Solucao Circular</description>
960        <year>19??</year>
961        <publisher>&lt;type-in&gt;</publisher>
962
963        <part name="cass1" interface="mc1000_cass">
964            <dataarea name="cass" size="216236">
965                <rom name="hanoi solucao circular.wav" size="216236" crc="14e1964f" sha1="f9676f8403faa2d8ba5c8aba657f9893e23d22ed" offset="0" />
966            </dataarea>
967        </part>
968    </software>
969
970    <software name="hgrpri64">
971        <description>HGR Print 64</description>
972        <year>19??</year>
973        <publisher>&lt;type-in&gt;</publisher>
974
975        <part name="cass1" interface="mc1000_cass">
976            <dataarea name="cass" size="276140">
977                <rom name="hgr print 64 2.wav" size="276140" crc="dc88eb54" sha1="bbbfaf25c591b1097132d1451b2960bd23374983" offset="0" />
978            </dataarea>
979        </part>
980        <part name="cass2" interface="mc1000_cass">
981            <dataarea name="cass" size="301228">
982                <rom name="hgr print 64.wav" size="301228" crc="e4eaf422" sha1="37438b2e26dec14809e020162bbc623b8977cdf5" offset="0" />
983            </dataarea>
984        </part>
985    </software>
986
987    <software name="hgrprint">
988        <description>HGR Print</description>
989        <year>19??</year>
990        <publisher>&lt;type-in&gt;</publisher>
991
992        <part name="cass1" interface="mc1000_cass">
993            <dataarea name="cass" size="368780">
994                <rom name="hgr print 10.wav" size="368780" crc="5bd47cbc" sha1="1066ee0728d9c0573852c67fec7c519e5f5906d6" offset="0" />
995            </dataarea>
996        </part>
997        <part name="cass2" interface="mc1000_cass">
998            <dataarea name="cass" size="391708">
999                <rom name="hgr print 11.wav" size="391708" crc="14453cfa" sha1="a8a3dfab558861f6a4cb49d7c423aaed1d323a4d" offset="0" />
1000            </dataarea>
1001        </part>
1002        <part name="cass3" interface="mc1000_cass">
1003            <dataarea name="cass" size="426332">
1004                <rom name="hgr print 12.wav" size="426332" crc="6119473b" sha1="81ec218a8500f6bfe51b06292ec0ba5051d39678" offset="0" />
1005            </dataarea>
1006        </part>
1007        <part name="cass4" interface="mc1000_cass">
1008            <dataarea name="cass" size="366204">
1009                <rom name="hgr print 2.wav" size="366204" crc="506c5a8d" sha1="a039a343bf749a234f86e53beae26533389f7c3f" offset="0" />
1010            </dataarea>
1011        </part>
1012        <part name="cass5" interface="mc1000_cass">
1013            <dataarea name="cass" size="358684">
1014                <rom name="hgr print 3.wav" size="358684" crc="d584a3b7" sha1="1baebe754cb88b4f9e349dafbf6d4ad38e517922" offset="0" />
1015            </dataarea>
1016        </part>
1017        <part name="cass6" interface="mc1000_cass">
1018            <dataarea name="cass" size="418188">
1019                <rom name="hgr print 4.wav" size="418188" crc="22d7d41e" sha1="9b981838a90f845cc466d1d83278e425e410b818" offset="0" />
1020            </dataarea>
1021        </part>
1022        <part name="cass7" interface="mc1000_cass">
1023            <dataarea name="cass" size="393452">
1024                <rom name="hgr print 5.wav" size="393452" crc="7eda4a84" sha1="8376c9cfec9fb4c7d33ef3fe3ed729bbce675ac1" offset="0" />
1025            </dataarea>
1026        </part>
1027        <part name="cass8" interface="mc1000_cass">
1028            <dataarea name="cass" size="406012">
1029                <rom name="hgr print 6.wav" size="406012" crc="a60b49c8" sha1="7f832fd22e5c4fef05e84fabfd3992e52964d1d3" offset="0" />
1030            </dataarea>
1031        </part>
1032        <part name="cass9" interface="mc1000_cass">
1033            <dataarea name="cass" size="424300">
1034                <rom name="hgr print 7.wav" size="424300" crc="9d6d5111" sha1="57e4f2ec6a5d3ff109e163185beb0b3065f1faf9" offset="0" />
1035            </dataarea>
1036        </part>
1037        <part name="cass10" interface="mc1000_cass">
1038            <dataarea name="cass" size="417916">
1039                <rom name="hgr print 8.wav" size="417916" crc="05ef09f7" sha1="2971eb0416a492be700bf5e405708e20a8e74a6f" offset="0" />
1040            </dataarea>
1041        </part>
1042        <part name="cass11" interface="mc1000_cass">
1043            <dataarea name="cass" size="392460">
1044                <rom name="hgr print 9.wav" size="392460" crc="0b6224d7" sha1="7dfeca391984c9472da335a465313ab99a864735" offset="0" />
1045            </dataarea>
1046        </part>
1047        <part name="cass12" interface="mc1000_cass">
1048            <dataarea name="cass" size="380460">
1049                <rom name="hgr print.wav" size="380460" crc="721f3a06" sha1="188669d5b1b193b5dd594bd6f91e638eba961547" offset="0" />
1050            </dataarea>
1051        </part>
1052    </software>
1053
1054    <software name="jogcobra">
1055        <description>Jogo da Cobra</description>
1056        <year>19??</year>
1057        <publisher>&lt;type-in&gt;</publisher>
1058
1059        <part name="cass1" interface="mc1000_cass">
1060            <dataarea name="cass" size="275756">
1061                <rom name="jogo da cobra.wav" size="275756" crc="cdbbfeb4" sha1="1a46b99a0ca5ab2b7bd59c84b08938bd7da035ff" offset="0" />
1062            </dataarea>
1063        </part>
1064    </software>
1065
1066    <software name="jogovida">
1067        <description>Jogo da Vida de Conway</description>
1068        <year>19??</year>
1069        <publisher>&lt;type-in&gt;</publisher>
1070
1071        <part name="cass1" interface="mc1000_cass">
1072            <dataarea name="cass" size="49100">
1073                <rom name="jogo da vida de conway 2.wav" size="49100" crc="58489ad6" sha1="515653094e106ccb7ca72a7a89b97da3e355813d" offset="0" />
1074            </dataarea>
1075        </part>
1076        <part name="cass2" interface="mc1000_cass">
1077            <dataarea name="cass" size="56028">
1078                <rom name="jogo da vida de conway 3.wav" size="56028" crc="6f45555d" sha1="be12200bf6cab01cdbe8115eefce2742d5b32662" offset="0" />
1079            </dataarea>
1080        </part>
1081        <part name="cass3" interface="mc1000_cass">
1082            <dataarea name="cass" size="190460">
1083                <rom name="jogo da vida de conway.wav" size="190460" crc="6c37aec8" sha1="8ab0749201923cb549ad6d791620c71125ae301a" offset="0" />
1084            </dataarea>
1085        </part>
1086    </software>
1087
1088    <software name="labirint">
1089        <description>Labirinto</description>
1090        <year>19??</year>
1091        <publisher>&lt;type-in&gt;</publisher>
1092
1093        <part name="cass1" interface="mc1000_cass">
1094            <dataarea name="cass" size="811724">
1095                <rom name="labirinto.wav" size="811724" crc="3faf8ebe" sha1="4c2fe02873ca1ecaf152d54aea9dd15c969f8022" offset="0" />
1096            </dataarea>
1097        </part>
1098    </software>
1099
1100    <software name="mazemake">
1101        <description>Maze Maker</description>
1102        <year>19??</year>
1103        <publisher>&lt;type-in&gt;</publisher>
1104
1105        <part name="cass1" interface="mc1000_cass">
1106            <dataarea name="cass" size="292716">
1107                <rom name="maze maker.wav" size="292716" crc="ac56c8e7" sha1="71a437a3a6018a247bd239187b70e0e39542dd1d" offset="0" />
1108            </dataarea>
1109        </part>
1110    </software>
1111
1112    <software name="minaouro">
1113        <description>Mina de Ouro</description>
1114        <year>19??</year>
1115        <publisher>&lt;type-in&gt;</publisher>
1116
1117        <part name="cass1" interface="mc1000_cass">
1118            <dataarea name="cass" size="492668">
1119                <rom name="mina de ouro.wav" size="492668" crc="606a0c7b" sha1="2f7ba270900ce9fe54ad2a3b94352bf2e2954b18" offset="0" />
1120            </dataarea>
1121        </part>
1122    </software>
1123
1124    <software name="modosvid">
1125        <description>Modos de Video</description>
1126        <year>19??</year>
1127        <publisher>&lt;type-in&gt;</publisher>
1128
1129        <part name="cass1" interface="mc1000_cass">
1130            <dataarea name="cass" size="227132">
1131                <rom name="modos de video.wav" size="227132" crc="5e349ed7" sha1="729b1d6e236e06c643d746c943252b703c044304" offset="0" />
1132            </dataarea>
1133        </part>
1134    </software>
1135
1136    <software name="simulvoo">
1137        <description>Simulador de Voo</description>
1138        <year>19??</year>
1139        <publisher>&lt;type-in&gt;</publisher>
1140
1141        <part name="cass1" interface="mc1000_cass">
1142            <dataarea name="cass" size="1003836">
1143                <rom name="simulador de voo.wav" size="1003836" crc="7de71c8f" sha1="d740c569144151a34f9facf3ef141990d433ece8" offset="0" />
1144            </dataarea>
1145        </part>
1146    </software>
1147
1148    <software name="startrek">
1149        <description>Star Trek</description>
1150        <year>19??</year>
1151        <publisher>&lt;type-in&gt;</publisher>
1152
1153        <part name="cass1" interface="mc1000_cass">
1154            <dataarea name="cass" size="832572">
1155                <rom name="star trek 1.wav" size="832572" crc="d233a4f9" sha1="76279157ef2923ca415b7143f624a16e00cfdc98" offset="0" />
1156            </dataarea>
1157        </part>
1158        <part name="cass2" interface="mc1000_cass">
1159            <dataarea name="cass" size="690828">
1160                <rom name="star trek 2.wav" size="690828" crc="1efb2f5d" sha1="22b3f1d4c1443908421cacf11fac9314a94c4725" offset="0" />
1161            </dataarea>
1162        </part>
1163    </software>
1164
1165    <software name="stevejob">
1166        <description>Foto de Steve Jobs</description>
1167        <year>19??</year>
1168        <publisher>&lt;type-in&gt;</publisher>
1169
1170        <part name="cass1" interface="mc1000_cass">
1171            <dataarea name="cass" size="901884">
1172                <rom name="foto de steve jobs.wav" size="901884" crc="5a4f54bf" sha1="a4ba646755008f2929f6530aeb5420b38ad730c7" offset="0" />
1173            </dataarea>
1174        </part>
1175    </software>
1176
1177    <software name="testacol">
1178        <description>Testa Color Artifacting</description>
1179        <year>19??</year>
1180        <publisher>&lt;type-in&gt;</publisher>
1181
1182        <part name="cass1" interface="mc1000_cass">
1183            <dataarea name="cass" size="161868">
1184                <rom name="testa color artifacting 2.wav" size="161868" crc="954256c2" sha1="3e65461e6d33e84d112326591f5d2476867be02f" offset="0" />
1185            </dataarea>
1186        </part>
1187        <part name="cass2" interface="mc1000_cass">
1188            <dataarea name="cass" size="141484">
1189                <rom name="testa color artifacting 3.wav" size="141484" crc="0ff96798" sha1="d10405573601ce67de539f414a6dae026ee3b378" offset="0" />
1190            </dataarea>
1191        </part>
1192        <part name="cass3" interface="mc1000_cass">
1193            <dataarea name="cass" size="165628">
1194                <rom name="testa color artifacting.wav" size="165628" crc="43f00cff" sha1="0c12c5ff98d230b46753b5aba896a050e10654a3" offset="0" />
1195            </dataarea>
1196        </part>
1197    </software>
1198
1199    <software name="travess">
1200        <description>Travessia</description>
1201        <year>19??</year>
1202        <publisher>&lt;type-in&gt;</publisher>
1203
1204        <part name="cass1" interface="mc1000_cass">
1205            <dataarea name="cass" size="407916">
1206                <rom name="travessia.wav" size="407916" crc="7bb5efde" sha1="fedb7691219b277461f4869917ddf357346adbb5" offset="0" />
1207            </dataarea>
1208        </part>
1209    </software>
1210
1211    <software name="viscass">
1212        <description>Visualiza Cassete</description>
1213        <year>19??</year>
1214        <publisher>&lt;type-in&gt;</publisher>
1215
1216        <part name="cass1" interface="mc1000_cass">
1217            <dataarea name="cass" size="52108">
1218                <rom name="visualiza cassete 2.wav" size="52108" crc="6030ad9a" sha1="04c1eca0be9cdb80437d09b9ce11758681acca4c" offset="0" />
1219            </dataarea>
1220        </part>
1221        <part name="cass2" interface="mc1000_cass">
1222            <dataarea name="cass" size="61516">
1223                <rom name="visualiza cassete.wav" size="61516" crc="97d7e459" sha1="7b386f40f1e90e508fd56c7eb6f8aa8ed58c1e22" offset="0" />
1224            </dataarea>
1225        </part>
1226    </software>
1227-->
1228</softwarelist>
trunk/hash/neogeo.xml
r242231r242232
435435            <rom loadflag="load16_word_swap" name="006-p1.p1" offset="0x000000" size="0x080000" crc="d4aaf597" sha1="34d35b71adb5bd06f4f1b50ffd9c58ab9c440a84" />
436436            <!-- MB834200 -->
437437         </dataarea>
438         <dataarea name="mcu" size="0x1000">
438         <dataarea name="mcu" size="0x2000">
439439            <!-- Hitachi HD6301V1 MCU -->
440            <!-- <rom name="hd6301v1p.com", 0x0000, 0x1000, NO_DUMP /> -->
440            <rom offset="0x000000" size="0x02000" name="rhcom.bin" crc="e5cd6306" sha1="f6bbb8ae562804d67e137290c765c3589fa334c0" />
441        <!-- dumped from a prototype with external ROM, not 100% confirmed as being the same on a final, or other games (lbowling, trally) -->
441442         </dataarea>
442443         <dataarea name="fixed" size="0x040000">
443444            <rom offset="0x000000" size="0x020000" name="006-s1.s1" crc="eb5189f0" sha1="0239c342ea62e73140a2306052f226226461a478" />
r242231r242232
487488            <rom loadflag="load16_word_swap" name="006-pg1.p1" offset="0x000000" size="0x080000" status="baddump" crc="52445646" sha1="647bb31f2f68453c1366cb6e2e867e37d1df7a54" />
488489            <!-- Chip label p1h does not exist, renamed temporarly to pg1, marked BAD_DUMP. This needs to be verified. -->
489490         </dataarea>
490         <dataarea name="mcu" size="0x1000">
491         <dataarea name="mcu" size="0x2000">
491492            <!-- Hitachi HD6301V1 MCU -->
492            <!-- <rom name="hd6301v1p.com", 0x0000, 0x1000, NO_DUMP /> -->
493            <rom offset="0x000000" size="0x02000" name="rhcom.bin" crc="e5cd6306" sha1="f6bbb8ae562804d67e137290c765c3589fa334c0" />
494        <!-- dumped from a prototype with external ROM, not 100% confirmed as being the same on a final, or other games (lbowling, trally) -->
493495         </dataarea>
494496         <dataarea name="fixed" size="0x040000">
495497            <rom offset="0x000000" size="0x020000" name="006-s1.s1" crc="eb5189f0" sha1="0239c342ea62e73140a2306052f226226461a478" />
r242231r242232
35663568            <!-- VIC940800 -->
35673569         </dataarea>
35683570         <dataarea name="fixed" size="0x040000">
3569            <rom offset="0x000000" size="0x020000" name="060-s1.s1" crc="7f012104" sha1="f366dcc3923655dff16ec08a40d5fce22a84257d" />
3571            <rom offset="0x000000" size="0x020000" name="060-s1.s1" crc="d62a72e9" sha1="a23e4c4fd4ec11a7467ce41227c418b4dd1ef649" />
35703572            <!-- VIC930100 -->
35713573         </dataarea>
35723574         <dataarea name="audiocpu" size="0x020000">
r242231r242232
36043606            <rom loadflag="load16_word_swap" name="060-p1.p1" offset="0x000000" size="0x100000" crc="2a104b50" sha1="3eb663d3df7074e1cdf4c0e450a35c9cf55d8979" />
36053607            <!-- VIC940800 -->
36063608            <!-- the rom below acts as a patch to the program rom in the cart, replacing the first 512kb -->
3607            <rom loadflag="load16_word_swap" name="060-epr.sp2"  offset="0x000000" size="0x080000" status="baddump" crc="3032041b" sha1="4b8ed2e6f74579ea35a53e06ccac42d6905b0f51" />
3608            <!-- P is on eprom, correct chip label unknown -->
3609            <rom loadflag="load16_word_swap" name="1.sp2"  offset="0x000000" size="0x080000" crc="3032041b" sha1="4b8ed2e6f74579ea35a53e06ccac42d6905b0f51" />
3610            <!-- P is on eprom, has a Viccom logo at the top of the label with a circled '1' in the center -->
36093611         </dataarea>
36103612         <dataarea name="fixed" size="0x040000">
3611            <rom offset="0x000000" size="0x020000" name="060-s1.s1" crc="7f012104" sha1="f366dcc3923655dff16ec08a40d5fce22a84257d" />
3613            <rom offset="0x000000" size="0x020000" name="060-s1.s1" crc="d62a72e9" sha1="a23e4c4fd4ec11a7467ce41227c418b4dd1ef649" />
36123614            <!-- VIC930100 -->
36133615         </dataarea>
36143616         <dataarea name="audiocpu" size="0x020000">
trunk/hash/nes.xml
r242231r242232
6096060960      </part>
6096160961   </software>
6096260962
60963<!-- Other two games forming the whole F-646 HIGH K Power Sports 4-in-1 were identical to original releases, so went undumped apparently -->
60964   <software name="goal5" cloneof="tecmowc">
60965      <description>Goal 5 Soccer (Ripped from F-646 HIGH K Power Sports 4-in-1)</description>
60966      <year>19??</year>
60967      <publisher>&lt;unknown&gt;</publisher>
60968      <part name="cart" interface="nes_cart">
60969         <feature name="slot" value="txrom" />
60970         <dataarea name="chr" size="65536">
60971            <rom name="goal 5 soccer (unl)[p1][!].chr" size="65536" crc="21e379ee" sha1="4401033269a88d484e6768550f152d3f0a204fd3" offset="00000" status="baddump" />
60972         </dataarea>
60973         <dataarea name="prg" size="65536">
60974            <rom name="goal 5 soccer (unl)[p1][!].prg" size="65536" crc="04005d22" sha1="74069b62dff0bc05708875cfc7693cb6fadfcd8a" offset="00000" status="baddump" />
60975         </dataarea>
60976      </part>
60977   </software>
60978
60979   <software name="hstar2" cloneof="f1hero2">
60980      <description>High Way Star II (Ripped from F-646 HIGH K Power Sports 4-in-1)</description>
60981      <year>19??</year>
60982      <publisher>&lt;unknown&gt;</publisher>
60983      <part name="cart" interface="nes_cart">
60984         <feature name="slot" value="txrom" />
60985         <dataarea name="chr" size="131072">
60986            <rom name="highway star ii (unl)[p1][!].chr" size="131072" crc="8fc24316" sha1="ed6bc1c4f5964b9dfc5146d35cfeebc844b6d488" offset="00000" status="baddump" />
60987         </dataarea>
60988         <dataarea name="prg" size="131072">
60989            <rom name="highway star ii (unl)[p1][!].prg" size="131072" crc="5a08b5c5" sha1="f7b317584fab6d62274021ff3dd3c7bd0d0a60f4" offset="00000" status="baddump" />
60990         </dataarea>
60991      </part>
60992   </software>
60993
6096360994   <software name="huoyansz">
6096460995      <description>Huo Yan Shi Zhe (Chi)</description>
6096560996      <year>19??</year>
r242231r242232
6109861129      </part>
6109961130   </software>
6110061131
61132   <software name="intcricka" cloneof="intcrick">
61133      <description>International Cricket (Pirate)</description>
61134      <year>200?</year>
61135      <publisher>&lt;pirate&gt;</publisher>
61136      <part name="cart" interface="nes_cart">
61137         <feature name="slot" value="txrom" />
61138         <dataarea name="chr" size="262144">
61139            <rom name="international cricket (unl).chr" size="262144" crc="75dcab42" sha1="72fb441639dca8a9afb60aa57cb896373033795b" offset="00000" status="baddump" />
61140         </dataarea>
61141         <dataarea name="prg" size="262144">
61142            <rom name="international cricket (unl).prg" size="262144" crc="ed2c3fa6" sha1="0b273dd380e0d36442d23c472c897ae8e04bb8e2" offset="00000" status="baddump" />
61143         </dataarea>
61144      </part>
61145   </software>
61146
61147<!-- the code has alse been modified to run as standalone -->
61148   <software name="intcrickb" cloneof="intcrick">
61149      <description>Brian Lara 2003 - International Cricket (Pirate, Alt, Ripped from Multicart)</description>
61150      <year>200?</year>
61151      <publisher>&lt;pirate&gt;</publisher>
61152      <part name="cart" interface="nes_cart">
61153         <feature name="slot" value="txrom" />
61154         <dataarea name="chr" size="262144">
61155            <rom name="international cricket (unl)(alt version)[f1].chr" size="262144" crc="a09bc9af" sha1="bb57acab0ba404521e06743488da396277b8ee38" offset="00000" status="baddump" />
61156         </dataarea>
61157         <dataarea name="prg" size="262144">
61158            <rom name="international cricket (unl)(alt version)[f1].prg" size="262144" crc="8bcb7111" sha1="188d02e77d126879419e76099288af88effb28a7" offset="00000" status="baddump" />
61159         </dataarea>
61160      </part>
61161   </software>
61162
6110161163   <software name="jgscs">
6110261164      <description>Jin Gwok Sei Chuen Saang (Chi)</description>
6110361165      <year>1990</year>
r242231r242232
7595376015      </part>
7595476016   </software>
7595576017
76018   <software name="mc_4fg">
76019      <description>Super 4-in-1 Fantasy Gun</description>
76020      <year>19??</year>
76021      <publisher>&lt;unknown&gt;</publisher>
76022      <part name="cart" interface="nes_cart">
76023         <feature name="slot" value="bmc_hik300" />
76024         <dataarea name="chr" size="65536">
76025            <rom name="super 4-in-1 fantasy gun [p1][!].chr" size="65536" crc="5516b3f9" sha1="bdbfef593273dd442aeaf38bb6c9b6dd80384c10" offset="00000" status="baddump" />
76026         </dataarea>
76027         <dataarea name="prg" size="131072">
76028            <rom name="super 4-in-1 fantasy gun [p1][!].prg" size="131072" crc="6fe4a699" sha1="82a65dabd598eff1154af48d17a45ccbb49cec4c" offset="00000" status="baddump" />
76029         </dataarea>
76030      </part>
76031   </software>
76032
7595676033   <software name="mc_4fk21" supported="no">
7595776034      <description>4 in 1 (FK23C8021)</description>
7595876035      <year>19??</year>
r242231r242232
7655076627      </part>
7655176628   </software>
7655276629
76630   <software name="mc_500" supported="no">
76631      <description>500 in 1</description>
76632      <year>19??</year>
76633      <publisher>&lt;pirate&gt;</publisher>
76634      <part name="cart" interface="nes_cart">
76635         <feature name="slot" value="bmc_hik300" />   <!-- mapper says 217 but it's not gc6in1 either! -->
76636         <dataarea name="chr" size="65536">
76637            <rom name="500-in-1 (anim splash, no rev, alt mapper)[p1][!].chr" size="65536" crc="25bdd64a" sha1="1f95eaf20fec9058b6917aa47dbdcec4b7a5b87d" offset="00000" status="baddump" />
76638         </dataarea>
76639         <dataarea name="prg" size="131072">
76640            <rom name="500-in-1 (anim splash, no rev, alt mapper)[p1][!].prg" size="131072" crc="23371b82" sha1="ca87f90300ed0f5cc66884cc994f05d9d888c3c2" offset="00000" status="baddump" />
76641         </dataarea>
76642      </part>
76643   </software>
76644
76645   <software name="mc_500a" supported="no">
76646      <description>500 in 1 (Alt)</description>
76647      <year>19??</year>
76648      <publisher>&lt;pirate&gt;</publisher>
76649      <part name="cart" interface="nes_cart">
76650         <feature name="slot" value="bmc_hik300" />   <!-- mapper says 217 but it's not gc6in1 either! -->
76651         <dataarea name="chr" size="65536">
76652            <rom name="500-in-1 (static splash, no rev, alt mapper)[p1][!].chr" size="65536" crc="e7dacb8a" sha1="ece1b9c7fd8be955a1df6c8505533b4fac194eeb" offset="00000" status="baddump" />
76653         </dataarea>
76654         <dataarea name="prg" size="131072">
76655            <rom name="500-in-1 (static splash, no rev, alt mapper)[p1][!].prg" size="131072" crc="ed2b09a7" sha1="68d1b5063a0126e9a07eba9be532276ba064f147" offset="00000" status="baddump" />
76656         </dataarea>
76657      </part>
76658   </software>
76659
7655376660   <software name="mc_50">
7655476661      <description>50 in 1</description>
7655576662      <year>19??</year>
r242231r242232
7676476871      </part>
7676576872   </software>
7676676873
76874   <software name="mc_6ky11" supported="partial">
76875      <description>Super 6-in-1 (KY-6011)</description>
76876      <year>19??</year>
76877      <publisher>&lt;unknown&gt;</publisher>
76878      <part name="cart" interface="nes_cart">
76879         <feature name="slot" value="fk23c" />
76880         <feature name="pcb" value="BMC-FK23C" />
76881         <dataarea name="chr" size="524288">
76882            <rom name="super 6-in-1 (ky-6011)[p1][!].chr" size="524288" crc="b1543694" sha1="c756a38ac84d8db59db39b60e37fbdfb8e74c180" offset="00000" status="baddump" />
76883         </dataarea>
76884         <dataarea name="prg" size="524288">
76885            <rom name="super 6-in-1 (ky-6011)[p1][!].prg" size="524288" crc="850a40cf" sha1="480b5ca7976955bc7cfc128d4303e5de2b419e41" offset="00000" status="baddump" />
76886         </dataarea>
76887      </part>
76888   </software>
76889
7676776890   <software name="mc_6m23" supported="no">
7676876891      <description>6 in 1 (MGC-023)</description>
7676976892      <year>19??</year>
r242231r242232
7740077523      </part>
7740177524   </software>
7740277525
77526   <software name="mc_9999a" supported="partial">
77527      <description>9999 in 1 (Alt)</description>
77528      <year>19??</year>
77529      <publisher>&lt;pirate&gt;</publisher>
77530      <part name="cart" interface="nes_cart">
77531         <feature name="slot" value="bmc_hik300" />
77532         <feature name="pcb" value="BMC-SUPERHIK-300IN1" />
77533         <dataarea name="chr" size="65536">
77534            <rom name="9999-in-1 (anim splash, rev 11)[p2][!].chr" size="65536" crc="5ee1cd6e" sha1="f896273a27a8efb92e2fdc4e95c30405d411d4df" offset="00000" status="baddump" />
77535         </dataarea>
77536         <dataarea name="prg" size="131072">
77537            <rom name="9999-in-1 (anim splash, rev 11)[p2][!].prg" size="131072" crc="183fdacb" sha1="350d53910c4bb2036cb7bfd741bc314b15f82cf5" offset="00000" status="baddump" />
77538         </dataarea>
77539      </part>
77540   </software>
77541
77542   <software name="mc_9999b" supported="partial">
77543      <description>9999 in 1 (Alt 2)</description>
77544      <year>19??</year>
77545      <publisher>&lt;pirate&gt;</publisher>
77546      <part name="cart" interface="nes_cart">
77547         <feature name="slot" value="bmc_hik300" />
77548         <feature name="pcb" value="BMC-SUPERHIK-300IN1" />
77549         <dataarea name="chr" size="65536">
77550            <rom name="9999-in-1 (anim splash, rev 12)[p2][!].chr" size="65536" crc="f3ba9c7c" sha1="8e52170e032c2462666e945116f03d973b2a66e1" offset="00000" status="baddump" />
77551         </dataarea>
77552         <dataarea name="prg" size="131072">
77553            <rom name="9999-in-1 (anim splash, rev 12)[p2][!].prg" size="131072" crc="33202b3e" sha1="a245fb8a895b4315764bab59c82658d849fd41dd" offset="00000" status="baddump" />
77554         </dataarea>
77555      </part>
77556   </software>
77557
7740377558   <software name="mc_9x7">
7740477559      <description>9999999 in 1</description>
7740577560      <year>19??</year>
r242231r242232
7741677571      </part>
7741777572   </software>
7741877573
77574   <software name="mc_9x7a" supported="no">
77575      <description>9999999 in 1 (Alt)</description>
77576      <year>19??</year>
77577      <publisher>&lt;pirate&gt;</publisher>
77578      <part name="cart" interface="nes_cart">
77579         <feature name="slot" value="bmc_hik300" />   <!-- mapper says 217 but it's not gc6in1 either! -->
77580         <dataarea name="chr" size="65536">
77581            <rom name="9999999-in-1 (static splash, no rev, alt mapper)[p1][!].chr" size="65536" crc="25bdd64a" sha1="1f95eaf20fec9058b6917aa47dbdcec4b7a5b87d" offset="00000" status="baddump" />
77582         </dataarea>
77583         <dataarea name="prg" size="131072">
77584            <rom name="9999999-in-1 (static splash, no rev, alt mapper)[p1][!].prg" size="131072" crc="ed2b09a7" sha1="68d1b5063a0126e9a07eba9be532276ba064f147" offset="00000" status="baddump" />
77585         </dataarea>
77586      </part>
77587   </software>
77588
77589   <software name="mc_9x7b">
77590      <description>9999999 in 1 (Alt 2)</description>
77591      <year>19??</year>
77592      <publisher>&lt;pirate&gt;</publisher>
77593      <part name="cart" interface="nes_cart">
77594         <feature name="slot" value="bmc_hik300" />
77595         <feature name="pcb" value="BMC-SUPERHIK-300IN1" />
77596         <dataarea name="chr" size="65536">
77597            <rom name="9999999-in-1 (static splash, rev 10)[p1].chr" size="65536" crc="9b6e8be7" sha1="4c53a3d5e510c4355041b9ad88f1e633ce85f916" offset="00000" status="baddump" />
77598         </dataarea>
77599         <dataarea name="prg" size="131072">
77600            <rom name="9999999-in-1 (static splash, rev 10)[p1].prg" size="131072" crc="00a0d43b" sha1="88f4b987bedfd6c8d5131a2abab26b185b052a21" offset="00000" status="baddump" />
77601         </dataarea>
77602      </part>
77603   </software>
77604
7741977605   <software name="mc_brain" supported="no">
7742077606      <description>Brain Series 13 in 1</description>
7742177607      <year>19??</year>
r242231r242232
7831678502      </part>
7831778503   </software>
7831878504
78505   <software name="mc_sh300o" cloneof="mc_sh300">
78506      <description>Super HIK 300 in 1 1993</description>
78507      <year>19??</year>
78508      <publisher>&lt;pirate&gt;</publisher>
78509      <part name="cart" interface="nes_cart">
78510         <feature name="slot" value="bmc_hik300" />
78511         <feature name="pcb" value="BMC-SUPERHIK-300IN1" />
78512         <dataarea name="chr" size="65536">
78513            <rom name="1993 super hik 300-in-1 (anim splash, protected, no rev)[p1][!].chr" size="65536" crc="4b5299dd" sha1="5da2c66a289e65ef3c4af25d23b5cd5739762616" offset="00000" status="baddump" />
78514         </dataarea>
78515         <dataarea name="prg" size="131072">
78516            <rom name="1993 super hik 300-in-1 (anim splash, protected, no rev)[p1][!].prg" size="131072" crc="65d87329" sha1="b75f12fda544d30dafb477908acd9d29b2af91f0" offset="00000" status="baddump" />
78517         </dataarea>
78518      </part>
78519   </software>
78520
7831978521   <software name="mc_sh4a">
7832078522      <description>Super HIK 4 in 1 (S4020)</description>
7832178523      <year>19??</year>
r242231r242232
7898179183         <feature name="slot" value="onebus" />
7898279184         <feature name="pcb" value="UNL-OneBus" />
7898379185         <dataarea name="prg" size="4194304">
78984            <rom name="ic1.prg" size="4194304" crc="de76f71f" sha1="ff6b37a76c6463af7ae901918fc008b4a2863951" offset="0" status="baddump" />
79186            <rom name="ic1.prg" size="4194304" crc="de76f71f" sha1="ff6b37a76c6463af7ae901918fc008b4a2863951" offset="0" />
7898579187         </dataarea>
7898679188         <!-- 8k VRAM on cartridge -->
7898779189         <dataarea name="vram" size="8192">
r242231r242232
7899779199         <feature name="slot" value="onebus" />
7899879200         <feature name="pcb" value="UNL-OneBus" />
7899979201         <dataarea name="prg" size="4194304">
79000            <rom name="ic1_ver2.prg" size="4194304" crc="b97a0dc7" sha1="bace32d73184df914113de5336e29a7a6f4c03fa" offset="0" status="baddump" />
79202            <rom name="ic1_ver2.prg" size="4194304" crc="b97a0dc7" sha1="bace32d73184df914113de5336e29a7a6f4c03fa" offset="0" />
7900179203         </dataarea>
7900279204         <!-- 8k VRAM on cartridge -->
7900379205         <dataarea name="vram" size="8192">
r242231r242232
7900579207      </part>
7900679208   </software>
7900779209
79210<!-- CoolBoy AEF-390 8bit Console, B8VPCBVer03 20130703 0401E2015897A -->
79211   <software name="mc_8x6cb" supported="no">
79212      <description>888888 in 1 (Coolboy AEF-390)</description>
79213      <year>19??</year>
79214      <publisher>&lt;unknown&gt;</publisher>
79215      <part name="cart" interface="nes_cart">
79216         <feature name="slot" value="onebus" />
79217         <feature name="pcb" value="UNL-OneBus" />
79218         <dataarea name="prg" size="4194304">
79219            <rom name="888888-in-1 (coolboy aef-390 8bit console, b8vpcbver03 20130703 0401e2015897a)(unl)[u][!].prg" size="4194304" crc="ca4bd948" sha1="cfd6c0b03bb432de43d070100031b223c9ee7496" offset="00000" status="baddump" />
79220         </dataarea>
79221         <!-- 8k VRAM on cartridge -->
79222         <dataarea name="vram" size="8192">
79223         </dataarea>
79224      </part>
79225   </software>
7900879226
79227<!-- PXP2 8Bit Slim Station -->
79228   <software name="mc_9x6ss" supported="no">
79229      <description>999999 in 1 (PXP2 Slim Station)</description>
79230      <year>19??</year>
79231      <publisher>&lt;unknown&gt;</publisher>
79232      <part name="cart" interface="nes_cart">
79233         <feature name="slot" value="onebus" />
79234         <feature name="pcb" value="UNL-OneBus" />
79235         <dataarea name="prg" size="4194304">
79236            <rom name="s29gl032.u3" size="4194304" crc="9f4194e8" sha1="bd2a356aea56188ea78169095cbbe603d00e0063" offset="00000" />
79237         </dataarea>
79238         <!-- 8k VRAM on cartridge -->
79239         <dataarea name="vram" size="8192">
79240         </dataarea>
79241      </part>
79242   </software>
79243
79244
7900979245   <software name="mc_gx121" supported="no">
7901079246      <description>Games Xplosion 121 in 1</description>
7901179247      <year>19??</year>
trunk/hash/osborne1.xml
r242231r242232
11<?xml version="1.0"?>
22<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
3
34<softwarelist name="osborne1" description="Osborne-1 floppies">
45
5   <software name="osmosis" supported="no"><!-- boot error -->
6      <description>Osmosis CP/M Disk Emulation System v1.0</description>
7      <year>1983</year>
8      <publisher>Osmosis Computer</publisher>
9      <info name="release" value="198303??"/>
10      <part name="flop1" interface="floppy_5_25">
11         <feature name="disk_serial" value="1690" />
12         <feature name="disk_label" value="Osmosis CP/M Disk Emulation System for the Osborne 1 Microcomputer" />
13         <dataarea name="flop" size="3154">
14            <rom name="osmo-emu.td0" size="3154" crc="5040c443" sha1="49fc78621b7a9356ebe9ed88fe8ceb1dd9befdbf" offset="0" />
15         </dataarea>
16      </part>
17   </software>
18
19   <software name="dddist" supported="no"><!-- boot error -->
20      <description>Double Density Distribution v1.4</description>
6   <software name="amcall">
7      <description>AMCALL (v2.06)</description>
218      <year>1982</year>
22      <publisher>Osmosis Computer</publisher>
23      <info name="release" value="198210??"/>
9      <publisher>MicroCALL Services</publisher>
2410      <part name="flop1" interface="floppy_5_25">
25         <feature name="disk_serial" value="2121" />
26         <feature name="disk_label" value="Double Density Distribution" />
27         <dataarea name="flop" size="834">
28            <rom name="osmos-dd.td0" size="834" crc="8b47a452" sha1="1a4746512678b498dce28f28f96396ba31043ccc" offset="0" />
29         </dataarea>
30      </part>
31   </software>
32
33   <software name="rt60a" supported="no"><!-- boot error -->
34      <description>RT-60A Real Time Clock Software v2.7</description><!-- for the RT-60A Real Time Clock, rom dump needed -->
35      <year>19??</year>
36      <publisher>JG Communications</publisher>
37      <part name="flop1" interface="floppy_5_25">
38         <feature name="disk_label" value="RT-60A Software" />
39         <dataarea name="flop" size="13793">
40            <rom name="rt-60a.td0" size="13793" crc="241b2497" sha1="1385701061152202db14550f1aad6cd4b190286f" offset="0" />
41         </dataarea>
42      </part>
43   </software>
44
45   <software name="amcall" supported="no">
46      <description>Auto MicroCALL Communications Program</description>
47      <year>1982</year>
48      <publisher>MicroCALL SERVICES</publisher>
49      <part name="flop1" interface="floppy_5_25">
5011         <dataarea name="flop" size="40392">
5112            <rom name="os1mcal.td0" size="40392" crc="ee61a8e9" sha1="1ad5d000e1865ebf7118cbd2fbeee581b3ad226f" offset="0" />
5213         </dataarea>
5314      </part>
5415   </software>
5516
56   <software name="amcalla" cloneof="amcall" supported="no"><!-- boot error -->
57      <description>AMCALL v2.06 (Alt)</description>
17   <software name="amcalla" cloneof="amcall">
18      <description>AMCALL (v2.06, Alt)</description>
5819      <year>1982</year>
5920      <publisher>MicroCALL Services</publisher>
21      <info name="usage" value="Requires CP/M disk in drive A"/>
6022      <part name="flop1" interface="floppy_5_25">
6123         <feature name="disk_serial" value="1113" />
6224         <feature name="part_number" value="2B50002-00" />
r242231r242232
7941      </part>
8042   </software>
8143
82   <software name="mileston" supported="no"><!-- boot error -->
83      <description>Milestone v1.09</description>
44   <software name="mileston">
45      <description>Milestone (Rev 1.09)</description>
8446      <year>1981</year>
8547      <publisher>Organic Software</publisher>
48      <info name="usage" value="Requires CP/M disk in drive A"/>
8649      <part name="flop1" interface="floppy_5_25">
8750         <feature name="disk_serial" value="302997" />
8851         <feature name="part_number" value="2G011501-00" />
r242231r242232
9962      </part>
10063   </software>
10164
102   <software name="interrog" supported="no"><!-- boot error -->
65   <software name="interrog">
10366      <description>Interrogator</description>
10467      <year>1984</year>
10568      <publisher>Dysan</publisher>
69      <info name="usage" value="Requires CP/M disk in drive A"/>
10670      <part name="flop1" interface="floppy_5_25">
10771         <feature name="disk_label" value="Drive Diagnostic Program" />
10872         <dataarea name="flop" size="35037">
r242231r242232
11175      </part>
11276   </software>
11377
114   <software name="microlnk" supported="no"><!-- boot error -->
115      <description>The Micro Link</description>
78   <software name="microlnk">
79      <description>The Micro Link (v2.3)</description>
11680      <year>1981</year>
11781      <publisher>Wordcraft</publisher>
82      <info name="usage" value="Requires CP/M disk in drive A"/>
11883      <part name="flop1" interface="floppy_5_25">
11984         <feature name="disk_serial" value="000835" />
12085         <dataarea name="flop" size="6835">
r242231r242232
12388      </part>
12489   </software>
12590
126   <software name="diag" supported="no"><!-- Bdos Err on A: Select -->
127      <description>Diagnostics?</description>
91   <software name="sysconf">
92      <description>Osborne-1 System Confidence Test (v2.04)</description>
12893      <year>19??</year>
12994      <publisher>&lt;unknown&gt;</publisher>
13095      <part name="flop1" interface="floppy_5_25">
r242231r242232
13499      </part>
135100   </software>
136101
137   <software name="sysconf" supported="no"><!-- cpm plus formatted? -->
138      <description>Osborne-1 System Confidence Test v2.00</description>
102   <software name="sysconfa" cloneof="sysconf">
103      <description>Osborne-1 System Confidence Test (v2.04, Alt)</description>
139104      <year>19??</year>
140105      <publisher>&lt;unknown&gt;</publisher>
106      <info name="usage" value="Requires CP/M disk in drive A"/>
141107      <part name="flop1" interface="floppy_5_25">
108         <dataarea name="flop" size="46760">
109            <rom name="os1dias.td0" size="46760" crc="04b4bec8" sha1="d764df88e9f18ca67823f41797bd536e2d4cc606" offset="0" />
110         </dataarea>
111      </part>
112   </software>
113
114   <software name="sysconfb" cloneof="sysconf" supported="no"> <!-- cpm plus formatted? -->
115      <description>Osborne-1 System Confidence Test (v2.00)</description>
116      <year>19??</year>
117      <publisher>&lt;unknown&gt;</publisher>
118      <part name="flop1" interface="floppy_5_25">
142119         <dataarea name="flop" size="26436">
143120            <rom name="occ1_diag_2.1.imd" size="26436" crc="5bbc80d5" sha1="0e481b668e689ad47910f7e90b1371a416954758" offset="0" />
144121         </dataarea>
145122      </part>
146123   </software>
147124
148   <software name="cpm">
149      <description>CP/M for Osborne I v2.20</description>
125   <software name="actcpm">
126      <description>60K CP/M vers 2.20 for Osborne </description>
150127      <year>19??</year>
151128      <publisher>Australian Computer &amp; Telecommunications</publisher>
152129      <part name="flop1" interface="floppy_5_25">
r242231r242232
156133      </part>
157134   </software>
158135
159   <software name="basic" supported="no">
160      <description>Osborne 1 BASIC</description>
136   <software name="basic80">
137      <description>BASIC-80 (Rev. 5.21)</description>
161138      <year>1981</year>
162139      <publisher>Microsoft</publisher>
163140      <info name="release" value="19810529"/>
r242231r242232
168145      </part>
169146   </software>
170147
171   <software name="dbase2" supported="no">
172      <description>dBase II</description>
148   <software name="dbase2">
149      <description>dBase II (v2.3)</description>
173150      <year>1982</year>
174151      <publisher>&lt;unknown&gt;</publisher>
175152      <info name="release" value="19820106"/>
176      <info name="version" value="2.3" />
177153      <part name="flop1" interface="floppy_5_25">
178154         <dataarea name="flop" size="56706">
179155            <rom name="os1dbase.td0" size="56706" crc="1266f67c" sha1="641c271af3681a00e7a2750e20d7fabcaa5adb9f" offset="0" />
r242231r242232
181157      </part>
182158   </software>
183159
184   <software name="conftest" supported="no">
185      <description>Osbourne 1 System Confidence Test</description>
186      <year>19??</year>
187      <publisher>&lt;unknown&gt;</publisher>
188      <part name="flop1" interface="floppy_5_25">
189         <dataarea name="flop" size="46760">
190            <rom name="os1dias.td0" size="46760" crc="04b4bec8" sha1="d764df88e9f18ca67823f41797bd536e2d4cc606" offset="0" />
191         </dataarea>
192      </part>
193   </software>
194
195   <software name="mdm740" supported="no">
160   <software name="mdm740">
196161      <description>MDM740 modem program</description>
197      <year>1985</year>
162      <year>1984</year>
198163      <publisher>&lt;unknown&gt;</publisher>
199164      <info name="programmer" value="Irvin M. Hoff"/>
200165      <part name="flop1" interface="floppy_5_25">
r242231r242232
204169      </part>
205170   </software>
206171
207   <software name="sysdisku" cloneof="sysdisk" supported="no">
208      <description>Osborne 1 System Disk (upgrade rom?)</description>
209      <year>19??</year>
210      <publisher>&lt;unknown&gt;</publisher>
172   <software name="cpm22">
173      <description>60k CP/M v2.2</description>
174      <year>1981</year>
175      <publisher>Digital Research</publisher>
211176      <part name="flop1" interface="floppy_5_25">
212         <dataarea name="flop" size="57670">
213            <rom name="os1sysd.td0" size="57670" crc="8b67b9cc" sha1="ab49f0ed731e197940b46bf79c6536a9f622d3bb" offset="0" />
177         <dataarea name="flop" size="49640">
178            <rom name="os1syss.td0" size="49640" crc="47fcb5a7" sha1="287c56f0083303768eea526c98a098b04f0749be" offset="0" />
214179         </dataarea>
215180      </part>
216181   </software>
217182
218   <software name="sysdisk" supported="no">
219      <description>Osborne 1 System Disk</description>
220      <year>19??</year>
221      <publisher>&lt;unknown&gt;</publisher>
183   <software name="cpm22a" cloneof="cpm22">
184      <description>60k CP/M v2.2 (Alt)</description>
185      <year>1981</year>
186      <publisher>Digital Research</publisher>
222187      <part name="flop1" interface="floppy_5_25">
223         <dataarea name="flop" size="49640">
224            <rom name="os1syss.td0" size="49640" crc="47fcb5a7" sha1="287c56f0083303768eea526c98a098b04f0749be" offset="0" />
188         <dataarea name="flop" size="57670">
189            <rom name="os1sysd.td0" size="57670" crc="8b67b9cc" sha1="ab49f0ed731e197940b46bf79c6536a9f622d3bb" offset="0" />
225190         </dataarea>
226191      </part>
227192   </software>
228193
229   <software name="utils" supported="no">
194   <software name="utils">
230195      <description>Utilities</description>
231196      <year>19??</year>
232197      <publisher>&lt;unknown&gt;</publisher>
r242231r242232
237202      </part>
238203   </software>
239204
240   <software name="xutils" supported="no">
241      <description>Extended Utilities</description><!-- Bdos Err on A: Select -->
205   <software name="xutils">
206      <description>Extended Utilities</description>
242207      <year>19??</year>
243208      <publisher>&lt;unknown&gt;</publisher>
209      <info name="usage" value="Requires CP/M disk in drive A"/>
244210      <part name="flop1" interface="floppy_5_25">
245211         <dataarea name="flop" size="35382">
246212            <rom name="os1xutls.td0" size="35382" crc="630d7091" sha1="a8bc164cf8cb4f5fba49422ac10447ecacbb60dd" offset="0" />
r242231r242232
248214      </part>
249215   </software>
250216
251   <software name="wordstar" supported="no">
252      <description>Wordstar</description>
217   <software name="wordstar">
218      <description>Wordstar (rel. 2.26)</description>
253219      <year>1981</year>
254220      <publisher>Micropro International</publisher>
255221      <part name="flop1" interface="floppy_5_25">
r242231r242232
259225      </part>
260226   </software>
261227
262   <software name="blank" supported="no">
228   <software name="blank">
263229      <description>Osborne 1 blank disk</description>
264230      <year>19??</year>
265231      <publisher>&lt;unknown&gt;</publisher>
r242231r242232
269235         </dataarea>
270236      </part>
271237   </software>
238
239   <!-- how are these used? maybe they are bad dumps? -->
240
241   <software name="osmosis" supported="no">
242      <description>Osmosis CP/M Disk Emulation System (v1.0)</description>
243      <year>1983</year>
244      <publisher>Osmosis Computer</publisher>
245      <info name="release" value="198303??"/>
246
247      <part name="flop1" interface="floppy_5_25">
248         <feature name="disk_serial" value="1690" />
249         <feature name="disk_label" value="Osmosis CP/M Disk Emulation System for the Osborne 1 Microcomputer" />
250         <dataarea name="flop" size="3154">
251            <rom name="osmo-emu.td0" size="3154" crc="5040c443" sha1="49fc78621b7a9356ebe9ed88fe8ceb1dd9befdbf" offset="0" />
252         </dataarea>
253      </part>
254   </software>
255
256   <software name="dddist" supported="no">
257      <description>Double Density Distribution (v1.4)</description>
258      <year>1982</year>
259      <publisher>Osmosis Computer</publisher>
260      <info name="release" value="198210??"/>
261
262      <part name="flop1" interface="floppy_5_25">
263         <feature name="disk_serial" value="2121" />
264         <feature name="disk_label" value="Double Density Distribution" />
265         <dataarea name="flop" size="834">
266            <rom name="osmos-dd.td0" size="834" crc="8b47a452" sha1="1a4746512678b498dce28f28f96396ba31043ccc" offset="0" />
267         </dataarea>
268      </part>
269   </software>
270
271   <software name="rt60a" supported="no">
272      <description>RT-60A Real Time Clock Software (v2.7)</description>   <!-- for the RT-60A Real Time Clock, rom dump needed -->
273      <year>19??</year>
274      <publisher>JG Communications</publisher>
275      <part name="flop1" interface="floppy_5_25">
276         <feature name="disk_label" value="RT-60A Software" />
277         <dataarea name="flop" size="13793">
278            <rom name="rt-60a.td0" size="13793" crc="241b2497" sha1="1385701061152202db14550f1aad6cd4b190286f" offset="0" />
279         </dataarea>
280      </part>
281   </software>
282
272283</softwarelist>
No newline at end of file
trunk/hash/psx.xml
r242231r242232
11191119      </part>
11201120   </software>
11211121
1122   <!-- boot ok -->
1123   <software name="akagawaj" supported="no">
1124      <description>Akagawa Jirou - Yasoukyoku 2 (Japan)</description>
1125      <year>2001</year>
1126      <publisher>Victor</publisher>
1127      <info name="alt_title" value="夜想曲2"/>
1128      <info name="serial" value="SLPS-03213" />
1129      <sharedfeat name="compatibility" value="NTSC-J"/>
1130      <part name="cdrom" interface="psx_cdrom">
1131         <diskarea name="cdrom">
1132            <disk name="akagawa jirou - yasoukyoku 2 (japan) [slps-03213]" sha1="2469c7c6d8d69835aae534b91c59b03aa4d2dd96"/>
1133         </diskarea>
1134      </part>
1135   </software>
1136
11221137   <software name="alabamaj" supported="no">
11231138      <description>Pop de Cute na Shinri Test - Alabama (Japan)</description>
11241139      <year>2000</year>
r242231r242232
27972812   <software name="chikichi" supported="no">
27982813      <description>Chiki Chiki Machine Mou Race - Wacky Races (Japan)</description>
27992814      <year>2001</year>
2800      <publisher>Hudson / Infogrames</publisher>
2815      <publisher>Hudson&#47;Infogrames</publisher>
28012816      <info name="alt_title" value="ドタバタ爆笑レースゲーム チキチキマシン猛レース"/>
28022817      <info name="serial" value="SLPM-86845" />
28032818      <sharedfeat name="compatibility" value="NTSC-J"/>
r242231r242232
88758890      </part>
88768891   </software>
88778892
8893   <software name="nankuro" supported="no">
8894      <description>Nankuro (SuperLite 1500 Series) (Japan)</description>
8895      <year>1999</year>
8896      <publisher>Success</publisher>
8897      <info name="alt_title" value="SuperLite1500 EXTRAシリーズ Vol.2 ナンクロ"/>
8898      <info name="serial" value="SLPS-02067" />
8899      <sharedfeat name="compatibility" value="NTSC-J"/>
8900      <part name="cdrom" interface="psx_cdrom">
8901         <diskarea name="cdrom">
8902            <disk name="superlite 1500 extra series vol.02 - nankuro (japan) [slps-02067]" sha1="8f17ac2169a351af67437fd79cfd66a13e51062e"/>
8903         </diskarea>
8904      </part>
8905   </software>
8906
88788907   <!-- missing Disc 2? -->
88798908   <software name="natsuiro" supported="no">
88808909      <description>Natsuiro Kenjutsu Komachi (Limited Edition) (Japan) (Disc 1 Only)</description>
r242231r242232
94789507
94799508   <software name="pacapaca" supported="no">
94809509      <description>Pacapaca Passion (Japan)</description>
9481      <year>199?</year>
9482      <publisher>&lt;unknown&gt;</publisher>
9510      <year>1999</year>
9511      <publisher>Produce!</publisher>
9512      <info name="alt_title" value="パカパカパッション"/>
94839513      <info name="serial" value="SLPS-02122" />
94849514      <sharedfeat name="compatibility" value="NTSC-J"/>
94859515      <part name="cdrom" interface="psx_cdrom">
r242231r242232
94919521
94929522   <software name="pacapac2" supported="no">
94939523      <description>Pacapaca Passion 2 (Japan)</description>
9494      <year>199?</year>
9495      <publisher>&lt;unknown&gt;</publisher>
9524      <year>2000</year>
9525      <publisher>Produce!</publisher>
9526      <info name="alt_title" value="パカパカパッション2"/>
94969527      <info name="serial" value="SLPS-02720" />
94979528      <sharedfeat name="compatibility" value="NTSC-J"/>
94989529      <part name="cdrom" interface="psx_cdrom">
r242231r242232
95049535
95059536   <software name="pachipac" supported="no">
95069537      <description>Pachi Pachi Saga (Japan)</description>
9507      <year>199?</year>
9508      <publisher>&lt;unknown&gt;</publisher>
9538      <year>1996</year>
9539      <publisher>TEN Institute</publisher>
9540      <info name="alt_title" value="パチパチサーガ"/>
95099541      <info name="serial" value="SLPS-00288" />
95109542      <sharedfeat name="compatibility" value="NTSC-J"/>
95119543      <part name="cdrom" interface="psx_cdrom">
r242231r242232
95169548   </software>
95179549
95189550   <software name="psao5" supported="no">
9519      <description>Pachi-Slot Aruze Oukoku 5 (Japan)</description>
9520      <year>199?</year>
9521      <publisher>&lt;unknown&gt;</publisher>
9551      <description>Pachi-Slot Aruze Oukoku 5 - Slotmachine Simulator (Japan)</description>
9552      <year>2001</year>
9553      <publisher>Aruze</publisher>
9554      <info name="alt_title" value="パチスロ アルゼ王国5"/>
95229555      <info name="serial" value="SLPS-03280" />
95239556      <sharedfeat name="compatibility" value="NTSC-J"/>
95249557      <part name="cdrom" interface="psx_cdrom">
r242231r242232
95309563
95319564   <software name="pstbk" supported="no">
95329565      <description>Pachi-Slot Teiou - Battle Knight &amp; Atlantis Doom (Japan)</description>
9533      <year>199?</year>
9534      <publisher>&lt;unknown&gt;</publisher>
9566      <year>2000</year>
9567      <publisher>Media</publisher>
9568      <info name="alt_title" value="パチスロ帝王〜バトルナイト・アトランチスドーム〜"/>
95359569      <info name="serial" value="SLPS-03108" />
95369570      <sharedfeat name="compatibility" value="NTSC-J"/>
95379571      <part name="cdrom" interface="psx_cdrom">
r242231r242232
95429576   </software>
95439577
95449578   <software name="pststwis" supported="no">
9545      <description>Pachi-Slot Teiou - Shimauta-30 - Twiste - Nangoku Monogarari-30 (Japan)</description>
9546      <year>199?</year>
9547      <publisher>&lt;unknown&gt;</publisher>
9579      <description>Pachi-Slot Teiou - Twist - Shimauta 30 - Nankoku Monogatari (Japan)</description>
9580      <year>2002</year>
9581      <publisher>Media</publisher>
9582      <info name="alt_title" value="パチスロ帝王〜島唄-30・ツイスト・南国物語-30〜"/>
95489583      <info name="serial" value="SLPS-03442" />
95499584      <sharedfeat name="compatibility" value="NTSC-J"/>
95509585      <part name="cdrom" interface="psx_cdrom">
r242231r242232
95559590   </software>
95569591
95579592   <software name="pst2" supported="no">
9558      <description>Pachi-Slot Teiou 2 (Japan)</description>
9559      <year>199?</year>
9560      <publisher>&lt;unknown&gt;</publisher>
9593      <description>Pachi-Slot Teiou 2 - Kagetsu - 2 Pair - Beaver X (Japan)</description>
9594      <year>1999</year>
9595      <publisher>Mecko</publisher>
9596      <info name="alt_title" value="パチスロ帝王II 花月・ツーペア・マイマイ"/>
95619597      <info name="serial" value="SLPS-02217" />
95629598      <sharedfeat name="compatibility" value="NTSC-J"/>
95639599      <part name="cdrom" interface="psx_cdrom">
r242231r242232
95689604   </software>
95699605
95709606   <software name="pst3" supported="no">
9571      <description>Pachi-Slot Teiou 3 (Japan)</description>
9572      <year>199?</year>
9573      <publisher>&lt;unknown&gt;</publisher>
9607      <description>Pachi-Slot Teiou 3 - Sea Master - Epsilon R - Wai Wai Pulsa (Japan)</description>
9608      <year>1999</year>
9609      <publisher>Media</publisher>
9610      <info name="alt_title" value="パチスロ帝王3"/>
95749611      <info name="serial" value="SLPS-02413" />
95759612      <sharedfeat name="compatibility" value="NTSC-J"/>
95769613      <part name="cdrom" interface="psx_cdrom">
r242231r242232
95819618   </software>
95829619
95839620   <software name="pst6" supported="no">
9584      <description>Pachi-Slot Teiou 6 (Japan)</description>
9585      <year>199?</year>
9586      <publisher>&lt;unknown&gt;</publisher>
9621      <description> Pachi-Slot Teiou 6 - Kung Fu Lady - BangBang - Prelude 2 (Japan)</description>
9622      <year>2000</year>
9623      <publisher>Media</publisher>
9624      <info name="alt_title" value="パチスロ帝王6"/>
95879625      <info name="serial" value="SLPS-02657" />
95889626      <sharedfeat name="compatibility" value="NTSC-J"/>
95899627      <part name="cdrom" interface="psx_cdrom">
r242231r242232
95959633
95969634   <software name="pst7" supported="no">
95979635      <description>Pachi-Slot Teiou 7 (Japan)</description>
9598      <year>199?</year>
9599      <publisher>&lt;unknown&gt;</publisher>
9636      <year>2000</year>
9637      <publisher>Media</publisher>
9638      <info name="alt_title" value="パチスロ帝王7 メーカー推奨マニュアル1 〜ビートザドラゴン2・ルパン三世・ホッドロッドクィーン〜"/>
96009639      <info name="serial" value="SLPS-02991" />
96019640      <sharedfeat name="compatibility" value="NTSC-J"/>
96029641      <part name="cdrom" interface="psx_cdrom">
r242231r242232
96079646   </software>
96089647
96099648   <software name="pstmsm3" supported="no">
9610      <description>Pachi-Slot Teiou Maker Suishou Manual 3 - I'm Angel - White 2 &amp; Blue 2 (Japan)</description>
9611      <year>199?</year>
9612      <publisher>&lt;unknown&gt;</publisher>
9649      <description> Pachi-Slot Teiou - Maker Suishou Manual 3 - I'm Angel White 2 &amp; Blue 2 (Japan)</description>
9650      <year>2001</year>
9651      <publisher>Media</publisher>
9652      <info name="alt_title" value="パチスロ帝王 メーカー推奨マニュアル3 アイムエンジェル〜ホワイト2&amp;ブルー2〜"/>
96139653      <info name="serial" value="SLPS-03130" />
96149654      <sharedfeat name="compatibility" value="NTSC-J"/>
96159655      <part name="cdrom" interface="psx_cdrom">
r242231r242232
96209660   </software>
96219661
96229662   <software name="pstmsm5" supported="no">
9623      <description>Pachi-Slot Teiou Maker Suishou Manual 5 - Race Queen 2 - Tomcat (Japan)</description>
9624      <year>199?</year>
9625      <publisher>&lt;unknown&gt;</publisher>
9663      <description>Pachi-Slot Teiou - Maker Suishou Manual 5 - Race Queen 2 - Tomcat (Japan)</description>
9664      <year>2001</year>
9665      <publisher>Media</publisher>
9666      <info name="alt_title" value="パチスロ帝王 メーカー推奨マニュアル5 〜レースクイーン2・トムキャット〜"/>
96269667      <info name="serial" value="SLPS-03245" />
96279668      <sharedfeat name="compatibility" value="NTSC-J"/>
96289669      <part name="cdrom" interface="psx_cdrom">
r242231r242232
96349675
96359676   <software name="pstmsm6" supported="no">
96369677      <description>Pachi-Slot Teiou Maker Suishou Manual 6 - Takarabune (Japan)</description>
9637      <year>199?</year>
9678      <year>2001</year>
96389679      <publisher>&lt;unknown&gt;</publisher>
9680      <info name="alt_title" value="パチスロ帝王 メーカー推奨マニュアル6 宝船"/>
96399681      <info name="serial" value="SLPS-03329" />
96409682      <sharedfeat name="compatibility" value="NTSC-J"/>
96419683      <part name="cdrom" interface="psx_cdrom">
r242231r242232
96469688   </software>
96479689
96489690   <software name="pstmsm7" supported="no">
9649      <description>Pachi-Slot Teiou Maker Suishou Manual 7 - Trick Monster 2 (Japan)</description>
9650      <year>199?</year>
9651      <publisher>&lt;unknown&gt;</publisher>
9691      <description>Pachi-Slot Teiou - Maker Suishou Manual 7 - Trick Monster 2 (Japan)</description>
9692      <year>2002</year>
9693      <publisher>Media</publisher>
9694      <info name="alt_title" value="パチスロ帝王 メーカー推奨マニュアル7 トリックモンスター2"/>
96529695      <info name="serial" value="SLPS-03391" />
96539696      <sharedfeat name="compatibility" value="NTSC-J"/>
96549697      <part name="cdrom" interface="psx_cdrom">
r242231r242232
96609703
96619704   <software name="pstmda" supported="no">
96629705      <description>Pachi-Slot Teiou Mini - Dr. A7 (Japan)</description>
9663      <year>199?</year>
9664      <publisher>&lt;unknown&gt;</publisher>
9706      <year>1999</year>
9707      <publisher>Media</publisher>
9708      <info name="alt_title" value="パチスロ帝王 Mini"/>
96659709      <info name="serial" value="SLPS-02114" />
96669710      <sharedfeat name="compatibility" value="NTSC-J"/>
96679711      <part name="cdrom" interface="psx_cdrom">
r242231r242232
96739717
96749718   <software name="palmtown" supported="no">
96759719      <description>Palm Town (Japan)</description>
9676      <year>199?</year>
9677      <publisher>&lt;unknown&gt;</publisher>
9720      <year>1999</year>
9721      <publisher>MyCom</publisher>
9722      <info name="alt_title" value="ぱーむたうん"/>
96789723      <info name="serial" value="SLPS-01820" />
96799724      <sharedfeat name="compatibility" value="NTSC-J"/>
96809725      <part name="cdrom" interface="psx_cdrom">
r242231r242232
96869731
96879732   <software name="panzerba" supported="no">
96889733      <description>Panzer Bandit (Japan)</description>
9689      <year>199?</year>
9690      <publisher>&lt;unknown&gt;</publisher>
9734      <year>1997</year>
9735      <publisher>Banpresto</publisher>
9736      <info name="alt_title" value="パンツァーバンディット"/>
96919737      <info name="serial" value="SLPS-00899" />
96929738      <sharedfeat name="compatibility" value="NTSC-J"/>
96939739      <part name="cdrom" interface="psx_cdrom">
r242231r242232
96999745
97009746   <software name="panzerfr" supported="no">
97019747      <description>Panzer Front bis. (Japan)</description>
9702      <year>199?</year>
9703      <publisher>&lt;unknown&gt;</publisher>
9748      <year>2001</year>
9749      <publisher>Enterbrain</publisher>
9750      <info name="alt_title" value="PANZER FRONT bis."/>
97049751      <info name="serial" value="SLPS-03111" />
97059752      <sharedfeat name="compatibility" value="NTSC-J"/>
97069753      <part name="cdrom" interface="psx_cdrom">
r242231r242232
97129759
97139760   <software name="paranoia" supported="no">
97149761      <description>Paranoia Scape (Japan)</description>
9715      <year>199?</year>
9716      <publisher>&lt;unknown&gt;</publisher>
9762      <year>1998</year>
9763      <publisher>Mathilda</publisher>
9764      <info name="alt_title" value="PARANOIA SCAPE"/>
97179765      <info name="serial" value="SLPS-01375" />
97189766      <sharedfeat name="compatibility" value="NTSC-J"/>
97199767      <part name="cdrom" interface="psx_cdrom">
r242231r242232
97259773
97269774   <software name="parlorpr" supported="no">
97279775      <description>Parlor! Pro Jr. Collection (Japan)</description>
9728      <year>199?</year>
9729      <publisher>&lt;unknown&gt;</publisher>
9776      <year>2000</year>
9777      <publisher>Nihon Telenet</publisher>
9778      <info name="alt_title" value="Parlor!PRO Jr. Collection"/>
97309779      <info name="serial" value="SLPS-02781" />
97319780      <sharedfeat name="compatibility" value="NTSC-J"/>
97329781      <part name="cdrom" interface="psx_cdrom">
r242231r242232
97389787
97399788   <software name="parowars" supported="no">
97409789      <description>Paro Wars (Japan)</description>
9741      <year>199?</year>
9742      <publisher>&lt;unknown&gt;</publisher>
9790      <year>1997</year>
9791      <publisher>Konami</publisher>
9792      <info name="alt_title" value="パロウォーズ"/>
97439793      <info name="serial" value="SLPM-86016" />
97449794      <sharedfeat name="compatibility" value="NTSC-J"/>
97459795      <part name="cdrom" interface="psx_cdrom">
r242231r242232
97519801
97529802   <software name="pdultram" supported="no">
97539803      <description>PD Ultraman Invader (Japan)</description>
9754      <year>199?</year>
9755      <publisher>&lt;unknown&gt;</publisher>
9804      <year>1995</year>
9805      <publisher>Bandai</publisher>
9806      <info name="alt_title" value="PDウルトラマンインベーダー"/>
97569807      <info name="serial" value="SLPS-00195" />
97579808      <sharedfeat name="compatibility" value="NTSC-J"/>
97589809      <part name="cdrom" interface="psx_cdrom">
r242231r242232
97639814   </software>
97649815
97659816   <software name="pepsiman" supported="no">
9766      <description>Pepsiman The Running Hero (Japan)</description>
9767      <year>199?</year>
9768      <publisher>&lt;unknown&gt;</publisher>
9817      <description>Pepsiman (Japan)</description>
9818      <year>1999</year>
9819      <publisher>KID</publisher>
9820      <info name="alt_title" value="ペプシマン"/>
97699821      <info name="serial" value="SLPS-01762" />
97709822      <sharedfeat name="compatibility" value="NTSC-J"/>
97719823      <part name="cdrom" interface="psx_cdrom">
r242231r242232
97769828   </software>
97779829
97789830   <software name="perfectf" supported="no">
9779      <description>Perfect Fishing - Iso Zuri (Japan)</description>
9780      <year>199?</year>
9781      <publisher>&lt;unknown&gt;</publisher>
9831      <description>Perfect Fishing - Rock Fishing (Japan)</description>
9832      <year>2000</year>
9833      <publisher>Seta</publisher>
9834      <info name="alt_title" value="パーフェクトフィッシング(磯釣り)"/>
97829835      <info name="serial" value="SLPS-02410" />
97839836      <sharedfeat name="compatibility" value="NTSC-J"/>
97849837      <part name="cdrom" interface="psx_cdrom">
r242231r242232
97889841      </part>
97899842   </software>
97909843
9791   <!-- missing GFX -->
9792   <software name="petitcar" supported="no">
9793      <description>Petit Carat (Japan)</description>
9794      <year>199?</year>
9795      <publisher>&lt;unknown&gt;</publisher>
9796      <info name="serial" value="SLPS-01435" />
9797      <sharedfeat name="compatibility" value="NTSC-J"/>
9798      <part name="cdrom" interface="psx_cdrom">
9799         <diskarea name="cdrom">
9800            <disk name="petit carat (japan) [slps-01435]" sha1="d5a4844ddc86dbc9ac5a3b783a93e5dbf0c1bace"/>
9801         </diskarea>
9802      </part>
9803   </software>
9804
98059844   <!-- boot OK -->
9806   <software name="picnicex" supported="no">
9807      <description>Picnic! Excellent (Japan)</description>
9808      <year>199?</year>
9809      <publisher>&lt;unknown&gt;</publisher>
9845   <software name="pikinecx" supported="no">
9846      <description>Pikinya! Excellent(Japan)</description>
9847      <year>1998</year>
9848      <publisher>ASCII</publisher>
9849      <info name="alt_title" value="ピキーニャ エクセレンテ"/>
98109850      <info name="serial" value="SLPS-01345" />
98119851      <sharedfeat name="compatibility" value="NTSC-J"/>
98129852      <part name="cdrom" interface="psx_cdrom">
r242231r242232
98199859   <!-- boot OK -->
98209860   <software name="pinballf" supported="no">
98219861      <description>Pinball Fantasies Deluxe (Japan)</description>
9822      <year>199?</year>
9823      <publisher>&lt;unknown&gt;</publisher>
9862      <year>1996</year>
9863      <publisher>VAP (NTV)</publisher>
9864      <info name="alt_title" value="Pinball Fantasies DELUXE"/>
98249865      <info name="serial" value="SLPS-00482" />
98259866      <sharedfeat name="compatibility" value="NTSC-J"/>
98269867      <part name="cdrom" interface="psx_cdrom">
r242231r242232
98329873
98339874   <software name="pitfall3" supported="no">
98349875      <description>Pitfall 3D - Beyond the Jungle (Japan)</description>
9835      <year>199?</year>
9836      <publisher>&lt;unknown&gt;</publisher>
9876      <year>1998</year>
9877      <publisher>Victor</publisher>
9878      <info name="alt_title" value="ピットフォール3D"/>
98379879      <info name="serial" value="SLPS-01669" />
98389880      <sharedfeat name="compatibility" value="NTSC-J"/>
98399881      <part name="cdrom" interface="psx_cdrom">
r242231r242232
98459887
98469888   <software name="planetdo" supported="no">
98479889      <description>Planet Dob (Japan)</description>
9848      <year>199?</year>
9849      <publisher>&lt;unknown&gt;</publisher>
9890      <year>1999</year>
9891      <publisher>Hudson</publisher>
9892      <info name="alt_title" value="PLANET DOB"/>
98509893      <info name="serial" value="SLPS-02111" />
98519894      <sharedfeat name="compatibility" value="NTSC-J"/>
98529895      <part name="cdrom" interface="psx_cdrom">
r242231r242232
98579900   </software>
98589901
98599902   <software name="planetla" supported="no">
9860      <description>Planet Laika - Kasei Mokushiroku (Japan)</description>
9861      <year>199?</year>
9862      <publisher>&lt;unknown&gt;</publisher>
9903      <description>Planet Laika (Japan)</description>
9904      <year>1999</year>
9905      <publisher>Enix</publisher>
9906      <info name="alt_title" value="PLANET LAIKA 火星黙示録"/>
98639907      <info name="serial" value="SLPM-86264" />
98649908      <sharedfeat name="compatibility" value="NTSC-J"/>
98659909      <part name="cdrom" interface="psx_cdrom">
r242231r242232
98709914   </software>
98719915
98729916   <software name="pocketdi" supported="no">
9873      <description>Pocket Digimon World (Japan)</description>
9874      <year>199?</year>
9875      <publisher>&lt;unknown&gt;</publisher>
9917      <description>Pocket DigimonWorld (Japan)</description>
9918      <year>2000</year>
9919      <publisher>Bandai</publisher>
9920      <info name="alt_title" value="ポケットデジモンワールド"/>
98769921      <info name="serial" value="SLPS-02800" />
98779922      <sharedfeat name="compatibility" value="NTSC-J"/>
98789923      <part name="cdrom" interface="psx_cdrom">
r242231r242232
98839928   </software>
98849929
98859930   <software name="pocketwb" supported="no">
9886      <description>Pocket Digimon World - Wind Battle Disc (Japan)</description>
9887      <year>199?</year>
9888      <publisher>&lt;unknown&gt;</publisher>
9931      <description>Pocket DigimonWorld - Wind Battle Disc (Japan)</description>
9932      <year>2000</year>
9933      <publisher>Bandai</publisher>
9934      <info name="alt_title" value="ポケットデジモンワールド ウイングバトルディスク"/>
98899935      <info name="serial" value="SLPS-02992" />
98909936      <sharedfeat name="compatibility" value="NTSC-J"/>
98919937      <part name="cdrom" interface="psx_cdrom">
r242231r242232
98969942   </software>
98979943
98989944   <software name="pocketwc" supported="no">
9899      <description>Pocket Digimon World Cool &amp; Nature Battle (Japan)</description>
9900      <year>199?</year>
9901      <publisher>&lt;unknown&gt;</publisher>
9945      <description>Pocket DigimonWorld Cool &amp; Nature Battle Disc (Japan)</description>
9946      <year>2001</year>
9947      <publisher>Bandai</publisher>
9948      <info name="alt_title" value="ポケットデジモンワールド クール&ネイチャー バトルディスク"/>
99029949      <info name="serial" value="SLPS-03146" />
99039950      <sharedfeat name="compatibility" value="NTSC-J"/>
99049951      <part name="cdrom" interface="psx_cdrom">
r242231r242232
99109957
99119958   <software name="pocketfi" supported="no">
99129959      <description>Pocket Fighter (Japan)</description>
9913      <year>199?</year>
9914      <publisher>&lt;unknown&gt;</publisher>
9960      <year>1998</year>
9961      <publisher>Capcom</publisher>
9962      <info name="alt_title" value="ポケットファイター"/>
99159963      <info name="serial" value="SLPS-01360" />
99169964      <sharedfeat name="compatibility" value="NTSC-J"/>
99179965      <part name="cdrom" interface="psx_cdrom">
r242231r242232
99239971
99249972   <software name="pocketmu" supported="no">
99259973      <description>Pocket Muumuu (Japan)</description>
9926      <year>199?</year>
9927      <publisher>&lt;unknown&gt;</publisher>
9974      <year>1999</year>
9975      <publisher>Sony</publisher>
9976      <info name="alt_title" value="ポケットムームー"/>
99289977      <info name="serial" value="SCPS-10076" />
99299978      <sharedfeat name="compatibility" value="NTSC-J"/>
99309979      <part name="cdrom" interface="psx_cdrom">
r242231r242232
99359984   </software>
99369985
99379986   <software name="poitters" supported="no">
9938      <description>Poitter's Point 2 (Japan)</description>
9939      <year>199?</year>
9940      <publisher>&lt;unknown&gt;</publisher>
9987      <description>Poitter's Point 2 - Sodom no Inbou (Japan)</description>
9988      <year>1998</year>
9989      <publisher>Konami</publisher>
9990      <info name="alt_title" value="ポイッターズポイント2"/>
99419991      <info name="serial" value="SLPM-86061" />
99429992      <sharedfeat name="compatibility" value="NTSC-J"/>
99439993      <part name="cdrom" interface="psx_cdrom">
r242231r242232
99499999
995010000   <software name="policena" supported="no">
995110001      <description>Policenauts - Private Collection (Japan)</description>
9952      <year>199?</year>
9953      <publisher>&lt;unknown&gt;</publisher>
10002      <year>1996</year>
10003      <publisher>Konami</publisher>
10004      <info name="alt_title" value="ポリスノーツ プライベートコレクション"/>
995410005      <info name="serial" value="SLPS-00228" />
995510006      <sharedfeat name="compatibility" value="NTSC-J"/>
995610007      <part name="cdrom" interface="psx_cdrom">
r242231r242232
996210013
996310014   <software name="popnmusi" supported="no">
996410015      <description>Pop'n Music - Disney Tunes (Japan)</description>
9965      <year>199?</year>
9966      <publisher>&lt;unknown&gt;</publisher>
10016      <year>2000</year>
10017      <publisher>Konami</publisher>
10018      <info name="alt_title" value="ポップンミュージックディズニーチューンズ"/>
996710019      <info name="serial" value="SLPM-86670" />
996810020      <sharedfeat name="compatibility" value="NTSC-J"/>
996910021      <part name="cdrom" interface="psx_cdrom">
r242231r242232
997610028   <!-- boot OK -->
997710029   <software name="popnpopj" supported="no">
997810030      <description>Pop'n Pop (Japan)</description>
9979      <year>199?</year>
9980      <publisher>&lt;unknown&gt;</publisher>
10031      <year>1998</year>
10032      <publisher>Taito</publisher>
10033      <info name="alt_title" value="ぽっぷんぽっぷ"/>
998110034      <info name="serial" value="SLPS-01636" />
998210035      <sharedfeat name="compatibility" value="NTSC-J"/>
998310036      <part name="cdrom" interface="psx_cdrom">
r242231r242232
999010043   <!-- black screen after logos -->
999110044   <software name="popntank" supported="no">
999210045      <description>Pop'n Tanks! (Japan)</description>
9993      <year>199?</year>
9994      <publisher>&lt;unknown&gt;</publisher>
10046      <year>1999</year>
10047      <publisher>Enix</publisher>
10048      <info name="alt_title" value="POPN TANKS"/>
999510049      <info name="serial" value="SLPM-86146" />
999610050      <sharedfeat name="compatibility" value="NTSC-J"/>
999710051      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1000310057
1000410058   <software name="potestas" supported="no">
1000510059      <description>Potestas (Japan)</description>
10006      <year>199?</year>
10007      <publisher>&lt;unknown&gt;</publisher>
10060      <year>1996</year>
10061      <publisher>Nexus</publisher>
10062      <info name="alt_title" value="ポテスタス"/>
1000810063      <info name="serial" value="SLPS-00324" />
1000910064      <sharedfeat name="compatibility" value="NTSC-J"/>
1001010065      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1001610071
1001710072   <software name="powersho" supported="no">
1001810073      <description>Power Shovel ni Norou!! (Japan)</description>
10019      <year>199?</year>
10020      <publisher>&lt;unknown&gt;</publisher>
10074      <year>2000</year>
10075      <publisher>Taito</publisher>
10076      <info name="alt_title" value="パワーショベルに乗ろう!!"/>
1002110077      <info name="serial" value="SLPM-86629" />
1002210078      <sharedfeat name="compatibility" value="NTSC-J"/>
1002310079      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1002910085
1003010086   <software name="powersta" supported="no">
1003110087      <description>Power Stakes (Japan)</description>
10032      <year>199?</year>
10033      <publisher>&lt;unknown&gt;</publisher>
10088      <year>1997</year>
10089      <publisher>Aques</publisher>
10090      <info name="alt_title" value="パワーステークス"/>
1003410091      <info name="serial" value="SLPM-86032" />
1003510092      <sharedfeat name="compatibility" value="NTSC-J"/>
1003610093      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1004210099
1004310100   <software name="powersg1" supported="no">
1004410101      <description>Power Stakes Grade 1 (Japan)</description>
10045      <year>199?</year>
10046      <publisher>&lt;unknown&gt;</publisher>
10102      <year>1997</year>
10103      <publisher>Aques</publisher>
10104      <info name="alt_title" value="パワーステークス Grade1"/>
1004710105      <info name="serial" value="SLPM-86050" />
1004810106      <sharedfeat name="compatibility" value="NTSC-J"/>
1004910107      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1005510113
1005610114   <software name="princess" supported="no">
1005710115      <description>Princess Maker - Go! Go! Princess (Japan)</description>
10058      <year>199?</year>
10059      <publisher>&lt;unknown&gt;</publisher>
10116      <year>1999</year>
10117      <publisher>NineLives</publisher>
10118      <info name="alt_title" value="プリンセスメーカー GO!GO!プリンセス"/>
1006010119      <info name="serial" value="SLPS-01505" />
1006110120      <sharedfeat name="compatibility" value="NTSC-J"/>
1006210121      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1006810127
1006910128   <software name="prismcou" supported="no">
1007010129      <description>Prism Court (Japan)</description>
10071      <year>199?</year>
10072      <publisher>&lt;unknown&gt;</publisher>
10130      <year>1998</year>
10131      <publisher>FPS</publisher>
10132      <info name="alt_title" value="プリズムコート"/>
1007310133      <info name="serial" value="SLPS-01226" />
1007410134      <sharedfeat name="compatibility" value="NTSC-J"/>
1007510135      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1008110141
1008210142   <software name="prisoner" supported="no">
1008310143      <description>Prisoner (Japan)</description>
10084      <year>199?</year>
10085      <publisher>&lt;unknown&gt;</publisher>
10144      <year>1999</year>
10145      <publisher>Mainichi</publisher>
10146      <info name="alt_title" value="PRISONER&#40;プリズナー&#41;"/>
1008610147      <info name="serial" value="SLPS-02387" />
1008710148      <sharedfeat name="compatibility" value="NTSC-J"/>
1008810149      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1009410155
1009510156   <software name="promahpl" supported="no">
1009610157      <description>Pro Mahjong Kiwame Plus (Japan)</description>
10097      <year>199?</year>
10098      <publisher>&lt;unknown&gt;</publisher>
10158      <year>1996</year>
10159      <publisher>Athena</publisher>
10160      <info name="alt_title" value="プロ麻雀 極PLUS"/>
1009910161      <info name="serial" value="SLPS-00402" />
1010010162      <sharedfeat name="compatibility" value="NTSC-J"/>
1010110163      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1010710169
1010810170   <software name="promahjo" supported="no">
1010910171      <description>Pro Mahjong Kiwame Tengensenhen (Japan)</description>
10110      <year>199?</year>
10111      <publisher>&lt;unknown&gt;</publisher>
10172      <year>1999</year>
10173      <publisher>Athena</publisher>
10174      <info name="alt_title" value="プロ麻雀 極 天元戦編"/>
1011210175      <info name="serial" value="SLPS-02347" />
1011310176      <sharedfeat name="compatibility" value="NTSC-J"/>
1011410177      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1012010183
1012110184   <software name="prowrest" supported="no">
1012210185      <description>Pro Wrestling Sengokuden - Hyper Tag Match (Japan)</description>
10123      <year>199?</year>
10124      <publisher>&lt;unknown&gt;</publisher>
10186      <year>1997</year>
10187      <publisher>KSS</publisher>
10188      <info name="alt_title" value="プロレス戦国伝 〜HYPER TAG MATCH〜"/>
1012510189      <info name="serial" value="SLPS-01006" />
1012610190      <sharedfeat name="compatibility" value="NTSC-J"/>
1012710191      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1013210196   </software>
1013310197
1013410198   <software name="prologic" supported="no">
10135      <description>Pro-Logic Mah-Jong Hai-Shin (Japan)</description>
10136      <year>199?</year>
10137      <publisher>&lt;unknown&gt;</publisher>
10199      <description>Pro Logic Mahjong Hai-Shin (Japan)</description>
10200      <year>1996</year>
10201      <publisher>Aques</publisher>
10202      <info name="alt_title" value="プロロジック麻雀 牌神"/>
1013810203      <info name="serial" value="SLPM-86018" />
1013910204      <sharedfeat name="compatibility" value="NTSC-J"/>
1014010205      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1014410209      </part>
1014510210   </software>
1014610211
10212   <!-- missing GFX -->
10213   <software name="puchicar" supported="no">
10214      <description>Puchi Carat (Japan)</description>
10215      <year>1998</year>
10216      <publisher>Taito</publisher>
10217      <info name="alt_title" value="プチカラット"/>
10218      <info name="serial" value="SLPS-01435" />
10219      <sharedfeat name="compatibility" value="NTSC-J"/>
10220      <part name="cdrom" interface="psx_cdrom">
10221         <diskarea name="cdrom">
10222            <disk name="petit carat (japan) [slps-01435]" sha1="d5a4844ddc86dbc9ac5a3b783a93e5dbf0c1bace"/>
10223         </diskarea>
10224      </part>
10225   </software>
10226
1014710227   <software name="pukunpaj" supported="no">
10148      <description>Pukunpa - Joshi Kousei no Houkago... (Japan)</description>
10149      <year>199?</year>
10150      <publisher>&lt;unknown&gt;</publisher>
10228      <description>Pukunpa Joshikousei No Houkago... (Japan)</description>
10229      <year>1996</year>
10230      <publisher>Athena</publisher>
10231      <info name="alt_title" value="ぷくんパ 女子高生の放課後…"/>
1015110232      <info name="serial" value="SLPS-00409" />
1015210233      <sharedfeat name="compatibility" value="NTSC-J"/>
1015310234      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1016010241   <!-- boot OK -->
1016110242   <software name="puyopubx" supported="no">
1016210243      <description>Puyo Puyo Box (Japan)</description>
10163      <year>199?</year>
10164      <publisher>&lt;unknown&gt;</publisher>
10244      <year>2000</year>
10245      <publisher>Compile</publisher>
10246      <info name="alt_title" value="ぷよぷよBOX"/>
1016510247      <info name="serial" value="SLPS-03114" />
1016610248      <sharedfeat name="compatibility" value="NTSC-J"/>
1016710249      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1017110253      </part>
1017210254   </software>
1017310255
10174   <software name="puypuyoo" supported="no">
10175      <description>Puyo Puyoon - Car-Kun to Issho (Japan)</description>
10176      <year>199?</year>
10177      <publisher>&lt;unknown&gt;</publisher>
10256   <software name="puyopuy4" supported="no">
10257      <description>Puyo Puyo 4 - Car-Kun to Issho (Japan)</description>
10258      <year>1999</year>
10259      <publisher>Compile</publisher>
10260      <info name="alt_title" value="ぷよぷよ〜ん カーくんといっしょ"/>
1017810261      <info name="serial" value="SLPS-02412" />
1017910262      <sharedfeat name="compatibility" value="NTSC-J"/>
1018010263      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1018610269
1018710270   <!-- boot OK -->
1018810271   <software name="puzzlear" supported="no">
10189      <description>Puzzle Arena Toshinden (Japan)</description>
10190      <year>199?</year>
10191      <publisher>&lt;unknown&gt;</publisher>
10272      <description>Puzzle Arena To Shin Den (Japan)</description>
10273      <year>1997</year>
10274      <publisher>Takara</publisher>
10275      <info name="alt_title" value="パズルアリーナ闘神伝"/>
1019210276      <info name="serial" value="SLPS-00879" />
1019310277      <sharedfeat name="compatibility" value="NTSC-J"/>
1019410278      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1020110285   <!-- boot ok -->
1020210286   <software name="pbobl3dx" supported="no">
1020310287      <description>Puzzle Bobble 3 DX (Japan)</description>
10204      <year>199?</year>
10205      <publisher>&lt;unknown&gt;</publisher>
10288      <year>1997</year>
10289      <publisher>Taito</publisher>
10290      <info name="alt_title" value="パズルボブル3デラックス"/>
1020610291      <info name="serial" value="SLPS-01065" />
1020710292      <sharedfeat name="compatibility" value="NTSC-J"/>
1020810293      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1021510300   <!-- boot ok -->
1021610301   <software name="pbobl4" supported="no">
1021710302      <description>Puzzle Bobble 4 (Japan)</description>
10218      <year>199?</year>
10219      <publisher>&lt;unknown&gt;</publisher>
10303      <year>1998</year>
10304      <publisher>Taito</publisher>
10305      <info name="alt_title" value="パズルボブル4"/>
1022010306      <info name="serial" value="SLPS-01492" />
1022110307      <sharedfeat name="compatibility" value="NTSC-J"/>
1022210308      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1022810314
1022910315   <!-- boot ok, must skip fmv before it begins or black screen -->
1023010316   <software name="qix2000j" supported="no">
10231      <description>Qix 2000 (Japan)</description>
10232      <year>199?</year>
10233      <publisher>&lt;unknown&gt;</publisher>
10317      <description>Qix 2000 (Superlite 1500 Series) (Japan)</description>
10318      <year>2000</year>
10319      <publisher>Success</publisher>
10320      <info name="alt_title" value="SuperLite1500シリーズ クイックス2000"/>
1023410321      <info name="serial" value="SLPM-86659" />
1023510322      <sharedfeat name="compatibility" value="NTSC-J"/>
1023610323      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1024210329
1024310330   <software name="quantumg" supported="no">
1024410331      <description>Quantum Gate I - Akumu no Joshou (Japan)</description>
10245      <year>199?</year>
10246      <publisher>&lt;unknown&gt;</publisher>
10332      <year>1997</year>
10333      <publisher>Gaga</publisher>
10334      <info name="alt_title" value="QUANTUM GATE 〜悪夢の序章〜"/>
1024710335      <info name="serial" value="SLPS-00399" />
1024810336      <sharedfeat name="compatibility" value="NTSC-J"/>
1024910337      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1025510343
1025610344   <software name="quizchar" supported="no">
1025710345      <description>Quiz Charaokedon! Toei Tokusatsu Hero Part 2 (Japan)</description>
10258      <year>199?</year>
10259      <publisher>&lt;unknown&gt;</publisher>
10346      <year>1999</year>
10347      <publisher>Banpresto</publisher>
10348      <info name="alt_title" value="クイズキャラおけドン! 東映特撮ヒーローPART2"/>
1026010349      <info name="serial" value="SLPS-02310" />
1026110350      <sharedfeat name="compatibility" value="NTSC-J"/>
1026210351      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1026810357
1026910358   <!-- boot ok -->
1027010359   <software name="quizdara" supported="no">
10271      <description>Quiz Darake no Jinsei Game - Un to Atama de Daifugou (Japan)</description>
10272      <year>199?</year>
10273      <publisher>&lt;unknown&gt;</publisher>
10360      <description>Quiz Darake No Jinsei Game (Japan)</description>
10361      <year>1997</year>
10362      <publisher>Takara</publisher>
10363      <info name="alt_title" value="クイズだらけの人生ゲーム 運と頭で大富豪!?"/>
1027410364      <info name="serial" value="SLPS-02282" />
1027510365      <sharedfeat name="compatibility" value="NTSC-J"/>
1027610366      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1028210372
1028310373   <!-- hang starting new game -->
1028410374   <software name="quizmill" supported="no">
10285      <description>Quiz Millionaire (Japan)</description>
10286      <year>199?</year>
10287      <publisher>&lt;unknown&gt;</publisher>
10375      <description>Quiz$Millionaire (Japan)</description>
10376      <year>2001</year>
10377      <publisher>Eidos</publisher>
10378      <info name="alt_title" value="クイズ$ミリオネア"/>
1028810379      <info name="serial" value="SLPS-03364" />
1028910380      <sharedfeat name="compatibility" value="NTSC-J"/>
1029010381      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1029710388   <!-- boot ok -->
1029810389   <software name="quovadis" supported="no">
1029910390      <description>Quo Vadis - Iberukatsu Seneki (Japan)</description>
10300      <year>199?</year>
10301      <publisher>&lt;unknown&gt;</publisher>
10391      <year>1997</year>
10392      <publisher>Glams</publisher>
10393      <info name="alt_title" value="クオバディス 〜イベルカーツ戦役〜"/>
1030210394      <info name="serial" value="SLPS-00733" />
1030310395      <sharedfeat name="compatibility" value="NTSC-J"/>
1030410396      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1031010402
1031110403   <!-- boot OK -->
1031210404   <software name="racedriv" supported="no">
10313      <description>Race Drivin' a Go! Go! (Japan)</description>
10314      <year>199?</year>
10315      <publisher>&lt;unknown&gt;</publisher>
10405      <description>Race Driving' A Go! Go! (Japan)</description>
10406      <year>1996</year>
10407      <publisher>Time Warner</publisher>
10408      <info name="alt_title" value="RACE DRIVIN' a GO! GO!"/>
1031610409      <info name="serial" value="SLPS-00167" />
1031710410      <sharedfeat name="compatibility" value="NTSC-J"/>
1031810411      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1032510418   <!-- boot ok -->
1032610419   <software name="rakugaki" supported="no">
1032710420      <description>Rakugaki Showtime (Japan)</description>
10328      <year>199?</year>
10329      <publisher>&lt;unknown&gt;</publisher>
10421      <year>1999</year>
10422      <publisher>Enix</publisher>
10423      <info name="alt_title" value="ラクガキショータイム"/>
1033010424      <info name="serial" value="SLPM-86272" />
1033110425      <sharedfeat name="compatibility" value="NTSC-J"/>
1033210426      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1033910433   <!-- boot ok -->
1034010434   <software name="rallydea" supported="no">
1034110435      <description>Rally de Africa (Japan)</description>
10342      <year>199?</year>
10343      <publisher>&lt;unknown&gt;</publisher>
10436      <year>1998</year>
10437      <publisher>Prism Arts</publisher>
10438      <info name="alt_title" value="ラリー・デ・アフリカ"/>
1034410439      <info name="serial" value="SLPS-01601" />
1034510440      <sharedfeat name="compatibility" value="NTSC-J"/>
1034610441      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1035310448   <!-- boot ok -->
1035410449   <software name="rallydee" supported="no">
1035510450      <description>Rally de Europe (Japan)</description>
10356      <year>199?</year>
10357      <publisher>&lt;unknown&gt;</publisher>
10451      <year>2000</year>
10452      <publisher>Prism Arts</publisher>
10453      <info name="alt_title" value="ラリー・デ・ヨーロッパ"/>
1035810454      <info name="serial" value="SLPS-02679" />
1035910455      <sharedfeat name="compatibility" value="NTSC-J"/>
1036010456      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1036610462
1036710463   <!-- black screen after some movies -->
1036810464   <software name="ramichan" supported="no">
10369      <description>Ramichan no Odeo Surogoku - Keio Yugekitai Gaiden (Japan)</description>
10370      <year>199?</year>
10371      <publisher>&lt;unknown&gt;</publisher>
10465      <description>Rami-Chan No Ooeto Surogoku&#58; Keio Yugekitai Gaiden (Japan)</description>
10466      <year>1998</year>
10467      <publisher>Victor</publisher>
10468      <info name="alt_title" value="蘭未ちゃんの大江戸すごろく"/>
1037210469      <info name="serial" value="SLPS-01546" />
1037310470      <sharedfeat name="compatibility" value="NTSC-J"/>
1037410471      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1038010477
1038110478   <!-- boot ok -->
1038210479   <software name="ranma12b" supported="no">
10383      <description>Ranma 1-2 - Battle Renaissance (Japan)</description>
10384      <year>199?</year>
10385      <publisher>&lt;unknown&gt;</publisher>
10480      <description>Ranma 1&#47;2 Battle Renaissance (Japan)</description>
10481      <year>1996</year>
10482      <publisher>Shogakukan</publisher>
10483      <info name="alt_title" value="らんま1&#47;2 バトルルネッサンス"/>
1038610484      <info name="serial" value="SLPS-00522" />
1038710485      <sharedfeat name="compatibility" value="NTSC-J"/>
1038810486      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1039510493   <!-- boot ok -->
1039610494   <software name="raytrace" supported="no">
1039710495      <description>Ray Tracers (Japan)</description>
10398      <year>199?</year>
10399      <publisher>&lt;unknown&gt;</publisher>
10496      <year>1997</year>
10497      <publisher>Taito</publisher>
10498      <info name="alt_title" value="レイ・トレーサー"/>
1040010499      <info name="serial" value="SLPS-00098" />
1040110500      <sharedfeat name="compatibility" value="NTSC-J"/>
1040210501      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1040910508   <!-- hangs at company logo -->
1041010509   <software name="raymanja" supported="no">
1041110510      <description>Rayman (Japan)</description>
10412      <year>199?</year>
10413      <publisher>&lt;unknown&gt;</publisher>
10511      <year>1995</year>
10512      <publisher>Ubisoft</publisher>
10513      <info name="alt_title" value="ユービーアイ ソフト&#40;株&#41;"/>
1041410514      <info name="serial" value="SLPS-00026" />
1041510515      <sharedfeat name="compatibility" value="NTSC-J"/>
1041610516      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1042310523   <!-- boot ok -->
1042410524   <software name="readymai" supported="no">
1042510525      <description>Ready Maid (Japan)</description>
10426      <year>199?</year>
10427      <publisher>&lt;unknown&gt;</publisher>
10526      <year>2002</year>
10527      <publisher>Princess</publisher>
10528      <info name="alt_title" value="れでぃめいど"/>
1042810529      <info name="serial" value="SLPM-87157" />
1042910530      <sharedfeat name="compatibility" value="NTSC-J"/>
1043010531      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1043710538   <!-- boot OK -->
1043810539   <software name="rbffsdm" supported="no">
1043910540      <description>Real Bout Garou Densetsu Special - Dominated Mind (Limited Edition) (Japan) (Disc 1)</description>
10440      <year>199?</year>
10441      <publisher>&lt;unknown&gt;</publisher>
10541      <year>1998</year>
10542      <publisher>SNK</publisher>
10543      <info name="alt_title" value="リアルバウト餓狼伝説スペシャル DOMINATED MIND 限定版"/>
1044210544      <info name="serial" value="SLPM-86090, SLPM-86091" />
1044310545      <sharedfeat name="compatibility" value="NTSC-J"/>
1044410546      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1045610558   <!-- boot OK -->
1045710559   <software name="realrobo" supported="no">
1045810560      <description>Real Robots - Final Attack (Japan)</description>
10459      <year>199?</year>
10460      <publisher>&lt;unknown&gt;</publisher>
10561      <year>1998</year>
10562      <publisher>Banpresto</publisher>
10563      <info name="alt_title" value="リアルロボッツ ファイナルアタック"/>
1046110564      <info name="serial" value="SLPS-01125" />
1046210565      <sharedfeat name="compatibility" value="NTSC-J"/>
1046310566      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1047010573   <!-- boot OK -->
1047110574   <software name="reciproh" supported="no">
1047210575      <description>Recipro Heat 5000 (Japan)</description>
10473      <year>199?</year>
10474      <publisher>&lt;unknown&gt;</publisher>
10576      <year>1997</year>
10577      <publisher>Xing</publisher>
10578      <info name="alt_title" value="レシプロヒート5000"/>
1047510579      <info name="serial" value="SLPS-00744" />
1047610580      <sharedfeat name="compatibility" value="NTSC-J"/>
1047710581      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1048410588   <!-- boot ok, needs gun -->
1048510589   <software name="rsbhdemo" supported="no">
1048610590      <description>Rescue Shot Bubibo &amp; BioHazard - Gun Survivor (Demo) (Japan)</description>
10487      <year>199?</year>
10488      <publisher>&lt;unknown&gt;</publisher>
10591      <year>200?</year>
10592      <publisher>SCEI</publisher>
10593      <info name="alt_title" value="レスキューショットブービーぼー&バイオハザードガンサバイバー ガンコン"/>
1048910594      <info name="serial" value="SLPM-80522" />
1049010595      <sharedfeat name="compatibility" value="NTSC-J"/>
1049110596      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1049810603   <!-- black screen, MESS crash -->
1049910604   <software name="retzork" supported="no">
1050010605      <description>Return to Zork (Japan)</description>
10501      <year>199?</year>
10502      <publisher>&lt;unknown&gt;</publisher>
10606      <year>1996</year>
10607      <publisher>Bandai</publisher>
10608      <info name="alt_title" value="リターン・トゥ・ゾーク"/>
1050310609      <info name="serial" value="SLPS-00192, SLPS-00193" />
1050410610      <sharedfeat name="compatibility" value="NTSC-J"/>
1050510611      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1051710623   <!-- boot ok -->
1051810624   <software name="ridegear" supported="no">
1051910625      <description>Ridegear Guybrave II (Japan)</description>
10520      <year>199?</year>
10521      <publisher>&lt;unknown&gt;</publisher>
10626      <year>1998</year>
10627      <publisher>Axela</publisher>
10628      <info name="alt_title" value="雷弩機兵ガイブレイブII"/>
1052210629      <info name="serial" value="SLPS-01643, SLPS-01644" />
1052310630      <sharedfeat name="compatibility" value="NTSC-J"/>
1052410631      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1053610643   <!-- boot ok -->
1053710644   <software name="rikujoub" supported="no">
1053810645      <description>Rikujou Boueitai Maochan (Deluxe Pack) (Japan)</description>
10539      <year>199?</year>
10540      <publisher>&lt;unknown&gt;</publisher>
10646      <year>2003</year>
10647      <publisher>Marvelous</publisher>
10648      <info name="alt_title" value="陸上防衛隊まおちゃん DXパック"/>
1054110649      <info name="serial" value="SLPM-87198" />
1054210650      <sharedfeat name="compatibility" value="NTSC-J"/>
1054310651      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1055010658   <!-- black screen after company logos -->
1055110659   <software name="riotstar" supported="no">
1055210660      <description>Riot Stars (Japan)</description>
10553      <year>199?</year>
10554      <publisher>&lt;unknown&gt;</publisher>
10661      <year>1997</year>
10662      <publisher>Hect</publisher>
10663      <info name="alt_title" value="ライアット・スターズ"/>
1055510664      <info name="serial" value="SLPS-00829" />
1055610665      <sharedfeat name="compatibility" value="NTSC-J"/>
1055710666      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1056310672
1056410673   <!-- company logos shown, broken into incorrect parts, then hang -->
1056510674   <software name="riseofro" supported="no">
10566      <description>Rise of Robots 2 - Resurection (Japan)</description>
10567      <year>199?</year>
10568      <publisher>&lt;unknown&gt;</publisher>
10675      <description>Rise of Robots 2 - Resurrection (Japan)</description>
10676      <year>1996</year>
10677      <publisher>Acclaim</publisher>
10678      <info name="alt_title" value="ライズ オブ ザ ロボット 2"/>
1056910679      <info name="serial" value="SLPS-00259" />
1057010680      <sharedfeat name="compatibility" value="NTSC-J"/>
1057110681      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1057810688   <!-- boot ok -->
1057910689   <software name="risingza" supported="no">
1058010690      <description>Rising Zan - The Samurai Gunman (Japan)</description>
10581      <year>199?</year>
10582      <publisher>&lt;unknown&gt;</publisher>
10691      <year>1999</year>
10692      <publisher>UEP</publisher>
10693      <info name="alt_title" value="RISING ZAN"/>
1058310694      <info name="serial" value="SLPS-01691" />
1058410695      <sharedfeat name="compatibility" value="NTSC-J"/>
1058510696      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1059010701   </software>
1059110702
1059210703   <software name="robinllo" supported="no">
10593      <description>Robin Lloyd no Bouken (Japan)</description>
10594      <year>199?</year>
10595      <publisher>&lt;unknown&gt;</publisher>
10704      <description>Robin Lloyd no Daibouken (Japan)</description>
10705      <year>2000</year>
10706      <publisher>Gust</publisher>
10707      <info name="alt_title" value="ロビン・ロイドの冒険"/>
1059610708      <info name="serial" value="SLPS-02501" />
1059710709      <sharedfeat name="compatibility" value="NTSC-J"/>
1059810710      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1060310715   </software>
1060410716
1060510717   <software name="robotxro" supported="no">
10606      <description>Robot X Robot (Japan)</description>
10607      <year>199?</year>
10608      <publisher>&lt;unknown&gt;</publisher>
10609      <info name="serial" value="SLPS-02231" />
10718      <description>Robot-X-Robot (Japan)</description>
10719      <year>1999</year>
10720      <publisher>Nemesys</publisher>
10721      <info name="alt_title" value="ロボット×ロボット"/>
10722      <info name="serial" value="SLPS-02331" />
1061010723      <sharedfeat name="compatibility" value="NTSC-J"/>
1061110724      <part name="cdrom" interface="psx_cdrom">
1061210725         <diskarea name="cdrom">
10613            <disk name="robot x robot (japan) [slps-02231]" sha1="fd0813351a8bbcf57cecb2e3f5481d88592140fe"/>
10726            <disk name="robot x robot (japan) [slps-02331]" sha1="fd0813351a8bbcf57cecb2e3f5481d88592140fe"/>
1061410727         </diskarea>
1061510728      </part>
1061610729   </software>
1061710730
1061810731   <software name="roommate" supported="no">
1061910732      <description>Roommate - Inoue Ryoko (Japan)</description>
10620      <year>199?</year>
10621      <publisher>&lt;unknown&gt;</publisher>
10733      <year>1999</year>
10734      <publisher>Datam Polystar</publisher>
10735      <info name="alt_title" value="ルームメイト〜井上涼子〜"/>
1062210736      <info name="serial" value="SLPS-02140" />
1062310737      <sharedfeat name="compatibility" value="NTSC-J"/>
1062410738      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1063110745   <!-- boot OK -->
1063210746   <software name="runningh" supported="no">
1063310747      <description>Running High (Japan)</description>
10634      <year>199?</year>
10635      <publisher>&lt;unknown&gt;</publisher>
10748      <year>1997</year>
10749      <publisher>REX</publisher>
10750      <info name="alt_title" value="ランニング・ハイ"/>
1063610751      <info name="serial" value="SLPS-00751" />
1063710752      <sharedfeat name="compatibility" value="NTSC-J"/>
1063810753      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1064210757      </part>
1064310758   </software>
1064410759
10760   <software name="soundqub" supported="no">
10761      <description>S.Q. - Sound Qube (Japan)</description>
10762      <year>1998</year>
10763      <publisher>&lt;unknown&gt;</publisher>
10764      <info name="alt_title" value="S.Q. サウンドキューブ"/>
10765      <info name="serial" value="SLPS-01309" />
10766      <sharedfeat name="compatibility" value="NTSC-J"/>
10767      <part name="cdrom" interface="psx_cdrom">
10768         <diskarea name="cdrom">
10769            <disk name="sound qube (japan) [slps-01309]" sha1="54139ab64577aec717ca75daa26d87b67887a673"/>
10770         </diskarea>
10771      </part>
10772   </software>
10773
1064510774   <software name="sakkyoku" supported="no">
10646      <description>Sakkyoku Surundamon - Dance Remix-hen (Japan)</description>
10647      <year>199?</year>
10648      <publisher>&lt;unknown&gt;</publisher>
10775      <description>Sakkyoku Surundamon - Dance Remix (Japan)</description>
10776      <year>2000</year>
10777      <publisher>Ving</publisher>
10778      <info name="alt_title" value="作曲するんだもん ダンスリミックス編"/>
1064910779      <info name="serial" value="SLPS-02808" />
1065010780      <sharedfeat name="compatibility" value="NTSC-J"/>
1065110781      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1065710787
1065810788   <software name="sakumash" supported="no">
1065910789      <description>Sakuma-shiki Jinsei Game (Japan)</description>
10660      <year>199?</year>
10661      <publisher>&lt;unknown&gt;</publisher>
10790      <year>1998</year>
10791      <publisher>Takara</publisher>
10792      <info name="alt_title" value="さくま式人生ゲーム"/>
1066210793      <info name="serial" value="SLPS-01740" />
1066310794      <sharedfeat name="compatibility" value="NTSC-J"/>
1066410795      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1067010801
1067110802   <software name="salaryma" supported="no">
1067210803      <description>Salary Man Champ - Tatakau Salary Man (Japan)</description>
10673      <year>199?</year>
10674      <publisher>&lt;unknown&gt;</publisher>
10804      <year>2001</year>
10805      <publisher>Success</publisher>
10806      <info name="alt_title" value="サラリーマンチャンプ たたかうサラリーマン"/>
1067510807      <info name="serial" value="SLPM-86820" />
1067610808      <sharedfeat name="compatibility" value="NTSC-J"/>
1067710809      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1068210814   </software>
1068310815
1068410816   <software name="salarytg" supported="no">
10685      <description>Salary Man Kintaro - The Game (Japan)</description>
10686      <year>199?</year>
10687      <publisher>&lt;unknown&gt;</publisher>
10817      <description>Salaryman Kintarou - The Game (Japan)</description>
10818      <year>2000</year>
10819      <publisher>Bandai</publisher>
10820      <info name="alt_title" value="サラリーマン金太郎 THE GAME"/>
1068810821      <info name="serial" value="SLPS-02806" />
1068910822      <sharedfeat name="compatibility" value="NTSC-J"/>
1069010823      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1069610829
1069710830   <software name="salarysm" supported="no">
1069810831      <description>Salary Man Settai Mahjong (Japan)</description>
10699      <year>199?</year>
10700      <publisher>&lt;unknown&gt;</publisher>
10832      <year>2001</year>
10833      <publisher>Visit</publisher>
10834      <info name="alt_title" value="サラリーマン接待麻雀"/>
1070110835      <info name="serial" value="SLPS-03175" />
1070210836      <sharedfeat name="compatibility" value="NTSC-J"/>
1070310837      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1070810842   </software>
1070910843
1071010844   <software name="samuraid" supported="no">
10711      <description>Samurai Deeper Kyo (Japan)</description>
10712      <year>199?</year>
10713      <publisher>&lt;unknown&gt;</publisher>
10845      <description>Samurai Deeper Kyo (Limited Edition) (Japan)</description>
10846      <year>2002</year>
10847      <publisher>Bandai</publisher>
10848      <info name="alt_title" value="サムライディーパー キョウ"/>
1071410849      <info name="serial" value="SLPS-03505" />
1071510850      <sharedfeat name="compatibility" value="NTSC-J"/>
1071610851      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1072210857
1072310858   <software name="samurais" supported="no">
1072410859      <description>Samurai Spirits - Kenkaku Yubinan Pack (Japan)</description>
10725      <year>199?</year>
10726      <publisher>&lt;unknown&gt;</publisher>
10860      <year>1998</year>
10861      <publisher>SNK</publisher>
10862      <info name="alt_title" value="サムライスピリッツ 剣客指南パック"/>
1072710863      <info name="serial" value="SLPS-00647" />
1072810864      <sharedfeat name="compatibility" value="NTSC-J"/>
1072910865      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1073510871
1073610872   <!-- odd gfx problems -->
1073710873   <software name="samsho3" supported="no">
10738      <description>Samurai Spirits - Zankurou Musouken (Japan)</description>
10739      <year>199?</year>
10740      <publisher>&lt;unknown&gt;</publisher>
10874      <description>Samurai Spirits - Zankurou Musouken (PlayStation the Best) (Japan)</description>
10875      <year>1997</year>
10876      <publisher>SNK</publisher>
10877      <info name="alt_title" value="サムライスピリッツ 斬紅郎無双剣 PlayStation the Best"/>
1074110878      <info name="serial" value="SLPS-91024" />
1074210879      <sharedfeat name="compatibility" value="NTSC-J"/>
1074310880      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1074910886
1075010887   <software name="sangokus" supported="no">
1075110888      <description>Sangokushi Eiketsuden (Japan)</description>
10752      <year>199?</year>
10753      <publisher>&lt;unknown&gt;</publisher>
10889      <year>1996</year>
10890      <publisher>Koei</publisher>
10891      <info name="alt_title" value="三國志英傑伝"/>
1075410892      <info name="serial" value="SLPS-00309" />
1075510893      <sharedfeat name="compatibility" value="NTSC-J"/>
1075610894      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1076010898      </part>
1076110899   </software>
1076210900
10901   <software name="sangokou" supported="no">
10902      <description>Sangokushi Koumeiden (Japan)</description>
10903      <year>1997</year>
10904      <publisher>Koei</publisher>
10905      <info name="alt_title" value="三國志孔明伝"/>
10906      <info name="serial" value="SLPS-00688" />
10907      <sharedfeat name="compatibility" value="NTSC-J"/>
10908      <part name="cdrom" interface="psx_cdrom">
10909         <diskarea name="cdrom">
10910            <disk name="sangokushi koumeiden (japan) [slps-00688]" sha1="2719dea19adbb7f9adf3ed4325cc7254bd09c1d4"/>
10911         </diskarea>
10912      </part>
10913   </software>
10914
1076310915   <software name="sangoku2" supported="no">
1076410916      <description>Sangokushi II (Japan)</description>
10765      <year>199?</year>
10766      <publisher>&lt;unknown&gt;</publisher>
10917      <year>1998</year>
10918      <publisher>Koei</publisher>
10919      <info name="alt_title" value="三國志II"/>
1076710920      <info name="serial" value="SLPS-01596" />
1076810921      <sharedfeat name="compatibility" value="NTSC-J"/>
1076910922      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1077510928
1077610929   <software name="sangoku3" supported="no">
1077710930      <description>Sangokushi III (Japan)</description>
10778      <year>199?</year>
10779      <publisher>&lt;unknown&gt;</publisher>
10931      <year>2001</year>
10932      <publisher>Koei</publisher>
10933      <info name="alt_title" value="三國志III"/>
1078010934      <info name="serial" value="SLPM-86747" />
1078110935      <sharedfeat name="compatibility" value="NTSC-J"/>
1078210936      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1078610940      </part>
1078710941   </software>
1078810942
10789   <software name="sangokou" supported="no">
10790      <description>Sangokushi Koumeiden (Japan)</description>
10791      <year>199?</year>
10792      <publisher>&lt;unknown&gt;</publisher>
10793      <info name="serial" value="SLPS-00688" />
10794      <sharedfeat name="compatibility" value="NTSC-J"/>
10795      <part name="cdrom" interface="psx_cdrom">
10796         <diskarea name="cdrom">
10797            <disk name="sangokushi koumeiden (japan) [slps-00688]" sha1="2719dea19adbb7f9adf3ed4325cc7254bd09c1d4"/>
10798         </diskarea>
10799      </part>
10800   </software>
10801
1080210943   <software name="sangokrt" supported="no">
1080310944      <description>Sangokushi Returns (Japan)</description>
10804      <year>199?</year>
10805      <publisher>&lt;unknown&gt;</publisher>
10945      <year>1997</year>
10946      <publisher>Koei</publisher>
10947      <info name="alt_title" value="三國志リターンズ"/>
1080610948      <info name="serial" value="SLPS-00474" />
1080710949      <sharedfeat name="compatibility" value="NTSC-J"/>
1080810950      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1081410956
1081510957   <software name="sangoku5" supported="no">
1081610958      <description>Sangokushi V (Japan)</description>
10817      <year>199?</year>
10818      <publisher>&lt;unknown&gt;</publisher>
10959      <year>1997</year>
10960      <publisher>Koei</publisher>
10961      <info name="alt_title" value="三国志5繁体中文版"/>
1081910962      <info name="serial" value="SCPS-45128" />
1082010963      <sharedfeat name="compatibility" value="NTSC-J"/>
1082110964      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1082710970
1082810971   <software name="sangoku6" supported="no">
1082910972      <description>Sangokushi VI (Japan)</description>
10830      <year>199?</year>
10831      <publisher>&lt;unknown&gt;</publisher>
10973      <year>1998</year>
10974      <publisher>Koei</publisher>
10975      <info name="alt_title" value="三國志VI"/>
1083210976      <info name="serial" value="SLPM-86129" />
1083310977      <sharedfeat name="compatibility" value="NTSC-J"/>
1083410978      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1083910983   </software>
1084010984
1084110985   <software name="sanyopac" supported="no">
10842      <description>Sanyo Pachinko Paradise 2 (Japan)</description>
10843      <year>199?</year>
10844      <publisher>&lt;unknown&gt;</publisher>
10986      <description>Sanyo Pachinko Paradise 2 - Umi Monogatari Special (Japan)</description>
10987      <year>1999</year>
10988      <publisher>Irem</publisher>
10989      <info name="alt_title" value="三洋パチンコパラダイス2"/>
1084510990      <info name="serial" value="SLPS-02389" />
1084610991      <sharedfeat name="compatibility" value="NTSC-J"/>
1084710992      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1085310998
1085410999   <software name="sarugety" supported="no">
1085511000      <description>Saru! Get You! (Japan)</description>
10856      <year>199?</year>
10857      <publisher>&lt;unknown&gt;</publisher>
11001      <year>1999</year>
11002      <publisher>Sony</publisher>
11003      <info name="alt_title" value="サルゲッチュ"/>
1085811004      <info name="serial" value="SCPS-10091" />
1085911005      <sharedfeat name="compatibility" value="NTSC-J"/>
1086011006      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1086611012
1086711013   <software name="satellit" supported="no">
1086811014      <description>Satelli TV (Japan)</description>
10869      <year>199?</year>
10870      <publisher>&lt;unknown&gt;</publisher>
11015      <year>1998</year>
11016      <publisher>Nippon Ichi</publisher>
11017      <info name="alt_title" value="サテライTV"/>
1087111018      <info name="serial" value="SLPS-01203" />
1087211019      <sharedfeat name="compatibility" value="NTSC-J"/>
1087311020      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1087911026
1088011027   <software name="satomino" supported="no">
1088111028      <description>Satomi no Nazo (Japan)</description>
10882      <year>199?</year>
10883      <publisher>&lt;unknown&gt;</publisher>
11029      <year>1996</year>
11030      <publisher>Sound Technology Japan</publisher>
11031      <info name="alt_title" value="里見の謎"/>
1088411032      <info name="serial" value="SLPS-00613" />
1088511033      <sharedfeat name="compatibility" value="NTSC-J"/>
1088611034      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1089111039   </software>
1089211040
1089311041   <software name="schrodin" supported="no">
10894      <description>Schrodinger no Neko - Die Katze von Schrodinger (Japan)</description>
10895      <year>199?</year>
10896      <publisher>&lt;unknown&gt;</publisher>
11042      <description>Schr&#246;dinger no Neko - Die Katze von Schr&#246;dinger (Japan)</description>
11043      <year>1997</year>
11044      <publisher>Takara</publisher>
11045      <info name="alt_title" value="シュレディンガーの猫"/>
1089711046      <info name="serial" value="SLPS-00780" />
1089811047      <sharedfeat name="compatibility" value="NTSC-J"/>
1089911048      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1090411053   </software>
1090511054
1090611055   <software name="sdgkvm" supported="no">
10907      <description>SD Gundam Eiyuuden - Daikessen!! Knight vs. Musha (Japan)</description>
10908      <year>199?</year>
10909      <publisher>&lt;unknown&gt;</publisher>
11056      <description>SD Gundam Eiyuuden Daikessen - Knight vs. Musha (Japan)</description>
11057      <year>2001</year>
11058      <publisher>Bandai</publisher>
11059      <info name="alt_title" value="SDガンダム英雄伝 大決戦!!騎士VS武者"/>
1091011060      <info name="serial" value="SLPS-03145" />
1091111061      <sharedfeat name="compatibility" value="NTSC-J"/>
1091211062      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1091711067   </software>
1091811068
1091911069   <software name="sdgggf" supported="no">
10920      <description>SD Gundam G-Generation F (Japan)</description>
10921      <year>199?</year>
10922      <publisher>&lt;unknown&gt;</publisher>
11070      <description>SD Gundam G Generation-F (Limited Edition)(Japan)</description>
11071      <year>2000</year>
11072      <publisher>Bandai</publisher>
11073      <info name="alt_title" value="SDガンダムG GENERATION-F(限定版)"/>
1092311074      <info name="serial" value="SLPS-02900, SLPS-02901, SLPS-02902" />
1092411075      <sharedfeat name="compatibility" value="NTSC-J"/>
1092511076      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1094011091   </software>
1094111092
1094211093   <software name="sdgggfif" supported="no">
10943      <description>SD Gundam G-Generation F if (Japan)</description>
10944      <year>199?</year>
10945      <publisher>&lt;unknown&gt;</publisher>
11094      <description>SD Gundam G - Generation-F.I.F (Japan)</description>
11095      <year>2001</year>
11096      <publisher>Bandai</publisher>
11097      <info name="alt_title" value="SDガンダム GGENERATION-F.I.F"/>
1094611098      <info name="serial" value="SLPS-03195" />
1094711099      <sharedfeat name="compatibility" value="NTSC-J"/>
1094811100      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1095311105   </software>
1095411106
1095511107   <software name="sdggg0" supported="no">
10956      <description>SD Gundam G-Generation Zero (Japan)</description>
10957      <year>199?</year>
10958      <publisher>&lt;unknown&gt;</publisher>
11108      <description>SD Gundam G - Generation Zero (Japan)</description>
11109      <year>1999</year>
11110      <publisher>Bandai</publisher>
11111      <info name="alt_title" value="SDガンダム ジージェネレーション・ゼロ"/>
1095911112      <info name="serial" value="SLPS-02200, SLPS-02201, SLPS-02202" />
1096011113      <sharedfeat name="compatibility" value="NTSC-J"/>
1096111114      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1097711130
1097811131   <software name="seabassf" supported="no">
1097911132      <description>Seabass Fishing 2 (Japan)</description>
10980      <year>199?</year>
10981      <publisher>&lt;unknown&gt;</publisher>
11133      <year>1997</year>
11134      <publisher>Victor</publisher>
11135      <info name="alt_title" value="シーバス・フィッシング2"/>
1098211136      <info name="serial" value="SLPS-00992" />
1098311137      <sharedfeat name="compatibility" value="NTSC-J"/>
1098411138      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1098911143   </software>
1099011144
1099111145   <software name="seikaino" supported="no">
10992      <description>Seikai no Monshou (Japan)</description>
10993      <year>199?</year>
10994      <publisher>&lt;unknown&gt;</publisher>
11146      <description>Seikai no Monshou (Crest of the Stars) (Japan)</description>
11147      <year>2000</year>
11148      <publisher>Bandai</publisher>
11149      <info name="alt_title" value="星界の紋章"/>
1099511150      <info name="serial" value="SLPS-02323" />
1099611151      <sharedfeat name="compatibility" value="NTSC-J"/>
1099711152      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1100111156      </part>
1100211157   </software>
1100311158
11159   <software name="seikende" supported="no">
11160      <description>Seiken Densetsu - Legend of Mana (Demo) (Japan)</description>
11161      <year>1999</year>
11162      <publisher>Squaresoft</publisher>
11163      <info name="alt_title" value=""/>
11164      <info name="serial" value="SCPS-45417" />
11165      <sharedfeat name="compatibility" value="NTSC-J"/>
11166      <part name="cdrom" interface="psx_cdrom">
11167         <diskarea name="cdrom">
11168            <disk name="square's preview 5 (japan) (demo) [scps-45417]" sha1="2e84ab79573ce07bb78480a9d75d601e14d07895"/>
11169         </diskarea>
11170      </part>
11171   </software>
11172
1100411173   <software name="seireish" supported="no">
11005      <description>Seirei Shoukan - Princess of Darkness (Japan)</description>
11006      <year>199?</year>
11007      <publisher>&lt;unknown&gt;</publisher>
11174      <description>Seirishoukan - Princess of Darkness (Japan)</description>
11175      <year>1998</year>
11176      <publisher>Shoeisha</publisher>
11177      <info name="alt_title" value="精霊召喚 〜プリンセス オブ ダークネス〜"/>
1100811178      <info name="serial" value="SLPS-01271" />
1100911179      <sharedfeat name="compatibility" value="NTSC-J"/>
1101011180      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1101611186
1101711187   <software name="sengokum" supported="no">
1101811188      <description>Sengoku Mugen (Japan)</description>
11019      <year>199?</year>
11020      <publisher>&lt;unknown&gt;</publisher>
11189      <year>2001</year>
11190      <publisher>Banpresto</publisher>
11191      <info name="alt_title" value="戦国夢幻"/>
1102111192      <info name="serial" value="SLPS-03151" />
1102211193      <sharedfeat name="compatibility" value="NTSC-J"/>
1102311194      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1102811199   </software>
1102911200
1103011201   <software name="senkaita" supported="no">
11031      <description>Senkai Taisen - TV Animation Senkaiden Houshin Engi yori (Japan)</description>
11032      <year>199?</year>
11033      <publisher>&lt;unknown&gt;</publisher>
11202      <description>Senkai Taisen TV Animation Senkaiden Houshin Engi Yori (Japan)</description>
11203      <year>2000</year>
11204      <publisher>Bandai</publisher>
11205      <info name="alt_title" value="仙界大戦 〜TVアニメーション仙界伝封神演義より〜"/>
1103411206      <info name="serial" value="SLPS-02736" />
1103511207      <sharedfeat name="compatibility" value="NTSC-J"/>
1103611208      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1104111213   </software>
1104211214
1104311215   <software name="senryaku" supported="no">
11044      <description>Senryaku Shidan - Tora! Tora! Tora! Rikusen-hen (Japan)</description>
11045      <year>199?</year>
11046      <publisher>&lt;unknown&gt;</publisher>
11216      <description>Senryaku Shidan - Tora! Tora! Tora! Rikusenhen (Japan)</description>
11217      <year>2000</year>
11218      <publisher>DaZZ</publisher>
11219      <info name="alt_title" value="戦略師団 トラ!トラ!トラ! 陸戦編"/>
1104711220      <info name="serial" value="SLPS-02631" />
1104811221      <sharedfeat name="compatibility" value="NTSC-J"/>
1104911222      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1105511228
1105611229   <software name="sentimen" supported="no">
1105711230      <description>Sentimental Graffiti (Japan)</description>
11058      <year>199?</year>
11059      <publisher>&lt;unknown&gt;</publisher>
11231      <year>2001</year>
11232      <publisher>NEC</publisher>
11233      <info name="alt_title" value="センチメンタルグラフティ"/>
1106011234      <info name="serial" value="SLPS-03184" />
1106111235      <sharedfeat name="compatibility" value="NTSC-J"/>
1106211236      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1106711241   </software>
1106811242
1106911243   <software name="sentouko" supported="no">
11070      <description>Sentou Kokka Kai Improved (Japan)</description>
11071      <year>199?</year>
11072      <publisher>&lt;unknown&gt;</publisher>
11244      <description>Sentou Kokka Kai - Improved (Japan)</description>
11245      <year>1997</year>
11246      <publisher>Sony</publisher>
11247      <info name="alt_title" value="戦闘国家-改- IMPROVED"/>
1107311248      <info name="serial" value="SCPS-10034" />
1107411249      <sharedfeat name="compatibility" value="NTSC-J"/>
1107511250      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1108111256
1108211257   <software name="shachoue" supported="no">
1108311258      <description>Shachou Eiyuuden - The Eagle Shooting Heroes (Japan)</description>
11084      <year>199?</year>
11085      <publisher>&lt;unknown&gt;</publisher>
11259      <year>2000</year>
11260      <publisher>Sony</publisher>
11261      <info name="alt_title" value="射雕英雄传"/>
1108611262      <info name="serial" value="SCPS-45510" />
1108711263      <sharedfeat name="compatibility" value="NTSC-J"/>
1108811264      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1109311269   </software>
1109411270
1109511271   <software name="shibasu1" supported="no">
11096      <description>Shibasu 1-2-3 Destiny! (Japan)</description>
11097      <year>199?</year>
11098      <publisher>&lt;unknown&gt;</publisher>
11272      <description>Shibas 1-2-3 Destiny! Unmei O Kaerusha! (Japan)</description>
11273      <year>2000</year>
11274      <publisher>Jaleco</publisher>
11275      <info name="alt_title" value="シーバス 1-2-3"/>
1109911276      <info name="serial" value="SLPS-01893" />
1110011277      <sharedfeat name="compatibility" value="NTSC-J"/>
1110111278      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1110711284
1110811285   <software name="shinmaso" supported="no">
1110911286      <description>Shin Masoukishin - Panzer Warfare (Japan)</description>
11110      <year>199?</year>
11111      <publisher>&lt;unknown&gt;</publisher>
11287      <year>1999</year>
11288      <publisher>Banpresto</publisher>
11289      <info name="alt_title" value="真・魔装機神"/>
1111211290      <info name="serial" value="SLPS-02319" />
1111311291      <sharedfeat name="compatibility" value="NTSC-J"/>
1111411292      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1112011298
1112111299   <software name="shinmega" supported="no">
1112211300      <description>Shin Megami Tensei (Japan)</description>
11123      <year>199?</year>
11124      <publisher>&lt;unknown&gt;</publisher>
11301      <year>2001</year>
11302      <publisher>Atlus</publisher>
11303      <info name="alt_title" value="真・女神転生"/>
1112511304      <info name="serial" value="SLPS-03170" />
1112611305      <sharedfeat name="compatibility" value="NTSC-J"/>
1112711306      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1113211311   </software>
1113311312
1113411313   <software name="shinsdse" supported="no">
11135      <description>Shin SD Sengokuden Kidou Musha Taisen [Limited Edition] (Japan)</description>
11136      <year>199?</year>
11137      <publisher>&lt;unknown&gt;</publisher>
11314      <description>Shin SD Sengokuden - Kidou Musha Taisen (Limited Edition) (Japan)</description>
11315      <year>1996</year>
11316      <publisher>Bandai</publisher>
11317      <info name="alt_title" value="新SD戦国伝 機動武者大戦(限定版)"/>
1113811318      <info name="serial" value="SLPS-00576" />
1113911319      <sharedfeat name="compatibility" value="NTSC-J"/>
1114011320      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1114711327   <!-- boot OK -->
1114811328   <software name="shinthem" supported="no">
1114911329      <description>Shin Theme Park (Japan)</description>
11150      <year>199?</year>
11151      <publisher>&lt;unknown&gt;</publisher>
11330      <year>1997</year>
11331      <publisher>Electronic Arts</publisher>
11332      <info name="alt_title" value="新テーマパーク"/>
1115211333      <info name="serial" value="SLPS-00810" />
1115311334      <sharedfeat name="compatibility" value="NTSC-J"/>
1115411335      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1116011341
1116111342   <software name="shinriga" supported="no">
1116211343      <description>Shinri Game, The (Japan)</description>
11163      <year>199?</year>
11164      <publisher>&lt;unknown&gt;</publisher>
11344      <year>1996</year>
11345      <publisher>Visit</publisher>
11346      <info name="alt_title" value="ザ・心理ゲーム"/>
1116511347      <info name="serial" value="SLPS-00169" />
1116611348      <sharedfeat name="compatibility" value="NTSC-J"/>
1116711349      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1117211354   </software>
1117311355
1117411356   <software name="shinseid" supported="no">
11175      <description>Shinseiden Megaseed Fukkatsu-hen (Japan)</description>
11176      <year>199?</year>
11177      <publisher>&lt;unknown&gt;</publisher>
11357      <description>Shinseiden Megaseed Fukkatsu-Hen (Japan)</description>
11358      <year>1997</year>
11359      <publisher>Banpresto</publisher>
11360      <info name="alt_title" value="神聖伝メガシード 復活編"/>
1117811361      <info name="serial" value="SLPS-00925" />
1117911362      <sharedfeat name="compatibility" value="NTSC-J"/>
1118011363      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1118611369
1118711370   <software name="shinsets" supported="no">
1118811371      <description>Shinsetsu Samurai Spirits - Bushido Retsuden (Japan)</description>
11189      <year>199?</year>
11190      <publisher>&lt;unknown&gt;</publisher>
11372      <year>1997</year>
11373      <publisher>SNK</publisher>
11374      <info name="alt_title" value="真説サムライスピリッツ 武士道烈伝"/>
1119111375      <info name="serial" value="SLPS-00814" />
1119211376      <sharedfeat name="compatibility" value="NTSC-J"/>
1119311377      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1119811382   </software>
1119911383
1120011384   <software name="shiritsu" supported="no">
11201      <description>Shiritsu Justice Gakuen (Japan)</description>
11202      <year>199?</year>
11203      <publisher>&lt;unknown&gt;</publisher>
11385      <description>Shiritsu Justice Gakuen - Legion of Heroes (Japan)</description>
11386      <year>1998</year>
11387      <publisher>Capcom</publisher>
11388      <info name="alt_title" value="私立ジャスティス学園 〜 LEGION OF HEROES 〜"/>
1120411389      <info name="serial" value="SLPS-01240, SLPS-01241" />
1120511390      <sharedfeat name="compatibility" value="NTSC-J"/>
1120611391      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1121711402
1121811403   <software name="shirits2" supported="no">
1121911404      <description>Shiritsu Justice Gakuen - Nekketsu Seishun Nikki 2 (Japan)</description>
11220      <year>199?</year>
11221      <publisher>&lt;unknown&gt;</publisher>
11405      <year>1999</year>
11406      <publisher>Capcom</publisher>
11407      <info name="alt_title" value="私立ジャスティス学園-熱血青春日記2-"/>
1122211408      <info name="serial" value="SLPS-02120" />
1122311409      <sharedfeat name="compatibility" value="NTSC-J"/>
1122411410      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1123011416
1123111417   <software name="shoryusa" supported="no">
1123211418      <description>Shoryu Sangokuengi (Japan)</description>
11233      <year>199?</year>
11234      <publisher>&lt;unknown&gt;</publisher>
11419      <year>1996</year>
11420      <publisher>Imageneer</publisher>
11421      <info name="alt_title" value="昇龍三国演義"/>
1123511422      <info name="serial" value="SLPS-00253" />
1123611423      <sharedfeat name="compatibility" value="NTSC-J"/>
1123711424      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1124311430
1124411431   <software name="shuranom" supported="no">
1124511432      <description>Shura no Mon (Japan)</description>
11246      <year>199?</year>
11247      <publisher>&lt;unknown&gt;</publisher>
11433      <year>1998</year>
11434      <publisher>Kodansha</publisher>
11435      <info name="alt_title" value="修羅の門"/>
1124811436      <info name="serial" value="SLPS-01202" />
1124911437      <sharedfeat name="compatibility" value="NTSC-J"/>
1125011438      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1125711445   <!-- boot OK -->
1125811446   <software name="sidebysi" supported="no">
1125911447      <description>Side by Side Special 2000 (Japan)</description>
11260      <year>199?</year>
11261      <publisher>&lt;unknown&gt;</publisher>
11448      <year>1999</year>
11449      <publisher>Taito</publisher>
11450      <info name="alt_title" value="サイドバイサイドスペシャル2000"/>
1126211451      <info name="serial" value="SLPM-86344" />
1126311452      <sharedfeat name="compatibility" value="NTSC-J"/>
1126411453      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1126911458   </software>
1127011459
1127111460   <software name="sidepock" supported="no">
11272      <description>Side Pocket 3 (Japan)</description>
11273      <year>199?</year>
11274      <publisher>&lt;unknown&gt;</publisher>
11461      <description>Side Pocket 3 - 3D Polygon Billiard Game (Japan)</description>
11462      <year>1998</year>
11463      <publisher>Data East</publisher>
11464      <info name="alt_title" value="サイドポケット3"/>
1127511465      <info name="serial" value="SLPS-01079" />
1127611466      <sharedfeat name="compatibility" value="NTSC-J"/>
1127711467      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1128311473
1128411474   <software name="sidewind" supported="no">
1128511475      <description>Sidewinder (Japan)</description>
11286      <year>199?</year>
11287      <publisher>&lt;unknown&gt;</publisher>
11476      <year>1996</year>
11477      <publisher>Asmik</publisher>
11478      <info name="alt_title" value="サイドワインダー"/>
1128811479      <info name="serial" value="SLPS-00156" />
1128911480      <sharedfeat name="compatibility" value="NTSC-J"/>
1129011481      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1129511486   </software>
1129611487
1129711488   <software name="silentmo" supported="no">
11298      <description>Silent Mobius - Genei no Datenshi (Japan)</description>
11299      <year>199?</year>
11300      <publisher>&lt;unknown&gt;</publisher>
11489      <description>Silent M&#246;bius - Genei no Datenshi (Japan)</description>
11490      <year>1998</year>
11491      <publisher>Bandai</publisher>
11492      <info name="alt_title" value="サイレントメビウス 幻影の堕天使"/>
1130111493      <info name="serial" value="SLPS-01803" />
1130211494      <sharedfeat name="compatibility" value="NTSC-J"/>
1130311495      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1130911501
1131011502   <software name="silhouet" supported="no">
1131111503      <description>Silhouette Mirage - Reprogrammed Hope (Japan)</description>
11312      <year>199?</year>
11313      <publisher>&lt;unknown&gt;</publisher>
11504      <year>1998</year>
11505      <publisher>ESP</publisher>
11506      <info name="alt_title" value="シルエットミラージュ"/>
1131411507      <info name="serial" value="SLPS-01449" />
1131511508      <sharedfeat name="compatibility" value="NTSC-J"/>
1131611509      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1132211515
1132311516   <software name="silhstor" supported="no">
1132411517      <description>Silhouette Stories (Japan)</description>
11325      <year>199?</year>
11326      <publisher>&lt;unknown&gt;</publisher>
11518      <year>1996</year>
11519      <publisher>Kaneko</publisher>
11520      <info name="alt_title" value="シルエット☆ストーリィズ"/>
1132711521      <info name="serial" value="SLPS-00374" />
1132811522      <sharedfeat name="compatibility" value="NTSC-J"/>
1132911523      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1133511529
1133611530   <!-- black screen -->
1133711531   <software name="s15j_01" supported="no">
11338      <description>Simple 1500 Jitsuyou Series Vol.01 - Norikae Annai - 2000 Edition (Japan)</description>
11339      <year>199?</year>
11340      <publisher>&lt;unknown&gt;</publisher>
11532      <description>Simple 1500 Jitsuyou Series Vol.01 - Norikae Annai -2000 Edition- (Japan)</description>
11533      <year>2000</year>
11534      <publisher>D3</publisher>
11535      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.01 乗換案内〜2000年版〜"/>
1134111536      <info name="serial" value="SLPS-02842" />
1134211537      <sharedfeat name="compatibility" value="NTSC-J"/>
1134311538      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1135011545   <!-- boot ok -->
1135111546   <software name="s15j_03" supported="no">
1135211547      <description>Simple 1500 Jitsuyou Series Vol.03 - Seimei Handan (Japan)</description>
11353      <year>199?</year>
11354      <publisher>&lt;unknown&gt;</publisher>
11548      <year>2000</year>
11549      <publisher>D3</publisher>
11550      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.03 THE 姓名判断"/>
1135511551      <info name="serial" value="SLPS-02841" />
1135611552      <sharedfeat name="compatibility" value="NTSC-J"/>
1135711553      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1136411560   <!-- black screen -->
1136511561   <software name="s15j_04" supported="no">
1136611562      <description>Simple 1500 Jitsuyou Series Vol.04 - Ryouri (Japan)</description>
11367      <year>199?</year>
11368      <publisher>&lt;unknown&gt;</publisher>
11563      <year>2000</year>
11564      <publisher>D3</publisher>
11565      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.04 THE 料理〜定番料理レシピ集〜"/>
1136911566      <info name="serial" value="SLPS-02839" />
1137011567      <sharedfeat name="compatibility" value="NTSC-J"/>
1137111568      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1137811575   <!-- boot ok -->
1137911576   <software name="s15j_05" supported="no">
1138011577      <description>Simple 1500 Jitsuyou Series Vol.05 - Kusuri no Jiten - Pill Book 2001 Edition (Japan)</description>
11381      <year>199?</year>
11382      <publisher>&lt;unknown&gt;</publisher>
11578      <year>2001</year>
11579      <publisher>D3</publisher>
11580      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.05 薬の事典〜ピルブック2001年版〜"/>
1138311581      <info name="serial" value="SLPM-86706" />
1138411582      <sharedfeat name="compatibility" value="NTSC-J"/>
1138511583      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1139211590   <!-- black screen -->
1139311591   <software name="s15j_06" supported="no">
1139411592      <description>Simple 1500 Jitsuyou Series Vol.06 - Cocktail no Recipe (Japan)</description>
11395      <year>199?</year>
11396      <publisher>&lt;unknown&gt;</publisher>
11593      <year>2001</year>
11594      <publisher>D3</publisher>
11595      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.06 カクテルのレシピ"/>
1139711596      <info name="serial" value="SLPM-86707" />
1139811597      <sharedfeat name="compatibility" value="NTSC-J"/>
1139911598      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1140611605   <!-- black screen -->
1140711606   <software name="s15j_07" supported="no">
1140811607      <description>Simple 1500 Jitsuyou Series Vol.07 - Tanoshiku Manabu Unten Menkyo (Japan)</description>
11409      <year>199?</year>
11410      <publisher>&lt;unknown&gt;</publisher>
11608      <year>2001</year>
11609      <publisher>D3</publisher>
11610      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.07 楽しく学ぶ運転免許"/>
1141111611      <info name="serial" value="SLPM-86797" />
1141211612      <sharedfeat name="compatibility" value="NTSC-J"/>
1141311613      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1142011620   <!-- MESS crash after company logos -->
1142111621   <software name="s15j_08" supported="no">
1142211622      <description>Simple 1500 Jitsuyou Series Vol.08 - 1-Jikan de Wakaru Kabushiki Toushi (Japan)</description>
11423      <year>199?</year>
11424      <publisher>&lt;unknown&gt;</publisher>
11623      <year>2001</year>
11624      <publisher>D3</publisher>
11625      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.08 1時間でわかる株式投資"/>
1142511626      <info name="serial" value="SLPM-86708" />
1142611627      <sharedfeat name="compatibility" value="NTSC-J"/>
1142711628      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1143411635   <!-- black screen -->
1143511636   <software name="s15j_09" supported="no">
1143611637      <description>Simple 1500 Jitsuyou Series Vol.09 - Watashi Style no Aromatherapy (Japan)</description>
11437      <year>199?</year>
11438      <publisher>&lt;unknown&gt;</publisher>
11638      <year>2001</year>
11639      <publisher>D3</publisher>
11640      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.09 わたしスタイルのアロマセラピー"/>
1143911641      <info name="serial" value="SLPM-86843" />
1144011642      <sharedfeat name="compatibility" value="NTSC-J"/>
1144111643      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1144811650   <!-- black screen -->
1144911651   <software name="s15j_10" supported="no">
1145011652      <description>Simple 1500 Jitsuyou Series Vol.10 - Tarot Uranai (Japan)</description>
11451      <year>199?</year>
11452      <publisher>&lt;unknown&gt;</publisher>
11653      <year>2001</year>
11654      <publisher>D3</publisher>
11655      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.10 タロット占い"/>
1145311656      <info name="serial" value="SLPM-86913" />
1145411657      <sharedfeat name="compatibility" value="NTSC-J"/>
1145511658      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1146211665   <!-- boot ok -->
1146311666   <software name="s15j_11" supported="no">
1146411667      <description>Simple 1500 Jitsuyou Series Vol.11 - Katei de Dekiru Tsubo Shiatsu (Japan)</description>
11465      <year>199?</year>
11466      <publisher>&lt;unknown&gt;</publisher>
11668      <year>2001</year>
11669      <publisher>D3</publisher>
11670      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.11 家庭でできるツボ指圧"/>
1146711671      <info name="serial" value="SLPM-86968" />
1146811672      <sharedfeat name="compatibility" value="NTSC-J"/>
1146911673      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1147611680   <!-- boot ok -->
1147711681   <software name="s15j_12" supported="no">
1147811682      <description>Simple 1500 Jitsuyou Series Vol.12 - Katei no Igaku (Japan)</description>
11479      <year>199?</year>
11480      <publisher>&lt;unknown&gt;</publisher>
11683      <year>2001</year>
11684      <publisher>D3</publisher>
11685      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.12 家庭の医学"/>
1148111686      <info name="serial" value="SLPM-86969" />
1148211687      <sharedfeat name="compatibility" value="NTSC-J"/>
1148311688      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1149011695   <!-- boot ok -->
1149111696   <software name="s15j_13" supported="no">
1149211697      <description>Simple 1500 Jitsuyou Series Vol.13 - Shinri Game - Soreike X Kokoroji (Japan)</description>
11493      <year>199?</year>
11494      <publisher>&lt;unknown&gt;</publisher>
11698      <year>2002</year>
11699      <publisher>D3</publisher>
11700      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.13 心理ゲーム 〜それいけ×ココロジー ココロのウソの摩訶不思議〜"/>
1149511701      <info name="serial" value="SLPM-87016" />
1149611702      <sharedfeat name="compatibility" value="NTSC-J"/>
1149711703      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1150611712      <description>Simple 1500 Jitsuyou Series Vol.14 - Kurashi no Manner (Japan)</description>
1150711713      <year>199?</year>
1150811714      <publisher>&lt;unknown&gt;</publisher>
11715      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.14 暮らしのマナー 〜冠婚葬祭編〜"/>
1150911716      <info name="serial" value="SLPM-87022" />
1151011717      <sharedfeat name="compatibility" value="NTSC-J"/>
1151111718      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1151711724
1151811725   <!-- boot ok -->
1151911726   <software name="s15j_15" supported="no">
11520      <description>Simple 1500 Jitsuyou Series Vol.15 - Inu no Kaikata (Japan)</description>
11521      <year>199?</year>
11522      <publisher>&lt;unknown&gt;</publisher>
11727      <description>Simple 1500 Jitsuyou Series Vol.15 - Inu no Kaikata - Sekai no Inu Catalog (Japan)</description>
11728      <year>2002</year>
11729      <publisher>D3</publisher>
11730      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.15 犬の飼い方 〜世界の犬カタログ〜"/>
1152311731      <info name="serial" value="SLPM-87051" />
1152411732      <sharedfeat name="compatibility" value="NTSC-J"/>
1152511733      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1153111739
1153211740   <!-- boot ok -->
1153311741   <software name="s15j_16" supported="no">
11534      <description>Simple 1500 Jitsuyou Series Vol.16 - Neko no Kaikata (Japan)</description>
11535      <year>199?</year>
11536      <publisher>&lt;unknown&gt;</publisher>
11742      <description>Simple 1500 Jitsuyou Series Vol.16 - Neko no Kaikata - Sekai no Neko Catalo (Japan)</description>
11743      <year>2002</year>
11744      <publisher>D3</publisher>
11745      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.16 猫の飼い方 〜世界の猫カタログ〜"/>
1153711746      <info name="serial" value="SLPM-87052" />
1153811747      <sharedfeat name="compatibility" value="NTSC-J"/>
1153911748      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1154611755   <!-- black screen -->
1154711756   <software name="s15j_17" supported="no">
1154811757      <description>Simple 1500 Jitsuyou Series Vol.17 - Planetarium (Japan)</description>
11549      <year>199?</year>
11550      <publisher>&lt;unknown&gt;</publisher>
11758      <year>2002</year>
11759      <publisher>D3</publisher>
11760      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.17 THE プラネタリウム"/>
1155111761      <info name="serial" value="SLPM-87049" />
1155211762      <sharedfeat name="compatibility" value="NTSC-J"/>
1155311763      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1155911769
1156011770   <!-- black screen -->
1156111771   <software name="s15j_18" supported="no">
11562      <description>Simple 1500 Jitsuyou Series Vol.18 - Kanji Quiz - Kanji Kentei Ni Challenge (Japan)</description>
11563      <year>199?</year>
11564      <publisher>&lt;unknown&gt;</publisher>
11565      <info name="serial" value="SLPS-3186" />
11772      <description>Simple 1500 Jitsuyou Series Vol.18 - Kanji Quiz - Kanji Keitei ni Challenge (Japan)</description>
11773      <year>2002</year>
11774      <publisher>D3</publisher>
11775      <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.18 THE 漢字クイズ 〜漢字検定にチャレンジ〜"/>
11776      <info name="serial" value="SLPM-87072" />
1156611777      <sharedfeat name="compatibility" value="NTSC-J"/>
1156711778      <part name="cdrom" interface="psx_cdrom">
1156811779         <diskarea name="cdrom">
11569            <disk name="simple 1500 jitsuyou series vol.18 - kanji quiz - kanji kentei ni challenge (japan) [slps-3186]" sha1="a8ad5f5ac74436bf7ebbad9faa20f4f04d1320e4"/>
11780            <disk name="simple 1500 jitsuyou series vol.18 - kanji quiz - kanji kentei ni challenge (japan) [slpm-87072]" sha1="a8ad5f5ac74436bf7ebbad9faa20f4f04d1320e4"/>
1157011781         </diskarea>
1157111782      </part>
1157211783   </software>
1157311784
1157411785   <software name="s15_h01" supported="no">
11575      <description>Simple 1500 Series Hello Kitty Vol.01 - Hello Kitty Bowling (Japan)</description>
11576      <year>199?</year>
11577      <publisher>&lt;unknown&gt;</publisher>
11786      <description>Simple 1500 Series - Hello Kitty vol.01 - Hello Kitty Bowling (Japan)</description>
11787      <year>2001</year>
11788      <publisher>D3</publisher>
11789      <info name="alt_title" value="SIMPLE1500シリーズ ハローキティ Vol.01 Hello Kitty ボウリング"/>
1157811790      <info name="serial" value="SLPM-86866" />
1157911791      <sharedfeat name="compatibility" value="NTSC-J"/>
1158011792      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1158611798
1158711799   <software name="s15_h02" supported="no">
1158811800      <description>Simple 1500 Series Hello Kitty Vol.02 - Hello Kitty Illust Puzzle (Japan)</description>
11589      <year>199?</year>
11590      <publisher>&lt;unknown&gt;</publisher>
11801      <year>2001</year>
11802      <publisher>D3</publisher>
11803      <info name="alt_title" value="SIMPLE1500シリーズ ハローキティ Vol.02 Hello Kitty イラストパズル"/>
1159111804      <info name="serial" value="SLPM-86867" />
1159211805      <sharedfeat name="compatibility" value="NTSC-J"/>
1159311806      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1159811811   </software>
1159911812
1160011813   <software name="s15_h03" supported="no">
11601      <description>Simple 1500 Series Hello Kitty Vol.03 - Hello Kitty Block Kuzushi (Japan)</description>
11814      <description> Simple 1500 Series Hello Kitty vol.03 - Hello Kitty Block Kuzushi (Japan)</description>
1160211815      <year>199?</year>
1160311816      <publisher>&lt;unknown&gt;</publisher>
11817      <info name="alt_title" value="SIMPLE1500シリーズ ハローキティ Vol.03 Hello Kitty ブロックくずし"/>
1160411818      <info name="serial" value="SLPM-86911" />
1160511819      <sharedfeat name="compatibility" value="NTSC-J"/>
1160611820      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1161111825   </software>
1161211826
1161311827   <software name="s15_h04" supported="no">
11614      <description>Simple 1500 Series Hello Kitty Vol.04 - Trump (Japan)</description>
11615      <year>199?</year>
11616      <publisher>&lt;unknown&gt;</publisher>
11828      <description>Simple 1500 Series Hello Kitty Vol.04 - Hello Kitty Trump (Japan)</description>
11829      <year>2001</year>
11830      <publisher>D3</publisher>
11831      <info name="alt_title" value="SIMPLE1500シリーズ ハローキティ Vol.04 Hello Kitty トランプ"/>
1161711832      <info name="serial" value="SLPM-86910" />
1161811833      <sharedfeat name="compatibility" value="NTSC-J"/>
1161911834      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1162411839   </software>
1162511840
1162611841   <software name="s15_37" supported="no">
11627      <description>Simple 1500 Series Vol.037 - The Illustration Puzzle &amp; Slide Puzzle (Japan)</description>
11628      <year>199?</year>
11629      <publisher>&lt;unknown&gt;</publisher>
11842      <description>Simple 1500 Series Vol.37 - The Illustration Puzzle &#38; Slide Puzzle (Japan)</description>
11843      <year>2000</year>
11844      <publisher>D3</publisher>
11845      <info name="alt_title" value="SIMPLE1500シリーズ Vol.37 THE イラストパズル&スライドパズル"/>
1163011846      <info name="serial" value="SLPS-02958" />
1163111847      <sharedfeat name="compatibility" value="NTSC-J"/>
1163211848      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1163711853   </software>
1163811854
1163911855   <software name="s15_51" supported="no">
11640      <description>Simple 1500 Series Vol.051 - The Jigsaw Puzzle (Japan)</description>
11641      <year>199?</year>
11642      <publisher>&lt;unknown&gt;</publisher>
11856      <description>Simple 1500 Series vol.51 - The Jigsaw Puzzle (Japan)</description>
11857      <year>2000</year>
11858      <publisher>D3</publisher>
11859      <info name="alt_title" value="SIMPLE1500シリーズ Vol.51 THE ジグソーパズル"/>
1164311860      <info name="serial" value="SLPM-86700" />
1164411861      <sharedfeat name="compatibility" value="NTSC-J"/>
1164511862      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1165011867   </software>
1165111868
1165211869   <software name="s15_63" supported="no">
11653      <description>Simple 1500 Series Vol.063 - The Gun Shooting 2 (Japan)</description>
11654      <year>199?</year>
11655      <publisher>&lt;unknown&gt;</publisher>
11870      <description>Simple 1500 Series vol.63 - The Gun Shooting 2 (Japan)</description>
11871      <year>2001</year>
11872      <publisher>D3</publisher>
11873      <info name="alt_title" value="SIMPLE1500シリーズ Vol.63 THE ガンシューティング2"/>
1165611874      <info name="serial" value="SLPM-86816" />
1165711875      <sharedfeat name="compatibility" value="NTSC-J"/>
1165811876      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1166311881   </software>
1166411882
1166511883   <software name="s15_67" supported="no">
11666      <description>Simple 1500 Series Vol.067 - The Soccer - Dynamite Soccer 1500 (Japan)</description>
11667      <year>199?</year>
11668      <publisher>&lt;unknown&gt;</publisher>
11884      <description>Simple 1500 Series vol.67 - The Soccer - Dynamite Soccer 1500 (Japan)</description>
11885      <year>2001</year>
11886      <publisher>D3</publisher>
11887      <info name="alt_title" value="SIMPLE1500シリーズ Vol.67 THE サッカー 〜ダイナマイトサッカー1500〜"/>
1166911888      <info name="serial" value="SLPM-86864" />
1167011889      <sharedfeat name="compatibility" value="NTSC-J"/>
1167111890      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1167611895   </software>
1167711896
1167811897   <software name="s15_71" supported="no">
11679      <description>Simple 1500 Series Vol.071 - The Renai Simulation 2 (Japan)</description>
11680      <year>199?</year>
11681      <publisher>&lt;unknown&gt;</publisher>
11898      <description>Simple 1500 Series vol.71 - The Renai Simulation 2 (Japan)</description>
11899      <year>2001</year>
11900      <publisher>D3</publisher>
11901      <info name="alt_title" value="SIMPLE1500シリーズ Vol.71 THE 恋愛シミュレーション2 〜ふれあい〜"/>
1168211902      <info name="serial" value="SLPM-86870" />
1168311903      <sharedfeat name="compatibility" value="NTSC-J"/>
1168411904      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1168911909   </software>
1169011910
1169111911   <software name="s15_72" supported="no">
11692      <description>Simple 1500 Series Vol.072 - The Beach Volley (Japan)</description>
11693      <year>199?</year>
11694      <publisher>&lt;unknown&gt;</publisher>
11912      <description>Simple 1500 Series vol.72 - The Beach Volley (Japan)</description>
11913      <year>2001</year>
11914      <publisher>D3</publisher>
11915      <info name="alt_title" value="SIMPLE1500シリーズ Vol.72 THE ビーチバレー"/>
1169511916      <info name="serial" value="SLPM-86871" />
1169611917      <sharedfeat name="compatibility" value="NTSC-J"/>
1169711918      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1170211923   </software>
1170311924
1170411925   <software name="s15_73" supported="no">
11705      <description>Simple 1500 Series Vol.073 - The Invader - Space Invaders 1500 (Japan)</description>
11706      <year>199?</year>
11707      <publisher>&lt;unknown&gt;</publisher>
11926      <description>Simple 1500 Series vol.73 - The Invaders - Space Invaders 1500 (Japan)</description>
11927      <year>2001</year>
11928      <publisher>D3</publisher>
11929      <info name="alt_title" value="SIMPLE1500シリーズ Vol.73 THE インベーダー"/>
1170811930      <info name="serial" value="SLPM-86900" />
1170911931      <sharedfeat name="compatibility" value="NTSC-J"/>
1171011932      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1171511937   </software>
1171611938
1171711939   <software name="s15_76" supported="no">
11718      <description>Simple 1500 Series Vol.076 - The Dodge Ball (Japan)</description>
11719      <year>199?</year>
11720      <publisher>&lt;unknown&gt;</publisher>
11940      <description>Simple 1500 Series vol.76 - The Dodgeball (Japan)</description>
11941      <year>2001</year>
11942      <publisher>D3</publisher>
11943      <info name="alt_title" value="SIMPLE1500シリーズ Vol.76 THE ドッヂボール"/>
1172111944      <info name="serial" value="SLPM-86914" />
1172211945      <sharedfeat name="compatibility" value="NTSC-J"/>
1172311946      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1172811951   </software>
1172911952
1173011953   <software name="s15_83" supported="no">
11731      <description>Simple 1500 Series Vol.083 - The Wake Board - Burstrick Wake Boarding (Japan)</description>
11732      <year>199?</year>
11733      <publisher>&lt;unknown&gt;</publisher>
11954      <description>Simple 1500 Series vol.83 - The Wakeboard - BursTrick Wake Boarding!! (Japan)</description>
11955      <year>2001</year>
11956      <publisher>D3</publisher>
11957      <info name="alt_title" value="SIMPLE1500シリーズ Vol.83 THE ウェイクボード"/>
1173411958      <info name="serial" value="SLPM-86998" />
1173511959      <sharedfeat name="compatibility" value="NTSC-J"/>
1173611960      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1174111965   </software>
1174211966
1174311967   <software name="s15_85" supported="no">
11744      <description>Simple 1500 Series Vol.085 - The Sengoku Bushou - Tenka Touitsu no Yabou (Japan)</description>
11745      <year>199?</year>
11746      <publisher>&lt;unknown&gt;</publisher>
11968      <description>Simple 1500 Series vol.85 - The Sengoku Bushou - Tenka Touitsu no Yabou (Japan)</description>
11969      <year>2002</year>
11970      <publisher>D3</publisher>
11971      <info name="alt_title" value="SIMPLE1500シリーズ Vol.85 THE 戦国武将 〜天下統一の野望〜"/>
1174711972      <info name="serial" value="SLPM-87008" />
1174811973      <sharedfeat name="compatibility" value="NTSC-J"/>
1174911974      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1175411979   </software>
1175511980
1175611981   <software name="s15_88" supported="no">
11757      <description>Simple 1500 Series Vol.088 - The Gal Mahjong (Japan)</description>
11758      <year>199?</year>
11759      <publisher>&lt;unknown&gt;</publisher>
11982      <description>Simple 1500 Series vol.88 - The Gal Mahjong - Love Songs - Idol wa High Rate (Japan)</description>
11983      <year>2002</year>
11984      <publisher>D3</publisher>
11985      <info name="alt_title" value="SIMPLE1500シリーズ Vol.88 THE ギャル麻雀 〜LoveSongs アイドルはハイレ〜ト〜"/>
1176011986      <info name="serial" value="SLPM-87023" />
1176111987      <sharedfeat name="compatibility" value="NTSC-J"/>
1176211988      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1176711993   </software>
1176811994
1176911995   <software name="s15_89" supported="no">
11770      <description>Simple 1500 Series Vol.089 - The Power Shovel Ni Norou!! (Japan)</description>
11771      <year>199?</year>
11772      <publisher>&lt;unknown&gt;</publisher>
11996      <description>Simple 1500 Series vol.89 - The Power Shovel - Power Shovel ni Norou! (Japan)</description>
11997      <year>2002</year>
11998      <publisher>D3</publisher>
11999      <info name="alt_title" value="SIMPLE1500シリーズ Vol.89 THE パワーショベル 〜パワーショベルに乗ろう!!〜"/>
1177312000      <info name="serial" value="SLPM-87035" />
1177412001      <sharedfeat name="compatibility" value="NTSC-J"/>
1177512002      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1178012007   </software>
1178112008
1178212009   <software name="s15_90" supported="no">
11783      <description>Simple 1500 Series Vol.090 - The Sensha (Japan)</description>
11784      <year>199?</year>
11785      <publisher>&lt;unknown&gt;</publisher>
12010      <description>Simple 1500 Series vol.90 - The Sensha (Japan)</description>
12011      <year>2002</year>
12012      <publisher>D3</publisher>
12013      <info name="alt_title" value="SIMPLE1500シリーズ Vol.90 THE 戦車"/>
1178612014      <info name="serial" value="SLPM-87044" />
1178712015      <sharedfeat name="compatibility" value="NTSC-J"/>
1178812016      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1179312021   </software>
1179412022
1179512023   <software name="s15_93" supported="no">
11796      <description>Simple 1500 Series Vol.093 - The Puzzle Bobble - Puzzle Bobble 4 (Japan)</description>
11797      <year>199?</year>
11798      <publisher>&lt;unknown&gt;</publisher>
12024      <description>Simple 1500 Series Vol.93 - The Puzzle Bobble 4 (Japan)</description>
12025      <year>2002</year>
12026      <publisher>D3</publisher>
12027      <info name="alt_title" value="SIMPLE1500シリーズ Vol.93 THE パズルボブル 〜パズルボブル4〜"/>
1179912028      <info name="serial" value="SLPM-87057" />
1180012029      <sharedfeat name="compatibility" value="NTSC-J"/>
1180112030      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1180612035   </software>
1180712036
1180812037   <software name="s15_97" supported="no">
11809      <description>Simple 1500 Series Vol.097 - The Squash (Japan)</description>
11810      <year>199?</year>
11811      <publisher>&lt;unknown&gt;</publisher>
12038      <description>Simple 1500 Series vol.97 - The Squash (Japan)</description>
12039      <year>2002</year>
12040      <publisher>D3</publisher>
12041      <info name="alt_title" value="SIMPLE1500シリーズ Vol.97 THE スカッシュ"/>
1181212042      <info name="serial" value="SLPM-87088" />
1181312043      <sharedfeat name="compatibility" value="NTSC-J"/>
1181412044      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1181912049   </software>
1182012050
1182112051   <software name="s15_99" supported="no">
11822      <description>Simple 1500 Series Vol.099 - The Kendo (Japan)</description>
11823      <year>199?</year>
11824      <publisher>&lt;unknown&gt;</publisher>
12052      <description>Simple 1500 Series Vol.99 - The Kendo - Ken no Hanamichi (Japan)</description>
12053      <year>2002</year>
12054      <publisher>D3</publisher>
12055      <info name="alt_title" value="SIMPLE1500シリーズ Vol.99 THE 剣道 〜剣の花道〜"/>
1182512056      <info name="serial" value="SLPM-87140" />
1182612057      <sharedfeat name="compatibility" value="NTSC-J"/>
1182712058      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1183212063   </software>
1183312064
1183412065   <software name="s15_101" supported="no">
11835      <description>Simple 1500 Series Vol.101 - The Sentou (Japan)</description>
11836      <year>199?</year>
11837      <publisher>&lt;unknown&gt;</publisher>
12066      <description>Simple 1500 series vol.101 - The Sentou (Japan)</description>
12067      <year>2003</year>
12068      <publisher>D3</publisher>
12069      <info name="alt_title" value="SIMPLE1500シリーズ Vol.101 THE 銭湯"/>
1183812070      <info name="serial" value="SLPM-87142" />
1183912071      <sharedfeat name="compatibility" value="NTSC-J"/>
1184012072      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1184512077   </software>
1184612078
1184712079   <software name="s15_102" supported="no">
11848      <description>Simple 1500 Series Vol.102 - The Densha Untenshi - Densha de Go! Nagoya Tetsudo-hen (Japan)</description>
11849      <year>199?</year>
11850      <publisher>&lt;unknown&gt;</publisher>
12080      <description>Simple 1500 Series Vol.102 - The Densha Untensha - Densha de Go! - Nagoya Tetsudou-hen (Japan)</description>
12081      <year>2002</year>
12082      <publisher>D3</publisher>
12083      <info name="alt_title" value="SIMPLE1500シリーズ Vol.102 THE 電車運転手〜電車でGO!名古屋鉄道編〜"/>
1185112084      <info name="serial" value="SLPM-87144" />
1185212085      <sharedfeat name="compatibility" value="NTSC-J"/>
1185312086      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1185812091   </software>
1185912092
1186012093   <software name="s15_103" supported="no">
11861      <description>Simple 1500 Series Vol.103 - The Ganso Densha Untenshi - Densha de Go! (Japan)</description>
11862      <year>199?</year>
11863      <publisher>&lt;unknown&gt;</publisher>
12094      <description>Simple 1500 Series Vol.103 - The Ganso Densha Utenshi - Densha De Go! (Japan)</description>
12095      <year>2003</year>
12096      <publisher>D3</publisher>
12097      <info name="alt_title" value="SIMPLE1500シリーズ Vol.103 THE 元祖電車運転士〜電車でGO!〜"/>
1186412098      <info name="serial" value="SLPM-87212" />
1186512099      <sharedfeat name="compatibility" value="NTSC-J"/>
1186612100      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1187112105   </software>
1187212106
1187312107   <software name="s15_104" supported="no">
11874      <description>Simple 1500 Series Vol.104 - The Pink Panther (Japan)</description>
11875      <year>199?</year>
11876      <publisher>&lt;unknown&gt;</publisher>
12108      <description>Simple 1500 Series Vol.104 - The Pink Panther - Pinkadelic Pursuit (Japan)</description>
12109      <year>2003</year>
12110      <publisher>D3</publisher>
12111      <info name="alt_title" value="SIMPLE1500シリーズ Vol.104 THE ピンクパンサー"/>
1187712112      <info name="serial" value="SLPM-87215" />
1187812113      <sharedfeat name="compatibility" value="NTSC-J"/>
1187912114      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1188312118      </part>
1188412119   </software>
1188512120
12121   <!-- to dump!
12122   <software name="sc2k_01" supported="no">
12123       <description>Simple Characters 2000 Series Vol.01 - Kidou Senshi Gundam - The Gunjin Shougi (Japan)</description>
12124       <year>2001</year>
12125       <publisher>Bandai</publisher>
12126       <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.01 機動戦士ガンダム THE 軍人将棋"/>
12127       <info name="serial" value="SLPS-03309" />
12128       <sharedfeat name="compatibility" value="NTSC-J"/>
12129       <part name="cdrom" interface="psx_cdrom">
12130           <diskarea name="cdrom">
12131               <disk name="simple characters 2000 series vol.01 - kidou senshi gundam (japan) [slps-03309]" sha1=""/>
12132           </diskarea>
12133       </part>
12134   </software>
12135   -->
12136
1188612137   <software name="sc2k_02" supported="no">
1188712138      <description>Simple Characters 2000 Series Vol.02 - Afro Ken - The Puzzle (Japan)</description>
11888      <year>199?</year>
11889      <publisher>&lt;unknown&gt;</publisher>
12139      <year>2001</year>
12140      <publisher>Bandai</publisher>
12141      <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.02 アフロ犬 THE パズル"/>
1189012142      <info name="serial" value="SLPS-03307" />
1189112143      <sharedfeat name="compatibility" value="NTSC-J"/>
1189212144      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1189512147         </diskarea>
1189612148      </part>
1189712149   </software>
11898   <!-- dupe
11899   <software name="sc2k_02" supported="no">
11900   <description>Simple Characters 2000 Series Vol.02 - Afroken - The Puzzle (Japan)</description>
11901   <year>199?</year>
11902   <publisher>&lt;unknown&gt;</publisher>
11903   <info name="serial" value="SLPS-03307" />
11904   <sharedfeat name="compatibility" value="NTSC-J"/>
11905   <part name="cdrom" interface="psx_cdrom">
11906     <diskarea name="cdrom">
11907       <disk name="simple characters 2000 series vol.02 - afroken - the puzzle (japan) [slps-03307]" sha1="5b89aac27f6435972c512abe6b949d9bae591d19"/>
11908     </diskarea>
11909   </part>
11910   </software>
11911   -->
12150
1191212151   <software name="sc2k_03" supported="no">
1191312152      <description>Simple Characters 2000 Series Vol.03 - Kamen Rider - The Bike Race (Japan)</description>
11914      <year>199?</year>
11915      <publisher>&lt;unknown&gt;</publisher>
12153      <year>2001</year>
12154      <publisher>Bandai</publisher>
12155      <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.03 仮面ライダー THE バイクレース"/>
1191612156      <info name="serial" value="SLPS-03308" />
1191712157      <sharedfeat name="compatibility" value="NTSC-J"/>
1191812158      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1192312163   </software>
1192412164
1192512165   <software name="sc2k_04" supported="no">
11926      <description>Simple Characters 2000 Series Vol.04 - Jarin-Ko Chie - The Hanafuda (Japan)</description>
11927      <year>199?</year>
11928      <publisher>&lt;unknown&gt;</publisher>
12166      <description>Simple Characters 2000 Series Vol.04 - Jarinko Chie - The Hanafuda (Japan)</description>
12167      <year>2001</year>
12168      <publisher>Bandai</publisher>
12169      <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.04 じゃりン子チエ THE 花札"/>
1192912170      <info name="serial" value="SLPS-03350" />
1193012171      <sharedfeat name="compatibility" value="NTSC-J"/>
1193112172      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1193612177   </software>
1193712178
1193812179   <software name="sc2k_05" supported="no">
11939      <description>Simple Characters 2000 Series Vol.05 - HighSchool Kimengumi - The Table Hockey (Japan)</description>
11940      <year>199?</year>
11941      <publisher>&lt;unknown&gt;</publisher>
12180      <description>Simple Characters 2000 Series vol.05 - Highschool Kimengumi - The Table Hockey (Japan)</description>
12181      <year>2001</year>
12182      <publisher>Bandai</publisher>
12183      <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.05 ハイスクール奇面組 THE テーブルホッケー"/>
1194212184      <info name="serial" value="SLPS-03362" />
1194312185      <sharedfeat name="compatibility" value="NTSC-J"/>
1194412186      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1195012192
1195112193   <software name="sc2k_06" supported="no">
1195212194      <description>Simple Characters 2000 Series Vol.06 - Dokonjou Gaeru - The Mahjong (Japan)</description>
11953      <year>199?</year>
11954      <publisher>&lt;unknown&gt;</publisher>
12195      <year>2002</year>
12196      <publisher>Bandai</publisher>
12197      <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.06 ど根性ガエル THE 麻雀"/>
1195512198      <info name="serial" value="SLPS-03363" />
1195612199      <sharedfeat name="compatibility" value="NTSC-J"/>
1195712200      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1196212205   </software>
1196312206
1196412207   <software name="sc2k_07" supported="no">
11965      <description>Simple Characters 2000 Series Vol.07 - Ikkyuusan - The Quiz (Japan)</description>
11966      <year>199?</year>
11967      <publisher>&lt;unknown&gt;</publisher>
12208      <description>Simple Characters 2000 Series vol.07 - Ikkyuu-san&#58; The Quiz (Japan)</description>
12209      <year>2002</year>
12210      <publisher>Bandai</publisher>
12211      <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.07 一休さん THE クイズ"/>
1196812212      <info name="serial" value="SLPS-03418" />
1196912213      <sharedfeat name="compatibility" value="NTSC-J"/>
1197012214      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1197412218      </part>
1197512219   </software>
1197612220
12221   <!-- to dump!
12222   <software name="sc2k_08" supported="no">
12223       <description>Simple Characters 2000 Series Vol.08 - Gatchaman the Shooting (Japan)</description>
12224       <year>2002</year>
12225       <publisher>Bandai</publisher>
12226       <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.08 ガッチャマン THE シューティング"/>
12227       <info name="serial" value="SLPS-03444" />
12228       <sharedfeat name="compatibility" value="NTSC-J"/>
12229       <part name="cdrom" interface="psx_cdrom">
12230           <diskarea name="cdrom">
12231               <disk name="simple characters 2000 series vol.08 - gatchaman the shooting (japan) [slps-03444]" sha1=""/>
12232           </diskarea>
12233       </part>
12234   </software>
12235   -->
12236
1197712237   <software name="sc2k_09" supported="no">
1197812238      <description>Simple Characters 2000 Series Vol.09 - Tsuri Kichi Sanpei - The Tsuri (Japan)</description>
11979      <year>199?</year>
11980      <publisher>&lt;unknown&gt;</publisher>
12239      <year>2002</year>
12240      <publisher>Bandai&#47;D3</publisher>
12241      <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.09 釣りキチ三平 THE 釣り"/>
1198112242      <info name="serial" value="SLPS-03445" />
1198212243      <sharedfeat name="compatibility" value="NTSC-J"/>
1198312244      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1198812249   </software>
1198912250
1199012251   <software name="sc2k_10" supported="no">
11991      <description>Simple Characters 2000 Series Vol.10 - Sakigake!! Otojo Juku - The Dodgeball (Japan)</description>
11992      <year>199?</year>
11993      <publisher>&lt;unknown&gt;</publisher>
12252      <description>Simple Characters 2000 Series Vol.10 - Sakigake!! Otojo Juku (Japan)</description>
12253      <year>2002</year>
12254      <publisher>Bandai&#47;D3</publisher>
12255      <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.10 魁!!男塾 THE 怒馳暴流"/>
1199412256      <info name="serial" value="SLPS-03457" />
1199512257      <sharedfeat name="compatibility" value="NTSC-J"/>
1199612258      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1200012262      </part>
1200112263   </software>
1200212264
12265   <!-- to dump!
12266   <software name="sc2k_11" supported="no">
12267       <description>Simple Characters 2000 Series Vol.11 - Meitantei Conan - The Board (Japan)</description>
12268       <year>2002</year>
12269       <publisher>Bandai&#47;D3</publisher>
12270       <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.11 名探偵コナン THE ボードゲーム"/>
12271       <info name="serial" value="SLPS-03458" />
12272       <sharedfeat name="compatibility" value="NTSC-J"/>
12273       <part name="cdrom" interface="psx_cdrom">
12274           <diskarea name="cdrom">
12275               <disk name="simple characters 2000 series vol.11 - meitantei conan - the board (japan) [slps-03458]" sha1=""/>
12276           </diskarea>
12277       </part>
12278   </software>
12279   -->
12280
1200312281   <software name="sc2k_12" supported="no">
1200412282      <description>Simple Characters 2000 Series Vol.12 - Kidou Butouden G Gundam - The Battle (Japan)</description>
12005      <year>199?</year>
12006      <publisher>&lt;unknown&gt;</publisher>
12283      <year>2002</year>
12284      <publisher>Bandai&#47;D3</publisher>
12285      <info name="alt_title" value="SIMPLEキャラクター2000シリーズ VOL.12 機動武闘伝Gガンダム THE バトル"/>
1200712286      <info name="serial" value="SLPS-03471" />
1200812287      <sharedfeat name="compatibility" value="NTSC-J"/>
1200912288      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1201412293   </software>
1201512294
1201612295   <software name="sc2k_13" supported="no">
12017      <description>Simple Characters 2000 Series Vol.13 - Shin Kidou Senki Gundam W - The Battle (Japan)</description>
12018      <year>199?</year>
12019      <publisher>&lt;unknown&gt;</publisher>
12296      <description>Simple Characters 2000 Series vol.13 - Kidou Senki Gundam W - The Battle (Japan)</description>
12297      <year>2002</year>
12298      <publisher>Bandai&#47;D3</publisher>
12299      <info name="alt_title" value="SIMPLEキャラクター2000シリーズ VOL.13 新機動戦記ガンダムW THE バトル"/>
1202012300      <info name="serial" value="SLPS-03472" />
1202112301      <sharedfeat name="compatibility" value="NTSC-J"/>
1202212302      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1202712307   </software>
1202812308
1202912309   <software name="sc2k_14" supported="no">
12030      <description>Simple Characters 2000 Series Vol.14 - Nantettantei Idol - The Jigsaw Puzzle (Japan)</description>
12031      <year>199?</year>
12032      <publisher>&lt;unknown&gt;</publisher>
12310      <description>Simple Characters 2000 Series Vol.14 - Nante Tantei Idol - The Jigsaw Puzzle (Japan)</description>
12311      <year>2002</year>
12312      <publisher>Bandai&#47;D3</publisher>
12313      <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.14 なんてっ探偵アイドル THE ジグソーパズル"/>
1203312314      <info name="serial" value="SLPS-03473" />
1203412315      <sharedfeat name="compatibility" value="NTSC-J"/>
1203512316      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1204012321   </software>
1204112322
1204212323   <software name="sc2k_15" supported="no">
12043      <description>Simple Characters 2000 Series Vol.15 - Cyborg 009 - The Block Kuzushi (Japan)</description>
12044      <year>199?</year>
12045      <publisher>&lt;unknown&gt;</publisher>
12324      <description>Simple Characters 2000 Series vol.15 - The Block Kuzushi (Japan)</description>
12325      <year>2002</year>
12326      <publisher>Bandai&#47;D3</publisher>
12327      <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.15 サイボーグ009 THE ブロックくずし"/>
1204612328      <info name="serial" value="SLPS-03474" />
1204712329      <sharedfeat name="compatibility" value="NTSC-J"/>
1204812330      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1205412336
1205512337   <software name="sc2k_16" supported="no">
1205612338      <description>Simple Characters 2000 Series Vol.16 - Ganba no Bouken - The Puzzle Action (Japan)</description>
12057      <year>199?</year>
12058      <publisher>&lt;unknown&gt;</publisher>
12339      <year>2003</year>
12340      <publisher>Bandai&#47;D3</publisher>
12341      <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.16 ガンバの冒険 THE パズルアクション"/>
1205912342      <info name="serial" value="SLPS-03546" />
1206012343      <sharedfeat name="compatibility" value="NTSC-J"/>
1206112344      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1206512348      </part>
1206612349   </software>
1206712350
12351   <!-- to dump!
12352   <software name="sc2k_17" supported="no">
12353       <description>Simple Characters 2000 Series vol.17 - Sentou Mecha Xabungle - The Racing Game (Japan)</description>
12354       <year>2003</year>
12355       <publisher>Bandai&#47;D3</publisher>
12356       <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.17 戦闘メカ ザブングル THE アクション"/>
12357       <info name="serial" value="SLPS-03547" />
12358       <sharedfeat name="compatibility" value="NTSC-J"/>
12359       <part name="cdrom" interface="psx_cdrom">
12360           <diskarea name="cdrom">
12361               <disk name="simple characters 2000 series vol.17 - sentou mecha xabungle - rhe racing game (japan) [slps-03547]" sha1=""/>
12362           </diskarea>
12363       </part>
12364   </software>
12365   -->
12366
1206812367   <software name="simulati" supported="no">
12069      <description>Simulation Zoo (Japan)</description>
12070      <year>199?</year>
12071      <publisher>&lt;unknown&gt;</publisher>
12368      <description>Simulation Zoo&#58; Sekaiichi no Doubutsuen o Tsukurou (Japan)</description>
12369      <year>1996</year>
12370      <publisher>SoftBank</publisher>
12371      <info name="alt_title" value="シミュレーションズー"/>
1207212372      <info name="serial" value="SLPS-00458" />
1207312373      <sharedfeat name="compatibility" value="NTSC-J"/>
1207412374      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1208012380
1208112381   <software name="sisterpr" supported="no">
1208212382      <description>Sister Princess - Pure Stories (Japan)</description>
12083      <year>199?</year>
12084      <publisher>&lt;unknown&gt;</publisher>
12383      <year>2001</year>
12384      <publisher>Media Works</publisher>
12385      <info name="alt_title" value="シスター・プリンセス 〜ピュア・ストーリーズ〜 &#60;初回限定生産&#62;"/>
1208512386      <info name="serial" value="SLPS-03360" />
1208612387      <sharedfeat name="compatibility" value="NTSC-J"/>
1208712388      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1209312394
1209412395   <software name="slaphapp" supported="no">
1209512396      <description>Slap Happy Rhythm Busters (Japan)</description>
12096      <year>199?</year>
12097      <publisher>&lt;unknown&gt;</publisher>
12397      <year>2000</year>
12398      <publisher>ASK</publisher>
12399      <info name="alt_title" value="スラップ ハッピー リズム バスターズ"/>
1209812400      <info name="serial" value="SLPS-02789" />
1209912401      <sharedfeat name="compatibility" value="NTSC-J"/>
1210012402      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1210612408
1210712409   <software name="snatcher" supported="no">
1210812410      <description>Snatcher (Japan)</description>
12109      <year>199?</year>
12110      <publisher>&lt;unknown&gt;</publisher>
12411      <year>1996</year>
12412      <publisher>Konami</publisher>
12413      <info name="alt_title" value="スナッチャー"/>
1211112414      <info name="serial" value="SLPS-00154" />
1211212415      <sharedfeat name="compatibility" value="NTSC-J"/>
1211312416      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1211912422
1212012423   <software name="snobowki" supported="no">
1212112424      <description>Snobow Kids Plus (Japan)</description>
12122      <year>199?</year>
12123      <publisher>&lt;unknown&gt;</publisher>
12425      <year>1999</year>
12426      <publisher>ASCII</publisher>
12427      <info name="alt_title" value="スノボキッズプラス"/>
1212412428      <info name="serial" value="SLPS-01823" />
1212512429      <sharedfeat name="compatibility" value="NTSC-J"/>
1212612430      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1213212436
1213312437   <software name="sonataja" supported="no">
1213412438      <description>Sonata (Japan)</description>
12135      <year>199?</year>
12136      <publisher>&lt;unknown&gt;</publisher>
12439      <year>1999</year>
12440      <publisher>T&#38;E</publisher>
12441      <info name="alt_title" value="Sonata"/>
1213712442      <info name="serial" value="SLPS-01843, SLPS-01844" />
1213812443      <sharedfeat name="compatibility" value="NTSC-J"/>
1213912444      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1215012455
1215112456   <software name="sotsugyo" supported="no">
1215212457      <description>Sotsugyou Crossworld (Japan)</description>
12153      <year>199?</year>
12154      <publisher>&lt;unknown&gt;</publisher>
12458      <year>1996</year>
12459      <publisher>Hearty Robin</publisher>
12460      <info name="alt_title" value="卒業クロスワールド"/>
1215512461      <info name="serial" value="SLPS-00273" />
1215612462      <sharedfeat name="compatibility" value="NTSC-J"/>
1215712463      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1216312469
1216412470   <software name="sougakut" supported="no">
1216512471      <description>Sougaku Toshi - Osaka (Japan)</description>
12166      <year>199?</year>
12167      <publisher>&lt;unknown&gt;</publisher>
12472      <year>1999</year>
12473      <publisher>King Records</publisher>
12474      <info name="alt_title" value="奏(騒)楽都市 OSAKA"/>
1216812475      <info name="serial" value="SLPS-01722, SLPS-01723" />
1216912476      <sharedfeat name="compatibility" value="NTSC-J"/>
1217012477      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1218112488
1218212489   <software name="soukyugu" supported="no">
1218312490      <description>Soukyu Gurentai - Oubushustugeki (Japan)</description>
12184      <year>199?</year>
12185      <publisher>&lt;unknown&gt;</publisher>
12491      <year>1997</year>
12492      <publisher>Data East</publisher>
12493      <info name="alt_title" value="蒼穹紅蓮隊 黄武出撃"/>
1218612494      <info name="serial" value="SLPS-01172" />
1218712495      <sharedfeat name="compatibility" value="NTSC-J"/>
1218812496      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1219212500      </part>
1219312501   </software>
1219412502
12195   <software name="soundqub" supported="no">
12196      <description>Sound Qube (Japan)</description>
12197      <year>199?</year>
12198      <publisher>&lt;unknown&gt;</publisher>
12199      <info name="serial" value="SLPS-01309" />
12200      <sharedfeat name="compatibility" value="NTSC-J"/>
12201      <part name="cdrom" interface="psx_cdrom">
12202         <diskarea name="cdrom">
12203            <disk name="sound qube (japan) [slps-01309]" sha1="54139ab64577aec717ca75daa26d87b67887a673"/>
12204         </diskarea>
12205      </part>
12206   </software>
12207
1220812503   <software name="spaceinv" supported="no">
1220912504      <description>Space Invaders X (Japan)</description>
12210      <year>199?</year>
12211      <publisher>&lt;unknown&gt;</publisher>
12505      <year>2000</year>
12506      <publisher>Taito</publisher>
12507      <info name="alt_title" value="スペースインベーダーX(エックス)"/>
1221212508      <info name="serial" value="SLPM-86419" />
1221312509      <sharedfeat name="compatibility" value="NTSC-J"/>
1221412510      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1222012516
1222112517   <software name="spectral" supported="no">
1222212518      <description>Spectral Blade (Japan)</description>
12223      <year>199?</year>
12224      <publisher>&lt;unknown&gt;</publisher>
12519      <year>1999</year>
12520      <publisher>Idea Factory</publisher>
12521      <info name="alt_title" value="スペクトラルブレイド"/>
1222512522      <info name="serial" value="SLPS-02526" />
1222612523      <sharedfeat name="compatibility" value="NTSC-J"/>
1222712524      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1223212529   </software>
1223312530
1223412531   <software name="speedkin" supported="no">
12235      <description>Speed King - Neo Kobe 2045 (Japan)</description>
12236      <year>199?</year>
12237      <publisher>&lt;unknown&gt;</publisher>
12532      <description>Speed King (Japan)</description>
12533      <year>1996</year>
12534      <publisher>Konami</publisher>
12535      <info name="alt_title" value="スピードキング"/>
1223812536      <info name="serial" value="SLPM-86013" />
1223912537      <sharedfeat name="compatibility" value="NTSC-J"/>
1224012538      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1224612544
1224712545   <software name="speedpow" supported="no">
1224812546      <description>Speed Power Gunbike (Japan)</description>
12249      <year>199?</year>
12250      <publisher>&lt;unknown&gt;</publisher>
12547      <year>1998</year>
12548      <publisher>Sony</publisher>
12549      <info name="alt_title" value="可変走攻 ガンバイク"/>
1225112550      <info name="serial" value="SLPS-01066" />
1225212551      <sharedfeat name="compatibility" value="NTSC-J"/>
1225312552      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1225912558
1226012559   <software name="spiderma" supported="no">
1226112560      <description>Spider-Man (Japan)</description>
12262      <year>199?</year>
12263      <publisher>&lt;unknown&gt;</publisher>
12561      <year>2001</year>
12562      <publisher>Activision</publisher>
12563      <info name="alt_title" value="SPIDER-MAN"/>
1226412564      <info name="serial" value="SLPM-86739" />
1226512565      <sharedfeat name="compatibility" value="NTSC-J"/>
1226612566      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1227012570      </part>
1227112571   </software>
1227212572
12273   <software name="squaresp" supported="no">
12274      <description>Square's Preview 5 (Japan) (Demo)</description>
12275      <year>199?</year>
12276      <publisher>&lt;unknown&gt;</publisher>
12277      <info name="serial" value="SCPS-45417" />
12278      <sharedfeat name="compatibility" value="NTSC-J"/>
12279      <part name="cdrom" interface="psx_cdrom">
12280         <diskarea name="cdrom">
12281            <disk name="square's preview 5 (japan) (demo) [scps-45417]" sha1="2e84ab79573ce07bb78480a9d75d601e14d07895"/>
12282         </diskarea>
12283      </part>
12284   </software>
12285
1228612573   <software name="squareso" supported="no">
1228712574      <description>Squaresoft Memory Card Data CD (Japan)</description>
1228812575      <year>199?</year>
12289      <publisher>&lt;unknown&gt;</publisher>
12576      <publisher>Squaresoft</publisher>
1229012577      <info name="serial" value="SLPM-80556" />
1229112578      <sharedfeat name="compatibility" value="NTSC-J"/>
1229212579      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1229812585
1229912586   <software name="stahlfed" supported="no">
1230012587      <description>Stahlfeder (Japan)</description>
12301      <year>199?</year>
12302      <publisher>&lt;unknown&gt;</publisher>
12588      <year>1996</year>
12589      <publisher>Santos</publisher>
12590      <info name="alt_title" value="シュタールフェーダー 〜鉄甲飛空団〜"/>
1230312591      <info name="serial" value="SLPS-00162" />
1230412592      <sharedfeat name="compatibility" value="NTSC-J"/>
1230512593      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1231112599
1231212600   <software name="startlin" supported="no">
1231312601      <description>Startling Odyssey 1 - Blue Evolution (Japan)</description>
12314      <year>199?</year>
12315      <publisher>&lt;unknown&gt;</publisher>
12602      <year>1999</year>
12603      <publisher>RayForce</publisher>
12604      <info name="alt_title" value="スタートリング・オデッセイ1 ブルーエヴォリューション"/>
1231612605      <info name="serial" value="SLPS-02043" />
1231712606      <sharedfeat name="compatibility" value="NTSC-J"/>
1231812607      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1232412613
1232512614   <software name="streetfi" supported="no">
1232612615      <description>Street Fighter Collection (Japan)</description>
12327      <year>199?</year>
12328      <publisher>&lt;unknown&gt;</publisher>
12616      <year>1997</year>
12617      <publisher>Capcom</publisher>
12618      <info name="alt_title" value="ストリートファイターコレクション"/>
1232912619      <info name="serial" value="SLPS-00800, SLPS-00801" />
1233012620      <sharedfeat name="compatibility" value="NTSC-J"/>
1233112621      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1234212632
1234312633   <software name="suchiepa" supported="no">
1234412634      <description>Suchie-Pai Adventure - Doki Doki Nightmare (Japan) (Disc 2 Only)</description>
12345      <year>199?</year>
12346      <publisher>&lt;unknown&gt;</publisher>
12635      <year>1998</year>
12636      <publisher>Jaleco</publisher>
12637      <info name="alt_title" value="スーチーパイアドベンチャー"/>
1234712638      <info name="serial" value="SLPS-01265" />
1234812639      <sharedfeat name="compatibility" value="NTSC-J"/>
1234912640      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1235412645   </software>
1235512646
1235612647   <software name="suikoenb" supported="no">
12357      <description>Suiko Enbu (Japan)</description>
12358      <year>199?</year>
12359      <publisher>&lt;unknown&gt;</publisher>
12648      <description>Suiko Enbu - Outlaws of the Lost Dynasty (Japan)</description>
12649      <year>1996</year>
12650      <publisher>Data East</publisher>
12651      <info name="alt_title" value="水 滸 演 武"/>
1236012652      <info name="serial" value="SLPS-00137" />
1236112653      <sharedfeat name="compatibility" value="NTSC-J"/>
1236212654      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1236712659   </software>
1236812660
1236912661   <software name="sunsoft1" supported="no">
12370      <description>Sunsoft Classics Vol.1 - Memorial Series (Japan)</description>
12371      <year>199?</year>
12372      <publisher>&lt;unknown&gt;</publisher>
12662      <description>Memorial Star Series Sunsoft Vol. 1 - Ikki &#38; Super Arabian (Japan)</description>
12663      <year>2001</year>
12664      <publisher>Sunsoft</publisher>
12665      <info name="alt_title" value="メモリアル☆シリーズ サンソフト Vol.1"/>
1237312666      <info name="serial" value="SLPS-03135" />
1237412667      <sharedfeat name="compatibility" value="NTSC-J"/>
1237512668      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1238012673   </software>
1238112674
1238212675   <software name="sunsoft2" supported="no">
12383      <description>Sunsoft Classics Vol.2 - Memorial Series (Japan)</description>
12384      <year>199?</year>
12385      <publisher>&lt;unknown&gt;</publisher>
12676      <description>Memorial Star Series Sunsoft Vol. 2 - Route 16 - Turbo &#38; Atlantis no Nazo (Japan)</description>
12677      <year>2001</year>
12678      <publisher>Sunsoft</publisher>
12679      <info name="alt_title" value="メモリアル☆シリーズ サンソフトVOL.2"/>
1238612680      <info name="serial" value="SLPS-03181" />
1238712681      <sharedfeat name="compatibility" value="NTSC-J"/>
1238812682      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1239412688
1239512689   <software name="sunsoft3" supported="no">
1239612690      <description>Sunsoft Classics Vol.3 - Memorial Series (Japan)</description>
12397      <year>199?</year>
12398      <publisher>&lt;unknown&gt;</publisher>
12691      <year>2001</year>
12692      <publisher>Sunsoft</publisher>
12693      <info name="alt_title" value="メモリアル☆シリーズ サンソフトVOL.3"/>
1239912694      <info name="serial" value="SLPS-03366" />
1240012695      <sharedfeat name="compatibility" value="NTSC-J"/>
1240112696      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1240612701   </software>
1240712702
1240812703   <software name="sunsoft4" supported="no">
12409      <description>Sunsoft Classics Vol.4 - Memorial Series (Japan)</description>
12410      <year>199?</year>
12411      <publisher>&lt;unknown&gt;</publisher>
12704      <description>Memorial Star Series Sunsoft Vol.4 - Chou wakusei senki metafight &#38; Lipple island (Japan)</description>
12705      <year>2002</year>
12706      <publisher>Sunsoft</publisher>
12707      <info name="alt_title" value="メモリアル☆シリーズ サンソフト VOL.4"/>
1241212708      <info name="serial" value="SLPS-03382" />
1241312709      <sharedfeat name="compatibility" value="NTSC-J"/>
1241412710      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1241912715   </software>
1242012716
1242112717   <software name="sunsoft5" supported="no">
12422      <description>Sunsoft Classics Vol.5 - Memorial Series (Japan)</description>
12423      <year>199?</year>
12424      <publisher>&lt;unknown&gt;</publisher>
12718      <description>Memorial Star Series Sunsoft Vol.5 - Raf World &#38; Hebereke (Japan)</description>
12719      <year>2002</year>
12720      <publisher>Sunsoft</publisher>
12721      <info name="alt_title" value="メモリアル☆シリーズ サンソフト VOL.5"/>
1242512722      <info name="serial" value="SLPS-03397" />
1242612723      <sharedfeat name="compatibility" value="NTSC-J"/>
1242712724      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1243212729   </software>
1243312730
1243412731   <software name="sunsoft6" supported="no">
12435      <description>Sunsoft Classics Vol.6 - Memorial Series (Japan)</description>
12436      <year>199?</year>
12437      <publisher>&lt;unknown&gt;</publisher>
12732      <description>Memorial Star Series Sunsoft Vol.6 - Battle Formula &#38; Gimmick! (Japan)</description>
12733      <year>2002</year>
12734      <publisher>Sunsoft</publisher>
12735      <info name="alt_title" value="メモリアル☆シリーズ サンソフトVOL.6"/>
1243812736      <info name="serial" value="SLPS-03486" />
1243912737      <sharedfeat name="compatibility" value="NTSC-J"/>
1244012738      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1244612744
1244712745   <software name="superadv" supported="no">
1244812746      <description>Super Adventure RockMan (Japan)</description>
12449      <year>199?</year>
12450      <publisher>&lt;unknown&gt;</publisher>
12747      <year>1998</year>
12748      <publisher>Capcom</publisher>
12749      <info name="alt_title" value="スーパーアドベンチャーロックマン"/>
1245112750      <info name="serial" value="SLPS-01051, SLPS-01052, SLPS-01053" />
1245212751      <sharedfeat name="compatibility" value="NTSC-J"/>
1245312752      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1246912768
1247012769   <software name="superfoo" supported="no">
1247112770      <description>Super Football Champ (Japan)</description>
12472      <year>199?</year>
12473      <publisher>&lt;unknown&gt;</publisher>
12771      <year>1996</year>
12772      <publisher>Taito</publisher>
12773      <info name="alt_title" value="SUPER FOOTBALL CHAMP"/>
1247412774      <info name="serial" value="SLPS-00569" />
1247512775      <sharedfeat name="compatibility" value="NTSC-J"/>
1247612776      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1248212782
1248312783   <software name="superliv" supported="no">
1248412784      <description>Super Live Stadium (Japan)</description>
12485      <year>199?</year>
12486      <publisher>&lt;unknown&gt;</publisher>
12785      <year>1998</year>
12786      <publisher>Aques</publisher>
12787      <info name="alt_title" value="スーパーライブスタジアム"/>
1248712788      <info name="serial" value="SLPM-86019" />
1248812789      <sharedfeat name="compatibility" value="NTSC-J"/>
1248912790      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1249312794      </part>
1249412795   </software>
1249512796
12496   <software name="superlit" supported="no">
12497      <description>SuperLite 1500 Extra Series Vol.02 - Nankuro (Japan)</description>
12498      <year>199?</year>
12499      <publisher>&lt;unknown&gt;</publisher>
12500      <info name="serial" value="SLPS-02067" />
12501      <sharedfeat name="compatibility" value="NTSC-J"/>
12502      <part name="cdrom" interface="psx_cdrom">
12503         <diskarea name="cdrom">
12504            <disk name="superlite 1500 extra series vol.02 - nankuro (japan) [slps-02067]" sha1="8f17ac2169a351af67437fd79cfd66a13e51062e"/>
12505         </diskarea>
12506      </part>
12507   </software>
12508
1250912797   <software name="susumeka" supported="no">
12510      <description>Susume! Kaizoku (Japan)</description>
12511      <year>199?</year>
12512      <publisher>&lt;unknown&gt;</publisher>
12798      <description>Susume! Kaizoku - Be Pirates! (Japan)</description>
12799      <year>1998</year>
12800      <publisher>ArtDink</publisher>
12801      <info name="alt_title" value="進め! 海賊"/>
1251312802      <info name="serial" value="SLPS-01737" />
1251412803      <sharedfeat name="compatibility" value="NTSC-J"/>
1251512804      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1252012809   </software>
1252112810
1252212811   <software name="tkarahaj" supported="no">
12523      <description>T kara Hajimaru Monogatari (Japan)</description>
12524      <year>199?</year>
12525      <publisher>&lt;unknown&gt;</publisher>
12812      <description>T Kara Hajimaru Monogatari (Japan)</description>
12813      <year>1998</year>
12814      <publisher>Jaleco</publisher>
12815      <info name="alt_title" value="Tから始まる物語"/>
1252612816      <info name="serial" value="SLPS-01350" />
1252712817      <sharedfeat name="compatibility" value="NTSC-J"/>
1252812818      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1253412824
1253512825   <software name="tactical" supported="no">
1253612826      <description>Tactical Armor Custom Gasaraki (Japan)</description>
12537      <year>199?</year>
12538      <publisher>&lt;unknown&gt;</publisher>
12827      <year>2000</year>
12828      <publisher>Bandai</publisher>
12829      <info name="alt_title" value="Tactical Armor Custom ガサラキ"/>
1253912830      <info name="serial" value="SLPS-02181" />
1254012831      <sharedfeat name="compatibility" value="NTSC-J"/>
1254112832      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1254712838
1254812839   <software name="tacticso" supported="no">
1254912840      <description>Tactics Ogre - Let Us Cling Together (Japan)</description>
12550      <year>199?</year>
12551      <publisher>&lt;unknown&gt;</publisher>
12841      <year>1997</year>
12842      <publisher>Artdink</publisher>
12843      <info name="alt_title" value="タクティクス・オウガ"/>
1255212844      <info name="serial" value="SLPS-00767" />
1255312845      <sharedfeat name="compatibility" value="NTSC-J"/>
1255412846      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1256012852
1256112853   <software name="taihoshi" supported="no">
1256212854      <description>Taiho Shichauzo! - You're Under Arrest (Japan)</description>
12563      <year>199?</year>
12564      <publisher>&lt;unknown&gt;</publisher>
12855      <year>2001</year>
12856      <publisher>Pioneer</publisher>
12857      <info name="alt_title" value="逮捕しちゃうぞ"/>
1256512858      <info name="serial" value="SLPM-86782, SLPM-86783" />
1256612859      <sharedfeat name="compatibility" value="NTSC-J"/>
1256712860      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1257712870   </software>
1257812871
1257912872   <software name="talesoff" supported="no">
12580      <description>Tales of Fandom Vol.1 (Japan)</description>
12581      <year>199?</year>
12582      <publisher>&lt;unknown&gt;</publisher>
12873      <description>Tales of Fandom Vol.1 (Cless Version) (Japan)</description>
12874      <year>2002</year>
12875      <publisher>Namco</publisher>
12876      <info name="alt_title" value="テイルズオブファンダム Vol.1(クレス・ルーティー・ファラバージョン)"/>
1258312877      <info name="serial" value="SLPS-03375" />
1258412878      <sharedfeat name="compatibility" value="NTSC-J"/>
1258512879      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1259212886   <software name="tamamayu" supported="no">
1259312887      <description>Tamamayu Monogatari - Dennou Bijutsukan (Japan) (Demo)</description>
1259412888      <year>199?</year>
12595      <publisher>&lt;unknown&gt;</publisher>
12889      <publisher>Genki</publisher>
1259612890      <info name="serial" value="SLPM-80325" />
1259712891      <sharedfeat name="compatibility" value="NTSC-J"/>
1259812892      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1260412898
1260512899   <software name="tanteiea" supported="no">
1260612900      <description>Tantei Jinguuji Saburo - Early Collection (Japan)</description>
12607      <year>199?</year>
12608      <publisher>&lt;unknown&gt;</publisher>
12901      <year>1999</year>
12902      <publisher>Data East</publisher>
12903      <info name="alt_title" value="探偵神宮寺三郎 Early Collection"/>
1260912904      <info name="serial" value="SLPS-02157" />
1261012905      <sharedfeat name="compatibility" value="NTSC-J"/>
1261112906      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1261612911   </software>
1261712912
1261812913   <software name="tanteimr" supported="no">
12619      <description>Tantei Jinguuji Saburo - Mikan no Report (Japan)</description>
12620      <year>199?</year>
12621      <publisher>&lt;unknown&gt;</publisher>
12914      <description>Tantei Jinguuji Saburo - Mikan No Rupo (Popular Edition) (Japan)</description>
12915      <year>2000</year>
12916      <publisher>Data East</publisher>
12917      <info name="alt_title" value="普及版1,500円シリーズ 探偵神宮寺三郎 未完のルポ 普及版"/>
1262212918      <info name="serial" value="SLPS-03016" />
1262312919      <sharedfeat name="compatibility" value="NTSC-J"/>
1262412920      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1262912925   </software>
1263012926
1263112927   <software name="tanteitk" supported="no">
12632      <description>Tantei Jinguuji Saburo - Tomoshibi ga Kienu Ma ni (Japan)</description>
12633      <year>199?</year>
12634      <publisher>&lt;unknown&gt;</publisher>
12928      <description>Tantei Jinguji Saburo - Tomosibi Ga Kienumani (Japan)</description>
12929      <year>1999</year>
12930      <publisher>Data East</publisher>
12931      <info name="alt_title" value="探偵 神宮寺三郎 灯火が消えぬ間に"/>
1263512932      <info name="serial" value="SLPS-02427" />
1263612933      <sharedfeat name="compatibility" value="NTSC-J"/>
1263712934      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1264212939   </software>
1264312940
1264412941   <software name="tanteiyo" supported="no">
12645      <description>Tantei Jinguuji Saburo - Yume no Owari ni (Japan)</description>
12646      <year>199?</year>
12647      <publisher>&lt;unknown&gt;</publisher>
12942      <description>Tantei Jinguji Saburo - Yumeno Owarini (Japan)</description>
12943      <year>1998</year>
12944      <publisher>Data East</publisher>
12945      <info name="alt_title" value="探偵 神宮寺三郎 夢の終わりに"/>
1264812946      <info name="serial" value="SLPS-01356" />
1264912947      <sharedfeat name="compatibility" value="NTSC-J"/>
1265012948      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1265612954
1265712955   <software name="tatsunok" supported="no">
1265812956      <description>Tatsunoko Fight (Japan)</description>
12659      <year>199?</year>
12660      <publisher>&lt;unknown&gt;</publisher>
12957      <year>2000</year>
12958      <publisher>Takara</publisher>
12959      <info name="alt_title" value="タツノコファイトt"/>
1266112960      <info name="serial" value="SLPS-02939" />
1266212961      <sharedfeat name="compatibility" value="NTSC-J"/>
1266312962      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1266812967   </software>
1266912968
1267012969   <software name="tenmadej" supported="no">
12671      <description>Ten Made Jack (Japan)</description>
12672      <year>199?</year>
12673      <publisher>&lt;unknown&gt;</publisher>
12970      <description>Ten Made Jack &#47; Tenma de Jack - Odoroki Manenoki Daitoubou (Japan)</description>
12971      <year>2000</year>
12972      <publisher>Enix</publisher>
12973      <info name="alt_title" value="天までジャック オドロキマメノキ大逃亡!!"/>
1267412974      <info name="serial" value="SLPM-86368" />
1267512975      <sharedfeat name="compatibility" value="NTSC-J"/>
1267612976      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1268212982
1268312983   <software name="tenantwa" supported="no">
1268412984      <description>Tenant Wars (Japan)</description>
12685      <year>199?</year>
12686      <publisher>&lt;unknown&gt;</publisher>
12985      <year>1998</year>
12986      <publisher>Kid</publisher>
12987      <info name="alt_title" value="テナントウォーズ"/>
1268712988      <info name="serial" value="SLPS-01243" />
1268812989      <sharedfeat name="compatibility" value="NTSC-J"/>
1268912990      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1269512996
1269612997   <software name="tenchimu" supported="no">
1269712998      <description>Tenchi Muyou! Toukou Muyou - No Need for School (Japan)</description>
12698      <year>199?</year>
12699      <publisher>&lt;unknown&gt;</publisher>
12999      <year>1996</year>
13000      <publisher>Xing</publisher>
13001      <info name="alt_title" value="天地無用! 〜登校無用〜"/>
1270013002      <info name="serial" value="SLPS-00451, SLPS-00452" />
1270113003      <sharedfeat name="compatibility" value="NTSC-J"/>
1270213004      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1271313015
1271413016   <software name="tenchiwo" supported="no">
1271513017      <description>Tenchi wo Kurau II - Sekiheki no Tatakai (Japan)</description>
12716      <year>199?</year>
12717      <publisher>&lt;unknown&gt;</publisher>
13018      <year>1996</year>
13019      <publisher>Capcom</publisher>
13020      <info name="alt_title" value="天地を喰らうII"/>
1271813021      <info name="serial" value="SLPS-00203" />
1271913022      <sharedfeat name="compatibility" value="NTSC-J"/>
1272013023      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1272613029
1272713030   <software name="tennisar" supported="no">
1272813031      <description>Tennis Arena (Japan)</description>
12729      <year>199?</year>
12730      <publisher>&lt;unknown&gt;</publisher>
13032      <year>1998</year>
13033      <publisher>Ubi Soft</publisher>
13034      <info name="alt_title" value="TENNIS ARENA"/>
1273113035      <info name="serial" value="SLPS-01303" />
1273213036      <sharedfeat name="compatibility" value="NTSC-J"/>
1273313037      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1273813042   </software>
1273913043
1274013044   <software name="tensenny" supported="no">
12741      <description>Tensen-Nyannyan - Gekijou-ban (Japan)</description>
12742      <year>199?</year>
12743      <publisher>&lt;unknown&gt;</publisher>
13045      <description>Tensen Nyannyan Gekigyouban (Japan)</description>
13046      <year>1998</year>
13047      <publisher>Time Point</publisher>
13048      <info name="alt_title" value="天仙娘々〜劇場版〜"/>
1274413049      <info name="serial" value="SLPS-01278" />
1274513050      <sharedfeat name="compatibility" value="NTSC-J"/>
1274613051      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1275213057
1275313058   <software name="tenshino" supported="no">
1275413059      <description>Tenshi no Shippo (Japan)</description>
12755      <year>199?</year>
12756      <publisher>&lt;unknown&gt;</publisher>
13060      <year>2003</year>
13061      <publisher>Bandai</publisher>
13062      <info name="alt_title" value="天使のしっぽ"/>
1275713063      <info name="serial" value="SLPS-03531" />
1275813064      <sharedfeat name="compatibility" value="NTSC-J"/>
1275913065      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1276513071
1276613072   <software name="tetrisxj" supported="no">
1276713073      <description>Tetris X (Japan)</description>
12768      <year>199?</year>
12769      <publisher>&lt;unknown&gt;</publisher>
13074      <year>1996</year>
13075      <publisher>Bullet Proof</publisher>
13076      <info name="alt_title" value="テトリス X"/>
1277013077      <info name="serial" value="SLPS-00321" />
1277113078      <sharedfeat name="compatibility" value="NTSC-J"/>
1277213079      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1277713084   </software>
1277813085
1277913086   <software name="tfxjapan" supported="no">
12780      <description>TFX (Japan)</description>
12781      <year>199?</year>
12782      <publisher>&lt;unknown&gt;</publisher>
13087      <description>TFX - Tactical Fighter Experiment (Japan)</description>
13088      <year>1996</year>
13089      <publisher>Imageneer &#47; Ocean</publisher>
13090      <info name="alt_title" value="TFX"/>
1278313091      <info name="serial" value="SLPS-00511" />
1278413092      <sharedfeat name="compatibility" value="NTSC-J"/>
1278513093      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1279113099
1279213100   <software name="thatsqtj" supported="no">
1279313101      <description>That's QT (Japan)</description>
12794      <year>199?</year>
12795      <publisher>&lt;unknown&gt;</publisher>
13102      <year>2000</year>
13103      <publisher>Koei</publisher>
13104      <info name="alt_title" value="ザッツキューティ"/>
1279613105      <info name="serial" value="SLPM-86340" />
1279713106      <sharedfeat name="compatibility" value="NTSC-J"/>
1279813107      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1280413113
1280513114   <software name="themehos" supported="no">
1280613115      <description>Theme Hospital (Japan)</description>
12807      <year>199?</year>
12808      <publisher>&lt;unknown&gt;</publisher>
13116      <year>1998</year>
13117      <publisher>Electronic Arts</publisher>
13118      <info name="alt_title" value="テーマホスピタル"/>
1280913119      <info name="serial" value="SLPS-01405" />
1281013120      <sharedfeat name="compatibility" value="NTSC-J"/>
1281113121      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1281613126   </software>
1281713127
1281813128   <software name="thunderf" supported="no">
12819      <description>Thunderforce V - Perfect System (Japan)</description>
12820      <year>199?</year>
12821      <publisher>&lt;unknown&gt;</publisher>
13129      <description>Thunder Force V - Perfect System (Japan)</description>
13130      <year>1998</year>
13131      <publisher>TechnoSoft</publisher>
13132      <info name="alt_title" value="サンダー・フォースV ~パーフェクト・システム~"/>
1282213133      <info name="serial" value="SLPS-01406" />
1282313134      <sharedfeat name="compatibility" value="NTSC-J"/>
1282413135      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1283013141
1283113142   <software name="timegaln" supported="no">
1283213143      <description>Time Gal &amp; Ninja Hayate (Japan)</description>
12833      <year>199?</year>
12834      <publisher>&lt;unknown&gt;</publisher>
13144      <year>1996</year>
13145      <publisher>Taito</publisher>
13146      <info name="alt_title" value="タイムギャル&#38;忍者ハヤテ"/>
1283513147      <info name="serial" value="SLPS-00383, SLPS-00384" />
1283613148      <sharedfeat name="compatibility" value="NTSC-J"/>
1283713149      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1284813160
1284913161   <software name="tinybull" supported="no">
1285013162      <description>Tiny Bullets (Japan)</description>
12851      <year>199?</year>
12852      <publisher>&lt;unknown&gt;</publisher>
13163      <year>2000</year>
13164      <publisher>Sony</publisher>
13165      <info name="alt_title" value="タイニーバレット"/>
1285313166      <info name="serial" value="SCPS-10130" />
1285413167      <sharedfeat name="compatibility" value="NTSC-J"/>
1285513168      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1286113174
1286213175   <software name="toheartj" supported="no">
1286313176      <description>To Heart (Japan)</description>
12864      <year>199?</year>
12865      <publisher>&lt;unknown&gt;</publisher>
13177      <year>1999</year>
13178      <publisher>Aqua Plus</publisher>
13179      <info name="alt_title" value="トゥハート"/>
1286613180      <info name="serial" value="SLPS-01919, SLPS-01920" />
1286713181      <sharedfeat name="compatibility" value="NTSC-J"/>
1286813182      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1287913193
1288013194   <software name="toaplans" supported="no">
1288113195      <description>Toaplan Shooting Battle 1 (Japan)</description>
12882      <year>199?</year>
12883      <publisher>&lt;unknown&gt;</publisher>
13196      <year>1996</year>
13197      <publisher>Banpresto</publisher>
13198      <info name="alt_title" value="東亜プラン シューティングバトル1"/>
1288413199      <info name="serial" value="SLPS-00436" />
1288513200      <sharedfeat name="compatibility" value="NTSC-J"/>
1288613201      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1289313208   <!-- OK, some problems with sky gfx -->
1289413209   <software name="tocatour" supported="no">
1289513210      <description>Toca Touring Car Championship (Japan)</description>
12896      <year>199?</year>
12897      <publisher>&lt;unknown&gt;</publisher>
13211      <year>1998</year>
13212      <publisher>Upstar</publisher>
13213      <info name="alt_title" value="TOCA TOURINGCAR CHAMPION SHIP"/>
1289813214      <info name="serial" value="SLPS-01410" />
1289913215      <sharedfeat name="compatibility" value="NTSC-J"/>
1290013216      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1290713223   <!-- boot OK -->
1290813224   <software name="tkpzldm" supported="no">
1290913225      <description>Tokimeki Memorial - Taisen Puzzle-Dama (Japan)</description>
12910      <year>199?</year>
12911      <publisher>&lt;unknown&gt;</publisher>
13226      <year>1996</year>
13227      <publisher>Konami</publisher>
13228      <info name="alt_title" value="ときめきメモリアル対戦ぱずるだま"/>
1291213229      <info name="serial" value="SLPM-86005" />
1291313230      <sharedfeat name="compatibility" value="NTSC-J"/>
1291413231      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1291913236   </software>
1292013237
1292113238   <software name="tm2ev1" supported="no">
12922      <description>Tokimeki Memorial 2 Emotional Voice System (Vol.1 - Kotoko-Miyuki-Kaedeko) (Japan)</description>
12923      <year>199?</year>
12924      <publisher>&lt;unknown&gt;</publisher>
13239      <description>Tokimeki Memorial 2 EVS Append Disc 1 (Kotoko-Miyuki-Kaedeko) (Japan)</description>
13240      <year>2000</year>
13241      <publisher>Aspect</publisher>
1292513242      <info name="serial" value="SLPM-80527" />
1292613243      <sharedfeat name="compatibility" value="NTSC-J"/>
1292713244      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1293213249   </software>
1293313250
1293413251   <software name="tm2ev2" supported="no">
12935      <description>Tokimeki Memorial 2 Emotional Voice System (Vol.2 - Homura-Akane-Kaori) (Japan)</description>
12936      <year>199?</year>
12937      <publisher>&lt;unknown&gt;</publisher>
13252      <description>Tokimeki Memorial 2 EVS Append Disc 2 (Homura-Akane-Kaori) (Japan)</description>
13253      <year>2000</year>
13254      <publisher>Aspect</publisher>
1293813255      <info name="serial" value="SLPM-80544" />
1293913256      <sharedfeat name="compatibility" value="NTSC-J"/>
1294013257      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1294513262   </software>
1294613263
1294713264   <software name="tm2ev3" supported="no">
12948      <description>Tokimeki Memorial 2 Emotional Voice System (Vol.3 - Miho-Mei-Sumire) (Japan)</description>
12949      <year>199?</year>
12950      <publisher>&lt;unknown&gt;</publisher>
13265      <description>Tokimeki Memorial 2 EVS Append Disc 3 (Miho-Mei-Sumire) (Japan)</description>
13266      <year>2000</year>
13267      <publisher>Enterbrain</publisher>
1295113268      <info name="serial" value="SLPM-80550" />
1295213269      <sharedfeat name="compatibility" value="NTSC-J"/>
1295313270      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1295813275   </software>
1295913276
1296013277   <software name="tm2s1" supported="no">
12961      <description>Tokimeki Memorial 2 Substories Vol.1 - Dancing Summer Vacation (Japan)</description>
12962      <year>199?</year>
12963      <publisher>&lt;unknown&gt;</publisher>
13278      <description>Tokimeki Memorial 2 Substories vol. 1 - Dancing Summer Vacation (Japan)</description>
13279      <year>2000</year>
13280      <publisher>Konami</publisher>
13281      <info name="alt_title" value="ときめきメモリアル2 Substories 〜Dancing Summer Vacation〜"/>
1296413282      <info name="serial" value="SLPM-86549, SLPM-86550" />
1296513283      <sharedfeat name="compatibility" value="NTSC-J"/>
1296613284      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1297713295
1297813296   <software name="tm2s2" supported="no">
1297913297      <description>Tokimeki Memorial 2 Substories Vol.2 - Leaping School Festival (Japan)</description>
12980      <year>199?</year>
12981      <publisher>&lt;unknown&gt;</publisher>
13298      <year>2001</year>
13299      <publisher>Konami</publisher>
13300      <info name="alt_title" value="ときめきメモリアル2 Substories 〜Leaping School Festival〜"/>
1298213301      <info name="serial" value="SLPM-86775, SLPM-86776" />
1298313302      <sharedfeat name="compatibility" value="NTSC-J"/>
1298413303      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1299413313   </software>
1299513314
1299613315   <software name="tm2s3" supported="no">
12997      <description>Tokimeki Memorial 2 SubStories Vol.3 - Memories Ringing on (Japan)</description>
12998      <year>199?</year>
12999      <publisher>&lt;unknown&gt;</publisher>
13316      <description>Tokimeki Memorial 2 SubStories Vol.3 - Memories Ringing On (Japan)</description>
13317      <year>2001</year>
13318      <publisher>Konami</publisher>
13319      <info name="alt_title" value="ときめきメモリアル2 サブストーリーズ〜Memories Ringing On〜"/>
1300013320      <info name="serial" value="SLPM-86881, SLPM-86882" />
1300113321      <sharedfeat name="compatibility" value="NTSC-J"/>
1300213322      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1301313333
1301413334   <!-- boot ok -->
1301513335   <software name="tmds1" supported="no">
13016      <description>Tokimeki Memorial Drama Series Vol.1 - Nijiiro no Seishun (Japan)</description>
13017      <year>199?</year>
13018      <publisher>&lt;unknown&gt;</publisher>
13336      <description>Tokimeki Memorial Drama Series Vol.1 - Nijiiro No Seishun (Konami the Best) (Japan)</description>
13337      <year>1999</year>
13338      <publisher>Konami</publisher>
13339      <info name="alt_title" value="タイトル:ときめきメモリアル ドラマシリーズVol.1 虹色の青春(ベスト)"/>
1301913340      <info name="serial" value="SLPM-86360" />
1302013341      <sharedfeat name="compatibility" value="NTSC-J"/>
1302113342      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1302813349   <!-- boot ok -->
1302913350   <software name="tokyomaj" supported="no">
1303013351      <description>Tokyo Majin Gakuen Gehouchou (Japan)</description>
13031      <year>199?</year>
13032      <publisher>&lt;unknown&gt;</publisher>
13352      <year>2002</year>
13353      <publisher>Asmik Ace</publisher>
13354      <info name="alt_title" value="東京魔人学園外法帖"/>
1303313355      <info name="serial" value="SLPS-03333, SLPS-03334, SLPS-03335" />
1303413356      <sharedfeat name="compatibility" value="NTSC-J"/>
1303513357      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1305213374   <!-- black screen -->
1305313375   <software name="tomba" supported="no">
1305413376      <description>Tomba! The Wild Adventures (Japan)</description>
13055      <year>199?</year>
13056      <publisher>&lt;unknown&gt;</publisher>
13377      <year>1999</year>
13378      <publisher>Whoopee Camp</publisher>
13379      <info name="alt_title" value="トンバ! ザ・ワイルドアドベンチャー"/>
1305713380      <info name="serial" value="SLPS-02350" />
1305813381      <sharedfeat name="compatibility" value="NTSC-J"/>
1305913382      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1306513388
1306613389   <!-- boot ok -->
1306713390   <software name="tomikato" supported="no">
13068      <description>Tomikatown wo Tukurou! (Japan)</description>
13069      <year>199?</year>
13070      <publisher>&lt;unknown&gt;</publisher>
13391      <description>Tomica Town o Tsukurou! (Japan)</description>
13392      <year>1999</year>
13393      <publisher>Tomy</publisher>
13394      <info name="alt_title" value="トミカタウンをつくろう!"/>
1307113395      <info name="serial" value="SLPS-01935" />
1307213396      <sharedfeat name="compatibility" value="NTSC-J"/>
1307313397      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1308013404   <!-- hangs on now loading -->
1308113405   <software name="topoloja" supported="no">
1308213406      <description>ToPoLo (Japan)</description>
13083      <year>199?</year>
13084      <publisher>&lt;unknown&gt;</publisher>
13407      <year>1996</year>
13408      <publisher>Artdink</publisher>
13409      <info name="alt_title" value="ToPoLo"/>
1308513410      <info name="serial" value="SLPS-00620" />
1308613411      <sharedfeat name="compatibility" value="NTSC-J"/>
1308713412      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1309413419   <!-- black screen after company logos -->
1309513420   <software name="toshcard" supported="no">
1309613421      <description>Toshinden Card Quest (Japan)</description>
13097      <year>199?</year>
13098      <publisher>&lt;unknown&gt;</publisher>
13422      <year>1998</year>
13423      <publisher>Takara</publisher>
13424      <info name="alt_title" value="闘神伝 カードクエスト"/>
1309913425      <info name="serial" value="SLPS-01113" />
1310013426      <sharedfeat name="compatibility" value="NTSC-J"/>
1310113427      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1310813434   <!-- black screen -->
1310913435   <software name="tougemax" supported="no">
1311013436      <description>Touge Max G (Japan)</description>
13111      <year>199?</year>
13112      <publisher>&lt;unknown&gt;</publisher>
13437      <year>2000</year>
13438      <publisher>Atlus</publisher>
13439      <info name="alt_title" value="峠MAX G"/>
1311313440      <info name="serial" value="SLPS-02361" />
1311413441      <sharedfeat name="compatibility" value="NTSC-J"/>
1311513442      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1312213449   <!-- boot OK -->
1312313450   <software name="toukiden" supported="no">
1312413451      <description>Touki Denshou - Angel Eyes (Japan)</description>
13125      <year>199?</year>
13126      <publisher>&lt;unknown&gt;</publisher>
13452      <year>1997</year>
13453      <publisher>Tecmo</publisher>
13454      <info name="alt_title" value="闘姫伝承 ANGEL EYES"/>
1312713455      <info name="serial" value="SLPS-01168" />
1312813456      <sharedfeat name="compatibility" value="NTSC-J"/>
1312913457      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1313613464   <!-- boot OK -->
1313713465   <software name="toyotane" supported="no">
1313813466      <description>Toyota Netz Racing (Japan)</description>
13139      <year>199?</year>
13140      <publisher>&lt;unknown&gt;</publisher>
13467      <year>1999</year>
13468      <publisher>Atlus</publisher>
13469      <info name="alt_title" value="ソフト ネッツ・レーシング"/>
1314113470      <info name="serial" value="SLPM-80429" />
1314213471      <sharedfeat name="compatibility" value="NTSC-J"/>
1314313472      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1315013479   <!-- boot ok -->
1315113480   <software name="toysdrea" supported="no">
1315213481      <description>Toys Dream (Japan)</description>
13153      <year>199?</year>
13154      <publisher>&lt;unknown&gt;</publisher>
13482      <year>1998</year>
13483      <publisher>KSS</publisher>
13484      <info name="alt_title" value="トイズドリーム"/>
1315513485      <info name="serial" value="SLPS-01704" />
1315613486      <sharedfeat name="compatibility" value="NTSC-J"/>
1315713487      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1316413494   <!-- boot OK -->
1316513495   <software name="tripuzzj" supported="no">
1316613496      <description>Tripuzz (Japan)</description>
13167      <year>199?</year>
13168      <publisher>&lt;unknown&gt;</publisher>
13169      <info name="serial" value="SLPS-0911" />
13497      <year>1997</year>
13498      <publisher>Santos</publisher>
13499      <info name="alt_title" value="トリパズ"/>
13500      <info name="serial" value="SLPS-00911" />
1317013501      <sharedfeat name="compatibility" value="NTSC-J"/>
1317113502      <part name="cdrom" interface="psx_cdrom">
1317213503         <diskarea name="cdrom">
13173            <disk name="tripuzz (japan) [slps-0911]" sha1="ee7b2282597dde183796d7a1b50994565e047f4d"/>
13504            <disk name="tripuzz (japan) [slps-00911]" sha1="ee7b2282597dde183796d7a1b50994565e047f4d"/>
1317413505         </diskarea>
1317513506      </part>
1317613507   </software>
r242231r242232
1317813509   <!-- boot ok -->
1317913510   <software name="trumpshi" supported="no">
1318013511      <description>Trump Shiyouyo! (Japan)</description>
13181      <year>199?</year>
13182      <publisher>&lt;unknown&gt;</publisher>
13512      <year>1998</year>
13513      <publisher>Bottom Up</publisher>
13514      <info name="alt_title" value="トランプしようよ!"/>
1318313515      <info name="serial" value="SLPS-01440" />
1318413516      <sharedfeat name="compatibility" value="NTSC-J"/>
1318513517      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1319413526      <description>Tsun-tsun-gumi 2 - Moji Moji Bakkun (Japan)</description>
1319513527      <year>199?</year>
1319613528      <publisher>&lt;unknown&gt;</publisher>
13529      <info name="alt_title" value=""/>
1319713530      <info name="serial" value="SLPS-01694" />
1319813531      <sharedfeat name="compatibility" value="NTSC-J"/>
1319913532      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1320613539   <!-- boot ok -->
1320713540   <software name="tsuntsu3" supported="no">
1320813541      <description>Tsun-tsun-gumi 3 - Kanji Vader (Japan)</description>
13209      <year>199?</year>
13210      <publisher>&lt;unknown&gt;</publisher>
13542      <year>1998</year>
13543      <publisher>Kodansha</publisher>
13544      <info name="alt_title" value="つんつん組3 〜もじもじぱっくん〜"/>
1321113545      <info name="serial" value="SLPS-01839" />
1321213546      <sharedfeat name="compatibility" value="NTSC-J"/>
1321313547      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1322013554   <!-- black screen -->
1322113555   <software name="tsuribak" supported="no">
1322213556      <description>Tsuri Baka Nisshi (Japan)</description>
13223      <year>199?</year>
13224      <publisher>&lt;unknown&gt;</publisher>
13557      <year>1996</year>
13558      <publisher>Shogakukan</publisher>
13559      <info name="alt_title" value="釣りバカ日誌"/>
1322513560      <info name="serial" value="SLPS-00440" />
1322613561      <sharedfeat name="compatibility" value="NTSC-J"/>
1322713562      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1323413569   <!-- boot ok -->
1323513570   <software name="tvanimat" supported="no">
1323613571      <description>TV Animation X - Unmei no Tatakai (Japan)</description>
13237      <year>199?</year>
13238      <publisher>&lt;unknown&gt;</publisher>
13572      <year>2002</year>
13573      <publisher>Bandai</publisher>
13574      <info name="alt_title" value="TVanimation X〜運命の選択〜"/>
1323913575      <info name="serial" value="SLPS-03459" />
1324013576      <sharedfeat name="compatibility" value="NTSC-J"/>
1324113577      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1324813584   <!-- black screen -->
1324913585   <software name="twingodd" supported="no">
1325013586      <description>Twin Goddesses (Japan)</description>
13251      <year>199?</year>
13252      <publisher>&lt;unknown&gt;</publisher>
13587      <year>1994</year>
13588      <publisher>PolyGram</publisher>
13589      <info name="alt_title" value="ツイン・ゴッデス"/>
1325313590      <info name="serial" value="SLPS-00018" />
1325413591      <sharedfeat name="compatibility" value="NTSC-J"/>
1325513592      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1326213599   <!-- black screen -->
1326313600   <software name="twinbeet" supported="no">
1326413601      <description>Twinbee Taisen Puzzle-Dama (Japan)</description>
13265      <year>199?</year>
13266      <publisher>&lt;unknown&gt;</publisher>
13602      <year>1994</year>
13603      <publisher>Konami</publisher>
13604      <info name="alt_title" value="ツインビー対戦ぱずるだま"/>
1326713605      <info name="serial" value="SLPS-00015" />
1326813606      <sharedfeat name="compatibility" value="NTSC-J"/>
1326913607      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1327613614   <!-- boot ok -->
1327713615   <software name="twinbeer" supported="no">
1327813616      <description>TwinBee-RPG (Japan)</description>
13279      <year>199?</year>
13280      <publisher>&lt;unknown&gt;</publisher>
13617      <year>1998</year>
13618      <publisher>Konami</publisher>
13619      <info name="alt_title" value="ツインビーRPG"/>
1328113620      <info name="serial" value="SLPM-86077" />
1328213621      <sharedfeat name="compatibility" value="NTSC-J"/>
1328313622      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1328913628
1329013629   <!-- boot ok -->
1329113630   <software name="twinssto" supported="no">
13292      <description>Twins Story (Japan)</description>
13293      <year>199?</year>
13294      <publisher>&lt;unknown&gt;</publisher>
13631      <description>Twins Story - Kimi ni Tsutaetakute (Japan)</description>
13632      <year>1999</year>
13633      <publisher>Panther</publisher>
13634      <info name="alt_title" value="ツインズストーリー きみにつたえたくて・・・"/>
1329513635      <info name="serial" value="SLPS-02126" />
1329613636      <sharedfeat name="compatibility" value="NTSC-J"/>
1329713637      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1330413644   <!-- boot OK -->
1330513645   <software name="twotenka" supported="no">
1330613646      <description>Two-Tenkaku (Japan)</description>
13307      <year>199?</year>
13308      <publisher>&lt;unknown&gt;</publisher>
13647      <year>1995</year>
13648      <publisher>Sony</publisher>
13649      <info name="alt_title" value="通天閣"/>
1330913650      <info name="serial" value="SLPS-00131" />
1331013651      <sharedfeat name="compatibility" value="NTSC-J"/>
1331113652      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1333313674   <!-- boot ok -->
1333413675   <software name="ufoadayi" supported="no">
1333513676      <description>UFO - A Day in the Life (Japan)</description>
13336      <year>199?</year>
13337      <publisher>&lt;unknown&gt;</publisher>
13677      <year>1999</year>
13678      <publisher>ASCII</publisher>
13679      <info name="alt_title" value="UFO ~A day in the life~"/>
1333813680      <info name="serial" value="SLPS-02032" />
1333913681      <sharedfeat name="compatibility" value="NTSC-J"/>
1334013682      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1334713689   <!-- black screen, bad sounds -->
1334813690   <software name="ugetsuki" supported="no">
1334913691      <description>Ugetsu Kitan (Japan)</description>
13350      <year>199?</year>
13351      <publisher>&lt;unknown&gt;</publisher>
13692      <year>1996</year>
13693      <publisher>Tonkin House</publisher>
13694      <info name="alt_title" value="雨月奇譚 〜うげつきたん〜"/>
1335213695      <info name="serial" value="SLPS-00391" />
1335313696      <sharedfeat name="compatibility" value="NTSC-J"/>
1335413697      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1336113704   <!-- boot ok -->
1336213705   <software name="ukiukits" supported="no">
1336313706      <description>Ukiuki Tsuri Tengoku - Uogami Densetsu wo Oe (Japan)</description>
13364      <year>199?</year>
13365      <publisher>&lt;unknown&gt;</publisher>
13707      <year>2000</year>
13708      <publisher>Teichiku</publisher>
13709      <info name="alt_title" value="ウキウキ釣り天国〜魚神伝説を追え〜"/>
1336613710      <info name="serial" value="SLPS-02579" />
1336713711      <sharedfeat name="compatibility" value="NTSC-J"/>
1336813712      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1337513719   <!-- stuck on sony logo -->
1337613720   <software name="ultimaun" supported="no">
1337713721      <description>Ultima Underworld - The Stygian Abyss (Japan)</description>
13378      <year>199?</year>
13379      <publisher>&lt;unknown&gt;</publisher>
13722      <year>1997</year>
13723      <publisher>Electronic Arts</publisher>
13724      <info name="alt_title" value="ウルティマ アンダーワールド"/>
1338013725      <info name="serial" value="SLPS-00742" />
1338113726      <sharedfeat name="compatibility" value="NTSC-J"/>
1338213727      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1338813733
1338913734   <!-- boot ok -->
1339013735   <software name="ultraman" supported="no">
13391      <description>Ultraman Tiga &amp; Dyna Fighting Evolution - New Generations (Japan)</description>
13392      <year>199?</year>
13393      <publisher>&lt;unknown&gt;</publisher>
13736      <description>Ultraman Tiga &#38; Ultraman Dyna Fighting Evolution - New Generations (Japan)</description>
13737      <year>1998</year>
13738      <publisher>Bandai</publisher>
13739      <info name="alt_title" value="ウルトラマンティガ&#38;ダイナ 新たなる2つの光"/>
1339413740      <info name="serial" value="SLPS-01455" />
1339513741      <sharedfeat name="compatibility" value="NTSC-J"/>
1339613742      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1340313749   <!-- boot ok -->
1340413750   <software name="ultramze" supported="no">
1340513751      <description>Ultraman Zearth (Japan)</description>
13406      <year>199?</year>
13407      <publisher>&lt;unknown&gt;</publisher>
13752      <year>1996</year>
13753      <publisher>Tohoku Shinsha</publisher>
13754      <info name="alt_title" value="ウルトラマンゼアス"/>
1340813755      <info name="serial" value="SLPS-00652" />
1340913756      <sharedfeat name="compatibility" value="NTSC-J"/>
1341013757      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1341613763
1341713764   <!-- black screen after company logos -->
1341813765   <software name="uminonus" supported="no">
13419      <description>Umi no Nushi Tsuri (Japan)</description>
13420      <year>199?</year>
13421      <publisher>&lt;unknown&gt;</publisher>
13766      <description>Umi No Nushi Tsuri Takarajimi NI Mukatte (Japan)</description>
13767      <year>1999</year>
13768      <publisher>Pack-in-Soft</publisher>
13769      <info name="alt_title" value="海のぬし釣り−宝島に向かって−"/>
1342213770      <info name="serial" value="SLPS-02172" />
1342313771      <sharedfeat name="compatibility" value="NTSC-J"/>
1342413772      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1343013778
1343113779   <!-- black screen -->
1343213780   <software name="umiharak" supported="no">
13433      <description>Umihara Kawase Shun - Second Edition (Japan)</description>
13434      <year>199?</year>
13435      <publisher>&lt;unknown&gt;</publisher>
13781      <description>Umihara Kawase Shun - Second Edition (Maruan Series 1) (Japan)</description>
13782      <year>2000</year>
13783      <publisher>Xing</publisher>
13784      <info name="alt_title" value="マル安シリーズ1 海腹川背・旬 〜セカンドエディション〜"/>
1343613785      <info name="serial" value="SLPS-02549" />
1343713786      <sharedfeat name="compatibility" value="NTSC-J"/>
1343813787      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1344513794   <!-- boot ok -->
1344613795   <software name="ungrawal" supported="no">
1344713796      <description>Ungra Walker (Japan)</description>
13448      <year>199?</year>
13449      <publisher>&lt;unknown&gt;</publisher>
13797      <year>2002</year>
13798      <publisher>Success</publisher>
13799      <info name="alt_title" value="アングラウォーカー"/>
1345013800      <info name="serial" value="SLPM-87055" />
1345113801      <sharedfeat name="compatibility" value="NTSC-J"/>
1345213802      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1345913809   <!-- boot ok -->
1346013810   <software name="urawazam" supported="no">
1346113811      <description>Urawaza Mahjong - Korette Tenhoutte Yatsukai (Japan)</description>
13462      <year>199?</year>
13463      <publisher>&lt;unknown&gt;</publisher>
13812      <year>2000</year>
13813      <publisher>Spike</publisher>
13814      <info name="alt_title" value="裏技麻雀〜これって天和ってやつかい〜"/>
1346413815      <info name="serial" value="SLPS-02807" />
1346513816      <sharedfeat name="compatibility" value="NTSC-J"/>
1346613817      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1347313824   <!-- boot OK -->
1347413825   <software name="vtennis2" supported="no">
1347513826      <description>V-Tennis 2 (Japan)</description>
13476      <year>199?</year>
13477      <publisher>&lt;unknown&gt;</publisher>
13478      <info name="serial" value="SLPS 00469" />
13827      <year>1996</year>
13828      <publisher>Tonkin House</publisher>
13829      <info name="alt_title" value="Vテニス2"/>
13830      <info name="serial" value="SLPS-00469" />
1347913831      <sharedfeat name="compatibility" value="NTSC-J"/>
1348013832      <part name="cdrom" interface="psx_cdrom">
1348113833         <diskarea name="cdrom">
r242231r242232
1348513837   </software>
1348613838
1348713839   <!-- boot ok, every other fmv frame broken -->
13488   <software name="vampirek" supported="no">
13489      <description>Vampire - Kyuuketsuki Densetsu (Japan)</description>
13490      <year>199?</year>
13491      <publisher>&lt;unknown&gt;</publisher>
13840   <software name="vampirky" supported="no">
13841      <description>Vampir Kyuuketsuki Densetsu (Japan)</description>
13842      <year>1999</year>
13843      <publisher>Artdink</publisher>
13844      <info name="alt_title" value="ヴァンピール 吸血鬼伝説"/>
1349213845      <info name="serial" value="SLPS-01932" />
1349313846      <sharedfeat name="compatibility" value="NTSC-J"/>
1349413847      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1350113854   <!-- boot ok -->
1350213855   <software name="vehiclec" supported="no">
1350313856      <description>Vehicle Cavalier (Japan)</description>
13504      <year>199?</year>
13505      <publisher>&lt;unknown&gt;</publisher>
13857      <year>1996</year>
13858      <publisher>Vanguard Works</publisher>
13859      <info name="alt_title" value="ヴィーグル・キャヴァリアー"/>
1350613860      <info name="serial" value="SLPS-00232" />
1350713861      <sharedfeat name="compatibility" value="NTSC-J"/>
1350813862      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1351513869   <!-- boot ok -->
1351613870   <software name="victorys" supported="no">
1351713871      <description>Victory Spike (Japan)</description>
13518      <year>199?</year>
13519      <publisher>&lt;unknown&gt;</publisher>
13872      <year>1996</year>
13873      <publisher>Imagineer</publisher>
13874      <info name="alt_title" value="ヴィクトリー・スパイク"/>
1352013875      <info name="serial" value="SLPS-00372" />
1352113876      <sharedfeat name="compatibility" value="NTSC-J"/>
1352213877      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1352813883
1352913884   <!-- black screen after copyrights -->
1353013885   <software name="victoryz" supported="no">
13531      <description>Victory Zone (Japan)</description>
13532      <year>199?</year>
13533      <publisher>&lt;unknown&gt;</publisher>
13886      <description>Victory Zone - Real Pachinko Simulator (Japan)</description>
13887      <year>1995</year>
13888      <publisher>Sony</publisher>
13889      <info name="alt_title" value="ヴィクトリーゾーン"/>
1353413890      <info name="serial" value="SCPS-10002" />
1353513891      <sharedfeat name="compatibility" value="NTSC-J"/>
1353613892      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1354313899   <!-- black screen after memory card message -->
1354413900   <software name="virtualh" supported="no">
1354513901      <description>Virtual Hiyru no Ken (Japan)</description>
13546      <year>199?</year>
13547      <publisher>&lt;unknown&gt;</publisher>
13902      <year>1997</year>
13903      <publisher>Culture Brain</publisher>
13904      <info name="alt_title" value="バーチャル飛龍の拳"/>
1354813905      <info name="serial" value="SLPS-00338" />
1354913906      <sharedfeat name="compatibility" value="NTSC-J"/>
1355013907      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1355713914   <!-- boot ok -->
1355813915   <software name="virtualk" supported="no">
1355913916      <description>Virtual Kyotei '98 (Japan)</description>
13560      <year>199?</year>
13561      <publisher>&lt;unknown&gt;</publisher>
13917      <year>1998</year>
13918      <publisher>Nihon Bussan</publisher>
13919      <info name="alt_title" value="バーチャル競艇 '98"/>
1356213920      <info name="serial" value="SLPS-01396" />
1356313921      <sharedfeat name="compatibility" value="NTSC-J"/>
1356413922      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1357113929   <!-- boot ok -->
1357213930   <software name="virtualp" supported="no">
1357313931      <description>Virtual Pro Wrestling (Japan)</description>
13574      <year>199?</year>
13575      <publisher>&lt;unknown&gt;</publisher>
13932      <year>1996</year>
13933      <publisher>Asmik Ace</publisher>
13934      <info name="alt_title" value="バーチャルプロレスリング"/>
1357613935      <info name="serial" value="SLPS-00449" />
1357713936      <sharedfeat name="compatibility" value="NTSC-J"/>
1357813937      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1358513944   <!-- boot ok -->
1358613945   <software name="virus" supported="no">
1358713946      <description>Virus - The Battle Field (Japan)</description>
13588      <year>199?</year>
13589      <publisher>&lt;unknown&gt;</publisher>
13947      <year>1999</year>
13948      <publisher>PolyGram</publisher>
13949      <info name="alt_title" value="病毒 - 战场"/>
1359013950      <info name="serial" value="SLPS-02008" />
1359113951      <sharedfeat name="compatibility" value="NTSC-J"/>
1359213952      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1359813958
1359913959   <!-- boot ok -->
1360013960   <software name="visionof" supported="no">
13601      <description>Vision Of Escaflowne, The (Japan)</description>
13602      <year>199?</year>
13603      <publisher>&lt;unknown&gt;</publisher>
13961      <description>Vision Of Escaflowne, The (Limited Edition) (Japan)</description>
13962      <year>1999</year>
13963      <publisher>Bandai</publisher>
13964      <info name="alt_title" value="天空のエスカフローネ限定版 Fortune BOX"/>
1360413965      <info name="serial" value="SLPS-01014" />
1360513966      <sharedfeat name="compatibility" value="NTSC-J"/>
1360613967      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1361313974   <!-- hangs loading afte initial fmv -->
1361413975   <software name="volfossj" supported="no">
1361513976      <description>Volfoss (Japan)</description>
13616      <year>199?</year>
13617      <publisher>&lt;unknown&gt;</publisher>
13977      <year>2001</year>
13978      <publisher>Namco</publisher>
13979      <info name="alt_title" value="ボルフォス"/>
1361813980      <info name="serial" value="SLPS-03140" />
1361913981      <sharedfeat name="compatibility" value="NTSC-J"/>
1362013982      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1362613988
1362713989   <!-- boot ok -->
1362813990   <software name="wagamama" supported="no">
13629      <description>Wagamama Fairy Mirumo de Pon! (Japan)</description>
13630      <year>199?</year>
13631      <publisher>&lt;unknown&gt;</publisher>
13991      <description>Wagamama Fairy Mirumo de Pon! - Mirumo no Mahou Gakkou Monogatari (Japan)</description>
13992      <year>2003</year>
13993      <publisher>Konami</publisher>
13994      <info name="alt_title" value="わがままフェアリーミルモでポン! ミルモの魔法学校ものがたり"/>
1363213995      <info name="serial" value="SLPM-87220" />
1363313996      <sharedfeat name="compatibility" value="NTSC-J"/>
1363413997      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1364114004   <!-- boot ok -->
1364214005   <software name="wangantr" supported="no">
1364314006      <description>Wangan Trial (Japan)</description>
13644      <year>199?</year>
13645      <publisher>&lt;unknown&gt;</publisher>
14007      <year>1998</year>
14008      <publisher>Pack-in-Soft</publisher>
14009      <info name="alt_title" value="湾岸トライアル"/>
1364614010      <info name="serial" value="SLPS-01213, SLPS-01214" />
1364714011      <sharedfeat name="compatibility" value="NTSC-J"/>
1364814012      <part name="cdrom1" interface="psx_cdrom">
r242231r242232
1365914023
1366014024   <!-- boot ok -->
1366114025   <software name="warerami" supported="no">
13662      <description>Warera Mitsurin Tankentai!! (Japan)</description>
13663      <year>199?</year>
13664      <publisher>&lt;unknown&gt;</publisher>
14026      <description>Warera Mitsubayashi Tankentai!! (Japan)</description>
14027      <year>2000</year>
14028      <publisher>Victor</publisher>
14029      <info name="alt_title" value="われら密林探検隊!!"/>
1366514030      <info name="serial" value="SLPS-02658" />
1366614031      <sharedfeat name="compatibility" value="NTSC-J"/>
1366714032      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1367314038
1367414039   <!-- boot ok -->
1367514040   <software name="watersum" supported="no">
13676      <description>Water Summer (Japan)</description>
13677      <year>199?</year>
13678      <publisher>&lt;unknown&gt;</publisher>
14041      <description>Water Summer (Limited Edition) (Japan)</description>
14042      <year>2002</year>
14043      <publisher>Princess Soft</publisher>
14044      <info name="alt_title" value="WATER SUMMER(初回限定版)"/>
1367914045      <info name="serial" value="SLPM-87085" />
1368014046      <sharedfeat name="compatibility" value="NTSC-J"/>
1368114047      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1368714053
1368814054   <!-- boot ok -->
1368914055   <software name="weddingp" supported="no">
13690      <description>Wedding Peach - Doki Doki Oironaoshi Fashion Daisakuse (Japan)</description>
13691      <year>199?</year>
13692      <publisher>&lt;unknown&gt;</publisher>
14056      <description>Wedding Peach - Doki Doki Oiro-Naoshi Fashion Daisakusen (Japan)</description>
14057      <year>1996</year>
14058      <publisher>KSS</publisher>
14059      <info name="alt_title" value="ウェディングピーチ ドキドキお色直し"/>
1369314060      <info name="serial" value="SLPS-00368" />
1369414061      <sharedfeat name="compatibility" value="NTSC-J"/>
1369514062      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1370214069   <!-- stuck on sony logo -->
1370314070   <software name="welcomeh" supported="no">
1370414071      <description>Welcome House</description>
13705      <year>199?</year>
13706      <publisher>&lt;unknown&gt;</publisher>
13707      <info name="serial" value="Welcome Hous" />
14072      <year>1996</year>
14073      <publisher>Gust</publisher>
14074      <info name="alt_title" value="ウエルカムハウス"/>
14075      <info name="serial" value="SLPS-00190" />
1370814076      <sharedfeat name="compatibility" value="NTSC-J"/>
1370914077      <part name="cdrom" interface="psx_cdrom">
1371014078         <diskarea name="cdrom">
13711            <disk name="welcome house" sha1="0aa66eca197e87d56c0cc30c45dbdb311883d3d9"/>
14079            <disk name="welcome house (japan) [slps-00190]" sha1="0aa66eca197e87d56c0cc30c45dbdb311883d3d9"/>
1371214080         </diskarea>
1371314081      </part>
1371414082   </software>
r242231r242232
1371614084   <!-- boot ok -->
1371714085   <software name="weltorve" supported="no">
1371814086      <description>Weltorv Estleia (Japan)</description>
13719      <year>199?</year>
13720      <publisher>&lt;unknown&gt;</publisher>
14087      <year>1999</year>
14088      <publisher>Hudson</publisher>
14089      <info name="alt_title" value="ウエルト オブ イストリア"/>
1372114090      <info name="serial" value="SLPS-01887" />
1372214091      <sharedfeat name="compatibility" value="NTSC-J"/>
1372314092      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1373014099   <!-- boot ok -->
1373114100   <software name="whitedia" supported="no">
1373214101      <description>White Diamond (Japan)</description>
13733      <year>199?</year>
13734      <publisher>&lt;unknown&gt;</publisher>
14102      <year>1999</year>
14103      <publisher>Escot</publisher>
14104      <info name="alt_title" value="ホワイトダイアモンド"/>
1373514105      <info name="serial" value="SLPS-02352" />
1373614106      <sharedfeat name="compatibility" value="NTSC-J"/>
1373714107      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1374414114   <!-- hangs / gets stuck on loading screen playing bad sound -->
1374514115   <software name="wingover" supported="no">
1374614116      <description>Wing Over (Japan)</description>
13747      <year>199?</year>
14117      <year>1997</year>
1374814118      <publisher>&lt;unknown&gt;</publisher>
14119      <info name="alt_title" value="ウイングオーバー"/>
1374914120      <info name="serial" value="SLPS-00598" />
1375014121      <sharedfeat name="compatibility" value="NTSC-J"/>
1375114122      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1375814129   <!-- boot ok -->
1375914130   <software name="wizardsh" supported="no">
1376014131      <description>Wizard's Harmony R (Japan)</description>
13761      <year>199?</year>
13762      <publisher>&lt;unknown&gt;</publisher>
14132      <year>1998</year>
14133      <publisher>Arc System Works</publisher>
14134      <info name="alt_title" value="Wizard's Harmony R"/>
1376314135      <info name="serial" value="SLPS-01716" />
1376414136      <sharedfeat name="compatibility" value="NTSC-J"/>
1376514137      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1377214144   <!-- boot ok -->
1377314145   <software name="wolffang" supported="no">
1377414146      <description>Wolf Fang (Japan)</description>
13775      <year>199?</year>
13776      <publisher>&lt;unknown&gt;</publisher>
14147      <year>1996</year>
14148      <publisher>Xing</publisher>
14149      <info name="alt_title" value="ウルフファング"/>
1377714150      <info name="serial" value="SLPS-00254" />
1377814151      <sharedfeat name="compatibility" value="NTSC-J"/>
1377914152      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1378614159   <!-- some games work -->
1378714160   <software name="wonder3a" supported="no">
1378814161      <description>Wonder 3 Arcade Gears (Japan)</description>
13789      <year>199?</year>
13790      <publisher>&lt;unknown&gt;</publisher>
14162      <year>1998</year>
14163      <publisher>Xing</publisher>
14164      <info name="alt_title" value="ワンダー3"/>
1379114165      <info name="serial" value="SLPS-00927" />
1379214166      <sharedfeat name="compatibility" value="NTSC-J"/>
1379314167      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1380014174   <!-- crash MESS -->
1380114175   <software name="wonderbc" supported="no">
1380214176      <description>Wonder B-Cruise - Dogiborn Daisakusen (Japan)</description>
13803      <year>199?</year>
13804      <publisher>&lt;unknown&gt;</publisher>
14177      <year>1999</year>
14178      <publisher>Sunsoft</publisher>
14179      <info name="alt_title" value="わんダービークルズ"/>
1380514180      <info name="serial" value="SLPS-02322" />
1380614181      <sharedfeat name="compatibility" value="NTSC-J"/>
1380714182      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1381414189   <!-- boot ok -->
1381514190   <software name="wondertr" supported="no">
1381614191      <description>Wonder Tracker (Japan)</description>
13817      <year>199?</year>
13818      <publisher>&lt;unknown&gt;</publisher>
14192      <year>1998</year>
14193      <publisher>Sony</publisher>
14194      <info name="alt_title" value="ワンダートレック"/>
1381914195      <info name="serial" value="SCPS-10072" />
1382014196      <sharedfeat name="compatibility" value="NTSC-J"/>
1382114197      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1382714203
1382814204   <!-- boot ok -->
1382914205   <software name="worldlea" supported="no">
13830      <description>World League Soccer - Challenge Nippon! (Japan)</description>
13831      <year>199?</year>
13832      <publisher>&lt;unknown&gt;</publisher>
14206      <description>World League Soccer - Challenge Nippon! (  Family Price 1500) (Japan)</description>
14207      <year>2000</year>
14208      <publisher>Coconuts Japan</publisher>
14209      <info name="alt_title" value="ワールドリーグサッカー"/>
1383314210      <info name="serial" value="SLPS-02687" />
1383414211      <sharedfeat name="compatibility" value="NTSC-J"/>
1383514212      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1384214219   <!-- black screen -->
1384314220   <software name="worldnev" supported="no">
1384414221      <description>World Neverland - Olerud Oukoku Monogatari (Japan)</description>
13845      <year>199?</year>
13846      <publisher>&lt;unknown&gt;</publisher>
14222      <year>1997</year>
14223      <publisher>RiverhillSoft</publisher>
14224      <info name="alt_title" value="World Neverland〜オルルド王国物語〜"/>
1384714225      <info name="serial" value="SLPS-01037" />
1384814226      <sharedfeat name="compatibility" value="NTSC-J"/>
1384914227      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1385614234   <!-- boot ok -->
1385714235   <software name="worldpro" supported="no">
1385814236      <description>World Pro Tennis '98 (Japan)</description>
13859      <year>199?</year>
13860      <publisher>&lt;unknown&gt;</publisher>
14237      <year>1998</year>
14238      <publisher>I.Magic</publisher>
14239      <info name="alt_title" value="ワールドプロテニス98"/>
1386114240      <info name="serial" value="SLPS-01379" />
1386214241      <sharedfeat name="compatibility" value="NTSC-J"/>
1386314242      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1387014249   <!-- boot ok -->
1387114250   <software name="wwfwrest" supported="no">
1387214251      <description>WWF Wrestlemania - The Arcade Game (Japan)</description>
13873      <year>199?</year>
13874      <publisher>&lt;unknown&gt;</publisher>
14252      <year>1996</year>
14253      <publisher>Acclaim</publisher>
14254      <info name="alt_title" value="レッスルマニア・ジ・アーケードゲーム"/>
1387514255      <info name="serial" value="SLPS-00223" />
1387614256      <sharedfeat name="compatibility" value="NTSC-J"/>
1387714257      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1388414264   <!-- boot OK -->
1388514265   <software name="xracingj" supported="no">
1388614266      <description>X-Racing (Japan)</description>
13887      <year>199?</year>
13888      <publisher>&lt;unknown&gt;</publisher>
14267      <year>1998</year>
14268      <publisher>Nichibutsu</publisher>
14269      <info name="alt_title" value="X.RACING(エックスレーシング)"/>
1388914270      <info name="serial" value="SLPS-01063" />
1389014271      <sharedfeat name="compatibility" value="NTSC-J"/>
1389114272      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1389814279   <!-- boot ok, but invisible player sprite -->
1389914280   <software name="x2noreli" supported="no">
1390014281      <description>X2 - No Relief (Japan)</description>
13901      <year>199?</year>
13902      <publisher>&lt;unknown&gt;</publisher>
14282      <year>1997</year>
14283      <publisher>Capcom</publisher>
14284      <info name="alt_title" value="X2"/>
1390314285      <info name="serial" value="SLPS-00766" />
1390414286      <sharedfeat name="compatibility" value="NTSC-J"/>
1390514287      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1392614308   <!-- boot ok -->
1392714309   <software name="yakiniku" supported="no">
1392814310      <description>Yakiniku Bugyou (Japan)</description>
13929      <year>199?</year>
13930      <publisher>&lt;unknown&gt;</publisher>
14311      <year>2001</year>
14312      <publisher>Media</publisher>
14313      <info name="alt_title" value="焼肉奉行"/>
1393114314      <info name="serial" value="SLPS-03209" />
1393214315      <sharedfeat name="compatibility" value="NTSC-J"/>
1393314316      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1394014323   <!-- boot ok -->
1394114324   <software name="yakitori" supported="no">
1394214325      <description>Yakitori Musume - Sugo Ude Hanjouki (Japan)</description>
13943      <year>199?</year>
13944      <publisher>&lt;unknown&gt;</publisher>
14326      <year>2002</year>
14327      <publisher>Media</publisher>
14328      <info name="alt_title" value="やきとり娘〜スゴ腕繁盛記〜"/>
1394514329      <info name="serial" value="SLPS-03435" />
1394614330      <sharedfeat name="compatibility" value="NTSC-J"/>
1394714331      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1395414338   <!-- boot ok -->
1395514339   <software name="yamagaau" supported="no">
1395614340      <description>Yamagata Digital Museum - Autumn (Japan)</description>
13957      <year>199?</year>
13958      <publisher>&lt;unknown&gt;</publisher>
14341      <year>1999</year>
14342      <publisher>Imagineer</publisher>
14343      <info name="alt_title" value="デジタルミュージアム ヒロ・ヤマガタAutumn"/>
1395914344      <info name="serial" value="SLPS-01662" />
1396014345      <sharedfeat name="compatibility" value="NTSC-J"/>
1396114346      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1396814353   <!-- boot ok -->
1396914354   <software name="yamagasp" supported="no">
1397014355      <description>Yamagata Digital Museum - Spring (Japan)</description>
13971      <year>199?</year>
13972      <publisher>&lt;unknown&gt;</publisher>
14356      <year>1999</year>
14357      <publisher>Imagineer</publisher>
14358      <info name="alt_title" value="デジタルミュージアム ヒロ・ヤマガタSpring"/>
1397314359      <info name="serial" value="SLPS-01581" />
1397414360      <sharedfeat name="compatibility" value="NTSC-J"/>
1397514361      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1398214368   <!-- boot ok -->
1398314369   <software name="yamagasu" supported="no">
1398414370      <description>Yamagata Digital Museum - Summer (Japan)</description>
13985      <year>199?</year>
13986      <publisher>&lt;unknown&gt;</publisher>
14371      <year>1999</year>
14372      <publisher>Imagineer</publisher>
14373      <info name="alt_title" value="デジタルミュージアム ヒロ・ヤマガタSummer"/>
1398714374      <info name="serial" value="SLPS-01661" />
1398814375      <sharedfeat name="compatibility" value="NTSC-J"/>
1398914376      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1399614383   <!-- boot ok -->
1399714384   <software name="yamagawi" supported="no">
1399814385      <description>Yamagata Digital Museum - Winter (Japan)</description>
13999      <year>199?</year>
14000      <publisher>&lt;unknown&gt;</publisher>
14386      <year>1999</year>
14387      <publisher>Imagineer</publisher>
14388      <info name="alt_title" value="デジタルミュージアム ヒロ・ヤマガタWinter"/>
1400114389      <info name="serial" value="SLPS-01663" />
1400214390      <sharedfeat name="compatibility" value="NTSC-J"/>
1400314391      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1400714395      </part>
1400814396   </software>
1400914397
14010   <!-- boot ok -->
14011   <software name="yasoukyo" supported="no">
14012      <description>Yasoukyoku 2 (Japan)</description>
14013      <year>199?</year>
14014      <publisher>&lt;unknown&gt;</publisher>
14015      <info name="serial" value="SLPS-03213" />
14016      <sharedfeat name="compatibility" value="NTSC-J"/>
14017      <part name="cdrom" interface="psx_cdrom">
14018         <diskarea name="cdrom">
14019            <disk name="yasoukyoku 2 (japan) [slps-03213]" sha1="2469c7c6d8d69835aae534b91c59b03aa4d2dd96"/>
14020         </diskarea>
14021      </part>
14022   </software>
14023
1402414398   <!-- black screen -->
1402514399   <software name="yoshimot" supported="no">
1402614400      <description>Yoshimoto Muchicco Daikessen (Japan)</description>
14027      <year>199?</year>
14028      <publisher>&lt;unknown&gt;</publisher>
14401      <year>1999</year>
14402      <publisher>Sony</publisher>
14403      <info name="alt_title" value="ヨシモト ムチッ子大決戦"/>
1402914404      <info name="serial" value="SLPS-02308" />
1403014405      <sharedfeat name="compatibility" value="NTSC-J"/>
1403114406      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1403714412
1403814413   <!-- boot ok -->
1403914414   <software name="youkaiha" supported="no">
14040      <description>Youkai Hanaasobi (Japan)</description>
14041      <year>199?</year>
14042      <publisher>&lt;unknown&gt;</publisher>
14415      <description>Youkai Hana Asobi (Japan)</description>
14416      <year>2001</year>
14417      <publisher>Unbalance</publisher>
14418      <info name="alt_title" value="妖怪花あそび"/>
1404314419      <info name="serial" value="SLPM-86857" />
1404414420      <sharedfeat name="compatibility" value="NTSC-J"/>
1404514421      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1405214428   <!-- black screen -->
1405314429   <software name="yugiohmo" supported="no">
1405414430      <description>Yu-Gi-Oh! Monster Capsule Breed &amp; Battle (Japan)</description>
14055      <year>199?</year>
14056      <publisher>&lt;unknown&gt;</publisher>
14431      <year>1998</year>
14432      <publisher>Konami</publisher>
14433      <info name="alt_title" value="遊戯王 モンスターカプセル ブリード&バトル"/>
1405714434      <info name="serial" value="SLPM-86096" />
1405814435      <sharedfeat name="compatibility" value="NTSC-J"/>
1405914436      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1406614443   <!-- boot ok -->
1406714444   <software name="yukinkob" supported="no">
1406814445      <description>Yukinko Burning (Japan)</description>
14069      <year>199?</year>
14070      <publisher>&lt;unknown&gt;</publisher>
14446      <year>2002</year>
14447      <publisher>Princess Soft</publisher>
14448      <info name="alt_title" value="ゆきんこ ばあにんぐ"/>
1407114449      <info name="serial" value="SLPM-87013" />
1407214450      <sharedfeat name="compatibility" value="NTSC-J"/>
1407314451      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1408014458   <!-- white screen after initial menus -->
1408114459   <software name="yumenots" supported="no">
1408214460      <description>Yume no Tsubasa (Japan)</description>
14083      <year>199?</year>
14084      <publisher>&lt;unknown&gt;</publisher>
14461      <year>2000</year>
14462      <publisher>KID</publisher>
14463      <info name="alt_title" value="夢のつばさ"/>
1408514464      <info name="serial" value="SLPS-02954" />
1408614465      <sharedfeat name="compatibility" value="NTSC-J"/>
1408714466      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1409414473   <!-- black screen -->
1409514474   <software name="yumeiroi" supported="no">
1409614475      <description>Yume-Iroiro (Japan)</description>
14097      <year>199?</year>
14098      <publisher>&lt;unknown&gt;</publisher>
14476      <year>1998</year>
14477      <publisher>Feathered</publisher>
14478      <info name="alt_title" value="夢☆色いろ"/>
1409914479      <info name="serial" value="SLPS-01401" />
1410014480      <sharedfeat name="compatibility" value="NTSC-J"/>
1410114481      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1410714487
1410814488   <!-- black screen -->
1410914489   <software name="yuugenga" supported="no">
14110      <description>Yuugen Gaisha Chikyuu Boueitai - Earth Defenders Corporation (Japan)</description>
14111      <year>199?</year>
14112      <publisher>&lt;unknown&gt;</publisher>
14490      <description>Yuugen Kaisha Chikyuu Boueitai - Guard of Earth Organization (Japan)</description>
14491      <year>1999</year>
14492      <publisher>Media Rings</publisher>
14493      <info name="alt_title" value="有限会社 地球防衛隊"/>
1411314494      <info name="serial" value="SLPS-02024" />
1411414495      <sharedfeat name="compatibility" value="NTSC-J"/>
1411514496      <part name="cdrom" interface="psx_cdrom">
1411614497         <diskarea name="cdrom">
14117            <disk name="yuugen gaisha chikyuu boueitai - earth defenders corporation (japan) [slps-02024]" sha1="34f2ae1cd241e5bfe494ee3f1d8545e00d303010"/>
14498            <disk name="yuugen kaisha chikyuu boueitai - guard of earth organization (japan) [slps-02024]" sha1="34f2ae1cd241e5bfe494ee3f1d8545e00d303010"/>
1411814499         </diskarea>
1411914500      </part>
1412014501   </software>
r242231r242232
1412214503   <!-- boot ok, bad fmv every other frame -->
1412314504   <software name="yuukyuun" supported="no">
1412414505      <description>Yuukyuu no Eden - The Eternal Eden (Japan)</description>
14125      <year>199?</year>
14126      <publisher>&lt;unknown&gt;</publisher>
14506      <year>1999</year>
14507      <publisher>ASCII</publisher>
14508      <info name="alt_title" value="悠久のエデン"/>
1412714509      <info name="serial" value="SLPS-01928" />
1412814510      <sharedfeat name="compatibility" value="NTSC-J"/>
1412914511      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1415014532   <!-- boot ok, hang on loading screen after first menu -->
1415114533   <software name="yuuyamid" supported="no">
1415214534      <description>Yuuyami Doori Tankentai (Japan)</description>
14153      <year>199?</year>
14154      <publisher>&lt;unknown&gt;</publisher>
14535      <year>1999</year>
14536      <publisher>Spike</publisher>
14537      <info name="alt_title" value="夕闇通り探検隊"/>
1415514538      <info name="serial" value="SLPS-02274" />
1415614539      <sharedfeat name="compatibility" value="NTSC-J"/>
1415714540      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1416414547   <!-- boot ok -->
1416514548   <software name="zapsnowb" supported="no">
1416614549      <description>Zap! Snowboarding Trix '98 (Japan)</description>
14167      <year>199?</year>
14550      <year>1997</year>
1416814551      <publisher>&lt;unknown&gt;</publisher>
14552      <info name="alt_title" value="ZAP! SNOWBOADRING TRIX '98"/>
1416914553      <info name="serial" value="SLPS-00909" />
1417014554      <sharedfeat name="compatibility" value="NTSC-J"/>
1417114555      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1417814562   <!-- boot ok -->
1417914563   <software name="zeiramzo" supported="no">
1418014564      <description>Zeiramzone (Japan)</description>
14181      <year>199?</year>
14182      <publisher>&lt;unknown&gt;</publisher>
14565      <year>1996</year>
14566      <publisher>Banpresto</publisher>
14567      <info name="alt_title" value="ゼイラムゾーン"/>
1418314568      <info name="serial" value="SLPS-00575" />
1418414569      <sharedfeat name="compatibility" value="NTSC-J"/>
1418514570      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1419214577   <!-- black screen after company logos -->
1419314578   <software name="zeitgeis" supported="no">
1419414579      <description>Zeitgeist (Japan)</description>
14195      <year>199?</year>
14196      <publisher>&lt;unknown&gt;</publisher>
14580      <year>1995</year>
14581      <publisher>Taito</publisher>
14582      <info name="alt_title" value="ツァイトガイスト"/>
1419714583      <info name="serial" value="SLPS-00034" />
1419814584      <sharedfeat name="compatibility" value="NTSC-J"/>
1419914585      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1420614592   <!-- boot ok -->
1420714593   <software name="zennippo" supported="no">
1420814594      <description>Zen-Nippon Joshi Pro Wrestling - Joou Densetsu Yume no Taikousen (Japan)</description>
14209      <year>199?</year>
14210      <publisher>&lt;unknown&gt;</publisher>
14595      <year>1998</year>
14596      <publisher>TEN</publisher>
14597      <info name="alt_title" value="全日本女子プロレス 女王伝説 夢の対抗戦"/>
1421114598      <info name="serial" value="SLPS-01475" />
1421214599      <sharedfeat name="compatibility" value="NTSC-J"/>
1421314600      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1421914606
1422014607   <!-- black screen -->
1422114608   <software name="zennipok" supported="no">
14222      <description>Zen-Nippon Pro-Wrestling - Ouja no Kon (Japan)</description>
14223      <year>199?</year>
14224      <publisher>&lt;unknown&gt;</publisher>
14609      <description>Zen-Nippon Pro Wrestling - Ouja no Kon (Japan)</description>
14610      <year>1999</year>
14611      <publisher>Human</publisher>
14612      <info name="alt_title" value="全日本プロレス 王者の魂"/>
1422514613      <info name="serial" value="SLPS-01849" />
1422614614      <sharedfeat name="compatibility" value="NTSC-J"/>
1422714615      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1423314621
1423414622   <!-- boot OK -->
1423514623   <software name="zero4cha" supported="no">
14236      <description>Zero 4 Champ Doozy-J (Japan)</description>
14237      <year>199?</year>
14238      <publisher>&lt;unknown&gt;</publisher>
14624      <description>Zero4 Champ Doozy-J (Japan)</description>
14625      <year>1997</year>
14626      <publisher>Media Rings</publisher>
14627      <info name="alt_title" value="ZERO4 CHAMP Doozy-J"/>
1423914628      <info name="serial" value="SLPS-00755" />
1424014629      <sharedfeat name="compatibility" value="NTSC-J"/>
1424114630      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1424814637   <!-- boot OK -->
1424914638   <software name="zigzagba" supported="no">
1425014639      <description>Zig Zag Ball (Japan)</description>
14251      <year>199?</year>
14252      <publisher>&lt;unknown&gt;</publisher>
14640      <year>1998</year>
14641      <publisher>Upstar</publisher>
14642      <info name="alt_title" value="ZIG ZAG BALL"/>
1425314643      <info name="serial" value="SLPS-01483" />
1425414644      <sharedfeat name="compatibility" value="NTSC-J"/>
1425514645      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1426114651
1426214652   <!-- boot OK -->
1426314653   <software name="zipangut" supported="no">
14264      <description>Zipangutou - Unmei wa Saikoro ga Kimeru! (Japan)</description>
14265      <year>199?</year>
14266      <publisher>&lt;unknown&gt;</publisher>
14654      <description>Zipangujima&#58; Unmei wa Saikoro ga Kimeru! (Japan)</description>
14655      <year>1999</year>
14656      <publisher>Human</publisher>
14657      <info name="alt_title" value="じぱんぐ島 〜運命はサイコロが決める!?〜"/>
1426714658      <info name="serial" value="SLPS-02260" />
1426814659      <sharedfeat name="compatibility" value="NTSC-J"/>
1426914660      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1427614667   <!-- black screen after logos -->
1427714668   <software name="zoidsbat" supported="no">
1427814669      <description>Zoids - Battle Card Game - Seihou Tairiku Senki (Japan)</description>
14279      <year>199?</year>
14280      <publisher>&lt;unknown&gt;</publisher>
14670      <year>2001</year>
14671      <publisher>Tomy</publisher>
14672      <info name="alt_title" value="ゾイドバトルカードゲーム 西方大陸戦記"/>
1428114673      <info name="serial" value="SLPS-03255" />
1428214674      <sharedfeat name="compatibility" value="NTSC-J"/>
1428314675      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1428914681
1429014682   <!-- boot OK -->
1429114683   <software name="zoidstei" supported="no">
14292      <description>Zoids - Teikoku vs. Kyouwakoku - Meka Seitai no Idenshi (Japan)</description>
14293      <year>199?</year>
14294      <publisher>&lt;unknown&gt;</publisher>
14684      <description>Zoids - Zenebus VS Heric (Japan)</description>
14685      <year>2000</year>
14686      <publisher>Tomy</publisher>
14687      <info name="alt_title" value="メカ生体ゾイド"/>
1429514688      <info name="serial" value="SLPS-02982" />
1429614689      <sharedfeat name="compatibility" value="NTSC-J"/>
1429714690      <part name="cdrom" interface="psx_cdrom">
r242231r242232
1430314696
1430414697   <!-- boot OK -->
1430514698   <software name="zoids2" supported="no">
14306      <description>Zoids 2 - Heric Kyouwakoku vs. Guylos Teikoku  (Japan)</description>
14307      <year>199?</year>
14308      <publisher>&lt;unknown&gt;</publisher>
14699      <description>Zoids 2 - Helic Republic VS Guylos Empire  (Japan)</description>
14700      <year>2002</year>
14701      <publisher>Tomy</publisher>
14702      <info name="alt_title" value="ZOIDS2 ヘリック共和国VSガイロス帝国"/>
1430914703      <info name="serial" value="SLPS-03389" />
1431014704      <sharedfeat name="compatibility" value="NTSC-J"/>
1431114705      <part name="cdrom" interface="psx_cdrom">
trunk/hash/tvc_flop.xml
r0r242232
1<?xml version="1.0"?>
2<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
3
4<!--
5
6Most of these can be run in BASIC by using LOAD"*"
7If the program doesn't automatically start, start it with RUN
8
9-->
10
11
12<softwarelist name="tvc_flop" description="Videoton TVC floppies">
13   <software name="21">
14      <description>21</description>
15      <year>198?</year>
16      <publisher>Software in LUX</publisher>
17
18      <part name="flop1" interface="floppy_5_25">
19         <dataarea name="flop" size="368640">
20            <rom name="21.dsk" size="368640" crc="1b28d754" sha1="1d5931a3bc46d61b5b08a59dee3faf341f56f95d" offset="0" />
21         </dataarea>
22      </part>
23   </software>
24
25   <software name="3dim">
26      <description>Három dimenziós ábrázolás</description>
27      <year>198?</year>
28      <publisher>&lt;unknown&gt;</publisher>
29
30      <part name="flop1" interface="floppy_5_25">
31         <dataarea name="flop" size="368640">
32            <rom name="3dim.dsk" size="368640" crc="769d7cc6" sha1="78cddddf3051e14cada03a806af7a434369168bd" offset="0" />
33         </dataarea>
34      </part>
35   </software>
36
37   <software name="3dlabiri">
38      <description>3D Labirintus</description>
39      <year>198?</year>
40      <publisher>Buddha Softhouse</publisher>
41
42      <part name="flop1" interface="floppy_5_25">
43         <dataarea name="flop" size="368640">
44            <rom name="3dlabirintus.dsk" size="368640" crc="b27d4d34" sha1="680713aba577b684d81cf11c9e371fef0ad2e4b5" offset="0" />
45         </dataarea>
46      </part>
47   </software>
48
49   <software name="labdatvc">
50      <description>5 Labdajáték</description>
51      <year>1987</year>
52      <publisher>Novotrade</publisher>
53
54      <part name="flop1" interface="floppy_5_25">
55         <dataarea name="flop" size="368640">
56            <rom name="5labdajatek.dsk" size="368640" crc="3b8d5d17" sha1="72cc5cfa18ee995757c7356b9aa6d8879b3aad7c" offset="0" />
57         </dataarea>
58      </part>
59   </software>
60
61   <software name="bnh">
62      <description>A Bolygó Neve - Halál</description>
63      <year>1988</year>
64      <publisher>Berysoft</publisher>
65
66      <part name="flop1" interface="floppy_5_25">
67         <dataarea name="flop" size="368640">
68            <rom name="a_bolygo_neve_halal.dsk" size="368640" crc="bb7b1cbe" sha1="77b70b640d9bf0bc7444097f9cd5e7c37afa3dcb" offset="0" />
69         </dataarea>
70      </part>
71   </software>
72
73   <software name="asuniked">
74      <description>A Sünikéd Éhes...</description>
75      <year>198?</year>
76      <publisher>&lt;unknown&gt;</publisher>
77
78      <part name="flop1" interface="floppy_5_25">
79         <dataarea name="flop" size="368640">
80            <rom name="a_suniked_ehes.dsk" size="368640" crc="a366c8fe" sha1="cc1fc3aa7fb3bec8b385b33a75798d0c56c4d3c4" offset="0" />
81         </dataarea>
82      </part>
83   </software>
84
85   <software name="ab01">
86      <description>Ábrázolás - 01 Tartalomjegyzék</description>
87      <year>198?</year>
88      <publisher>László Papp</publisher>
89
90      <part name="flop1" interface="floppy_5_25">
91         <dataarea name="flop" size="368640">
92            <rom name="ab1.dsk" size="368640" crc="65ab93f1" sha1="7f3d70de1f248e5a1eb109c2501e8818bd63a5e3" offset="0" />
93         </dataarea>
94      </part>
95   </software>
96
97   <software name="ab02">
98      <description>Ábrázolás 02 - Téglatest 6 Vetülete</description>
99      <year>198?</year>
100      <publisher>László Papp</publisher>
101
102      <part name="flop1" interface="floppy_5_25">
103         <dataarea name="flop" size="368640">
104            <rom name="ab2.dsk" size="368640" crc="ec67b321" sha1="a5e0045b6160c156a5af38c527a973bda4f8bb5d" offset="0" />
105         </dataarea>
106      </part>
107   </software>
108
109   <software name="ab03">
110      <description>Ábrázolás 03 - Hatoldalú hasáb ferde síkmetszése</description>
111      <year>198?</year>
112      <publisher>László Papp</publisher>
113
114      <part name="flop1" interface="floppy_5_25">
115         <dataarea name="flop" size="368640">
116            <rom name="ab3.dsk" size="368640" crc="0658943c" sha1="fdfa0d2bb63787bd7beed3d107732279acd5d5f5" offset="0" />
117         </dataarea>
118      </part>
119   </software>
120
121   <software name="ab04">
122      <description>Ábrázolás 04 - Gúla ferde síkmetszése</description>
123      <year>198?</year>
124      <publisher>László Papp</publisher>
125
126      <part name="flop1" interface="floppy_5_25">
127         <dataarea name="flop" size="368640">
128            <rom name="ab4.dsk" size="368640" crc="3e7914d3" sha1="6f60e983b9069ba559ea9cb250bf6dd53c136353" offset="0" />
129         </dataarea>
130      </part>
131   </software>
132
133   <software name="ab05">
134      <description>Ábrázolás 05 - Háromoldalú hasáb csonkítása</description>
135      <year>198?</year>
136      <publisher>László Papp</publisher>
137
138      <part name="flop1" interface="floppy_5_25">
139         <dataarea name="flop" size="368640">
140            <rom name="ab5.dsk" size="368640" crc="d24eae87" sha1="99166268af1c29c223e2a9a2a62a38c1349ef7ec" offset="0" />
141         </dataarea>
142      </part>
143   </software>
144
145   <software name="ab06">
146      <description>Ábrázolás 06 - Itt a pont, ott a pont, hol a pont?</description>
147      <year>198?</year>
148      <publisher>László Papp</publisher>
149
150      <part name="flop1" interface="floppy_5_25">
151         <dataarea name="flop" size="368640">
152            <rom name="ab6.dsk" size="368640" crc="9d118829" sha1="64cbd48d9dd127fcbfbb88407209bdba3da2e1f8" offset="0" />
153         </dataarea>
154      </part>
155   </software>
156
157   <software name="ab07">
158      <description>Ábrázolás 07 - Hamis? Igaz?</description>
159      <year>198?</year>
160      <publisher>László Papp</publisher>
161
162      <part name="flop1" interface="floppy_5_25">
163         <dataarea name="flop" size="368640">
164            <rom name="ab7.dsk" size="368640" crc="cf9ab8ca" sha1="86581ab8e3070fcb83febd1e4c07d8c5de99df17" offset="0" />
165         </dataarea>
166      </part>
167   </software>
168
169   <software name="ab08">
170      <description>Ábrázolás 08 - Kockázzunk!</description>
171      <year>198?</year>
172      <publisher>László Papp</publisher>
173
174      <part name="flop1" interface="floppy_5_25">
175         <dataarea name="flop" size="368640">
176            <rom name="ab8.dsk" size="368640" crc="faa42d26" sha1="009e4dd4563e11046f9b2c35c6c8409bffd0d66b" offset="0" />
177         </dataarea>
178      </part>
179   </software>
180
181   <software name="ab09">
182      <description>Ábrázolás 09 - Téglatest véletlen vetületei</description>
183      <year>198?</year>
184      <publisher>László Papp</publisher>
185
186      <part name="flop1" interface="floppy_5_25">
187         <dataarea name="flop" size="368640">
188            <rom name="ab9.dsk" size="368640" crc="e1c33bee" sha1="32462c444a7c87ece8ea7069c504516664db5f9a" offset="0" />
189         </dataarea>
190      </part>
191   </software>
192
193   <software name="ab10">
194      <description>Ábrázolás 10 - Hatoldalú hasáb véletlen vetületei</description>
195      <year>198?</year>
196      <publisher>László Papp</publisher>
197
198      <part name="flop1" interface="floppy_5_25">
199         <dataarea name="flop" size="368640">
200            <rom name="ab10.dsk" size="368640" crc="9b1ae62a" sha1="44b1d4e7b17df5a378c7099801b694fcf975bcbc" offset="0" />
201         </dataarea>
202      </part>
203   </software>
204
205   <software name="adatkeze">
206      <description>Adatfile-kezelő program</description>
207      <year>198?</year>
208      <publisher>&lt;unknown&gt;</publisher>
209
210      <part name="flop1" interface="floppy_5_25">
211         <dataarea name="flop" size="368640">
212            <rom name="adatkeze.dsk" size="368640" crc="e6804a98" sha1="2f8500a0d86d7cd259a36425d048100e99b9ffc2" offset="0" />
213         </dataarea>
214      </part>
215   </software>
216
217   <software name="adventur">
218      <description>The Adventure Game</description>
219      <year>1987</year>
220      <publisher>Tamás Juhász</publisher>
221
222      <part name="flop1" interface="floppy_5_25">
223         <dataarea name="flop" size="368640">
224            <rom name="adventure.dsk" size="368640" crc="8e7471ce" sha1="164d93ac82ba43ce30b033022b3b0e2dbd3e4222" offset="0" />
225         </dataarea>
226      </part>
227   </software>
228
229   <software name="gyikkira">
230      <description>A Gyíkkirály</description>
231      <year>1990</year>
232      <publisher>Agilar</publisher>
233
234      <part name="flop1" interface="floppy_5_25">
235         <dataarea name="flop" size="368640">
236            <rom name="agyikkiraly.dsk" size="368640" crc="7fe66e19" sha1="f8807fbdff3c491dfb96c20726fbf2811ec6d23a" offset="0" />
237         </dataarea>
238      </part>
239   </software>
240
241   <software name="aknaker">
242      <description>Aknakereső</description>
243      <year>198?</year>
244      <publisher>STV</publisher>
245
246      <part name="flop1" interface="floppy_5_25">
247         <dataarea name="flop" size="368640">
248            <rom name="aknakereso.dsk" size="368640" crc="cd4c1b10" sha1="26606455054da36f2de7367370043528158dfcdc" offset="0" />
249         </dataarea>
250      </part>
251   </software>
252
253   <software name="aknamezo">
254      <description>Aknamező</description>
255      <year>198?</year>
256      <publisher>&lt;unknown&gt;</publisher>
257
258      <part name="flop1" interface="floppy_5_25">
259         <dataarea name="flop" size="368640">
260            <rom name="aknamezo.dsk" size="368640" crc="de8cc54a" sha1="208d9bdfbd5a9e3506c07e3a4168170ff063b06a" offset="0" />
261         </dataarea>
262      </part>
263   </software>
264
265   <software name="aknamezoa" cloneof="aknamezo">
266      <description>Aknamező (Alt)</description>
267      <year>198?</year>
268      <publisher>&lt;unknown&gt;</publisher>
269
270      <part name="flop1" interface="floppy_5_25">
271         <dataarea name="flop" size="368640">
272            <rom name="aknamev2.dsk" size="368640" crc="14acc80e" sha1="f5b507caa2dd18d4b71b47e6a22b8324fc4aeb25" offset="0" />
273         </dataarea>
274      </part>
275   </software>
276
277   <software name="alfa">
278      <description>Alfa</description>
279      <year>198?</year>
280      <publisher>JÓZSIsoft</publisher>
281
282      <part name="flop1" interface="floppy_5_25">
283         <dataarea name="flop" size="368640">
284            <rom name="alfa.dsk" size="368640" crc="d9ef6ce4" sha1="1ed213223e3e0e5286f1112435f8e52f628e507f" offset="0" />
285         </dataarea>
286      </part>
287   </software>
288
289   <software name="alien8">
290      <description>Alien 8</description>
291      <year>1985</year>
292      <publisher>'a' Studio</publisher>
293
294      <part name="flop1" interface="floppy_5_25">
295         <dataarea name="flop" size="368640">
296            <rom name="alien8.dsk" size="368640" crc="2ef199c8" sha1="4d4e538f429471a49acef3a19beebef50ffb8a47" offset="0" />
297         </dataarea>
298      </part>
299   </software>
300
301   <software name="alien8a" cloneof="alien8">
302      <description>Alien 8 (Alt)</description>
303      <year>1985</year>
304      <publisher>'a' Studio</publisher>
305
306      <part name="flop1" interface="floppy_5_25">
307         <dataarea name="flop" size="368640">
308            <rom name="alienv2.dsk" size="368640" crc="dbc4a596" sha1="a2c450cb31e67402b816b83f7242c746fce2730f" offset="0" />
309         </dataarea>
310      </part>
311   </software>
312
313   <software name="alien8b" cloneof="alien8">
314      <description>Alien 8 (Alt 2)</description>
315      <year>1985</year>
316      <publisher>'a' Studio</publisher>
317
318      <part name="flop1" interface="floppy_5_25">
319         <dataarea name="flop" size="368640">
320            <rom name="alien8v3.dsk" size="368640" crc="08201e6e" sha1="3436561e3afd0febb0f77273b88ec3e7861f76bb" offset="0" />
321         </dataarea>
322      </part>
323   </software>
324
325   <software name="alien8c" cloneof="alien8">
326      <description>Alien 8 (Alt 3)</description>
327      <year>1985</year>
328      <publisher>'a' Studio</publisher>
329
330      <part name="flop1" interface="floppy_5_25">
331         <dataarea name="flop" size="368640">
332            <rom name="alien8v4.dsk" size="368640" crc="e28476e0" sha1="65e7156861454348a78459b83a91a6085f4d0089" offset="0" />
333         </dataarea>
334      </part>
335   </software>
336
337   <software name="amoba">
338      <description>Amőba</description>
339      <year>198?</year>
340      <publisher>Videoton</publisher>
341
342      <part name="flop1" interface="floppy_5_25">
343         <dataarea name="flop" size="368640">
344            <rom name="amoba.dsk" size="368640" crc="f903c844" sha1="223858ffbcf246058715bb950d2c55f59cc2c305" offset="0" />
345         </dataarea>
346      </part>
347   </software>
348
349   <software name="amobaa" cloneof="amoba">
350      <description>Amőba (Alt)</description>
351      <year>198?</year>
352      <publisher>Videoton</publisher>
353
354      <part name="flop1" interface="floppy_5_25">
355         <dataarea name="flop" size="368640">
356            <rom name="amobav2.dsk" size="368640" crc="2a634df1" sha1="8d39aacbbdd4f183b887187fd3115bf96ad6ed25" offset="0" />
357         </dataarea>
358      </part>
359   </software>
360
361   <software name="angol">
362      <description>Angol</description>
363      <year>198?</year>
364      <publisher>&lt;unknown&gt;</publisher>
365
366      <part name="flop1" interface="floppy_5_25">
367         <dataarea name="flop" size="368640">
368            <rom name="angol.dsk" size="368640" crc="76232f1e" sha1="5cbbfeaec71261f7bb2acb8dfa8f7c1c1c312ed6" offset="0" />
369         </dataarea>
370      </part>
371   </software>
372
373   <software name="antiriad">
374      <description>Antiriad</description>
375      <year>1986</year>
376      <publisher>STV</publisher>
377
378      <part name="flop1" interface="floppy_5_25">
379         <dataarea name="flop" size="368640">
380            <rom name="antiriad.dsk" size="368640" crc="e024feda" sha1="646402c19cbd4392436e99905731dd8975d6d73a" offset="0" />
381         </dataarea>
382      </part>
383   </software>
384
385   <software name="arnhem">
386      <description>Arnhem</description>
387      <year>1985</year>
388      <publisher>STV</publisher>
389
390      <part name="flop1" interface="floppy_5_25">
391         <dataarea name="flop" size="368640">
392            <rom name="arnhem.dsk" size="368640" crc="250d1cea" sha1="f5516e4899e22158a828b094083dba93782eb742" offset="0" />
393         </dataarea>
394      </part>
395   </software>
396
397   <software name="assembly">
398      <description>Assembly</description>
399      <year>198?</year>
400      <publisher>Atlas</publisher>
401
402      <part name="flop1" interface="floppy_5_25">
403         <dataarea name="flop" size="368640">
404            <rom name="assembly.dsk" size="368640" crc="d9fb0a24" sha1="52306cc19fe780e48e1b7701f28de32d2774040e" offset="0" />
405         </dataarea>
406      </part>
407   </software>
408
409   <software name="astrobl">
410      <description>Astro Blaster</description>
411      <year>1991</year>
412      <publisher>STV</publisher>
413
414      <part name="flop1" interface="floppy_5_25">
415         <dataarea name="flop" size="737280">
416            <rom name="astroblaster.dsk" size="368640" crc="625498c9" sha1="0d8abc3e9b7e01caa64ee8ff35d575fd9a02e2a4" offset="0" />
417         </dataarea>
418      </part>
419   </software>
420
421   <software name="astroblt" cloneof="astrobl">
422      <description>Astro Blaster (Trained)</description>
423      <year>1991</year>
424      <publisher>STV</publisher>
425
426      <part name="flop1" interface="floppy_5_25">
427         <dataarea name="flop" size="368640">
428            <rom name="astroblastertrainer.dsk" size="368640" crc="01e6ced4" sha1="4b396dfb79959f33b6a227eb0c6cbe5947e0a1ae" offset="0" />
429         </dataarea>
430      </part>
431   </software>
432
433   <software name="astrobat">
434      <description>Astro Blaster (Atlas)</description>
435      <year>198?</year>
436      <publisher>Atlas</publisher>
437
438      <part name="flop1" interface="floppy_5_25">
439         <dataarea name="flop" size="368640">
440            <rom name="astroba.dsk" size="368640" crc="891b107d" sha1="9d6545168d1583ea4ed599a66f0da6c7c2b49b9d" offset="0" />
441         </dataarea>
442      </part>
443   </software>
444
445   <software name="astrocsa">
446      <description>Asztro csata</description>
447      <year>198?</year>
448      <publisher>&lt;unknown&gt;</publisher>
449
450      <part name="flop1" interface="floppy_5_25">
451         <dataarea name="flop" size="368640">
452            <rom name="astrocsata.dsk" size="368640" crc="b9e32bff" sha1="3ceab9df1826028640fe9710d9f93680b8c6decf" offset="0" />
453         </dataarea>
454      </part>
455   </software>
456
457   <software name="atkeles">
458      <description>Átkelés</description>
459      <year>198?</year>
460      <publisher>I. Juhász</publisher>
461
462      <part name="flop1" interface="floppy_5_25">
463         <dataarea name="flop" size="368640">
464            <rom name="atkeles.dsk" size="368640" crc="68a5c45c" sha1="300b0317413540981bc8e745345a67a52024f852" offset="0" />
465         </dataarea>
466      </part>
467   </software>
468
469   <software name="atomero">
470      <description>Atomerőmű</description>
471      <year>198?</year>
472      <publisher>&lt;unknown&gt;</publisher>
473
474      <part name="flop1" interface="floppy_5_25">
475         <dataarea name="flop" size="368640">
476            <rom name="atomeromu.dsk" size="368640" crc="c8275482" sha1="491e84eb39ebac2406caacafe7bf17a4e1d55c75" offset="0" />
477         </dataarea>
478      </part>
479   </software>
480
481   <software name="atomix">
482      <description>Atomix</description>
483      <year>1991</year>
484      <publisher>STV</publisher>
485
486      <part name="flop1" interface="floppy_5_25">
487         <dataarea name="flop" size="368640">
488            <rom name="atomix.dsk" size="368640" crc="7b987f43" sha1="3b9815f9f2a25e721a13ccc0c470e0a1e04d3d8e" offset="0" />
489         </dataarea>
490      </part>
491   </software>
492
493   <software name="atomixp" cloneof="atomix">
494      <description>Atomix Plusz</description>
495      <year>1991</year>
496      <publisher>STV</publisher>
497
498      <part name="flop1" interface="floppy_5_25">
499         <dataarea name="flop" size="368640">
500            <rom name="atomixp.dsk" size="368640" crc="0a36df47" sha1="5a71425891849aa9885ed8eddff0a6ac2ef2767e" offset="0" />
501         </dataarea>
502      </part>
503   </software>
504
505   <software name="atomixpj" cloneof="atomix">
506      <description>Atomix Plusz Javított</description>
507      <year>1991</year>
508      <publisher>STV</publisher>
509
510      <part name="flop1" interface="floppy_5_25">
511         <dataarea name="flop" size="368640">
512            <rom name="atomixpj.dsk" size="368640" crc="bd400ef6" sha1="6980499ad76ed404721a27cae6edf410f4b70bf0" offset="0" />
513         </dataarea>
514      </part>
515   </software>
516
517   <software name="attores">
518      <description>Áttörés</description>
519      <year>198?</year>
520      <publisher>Bit &amp; Guy</publisher>
521
522      <part name="flop1" interface="floppy_5_25">
523         <dataarea name="flop" size="368640">
524            <rom name="attores.dsk" size="368640" crc="d1d7e985" sha1="1542bbb22acc81c162c53b91569ea7898bbd10fb" offset="0" />
525         </dataarea>
526      </part>
527   </software>
528
529   <software name="attoresa" cloneof="attores">
530      <description>Áttörés (Alt)</description>
531      <year>198?</year>
532      <publisher>Bit &amp; Guy</publisher>
533
534      <part name="flop1" interface="floppy_5_25">
535         <dataarea name="flop" size="368640">
536            <rom name="attorv2.dsk" size="368640" crc="76462d13" sha1="12db74d0ed0e12eb01f28d966bf24b547ed0cdd8" offset="0" />
537         </dataarea>
538      </part>
539   </software>
540
541   <software name="attoresb" cloneof="attores">
542      <description>Áttörés (Alt 2)</description>
543      <year>198?</year>
544      <publisher>Bit &amp; Guy</publisher>
545
546      <part name="flop1" interface="floppy_5_25">
547         <dataarea name="flop" size="368640">
548            <rom name="attoresv3.dsk" size="368640" crc="b095d154" sha1="085cdb8acc40fb36d1e0f4dcd98dc99ba5b9e09b" offset="0" />
549         </dataarea>
550      </part>
551   </software>
552
553   <software name="automani">
554      <description>Autó Mánia</description>
555      <year>1990</year>
556      <publisher>Széplaky Stúdió</publisher>
557
558      <part name="flop1" interface="floppy_5_25">
559         <dataarea name="flop" size="368640">
560            <rom name="automania.dsk" size="368640" crc="ecfb74dd" sha1="b6c5089b579299dae6564f7faf72efd5c1d7da25" offset="0" />
561         </dataarea>
562      </part>
563   </software>
564
565   <software name="autosped">
566      <description>Auto Speed</description>
567      <year>198?</year>
568      <publisher>&lt;unknown&gt;</publisher>
569
570      <part name="flop1" interface="floppy_5_25">
571         <dataarea name="flop" size="368640">
572            <rom name="autosped.dsk" size="368640" crc="dd8b065c" sha1="f56f04efac8af9429aef4ea565a7798838016fa0" offset="0" />
573         </dataarea>
574      </part>
575   </software>
576
577   <software name="awari">
578      <description>Awari</description>
579      <year>198?</year>
580      <publisher>&lt;unknown&gt;</publisher>
581
582      <part name="flop1" interface="floppy_5_25">
583         <dataarea name="flop" size="368640">
584            <rom name="awari.dsk" size="368640" crc="51a580af" sha1="ab83b0a504fec56cf87a9300adafb978b78df1fd" offset="0" />
585         </dataarea>
586      </part>
587   </software>
588
589   <software name="awaria" cloneof="awari">
590      <description>Awari (Alt)</description>
591      <year>198?</year>
592      <publisher>&lt;unknown&gt;</publisher>
593
594      <part name="flop1" interface="floppy_5_25">
595         <dataarea name="flop" size="368640">
596            <rom name="awariv2.dsk" size="368640" crc="9d86e42c" sha1="f256eb103dfc674302070345ba1808d10fb487b1" offset="0" />
597         </dataarea>
598      </part>
599   </software>
600
601   <software name="awari2">
602      <description>Awari II</description>
603      <year>198?</year>
604      <publisher>&lt;unknown&gt;</publisher>
605
606      <part name="flop1" interface="floppy_5_25">
607         <dataarea name="flop" size="368640">
608            <rom name="awari2.dsk" size="368640" crc="afecfb5c" sha1="5e1f8ebaa25ab82e120dc7d1fde9588e0f804877" offset="0" />
609         </dataarea>
610      </part>
611   </software>
612
613   <software name="awari1">
614      <description>Awari 1</description>
615      <year>198?</year>
616      <publisher>&lt;unknown&gt;</publisher>
617
618      <part name="flop1" interface="floppy_5_25">
619         <dataarea name="flop" size="368640">
620            <rom name="awari_.dsk" size="368640" crc="1bd29860" sha1="370e46972ecbfebfd991806331df9702afaf3ea2" offset="0" />
621         </dataarea>
622      </part>
623   </software>
624
625   <software name="azannya">
626      <description>Azannya!</description>
627      <year>198?</year>
628      <publisher>&lt;unknown&gt;</publisher>
629
630      <part name="flop1" interface="floppy_5_25">
631         <dataarea name="flop" size="368640">
632            <rom name="azannya.dsk" size="368640" crc="7e5cbce6" sha1="00b9e19690824c56468834fc32032d176158da49" offset="0" />
633         </dataarea>
634      </part>
635   </software>
636
637   <software name="azsaru">
638      <description>A Zsaru</description>
639      <year>1990</year>
640      <publisher>Cápasoft</publisher>
641
642      <part name="flop1" interface="floppy_5_25">
643         <dataarea name="flop" size="368640">
644            <rom name="azsaru.dsk" size="368640" crc="0669a309" sha1="f8593717fcc311cd9aa8cb60bb0d2262a59ac307" offset="0" />
645         </dataarea>
646      </part>
647   </software>
648
649   <software name="bombazo">
650      <description>Az Utolsó Bombázó</description>
651      <year>198?</year>
652      <publisher>&lt;unknown&gt;</publisher>
653
654      <part name="flop1" interface="floppy_5_25">
655         <dataarea name="flop" size="368640">
656            <rom name="azutolsobombazo.dsk" size="368640" crc="3ca7673b" sha1="104aafcea03b1213c1f26be041161285e2469538" offset="0" />
657         </dataarea>
658      </part>
659   </software>
660
661   <software name="bakterio">
662      <description>Bakteriográf</description>
663      <year>198?</year>
664      <publisher>Agilar</publisher>
665
666      <part name="flop1" interface="floppy_5_25">
667         <dataarea name="flop" size="368640">
668            <rom name="bakterio.dsk" size="368640" crc="71e26148" sha1="d4d61fcfb522ff72012b9f0e60212ed89695c994" offset="0" />
669         </dataarea>
670      </part>
671   </software>
672
673   <software name="bananfal">
674      <description>Banánfaló</description>
675      <year>198?</year>
676      <publisher>Berysoft</publisher>
677
678      <part name="flop1" interface="floppy_5_25">
679         <dataarea name="flop" size="368640">
680            <rom name="bananfalo.dsk" size="368640" crc="0a1cebd4" sha1="81ebdb0d7364d64b312dcbe914d717c35dccf8b9" offset="0" />
681         </dataarea>
682      </part>
683   </software>
684
685   <software name="bananfala" cloneof="bananfal">
686      <description>Banánfaló (Alt)</description>
687      <year>198?</year>
688      <publisher>Berysoft</publisher>
689
690      <part name="flop1" interface="floppy_5_25">
691         <dataarea name="flop" size="368640">
692            <rom name="bananfalov2.dsk" size="368640" crc="04dd3795" sha1="23398dfc4220a58e41ec556e7be29cababc09f09" offset="0" />
693         </dataarea>
694      </part>
695   </software>
696
697   <software name="bananfalb" cloneof="bananfal">
698      <description>Banánfaló (Alt 2)</description>
699      <year>198?</year>
700      <publisher>Berysoft</publisher>
701
702      <part name="flop1" interface="floppy_5_25">
703         <dataarea name="flop" size="368640">
704            <rom name="bananv3.dsk" size="368640" crc="b5b46bcf" sha1="12a07474029d6f1a2099bff3a0220e73636c3403" offset="0" />
705         </dataarea>
706      </part>
707   </software>
708
709   <software name="banyasz">
710      <description>Bányász</description>
711      <year>198?</year>
712      <publisher>Novotrade</publisher>
713
714      <part name="flop1" interface="floppy_5_25">
715         <dataarea name="flop" size="368640">
716            <rom name="banyasz.dsk" size="368640" crc="ed81598c" sha1="169a2367e45781a84274a3113acb74b7f7741c90" offset="0" />
717         </dataarea>
718      </part>
719   </software>
720
721   <software name="banyasza" cloneof="banyasz">
722      <description>Bányász (Alt)</description>
723      <year>198?</year>
724      <publisher>Novotrade</publisher>
725
726      <part name="flop1" interface="floppy_5_25">
727         <dataarea name="flop" size="368640">
728            <rom name="banyaszv2.dsk" size="368640" crc="b748801d" sha1="86d792ef16881ed05fa868c75b7d6aedb9da8f69" offset="0" />
729         </dataarea>
730      </part>
731   </software>
732
733   <software name="barbar">
734      <description>Barbár</description>
735      <year>198?</year>
736      <publisher>Cápasoft</publisher>
737
738      <part name="flop1" interface="floppy_5_25">
739         <dataarea name="flop" size="368640">
740            <rom name="barbar.dsk" size="368640" crc="3f474c3e" sha1="be260365cbe1de44ca16e4ce7116bdd924e994ac" offset="0" />
741         </dataarea>
742      </part>
743   </software>
744
745   <software name="barchoba">
746      <description>Barchoba</description>
747      <year>198?</year>
748      <publisher>&lt;unknown&gt;</publisher>
749
750      <part name="flop1" interface="floppy_5_25">
751         <dataarea name="flop" size="368640">
752            <rom name="barchoba.dsk" size="368640" crc="54710a53" sha1="5f7e4e8eb060711b7f137411d88d84bb24404614" offset="0" />
753         </dataarea>
754      </part>
755   </software>
756
757   <software name="barkochb">
758      <description>Barkochba</description>
759      <year>198?</year>
760      <publisher>&lt;unknown&gt;</publisher>
761
762      <part name="flop1" interface="floppy_5_25">
763         <dataarea name="flop" size="368640">
764            <rom name="barkochba.dsk" size="368640" crc="a06d72fc" sha1="607b8ef595e3918b4266babd9562d8867aca705f" offset="0" />
765         </dataarea>
766      </part>
767   </software>
768
769   <software name="barna">
770      <description>Barna</description>
771      <year>199?</year>
772      <publisher>K&amp;K Soft</publisher>
773
774      <part name="flop1" interface="floppy_5_25">
775         <dataarea name="flop" size="368640">
776            <rom name="barna.dsk" size="368640" crc="5f0e5f7f" sha1="152f458d22998e675a02bb0def8c94b0cd2d0cc8" offset="0" />
777         </dataarea>
778      </part>
779   </software>
780
781   <software name="basicmon">
782      <description>TV Computer BASIC Monitor</description>
783      <year>1987</year>
784      <publisher>H-Software</publisher>
785
786      <part name="flop1" interface="floppy_5_25">
787         <dataarea name="flop" size="368640">
788            <rom name="basicmon.dsk" size="368640" crc="d152878e" sha1="7f97e94464137fe0b49973f7bb25ff17943d15b6" offset="0" />
789         </dataarea>
790      </part>
791   </software>
792
793   <software name="batman">
794      <description>Batman</description>
795      <year>198?</year>
796      <publisher>C.S. Software</publisher>
797
798      <part name="flop1" interface="floppy_5_25">
799         <dataarea name="flop" size="368640">
800            <rom name="batman.dsk" size="368640" crc="c9895709" sha1="14851985bfbd702eae0629c7545ce1b088892423" offset="0" />
801         </dataarea>
802      </part>
803   </software>
804
805   <software name="bazisurh">
806      <description>Bázis - űrhajós</description>
807      <year>198?</year>
808      <publisher>&lt;unknown&gt;</publisher>
809
810      <part name="flop1" interface="floppy_5_25">
811         <dataarea name="flop" size="368640">
812            <rom name="bazis-urhajos.dsk" size="368640" crc="902af665" sha1="43c420cae5eec9d86be5b1fdfd20247a614c4805" offset="0" />
813         </dataarea>
814      </part>
815   </software>
816
817   <software name="bazis">
818      <description>Bázis</description>
819      <year>198?</year>
820      <publisher>Software in LUX</publisher>
821
822      <part name="flop1" interface="floppy_5_25">
823         <dataarea name="flop" size="368640">
824            <rom name="bazis.dsk" size="368640" crc="fcccab2c" sha1="ce959dabc94fdcb343cdad6a4927665a006a9078" offset="0" />
825         </dataarea>
826      </part>
827   </software>
828
829   <software name="bekajate">
830      <description>Béka-játék</description>
831      <year>198?</year>
832      <publisher>&lt;unknown&gt;</publisher>
833
834      <part name="flop1" interface="floppy_5_25">
835         <dataarea name="flop" size="368640">
836            <rom name="bekajate.dsk" size="368640" crc="c6fe9d67" sha1="32560aab2548d7172d7e925d86afd827af337139" offset="0" />
837         </dataarea>
838      </part>
839   </software>
840
841   <software name="bekajatea" cloneof="bekajate">
842      <description>Béka-játék (Alt)</description>
843      <year>198?</year>
844      <publisher>&lt;unknown&gt;</publisher>
845
846      <part name="flop1" interface="floppy_5_25">
847         <dataarea name="flop" size="368640">
848            <rom name="bekajav2.dsk" size="368640" crc="41f4f4e3" sha1="da90c598aa50fd2d7d08131542018574f9cbc893" offset="0" />
849         </dataarea>
850      </part>
851   </software>
852
853   <software name="bekajateb" cloneof="bekajate">
854      <description>Béka-játék (Alt 2)</description>
855      <year>198?</year>
856      <publisher>&lt;unknown&gt;</publisher>
857
858      <part name="flop1" interface="floppy_5_25">
859         <dataarea name="flop" size="368640">
860            <rom name="bekajav3.dsk" size="368640" crc="f301a96c" sha1="3cb811d888d25721acfa59198dce09b3189764ba" offset="0" />
861         </dataarea>
862      </part>
863   </software>
864
865   <software name="beka">
866      <description>Béka</description>
867      <year>198?</year>
868      <publisher>&lt;unknown&gt;</publisher>
869
870      <part name="flop1" interface="floppy_5_25">
871         <dataarea name="flop" size="368640">
872            <rom name="bekav1.dsk" size="368640" crc="45dc3be4" sha1="d355d50467aad66bb55703dba19b92cf06f6113b" offset="0" />
873         </dataarea>
874      </part>
875   </software>
876
877   <software name="bekaa" cloneof="beka">
878      <description>Béka (Alt)</description>
879      <year>198?</year>
880      <publisher>&lt;unknown&gt;</publisher>
881
882      <part name="flop1" interface="floppy_5_25">
883         <dataarea name="flop" size="368640">
884            <rom name="bekav2.dsk" size="368640" crc="8f74afaa" sha1="0c012ab8e36340d3af05514b8a549d848f7dbc20" offset="0" />
885         </dataarea>
886      </part>
887   </software>
888
889   <software name="bekab" cloneof="beka">
890      <description>Béka (Alt 2)</description>
891      <year>198?</year>
892      <publisher>&lt;unknown&gt;</publisher>
893
894      <part name="flop1" interface="floppy_5_25">
895         <dataarea name="flop" size="368640">
896            <rom name="bekaev.dsk" size="368640" crc="1cb67f8d" sha1="b18935762c90978abaff31990ab9be7c6a054faf" offset="0" />
897         </dataarea>
898      </part>
899   </software>
900
901   <software name="beszelo">
902      <description>Beszélő program</description>
903      <year>198?</year>
904      <publisher>&lt;unknown&gt;</publisher>
905
906      <part name="flop1" interface="floppy_5_25">
907         <dataarea name="flop" size="368640">
908            <rom name="beszelo.dsk" size="368640" crc="7223f302" sha1="07486a0c4965108506bce2986a0e43245534f0eb" offset="0" />
909         </dataarea>
910      </part>
911   </software>
912
913   <software name="betegban">
914      <description>BetegBank</description>
915      <year>198?</year>
916      <publisher>TVCM</publisher>
917
918      <part name="flop1" interface="floppy_5_25">
919         <dataarea name="flop" size="368640">
920            <rom name="betegbank.dsk" size="368640" crc="62d29266" sha1="bfbabffddbf1b1352829cad2aa30af73eed9ab9f" offset="0" />
921         </dataarea>
922      </part>
923   </software>
924
925   <software name="bigbadjo">
926      <description>Big Bad John</description>
927      <year>1987</year>
928      <publisher>Zsolt Dobrovics</publisher>
929
930      <part name="flop1" interface="floppy_5_25">
931         <dataarea name="flop" size="368640">
932            <rom name="bigbadjohn.dsk" size="368640" crc="d6a50bff" sha1="9da832f0e27120317998a6335e2504ddb1f623e4" offset="0" />
933         </dataarea>
934      </part>
935   </software>
936
937   <software name="bioritmu">
938      <description>Bioritmus (v1)</description>
939      <year>1986</year>
940      <publisher>Unisoft GMK</publisher>
941
942      <part name="flop1" interface="floppy_5_25">
943         <dataarea name="flop" size="368640">
944            <rom name="bioritv1.dsk" size="368640" crc="37fcb814" sha1="04146134c916e49982a3ebb4c9e37821c6275462" offset="0" />
945         </dataarea>
946      </part>
947   </software>
948
949   <software name="bioritmua" cloneof="bioritmu">
950      <description>Bioritmus (Alt)</description>
951      <year>1986</year>
952      <publisher>Unisoft GMK</publisher>
953
954      <part name="flop1" interface="floppy_5_25">
955         <dataarea name="flop" size="368640">
956            <rom name="bioritv2.dsk" size="368640" crc="317ffc7a" sha1="00f4b3903595de53982190148febbcd2f26eef85" offset="0" />
957         </dataarea>
958      </part>
959   </software>
960
961   <software name="biortape" cloneof="bioritmu">
962      <description>Bioritmus (Cassette Version)</description>
963      <year>1986</year>
964      <publisher>Unisoft GMK</publisher>
965
966      <part name="flop1" interface="floppy_5_25">
967         <dataarea name="flop" size="368640">
968            <rom name="biortape.dsk" size="368640" crc="aebd9a62" sha1="55451395e2889dc2af6620a7be7bd69044cd89df" offset="0" />
969         </dataarea>
970      </part>
971   </software>
972
973   <software name="biv02">
974      <description>Biológia - Növényhatározás - Kétszikűek 1. - BIV02</description>
975      <year>1987</year>
976      <publisher>Panda Software</publisher>
977
978      <part name="flop1" interface="floppy_5_25">
979         <dataarea name="flop" size="368640">
980            <rom name="biv02.dsk" size="368640" crc="0e82dfbc" sha1="04d65de23e912ae8f0f994db67d62e6266b04234" offset="0" />
981         </dataarea>
982      </part>
983   </software>
984
985   <software name="black">
986      <description>Black</description>
987      <year>1989</year>
988      <publisher>Laszlo Csanyi</publisher>
989
990      <part name="flop1" interface="floppy_5_25">
991         <dataarea name="flop" size="368640">
992            <rom name="black.dsk" size="368640" crc="69cd924b" sha1="8d994a7bd069fcd4d40ead00634a260f6a0b88e9" offset="0" />
993         </dataarea>
994      </part>
995   </software>
996
997   <software name="blocking">
998      <description>Blocking</description>
999      <year>1991</year>
1000      <publisher>Vz</publisher>
1001
1002      <part name="flop1" interface="floppy_5_25">
1003         <dataarea name="flop" size="368640">
1004            <rom name="blocking.dsk" size="368640" crc="d11ddd60" sha1="fc57732cb9a8e12f1dea1e8f10967254d11f5789" offset="0" />
1005         </dataarea>
1006      </part>
1007   </software>
1008
1009   <software name="bob">
1010      <description>Bob</description>
1011      <year>198?</year>
1012      <publisher>Mamut Soft</publisher>
1013
1014      <part name="flop1" interface="floppy_5_25">
1015         <dataarea name="flop" size="368640">
1016            <rom name="bob.dsk" size="368640" crc="42200a37" sha1="7c6c0e471e2651f0ee1460a1e6a1df377a83f9df" offset="0" />
1017         </dataarea>
1018      </part>
1019   </software>
1020
1021   <software name="bobkutya">
1022      <description>Bob (kutya)</description>
1023      <year>198?</year>
1024      <publisher>&lt;unknown&gt;</publisher>
1025
1026      <part name="flop1" interface="floppy_5_25">
1027         <dataarea name="flop" size="368640">
1028            <rom name="bobkutya.dsk" size="368640" crc="7f16f8ca" sha1="ede752356380562766f6c18023cb6ce758c4aa27" offset="0" />
1029         </dataarea>
1030      </part>
1031   </software>
1032
1033   <software name="boba" cloneof="bob">
1034      <description>Bob (Alt)</description>
1035      <year>198?</year>
1036      <publisher>Mamut Soft</publisher>
1037
1038      <part name="flop1" interface="floppy_5_25">
1039         <dataarea name="flop" size="368640">
1040            <rom name="bobv2.dsk" size="368640" crc="e295300e" sha1="2320f1e7b6a9790047eb649eb3e0b4396a69799b" offset="0" />
1041         </dataarea>
1042      </part>
1043   </software>
1044
1045   <software name="bogar">
1046      <description>Bogár</description>
1047      <year>198?</year>
1048      <publisher>&lt;unknown&gt;</publisher>
1049
1050      <part name="flop1" interface="floppy_5_25">
1051         <dataarea name="flop" size="368640">
1052            <rom name="bogar.dsk" size="368640" crc="e8d2af28" sha1="db2b59ac2de42bc17cad4224dae8c953adaf8a8f" offset="0" />
1053         </dataarea>
1054      </part>
1055   </software>
1056
1057   <software name="bombazd">
1058      <description>Bombázd le Ceausecut</description>
1059      <year>198?</year>
1060      <publisher>Osmagyar Software</publisher>
1061
1062      <part name="flop1" interface="floppy_5_25">
1063         <dataarea name="flop" size="368640">
1064            <rom name="bombazdleceausecut.dsk" size="368640" crc="2005060b" sha1="fa420ee8e511f8fb7fc862591475a19ca1e0c0e1" offset="0" />
1065         </dataarea>
1066      </part>
1067   </software>
1068
1069   <software name="bomlas">
1070      <description>Rádióaktív bomlás</description>
1071      <year>198?</year>
1072      <publisher>&lt;unknown&gt;</publisher>
1073
1074      <part name="flop1" interface="floppy_5_25">
1075         <dataarea name="flop" size="368640">
1076            <rom name="bomlas.dsk" size="368640" crc="f6b90bef" sha1="55992b7a85321e493ac226fcf8c3251b8fa5fd0b" offset="0" />
1077         </dataarea>
1078      </part>
1079   </software>
1080
1081   <software name="boszork1">
1082      <description>Boszorkány 1</description>
1083      <year>198?</year>
1084      <publisher>Agilar</publisher>
1085
1086      <part name="flop1" interface="floppy_5_25">
1087         <dataarea name="flop" size="368640">
1088            <rom name="boszorka.dsk" size="368640" crc="908a29ae" sha1="37224955339d6236616abcc09ad0bf0db049336f" offset="0" />
1089         </dataarea>
1090      </part>
1091   </software>
1092
1093   <software name="boszork2">
1094      <description>Boszorkány 2</description>
1095      <year>198?</year>
1096      <publisher>Agilar</publisher>
1097
1098      <part name="flop1" interface="floppy_5_25">
1099         <dataarea name="flop" size="368640">
1100            <rom name="boszorkany2.dsk" size="368640" crc="db1dc079" sha1="6280c3bba5e0462cfacefa5f528332b9d01a4c59" offset="0" />
1101         </dataarea>
1102      </part>
1103   </software>
1104
1105   <software name="asmbot">
1106      <description>Mnemonic IV Assembler-Monitor - Bottom</description>
1107      <year>1989</year>
1108      <publisher>László Bata</publisher>
1109
1110      <part name="flop1" interface="floppy_5_25">
1111         <dataarea name="flop" size="368640">
1112            <rom name="bottom.dsk" size="368640" crc="963cf18e" sha1="fc106957e23d5a8bbee8d264e5f6853317c8714a" offset="0" />
1113         </dataarea>
1114      </part>
1115   </software>
1116
1117   <software name="bdash">
1118      <description>Boulder Dash</description>
1119      <year>1989</year>
1120      <publisher>Zsolt Dobrovics</publisher>
1121
1122      <part name="flop1" interface="floppy_5_25">
1123         <dataarea name="flop" size="368640">
1124            <rom name="boulderdash.dsk" size="368640" crc="fd59920c" sha1="2713de539eb9208d5ce28fc5359d3bfe5627c114" offset="0" />
1125         </dataarea>
1126      </part>
1127   </software>
1128
1129   <software name="box">
1130      <description>Box</description>
1131      <year>198?</year>
1132      <publisher>Szeki</publisher>
1133
1134      <part name="flop1" interface="floppy_5_25">
1135         <dataarea name="flop" size="368640">
1136            <rom name="box.dsk" size="368640" crc="4c759bd6" sha1="1a935d79633a17cdc313acc5d30c2b8306dce3ba" offset="0" />
1137         </dataarea>
1138      </part>
1139   </software>
1140
1141   <software name="box2">
1142      <description>Box 2</description>
1143      <year>198?</year>
1144      <publisher>Szeki</publisher>
1145
1146      <part name="flop1" interface="floppy_5_25">
1147         <dataarea name="flop" size="368640">
1148            <rom name="box2.dsk" size="368640" crc="f5855825" sha1="bc93cfd97a88d08975440ce4e2940b2314af5669" offset="0" />
1149         </dataarea>
1150      </part>
1151   </software>
1152
1153   <software name="break2">
1154      <description>Break 2</description>
1155      <year>198?</year>
1156      <publisher>&lt;unknown&gt;</publisher>
1157
1158      <part name="flop1" interface="floppy_5_25">
1159         <dataarea name="flop" size="368640">
1160            <rom name="break2.dsk" size="368640" crc="73facc52" sha1="f2fe9ff8f144162b02955a032a2b252417462dbc" offset="0" />
1161         </dataarea>
1162      </part>
1163   </software>
1164
1165   <software name="break3">
1166      <description>Break 3</description>
1167      <year>198?</year>
1168      <publisher>&lt;unknown&gt;</publisher>
1169
1170      <part name="flop1" interface="floppy_5_25">
1171         <dataarea name="flop" size="368640">
1172            <rom name="break3.dsk" size="368640" crc="c4e3e138" sha1="41c8992d8b8fc8d546135a9574e22d4791afe6a7" offset="0" />
1173         </dataarea>
1174      </part>
1175   </software>
1176
1177   <software name="breakopn">
1178      <description>Breakopen</description>
1179      <year>198?</year>
1180      <publisher>&lt;unknown&gt;</publisher>
1181
1182      <part name="flop1" interface="floppy_5_25">
1183         <dataarea name="flop" size="368640">
1184            <rom name="breakopen.dsk" size="368640" crc="4f3777e2" sha1="b3d336445688ae20736cdc7b64399dc117ac1745" offset="0" />
1185         </dataarea>
1186      </part>
1187   </software>
1188
1189   <software name="bulldozr">
1190      <description>Bulldozer</description>
1191      <year>198?</year>
1192      <publisher>Compi &amp; Urz</publisher>
1193
1194      <part name="flop1" interface="floppy_5_25">
1195         <dataarea name="flop" size="368640">
1196            <rom name="bulldoze.dsk" size="368640" crc="557937de" sha1="2763c1df53ab2f12f99f9ea926698b1c6131bba4" offset="0" />
1197         </dataarea>
1198      </part>
1199   </software>
1200
1201   <software name="bulldozrj" cloneof="bulldozr">
1202      <description>Bulldozer (Joystick)</description>
1203      <year>198?</year>
1204      <publisher>Compi &amp; Urz</publisher>
1205
1206      <part name="flop1" interface="floppy_5_25">
1207         <dataarea name="flop" size="368640">
1208            <rom name="dozerjoy.dsk" size="368640" crc="589c301c" sha1="1219aa4eba7265f0ab3271c0074b297765b46fd7" offset="0" />
1209         </dataarea>
1210      </part>
1211   </software>
1212
1213   <software name="buvar">
1214      <description>Búvár</description>
1215      <year>198?</year>
1216      <publisher>Berysoft</publisher>
1217
1218      <part name="flop1" interface="floppy_5_25">
1219         <dataarea name="flop" size="368640">
1220            <rom name="buvar.dsk" size="368640" crc="f7144b23" sha1="027e4ff5adbe34f64a8f0f36ba89f23d63fecdc6" offset="0" />
1221         </dataarea>
1222      </part>
1223   </software>
1224
1225   <software name="buvoskoc">
1226      <description>Bűvös kocka</description>
1227      <year>198?</year>
1228      <publisher>&lt;unknown&gt;</publisher>
1229
1230      <part name="flop1" interface="floppy_5_25">
1231         <dataarea name="flop" size="368640">
1232            <rom name="buvoskoc.dsk" size="368640" crc="ed72dcd5" sha1="8b478b32feb8ba5c0c666bca4b859f0d46c87a85" offset="0" />
1233         </dataarea>
1234      </part>
1235   </software>
1236
1237   <software name="buvosneg">
1238      <description>Bűvös négyzetek</description>
1239      <year>1987</year>
1240      <publisher>Octasoft</publisher>
1241
1242      <part name="flop1" interface="floppy_5_25">
1243         <dataarea name="flop" size="368640">
1244            <rom name="buvosnegyzetek.dsk" size="368640" crc="db684bac" sha1="e97fe8b3a1bef44f094ff5b428ed393caa8fe273" offset="0" />
1245         </dataarea>
1246      </part>
1247   </software>
1248
1249   <software name="cammogo">
1250      <description>Cammogó-derby</description>
1251      <year>198?</year>
1252      <publisher>&lt;unknown&gt;</publisher>
1253
1254      <part name="flop1" interface="floppy_5_25">
1255         <dataarea name="flop" size="368640">
1256            <rom name="cammogoderby.dsk" size="368640" crc="f6bab1d8" sha1="740a77501f94ffa39558be11b232f3c83598863a" offset="0" />
1257         </dataarea>
1258      </part>
1259   </software>
1260
1261   <software name="casio">
1262      <description>Casio</description>
1263      <year>198?</year>
1264      <publisher>Péter Dörner</publisher>
1265
1266      <part name="flop1" interface="floppy_5_25">
1267         <dataarea name="flop" size="368640">
1268            <rom name="casio.dsk" size="368640" crc="0c4a7b6d" sha1="dedec6352e140e5fe0cfe12636f6b27956fd3780" offset="0" />
1269         </dataarea>
1270      </part>
1271   </software>
1272
1273   <software name="cellovo">
1274      <description>Céllövő</description>
1275      <year>198?</year>
1276      <publisher>&lt;unknown&gt;</publisher>
1277
1278      <part name="flop1" interface="floppy_5_25">
1279         <dataarea name="flop" size="368640">
1280            <rom name="cellov.dsk" size="368640" crc="b8e67e0b" sha1="9bae4b3b28f8706a75d5baf02f9eac94436c5ce3" offset="0" />
1281         </dataarea>
1282      </part>
1283   </software>
1284
1285   <software name="cellovol">
1286      <description>Céllövölde</description>
1287      <year>198?</year>
1288      <publisher>Cápasoft</publisher>
1289
1290      <part name="flop1" interface="floppy_5_25">
1291         <dataarea name="flop" size="368640">
1292            <rom name="cellovo.dsk" size="368640" crc="3be0aae9" sha1="683b722553180fb5e61193ab3c47ad68b97a5fcc" offset="0" />
1293         </dataarea>
1294      </part>
1295   </software>
1296
1297   <software name="centiped">
1298      <description>Centipede</description>
1299      <year>198?</year>
1300      <publisher>STV</publisher>
1301
1302      <part name="flop1" interface="floppy_5_25">
1303         <dataarea name="flop" size="368640">
1304            <rom name="centipede.dsk" size="368640" crc="45374dc4" sha1="dfdf9d9021c9344b27e6256045986e51b708aca7" offset="0" />
1305         </dataarea>
1306      </part>
1307   </software>
1308
1309   <software name="centaury">
1310      <description>Centaury-1</description>
1311      <year>198?</year>
1312      <publisher>Novotrade</publisher>
1313
1314      <part name="flop1" interface="floppy_5_25">
1315         <dataarea name="flop" size="368640">
1316            <rom name="centaury-1.dsk" size="368640" crc="bbc3f0df" sha1="8f506679d57d3dcebd1d52bec5f1e81119dd864b" offset="0" />
1317         </dataarea>
1318      </part>
1319   </software>
1320
1321   <software name="nasasim">
1322      <description>NASA Simulator - Space Shuttle</description>
1323      <year>198?</year>
1324      <publisher>&lt;unknown&gt;</publisher>
1325
1326      <part name="flop1" interface="floppy_5_25">
1327         <dataarea name="flop" size="368640">
1328            <rom name="challenger.dsk" size="368640" crc="e96055c6" sha1="9f2eb4dc079c5bdcc8f55b893b9458f7cc638b2e" offset="0" />
1329         </dataarea>
1330      </part>
1331   </software>
1332
1333   <software name="chip">
1334      <description>Chip</description>
1335      <year>198?</year>
1336      <publisher>&lt;unknown&gt;</publisher>
1337
1338      <part name="flop1" interface="floppy_5_25">
1339         <dataarea name="flop" size="368640">
1340            <rom name="chip.dsk" size="368640" crc="eab5152e" sha1="d458798eef74643329490a165a4f3ff3f3c2204e" offset="0" />
1341         </dataarea>
1342      </part>
1343   </software>
1344
1345   <software name="cicik">
1346      <description>Lebegő Cicik</description>
1347      <year>198?</year>
1348      <publisher>G.V. Alfa Software</publisher>
1349
1350      <part name="flop1" interface="floppy_5_25">
1351         <dataarea name="flop" size="368640">
1352            <rom name="cicik.dsk" size="368640" crc="4e9057e4" sha1="29c45862a3e648637f65400579e77a3f8cad53ee" offset="0" />
1353         </dataarea>
1354      </part>
1355   </software>
1356
1357   <software name="cikcakk">
1358      <description>Cikcakk</description>
1359      <year>198?</year>
1360      <publisher>&lt;unknown&gt;</publisher>
1361
1362      <part name="flop1" interface="floppy_5_25">
1363         <dataarea name="flop" size="368640">
1364            <rom name="cikcakk.dsk" size="368640" crc="3462df3b" sha1="058ab717c6bd99568545b0b879297b7399b37817" offset="0" />
1365         </dataarea>
1366      </part>
1367   </software>
1368
1369   <software name="ciklon">
1370      <description>Ciklon</description>
1371      <year>198?</year>
1372      <publisher>Software in LUX</publisher>
1373
1374      <part name="flop1" interface="floppy_5_25">
1375         <dataarea name="flop" size="368640">
1376            <rom name="ciklon.dsk" size="368640" crc="3aa85ee7" sha1="6c555314fe929cf4c9f216997238a6fa375c213b" offset="0" />
1377         </dataarea>
1378      </part>
1379   </software>
1380
1381   <software name="circle">
1382      <description>Circle</description>
1383      <year>198?</year>
1384      <publisher>Atlas</publisher>
1385
1386      <part name="flop1" interface="floppy_5_25">
1387         <dataarea name="flop" size="368640">
1388            <rom name="circle.dsk" size="368640" crc="7b01a040" sha1="bf06eb7dfa37b549fe2da0b32abc75f8f5b0d166" offset="0" />
1389         </dataarea>
1390      </part>
1391   </software>
1392
1393   <software name="citadell">
1394      <description>Citadella</description>
1395      <year>1988</year>
1396      <publisher>SVS Software</publisher>
1397
1398      <part name="flop1" interface="floppy_5_25">
1399         <dataarea name="flop" size="368640">
1400            <rom name="citadella.dsk" size="368640" crc="ae232b7c" sha1="1ae5fb204eefd69b84ce6dd11445e83c1a5537ba" offset="0" />
1401         </dataarea>
1402      </part>
1403   </software>
1404
1405   <software name="citycru">
1406      <description>City Cruiser</description>
1407      <year>1988</year>
1408      <publisher>Banjoe</publisher>
1409
1410      <part name="flop1" interface="floppy_5_25">
1411         <dataarea name="flop" size="368640">
1412            <rom name="citycruiser.dsk" size="368640" crc="b8775557" sha1="bdb8aeb07d56ff756669f78addf9153b1b525119" offset="0" />
1413         </dataarea>
1414      </part>
1415   </software>
1416
1417   <software name="clement">
1418      <description>Clementina a boszorkány</description>
1419      <year>198?</year>
1420      <publisher>Zoltán Nagy - Zsolt Magyar</publisher>
1421
1422      <part name="flop1" interface="floppy_5_25">
1423         <dataarea name="flop" size="368640">
1424            <rom name="clementina.dsk" size="368640" crc="4a98c979" sha1="b4738426e3227e6103170f9295a22a179e50f81c" offset="0" />
1425         </dataarea>
1426      </part>
1427   </software>
1428
1429   <software name="cobra">
1430      <description>Cobra</description>
1431      <year>198?</year>
1432      <publisher>C.S. Software</publisher>
1433
1434      <part name="flop1" interface="floppy_5_25">
1435         <dataarea name="flop" size="368640">
1436            <rom name="cobra.dsk" size="368640" crc="374cdb58" sha1="374f7dd57b41d8c28fa72790010f536b6ec01d06" offset="0" />
1437         </dataarea>
1438      </part>
1439   </software>
1440
1441   <software name="cobyvada">
1442      <description>Coby-Vadász</description>
1443      <year>198?</year>
1444      <publisher>&lt;unknown&gt;</publisher>
1445
1446      <part name="flop1" interface="floppy_5_25">
1447         <dataarea name="flop" size="368640">
1448            <rom name="cobyvada.dsk" size="368640" crc="736b98a2" sha1="7819d6d8e50e030f70ef7a04b9e40755a91c2a27" offset="0" />
1449         </dataarea>
1450      </part>
1451   </software>
1452
1453   <software name="cocademo">
1454      <description>Coca Cola Demo</description>
1455      <year>198?</year>
1456      <publisher>&lt;unknown&gt;</publisher>
1457
1458      <part name="flop1" interface="floppy_5_25">
1459         <dataarea name="flop" size="368640">
1460            <rom name="cocademo.dsk" size="368640" crc="348c1d2e" sha1="33f80f3eec0785a6d7f71283358f374b16f0067c" offset="0" />
1461         </dataarea>
1462      </part>
1463   </software>
1464
1465   <software name="codas64">
1466      <description>Codas 64</description>
1467      <year>198?</year>
1468      <publisher>&lt;unknown&gt;</publisher>
1469
1470      <part name="flop1" interface="floppy_5_25">
1471         <dataarea name="flop" size="368640">
1472            <rom name="codas64.dsk" size="368640" crc="854839bd" sha1="e8800d172fc5e0f3568c84d0ed045e7e8f5c8e45" offset="0" />
1473         </dataarea>
1474      </part>
1475   </software>
1476
1477   <software name="cogan">
1478      <description>Cogan</description>
1479      <year>198?</year>
1480      <publisher>László Bagi - SonySoft</publisher>
1481
1482      <part name="flop1" interface="floppy_5_25">
1483         <dataarea name="flop" size="368640">
1484            <rom name="cogan.dsk" size="368640" crc="62ea9d26" sha1="d648b4d8090095d0407aecbbcb35e6f7ed901efb" offset="0" />
1485         </dataarea>
1486      </part>
1487   </software>
1488
1489   <software name="color16">
1490      <description>Color-16 színes karakterkészítő</description>
1491      <year>198?</year>
1492      <publisher>&lt;unknown&gt;</publisher>
1493
1494      <part name="flop1" interface="floppy_5_25">
1495         <dataarea name="flop" size="368640">
1496            <rom name="color-16.dsk" size="368640" crc="dc20bad8" sha1="cbf8dcb07a348c2da2832880616813a02ca15b44" offset="0" />
1497         </dataarea>
1498      </part>
1499   </software>
1500
1501   <software name="coloris">
1502      <description>Coloris</description>
1503      <year>198?</year>
1504      <publisher>Béla Csatlós</publisher>
1505
1506      <part name="flop1" interface="floppy_5_25">
1507         <dataarea name="flop" size="368640">
1508            <rom name="coloris.dsk" size="368640" crc="bc111816" sha1="4e68909f80b070b24e9e7cf2a1bae9fe87d5e8c3" offset="0" />
1509         </dataarea>
1510      </part>
1511   </software>
1512
1513   <software name="colorisa" cloneof="coloris">
1514      <description>Coloris (Alt)</description>
1515      <year>198?</year>
1516      <publisher>Béla Csatlós</publisher>
1517
1518      <part name="flop1" interface="floppy_5_25">
1519         <dataarea name="flop" size="368640">
1520            <rom name="colorisv2.dsk" size="368640" crc="87e0b744" sha1="f721dca8c6665e3574c50f56dd213182627b1e17" offset="0" />
1521         </dataarea>
1522      </part>
1523   </software>
1524
1525   <software name="colormag">
1526      <description>Colormagic - Színbűvölő</description>
1527      <year>1987</year>
1528      <publisher>&lt;unknown&gt;</publisher>
1529
1530      <part name="flop1" interface="floppy_5_25">
1531         <dataarea name="flop" size="368640">
1532            <rom name="colormagic.dsk" size="368640" crc="21bcb2aa" sha1="542073b04212f9e831b68c467a9ae1c058241eee" offset="0" />
1533         </dataarea>
1534      </part>
1535   </software>
1536
1537   <software name="coltris">
1538      <description>Coltris</description>
1539      <year>1993</year>
1540      <publisher>Gati Software</publisher>
1541
1542      <part name="flop1" interface="floppy_5_25">
1543         <dataarea name="flop" size="368640">
1544            <rom name="coltris.dsk" size="368640" crc="adb76c06" sha1="194b8eb22532d5cf676184aacf9def998c4e9597" offset="0" />
1545         </dataarea>
1546      </part>
1547   </software>
1548
1549   <software name="commando">
1550      <description>Commando</description>
1551      <year>1989</year>
1552      <publisher>Berysoft</publisher>
1553
1554      <part name="flop1" interface="floppy_5_25">
1555         <dataarea name="flop" size="368640">
1556            <rom name="commando.dsk" size="368640" crc="cf079b80" sha1="125112a57f30c0f5afab99b5f58b16fa6814e2e8" offset="0" />
1557         </dataarea>
1558      </part>
1559   </software>
1560
1561   <software name="commandoa" cloneof="commando">
1562      <description>Commando (Alt)</description>
1563      <year>1989</year>
1564      <publisher>Berysoft</publisher>
1565
1566      <part name="flop1" interface="floppy_5_25">
1567         <dataarea name="flop" size="368640">
1568            <rom name="commanv2.dsk" size="368640" crc="bde0de7f" sha1="71b9ee3afeaa33d2c2e10790d145ca37820344af" offset="0" />
1569         </dataarea>
1570      </part>
1571   </software>
1572
1573   <software name="cmdo_sil">
1574      <description>Commando (SIL)</description>
1575      <year>1987</year>
1576      <publisher>Software in LUX</publisher>
1577
1578      <part name="flop1" interface="floppy_5_25">
1579         <dataarea name="flop" size="368640">
1580            <rom name="commando1.dsk" size="368640" crc="98ca35f9" sha1="66d126f761c581e7c7645cc6ae5b824ad38db654" offset="0" />
1581         </dataarea>
1582      </part>
1583   </software>
1584
1585   <software name="compwrld">
1586      <description>ComputerWorld</description>
1587      <year>1991</year>
1588      <publisher>TVCM</publisher>
1589
1590      <part name="flop1" interface="floppy_5_25">
1591         <dataarea name="flop" size="368640">
1592            <rom name="computerworld.dsk" size="368640" crc="2e07bd81" sha1="1c743c9944006a0371c58ca2d5d5905040c56834" offset="0" />
1593         </dataarea>
1594      </part>
1595   </software>
1596
1597   <software name="cosinus">
1598      <description>Cosinus</description>
1599      <year>1985</year>
1600      <publisher>HLV</publisher>
1601
1602      <part name="flop1" interface="floppy_5_25">
1603         <dataarea name="flop" size="368640">
1604            <rom name="cosinus.dsk" size="368640" crc="b4fe3700" sha1="83442e640ae1ccb62d013528cd422cde151dc225" offset="0" />
1605         </dataarea>
1606      </part>
1607   </software>
1608
1609   <software name="cowboy">
1610      <description>Cowboy</description>
1611      <year>1987</year>
1612      <publisher>&lt;unknown&gt;</publisher>
1613
1614      <part name="flop1" interface="floppy_5_25">
1615         <dataarea name="flop" size="368640">
1616            <rom name="cowboy.dsk" size="368640" crc="7530a04a" sha1="e358dfcc19f32f2b0c653cc6b344c445387ddefb" offset="0" />
1617         </dataarea>
1618      </part>
1619   </software>
1620
1621   <software name="cracked">
1622      <description>Crack Ed</description>
1623      <year>198?</year>
1624      <publisher>&lt;unknown&gt;</publisher>
1625
1626      <part name="flop1" interface="floppy_5_25">
1627         <dataarea name="flop" size="368640">
1628            <rom name="craked.dsk" size="368640" crc="f97e55ec" sha1="844f2f8aeefb450fc506d5093ec8923a42aebc7b" offset="0" />
1629         </dataarea>
1630      </part>
1631   </software>
1632
1633   <software name="kangaroo">
1634      <description>Crazy Kangaroo</description>
1635      <year>1986</year>
1636      <publisher>Videoton</publisher>
1637
1638      <part name="flop1" interface="floppy_5_25">
1639         <dataarea name="flop" size="368640">
1640            <rom name="crazykangaroo.dsk" size="368640" crc="87b01f60" sha1="a29d8ee0d3079e6438423c2464423c2005b98818" offset="0" />
1641         </dataarea>
1642      </part>
1643   </software>
1644
1645   <software name="kangarooa" cloneof="kangaroo">
1646      <description>Crazy Kangaroo (Alt)</description>
1647      <year>1986</year>
1648      <publisher>Videoton</publisher>
1649
1650      <part name="flop1" interface="floppy_5_25">
1651         <dataarea name="flop" size="368640">
1652            <rom name="crazy_kangaroov2.dsk" size="368640" crc="966c6173" sha1="4dd7609826999fb974738452c823482729785787" offset="0" />
1653         </dataarea>
1654      </part>
1655   </software>
1656
1657   <software name="kangaroob" cloneof="kangaroo">
1658      <description>Crazy Kangaroo (Alt 2)</description>
1659      <year>1986</year>
1660      <publisher>Videoton</publisher>
1661
1662      <part name="flop1" interface="floppy_5_25">
1663         <dataarea name="flop" size="368640">
1664            <rom name="crazy_kangaroov3.dsk" size="368640" crc="28f80f65" sha1="10b5f49829028eb963dc1e6032b11eb3d8e30175" offset="0" />
1665         </dataarea>
1666      </part>
1667   </software>
1668
1669   <software name="kangaroocr" cloneof="kangaroo">
1670      <description>Crazy Kangaroo (Cracked)</description>
1671      <year>1986</year>
1672      <publisher>Videoton</publisher>
1673
1674      <part name="flop1" interface="floppy_5_25">
1675         <dataarea name="flop" size="368640">
1676            <rom name="crazycr.dsk" size="368640" crc="1978c0a0" sha1="5e668549bea5c316d7594ad367bc39d2a2112cc7" offset="0" />
1677         </dataarea>
1678      </part>
1679   </software>
1680
1681   <software name="kangaroot" cloneof="kangaroo">
1682      <description>Crazy Kangaroo (Trainer)</description>
1683      <year>1986</year>
1684      <publisher>Videoton</publisher>
1685
1686      <part name="flop1" interface="floppy_5_25">
1687         <dataarea name="flop" size="368640">
1688            <rom name="crazykangarootrainer.dsk" size="368640" crc="f6adbe76" sha1="4469b6b1ba597869099bb45b7a9b82c16f73f396" offset="0" />
1689         </dataarea>
1690      </part>
1691   </software>
1692
1693   <software name="csapda">
1694      <description>Csapda</description>
1695      <year>198?</year>
1696      <publisher>&lt;unknown&gt;</publisher>
1697
1698      <part name="flop1" interface="floppy_5_25">
1699         <dataarea name="flop" size="368640">
1700            <rom name="csapda.dsk" size="368640" crc="27d587a6" sha1="431718a37e4446d95c1a7c77ef13cad86063760d" offset="0" />
1701         </dataarea>
1702      </part>
1703   </software>
1704
1705   <software name="csavarga">
1706      <description>Csavargás a gombák birodalmában</description>
1707      <year>1988</year>
1708      <publisher>Green Soft</publisher>
1709
1710      <part name="flop1" interface="floppy_5_25">
1711         <dataarea name="flop" size="368640">
1712            <rom name="csavargas.dsk" size="368640" crc="7d787cd7" sha1="959692eeb7abdcac93df2f5ccf13459a42f904fd" offset="0" />
1713         </dataarea>
1714      </part>
1715   </software>
1716
1717   <software name="csavargaa" cloneof="csavarga">
1718      <description>Csavargás a gombák birodalmában (Alt)</description>
1719      <year>1988</year>
1720      <publisher>Green Soft</publisher>
1721
1722      <part name="flop1" interface="floppy_5_25">
1723         <dataarea name="flop" size="368640">
1724            <rom name="csavargasv2.dsk" size="368640" crc="c9d27650" sha1="3c0673b6a73e29c3724cf523136b9bb4362b1a9d" offset="0" />
1725         </dataarea>
1726      </part>
1727   </software>
1728
1729   <software name="csonak">
1730      <description>Csónak a folyón</description>
1731      <year>198?</year>
1732      <publisher>K&amp;K Soft</publisher>
1733
1734      <part name="flop1" interface="floppy_5_25">
1735         <dataarea name="flop" size="368640">
1736            <rom name="csonak.dsk" size="368640" crc="ec8578ac" sha1="8f981e385ace159d26ff67da5e9c46cf113e036c" offset="0" />
1737         </dataarea>
1738      </part>
1739   </software>
1740
1741   <software name="csovesek">
1742      <description>Csövesek</description>
1743      <year>198?</year>
1744      <publisher>&lt;unknown&gt;</publisher>
1745
1746      <part name="flop1" interface="floppy_5_25">
1747         <dataarea name="flop" size="368640">
1748            <rom name="csovesek.dsk" size="368640" crc="f3d8104a" sha1="50bd0a115f841fc52c60f2dfafa2d21df0491dff" offset="0" />
1749         </dataarea>
1750      </part>
1751   </software>
1752
1753   <software name="csrobot">
1754      <description>C.S. Robot</description>
1755      <year>198?</year>
1756      <publisher>C.S. Software</publisher>
1757
1758      <part name="flop1" interface="floppy_5_25">
1759         <dataarea name="flop" size="368640">
1760            <rom name="csrobot.dsk" size="368640" crc="512c83e3" sha1="5447255f8b2be9a48fd73cdea77b2410a88e8b62" offset="0" />
1761         </dataarea>
1762      </part>
1763   </software>
1764
1765   <software name="cyrus2">
1766      <description>Cyrus 2</description>
1767      <year>1985</year>
1768      <publisher>Intelligent Chess Software</publisher>
1769
1770      <part name="flop1" interface="floppy_5_25">
1771         <dataarea name="flop" size="368640">
1772            <rom name="cyrus2.dsk" size="368640" crc="1c014ee8" sha1="4089bbc6234bb0887aee6ac7710604452f2d7560" offset="0" />
1773         </dataarea>
1774      </part>
1775   </software>
1776
1777   <software name="cyrus2en" cloneof="cyrus2">
1778      <description>Cyrus 2 (English)</description>
1779      <year>1985</year>
1780      <publisher>Intelligent Chess Software</publisher>
1781
1782      <part name="flop1" interface="floppy_5_25">
1783         <dataarea name="flop" size="368640">
1784            <rom name="cyrus2 (english) (v1).dsk" size="368640" crc="bebb0b50" sha1="c3b5450b62b77f84285c5bc3e6a51e0e8ffd0eda" offset="0" />
1785         </dataarea>
1786      </part>
1787   </software>
1788
1789   <software name="cyrus2ena" cloneof="cyrus2">
1790      <description>Cyrus 2 (English, Alt)</description>
1791      <year>1985</year>
1792      <publisher>Intelligent Chess Software</publisher>
1793
1794      <part name="flop1" interface="floppy_5_25">
1795         <dataarea name="flop" size="368640">
1796            <rom name="cyrus2 (english) (alt).dsk" size="368640" crc="67bc6481" sha1="06be720c39821aed0e76d21575352051c8eba960" offset="0" />
1797         </dataarea>
1798      </part>
1799   </software>
1800
1801   <software name="dama">
1802      <description>Dáma</description>
1803      <year>198?</year>
1804      <publisher>&lt;unknown&gt;</publisher>
1805
1806      <part name="flop1" interface="floppy_5_25">
1807         <dataarea name="flop" size="368640">
1808            <rom name="dama.dsk" size="368640" crc="dbf17698" sha1="b5c089fe54c921cde6000d67273a9e077b83671e" offset="0" />
1809         </dataarea>
1810      </part>
1811   </software>
1812
1813   <software name="damaa" cloneof="dama">
1814      <description>Dáma (Alt)</description>
1815      <year>198?</year>
1816      <publisher>&lt;unknown&gt;</publisher>
1817
1818      <part name="flop1" interface="floppy_5_25">
1819         <dataarea name="flop" size="368640">
1820            <rom name="damav2.dsk" size="368640" crc="7391f7b3" sha1="0bd593378e5d294b1bee7c49ac70be2b9ecab484" offset="0" />
1821         </dataarea>
1822      </part>
1823   </software>
1824
1825   <software name="dama1">
1826      <description>Dáma (Different)</description>
1827      <year>198?</year>
1828      <publisher>&lt;unknown&gt;</publisher>
1829
1830      <part name="flop1" interface="floppy_5_25">
1831         <dataarea name="flop" size="368640">
1832            <rom name="dama_.dsk" size="368640" crc="39753ded" sha1="43a28c69082cfe8f030774b56eda116b502bc015" offset="0" />
1833         </dataarea>
1834      </part>
1835   </software>
1836
1837   <software name="darkside">
1838      <description>Dark Side</description>
1839      <year>198?</year>
1840      <publisher>STV</publisher>
1841
1842      <part name="flop1" interface="floppy_5_25">
1843         <dataarea name="flop" size="368640">
1844            <rom name="darkside.dsk" size="368640" crc="68a551db" sha1="03f0df24ac234d02351c1e587111bf63d23a8121" offset="0" />
1845         </dataarea>
1846      </part>
1847   </software>
1848
1849   <software name="datakesz">
1850      <description>Data sor készítő</description>
1851      <year>198?</year>
1852      <publisher>&lt;unknown&gt;</publisher>
1853
1854      <part name="flop1" interface="floppy_5_25">
1855         <dataarea name="flop" size="368640">
1856            <rom name="datakesz.dsk" size="368640" crc="2e0de17c" sha1="b9523d9c13c509aee4eeff44e74ad145b0052f60" offset="0" />
1857         </dataarea>
1858      </part>
1859   </software>
1860
1861   <software name="tvcdcopy">
1862      <description>TVC Disk Copy 1.0</description>
1863      <year>198?</year>
1864      <publisher>&lt;unknown&gt;</publisher>
1865
1866      <part name="flop1" interface="floppy_5_25">
1867         <dataarea name="flop" size="368640">
1868            <rom name="dcopy10.dsk" size="368640" crc="1e5c882e" sha1="48978a68ad343bdf4d5091adc93b8b2154a8a10e" offset="0" />
1869         </dataarea>
1870      </part>
1871   </software>
1872
1873   <software name="ddtleir">
1874      <description>Mini DDT - Leiras</description>
1875      <year>198?</year>
1876      <publisher>Gaba Software</publisher>
1877
1878      <part name="flop1" interface="floppy_5_25">
1879         <dataarea name="flop" size="368640">
1880            <rom name="ddtleir.dsk" size="368640" crc="5f76a558" sha1="37256cd9e77a3add9ca79ef7eabaea551f6f531f" offset="0" />
1881         </dataarea>
1882      </part>
1883   </software>
1884
1885   <software name="debugger">
1886      <description>Debugger</description>
1887      <year>198?</year>
1888      <publisher>&lt;unknown&gt;</publisher>
1889
1890      <part name="flop1" interface="floppy_5_25">
1891         <dataarea name="flop" size="368640">
1892            <rom name="debugger.dsk" size="368640" crc="baf3ceea" sha1="ec5cf3b194be77736ff3a2c69efff6956bc305f7" offset="0" />
1893         </dataarea>
1894      </part>
1895   </software>
1896
1897   <software name="deflekt">
1898      <description>Deflektor</description>
1899      <year>1987</year>
1900      <publisher>STV</publisher>
1901
1902      <part name="flop1" interface="floppy_5_25">
1903         <dataarea name="flop" size="368640">
1904            <rom name="deflektor.dsk" size="368640" crc="fb75b1cd" sha1="97cb3c86abe932fc5075c22f4d6933ac6b3311d9" offset="0" />
1905         </dataarea>
1906      </part>
1907   </software>
1908
1909   <software name="demokaz1">
1910      <description>Demo Kazetta 01 - Bevezetés</description>
1911      <year>198?</year>
1912      <publisher>Videoton</publisher>
1913
1914      <part name="flop1" interface="floppy_5_25">
1915         <dataarea name="flop" size="368640">
1916            <rom name="demo01-bevezetes.dsk" size="368640" crc="11929d4d" sha1="261e8efbe95e1e736adc6c9ca4d3e687db7933c5" offset="0" />
1917         </dataarea>
1918      </part>
1919   </software>
1920
1921   <software name="demokaz2">
1922      <description>Demo Kazetta 02 - Tili-Toli</description>
1923      <year>198?</year>
1924      <publisher>Videoton</publisher>
1925
1926      <part name="flop1" interface="floppy_5_25">
1927         <dataarea name="flop" size="368640">
1928            <rom name="demo02-tili-toli.dsk" size="368640" crc="89f9202c" sha1="9296d48fc176fb7842522b41bc8dd1f94081de49" offset="0" />
1929         </dataarea>
1930      </part>
1931   </software>
1932
1933   <software name="demokaz3">
1934      <description>Demo Kazetta 03 - Rajzoló</description>
1935      <year>198?</year>
1936      <publisher>Videoton</publisher>
1937
1938      <part name="flop1" interface="floppy_5_25">
1939         <dataarea name="flop" size="368640">
1940            <rom name="demo03-rajzolo.dsk" size="368640" crc="eef8a8cb" sha1="212a8540951c0fcf2d50db59e05efaa063d50415" offset="0" />
1941         </dataarea>
1942      </part>
1943   </software>
1944
1945   <software name="demokaz4">
1946      <description>Demo Kazetta 04 - Zene</description>
1947      <year>198?</year>
1948      <publisher>Videoton</publisher>
1949
1950      <part name="flop1" interface="floppy_5_25">
1951         <dataarea name="flop" size="368640">
1952            <rom name="demo04-zene.dsk" size="368640" crc="e587ad50" sha1="7a55339d9cc31e0114d75f6c7a5958127a32837b" offset="0" />
1953         </dataarea>
1954      </part>
1955   </software>
1956
1957   <software name="demokaz5">
1958      <description>Demo Kazetta 05 - Betűkészítő, Bombázó</description>
1959      <year>198?</year>
1960      <publisher>Videoton</publisher>
1961
1962      <part name="flop1" interface="floppy_5_25">
1963         <dataarea name="flop" size="368640">
1964            <rom name="demo05-betukeszito.dsk" size="368640" crc="36302c7d" sha1="703a4159bea1447e06b6703e01493fb8447577fd" offset="0" />
1965         </dataarea>
1966      </part>
1967   </software>
1968
1969   <software name="demokaz5a" cloneof="demokaz5">
1970      <description>Demo Kazetta 05 - Betűkészítő, Bombázó (Alt)</description>
1971      <year>198?</year>
1972      <publisher>&lt;unknown&gt;</publisher>
1973
1974      <part name="flop1" interface="floppy_5_25">
1975         <dataarea name="flop" size="368640">
1976            <rom name="demo5v2.dsk" size="368640" crc="d989cb86" sha1="f95292afee1f647d667d254e16ba073e3a4541c1" offset="0" />
1977         </dataarea>
1978      </part>
1979   </software>
1980
1981   <software name="demodisk">
1982      <description>Demo Kazetta/Lemez 01-06</description>
1983      <year>2007</year>
1984      <publisher>Viktor Varga</publisher>
1985
1986      <part name="flop1" interface="floppy_5_25">
1987         <dataarea name="flop" size="368640">
1988            <rom name="demodisk.dsk" size="368640" crc="7e6a6093" sha1="5482e34dd5fa60bd0297465acade927cf3b3091b" offset="0" />
1989         </dataarea>
1990      </part>
1991   </software>
1992
1993   <software name="demo01">
1994      <description>DG Kép 1</description>
1995      <year>1991</year>
1996      <publisher>GATO Bt.</publisher>
1997
1998      <part name="flop1" interface="floppy_5_25">
1999         <dataarea name="flop" size="737280">
2000            <rom name="demo01.dsk" size="737280" crc="ddef02de" sha1="4b3f309a807b09df0c1c30d8120f3db5e80897bd" offset="0" />
2001         </dataarea>
2002      </part>
2003   </software>
2004
2005   <software name="demo02">
2006      <description>DG Kép 2</description>
2007      <year>1991</year>
2008      <publisher>GATO Bt.</publisher>
2009
2010      <part name="flop1" interface="floppy_5_25">
2011         <dataarea name="flop" size="737280">
2012            <rom name="demo02.dsk" size="737280" crc="e44e1b47" sha1="dca4a194d124ac6cc319c3be336b4a29816f1507" offset="0" />
2013         </dataarea>
2014      </part>
2015   </software>
2016
2017   <software name="demo03">
2018      <description>DG Kép 3</description>
2019      <year>1993</year>
2020      <publisher>GATO Bt.</publisher>
2021
2022      <part name="flop1" interface="floppy_5_25">
2023         <dataarea name="flop" size="737280">
2024            <rom name="demo03.dsk" size="737280" crc="21afe287" sha1="b2b732e08085bf1d037a09d52228e9acbd1f869a" offset="0" />
2025         </dataarea>
2026      </part>
2027   </software>
2028
2029   <software name="diffuzio">
2030      <description>Diffúzió</description>
2031      <year>198?</year>
2032      <publisher>&lt;unknown&gt;</publisher>
2033
2034      <part name="flop1" interface="floppy_5_25">
2035         <dataarea name="flop" size="368640">
2036            <rom name="diffuzio.dsk" size="368640" crc="a18f752f" sha1="7c5d7534aad55c887a957f5a0b890106ad23b408" offset="0" />
2037         </dataarea>
2038      </part>
2039   </software>
2040
2041   <software name="digipok">
2042      <description>Digipók</description>
2043      <year>1987</year>
2044      <publisher>Bit &amp; Guy</publisher>
2045
2046      <part name="flop1" interface="floppy_5_25">
2047         <dataarea name="flop" size="368640">
2048            <rom name="digipok.dsk" size="368640" crc="ec32b239" sha1="f771adcf30c61b6925f71fb0d5ea1c582c5bb293" offset="0" />
2049         </dataarea>
2050      </part>
2051   </software>
2052
2053   <software name="digipoka" cloneof="digipok">
2054      <description>Digipók (Alt)</description>
2055      <year>1987</year>
2056      <publisher>Bit &amp; Guy</publisher>
2057
2058      <part name="flop1" interface="floppy_5_25">
2059         <dataarea name="flop" size="368640">
2060            <rom name="digipokv2.dsk" size="368640" crc="687acfa9" sha1="655081f53c19514e4b526da688313be1f9536d92" offset="0" />
2061         </dataarea>
2062      </part>
2063   </software>
2064
2065   <software name="dinosaur">
2066      <description>Dinosaurus</description>
2067      <year>198?</year>
2068      <publisher>Buddha Softhouse</publisher>
2069
2070      <part name="flop1" interface="floppy_5_25">
2071         <dataarea name="flop" size="368640">
2072            <rom name="dinosaur.dsk" size="368640" crc="07d48ddf" sha1="2bda1d8a02cede85a8c5872a12c4e40180dc5c24" offset="0" />
2073         </dataarea>
2074      </part>
2075   </software>
2076
2077   <software name="discmond">
2078      <description>Disc Monitor v2.00 Demo</description>
2079      <year>1990</year>
2080      <publisher>GATO Bt.</publisher>
2081
2082      <part name="flop1" interface="floppy_5_25">
2083         <dataarea name="flop" size="368640">
2084            <rom name="discmond.dsk" size="368640" crc="63d1aa96" sha1="2e62c18b60b2ab185dd34f6d1ad4e192f595bad6" offset="0" />
2085         </dataarea>
2086      </part>
2087   </software>
2088
2089   <software name="dobgep">
2090      <description>Dobgép</description>
2091      <year>198?</year>
2092      <publisher>STV</publisher>
2093
2094      <part name="flop1" interface="floppy_5_25">
2095         <dataarea name="flop" size="368640">
2096            <rom name="dobgep.dsk" size="368640" crc="c3d5b82f" sha1="3b378d827de7418b8f869f4553fa188950076a62" offset="0" />
2097         </dataarea>
2098      </part>
2099   </software>
2100
2101   <software name="dobprg">
2102      <description>Dobprogram</description>
2103      <year>1989</year>
2104      <publisher>Cápasoft</publisher>
2105
2106      <part name="flop1" interface="floppy_5_25">
2107         <dataarea name="flop" size="368640">
2108            <rom name="dobprg.dsk" size="368640" crc="fb966ef0" sha1="ff386b7ff076c0fe657db1d89f68ab7d6f0b0658" offset="0" />
2109         </dataarea>
2110      </part>
2111   </software>
2112
2113   <software name="domino">
2114      <description>Dominó</description>
2115      <year>198?</year>
2116      <publisher>Agilar</publisher>
2117
2118      <part name="flop1" interface="floppy_5_25">
2119         <dataarea name="flop" size="368640">
2120            <rom name="dominov1.dsk" size="368640" crc="79ac23a0" sha1="f5650a46ca215e0b1e9287e115ff61e9e3e4791b" offset="0" />
2121         </dataarea>
2122      </part>
2123   </software>
2124
2125   <software name="dominoa" cloneof="domino">
2126      <description>Dominó (Alt)</description>
2127      <year>198?</year>
2128      <publisher>Agilar</publisher>
2129
2130      <part name="flop1" interface="floppy_5_25">
2131         <dataarea name="flop" size="368640">
2132            <rom name="dominov2.dsk" size="368640" crc="6dd7f648" sha1="b9e7caf0b5df6c8e9a2bd8d5cddd510fa94f206c" offset="0" />
2133         </dataarea>
2134      </part>
2135   </software>
2136
2137   <software name="donald">
2138      <description>Donald és Dézi</description>
2139      <year>1989</year>
2140      <publisher>Cápasoft</publisher>
2141
2142      <part name="flop1" interface="floppy_5_25">
2143         <dataarea name="flop" size="368640">
2144            <rom name="donald.dsk" size="368640" crc="f171b15b" sha1="b03bed6b6b1f5e5335789a11f8d4213b6423156e" offset="0" />
2145         </dataarea>
2146      </part>
2147   </software>
2148
2149   <software name="dkong">
2150      <description>Donkey Kong</description>
2151      <year>198?</year>
2152      <publisher>Béla Takács</publisher>
2153
2154      <part name="flop1" interface="floppy_5_25">
2155         <dataarea name="flop" size="368640">
2156            <rom name="donkeykong.dsk" size="368640" crc="516c8a33" sha1="dc41a04790a5c58f9f234bcb0fccdd29c3104dbc" offset="0" />
2157         </dataarea>
2158      </part>
2159   </software>
2160
2161   <software name="dkonga" cloneof="dkong">
2162      <description>Donkey Kong (Alt)</description>
2163      <year>198?</year>
2164      <publisher>Béla Takács</publisher>
2165
2166      <part name="flop1" interface="floppy_5_25">
2167         <dataarea name="flop" size="368640">
2168            <rom name="donkeykongv2.dsk" size="368640" crc="63a80a00" sha1="1b51f483bb30ce780677c6c30e8a8d2dbc023d34" offset="0" />
2169         </dataarea>
2170      </part>
2171   </software>
2172
2173   <software name="drawer">
2174      <description>Drawer</description>
2175      <year>198?</year>
2176      <publisher>Software in LUX</publisher>
2177
2178      <part name="flop1" interface="floppy_5_25">
2179         <dataarea name="flop" size="368640">
2180            <rom name="drawer.dsk" size="368640" crc="6c1d80eb" sha1="e5952fa3c097e44188958040bbc1470b6c79bb17" offset="0" />
2181         </dataarea>
2182      </part>
2183   </software>
2184
2185   <software name="ediass">
2186      <description>EdiAss</description>
2187      <year>198?</year>
2188      <publisher>&lt;unknown&gt;</publisher>
2189
2190      <part name="flop1" interface="floppy_5_25">
2191         <dataarea name="flop" size="368640">
2192            <rom name="ediass.dsk" size="368640" crc="7803831d" sha1="cdc17aa7936ad1e375ff699d8c646f5cf335e01a" offset="0" />
2193         </dataarea>
2194      </part>
2195   </software>
2196
2197   <software name="effekt1">
2198      <description>Effekt 1 - Hangeffekt</description>
2199      <year>198?</year>
2200      <publisher>Szeki</publisher>
2201
2202      <part name="flop1" interface="floppy_5_25">
2203         <dataarea name="flop" size="368640">
2204            <rom name="effekt.dsk" size="368640" crc="5c8d12ce" sha1="8e60fea9d0029597ad3dd25cf9a047eaa2acb970" offset="0" />
2205         </dataarea>
2206      </part>
2207   </software>
2208
2209   <software name="effekt2">
2210      <description>Effekt 2 - Raster Effektek</description>
2211      <year>198?</year>
2212      <publisher>Szeki</publisher>
2213
2214      <part name="flop1" interface="floppy_5_25">
2215         <dataarea name="flop" size="368640">
2216            <rom name="effekt2.dsk" size="368640" crc="d85fc7c7" sha1="5d9d132d72c11275881e832081e77250a7042953" offset="0" />
2217         </dataarea>
2218      </part>
2219   </software>
2220
2221   <software name="egybeir1">
2222      <description>Egybeirjam? Különírjam? 1</description>
2223      <year>1988</year>
2224      <publisher>Novotrade</publisher>
2225
2226      <part name="flop1" interface="floppy_5_25">
2227         <dataarea name="flop" size="368640">
2228            <rom name="egybeirjam_kulonirjam_i.dsk" size="368640" crc="fdaf97b9" sha1="2926b62916a214946a5d052405bcb56c9a6cb739" offset="0" />
2229         </dataarea>
2230      </part>
2231   </software>
2232
2233   <software name="egybeir2">
2234      <description>Egybeirjam? Különírjam? 2</description>
2235      <year>1988</year>
2236      <publisher>Novotrade</publisher>
2237
2238      <part name="flop1" interface="floppy_5_25">
2239         <dataarea name="flop" size="368640">
2240            <rom name="egybeirjam_kulonirjam_ii.dsk" size="368640" crc="f7d41a0e" sha1="0db2d8285f765874a5736a6bf4d47123ce8fd606" offset="0" />
2241         </dataarea>
2242      </part>
2243   </software>
2244
2245   <software name="ejtoerny">
2246      <description>Ejtőernyő</description>
2247      <year>198?</year>
2248      <publisher>Software in LUX</publisher>
2249
2250      <part name="flop1" interface="floppy_5_25">
2251         <dataarea name="flop" size="368640">
2252            <rom name="ejtoernyo.dsk" size="368640" crc="c09dd1ad" sha1="e96e3df96f822166c8998df99cc011104f774dd5" offset="0" />
2253         </dataarea>
2254      </part>
2255   </software>
2256
2257   <software name="electman">
2258      <description>Electric Man</description>
2259      <year>1987</year>
2260      <publisher>Béla Szalontai</publisher>
2261
2262      <part name="flop1" interface="floppy_5_25">
2263         <dataarea name="flop" size="368640">
2264            <rom name="electricman.dsk" size="368640" crc="b7c12ff1" sha1="868decd65c4485fd33ddb2499f97818cd9323cd2" offset="0" />
2265         </dataarea>
2266      </part>
2267   </software>
2268
2269   <software name="eleccube">
2270      <description>Electronics Cube</description>
2271      <year>1988</year>
2272      <publisher>VGy</publisher>
2273
2274      <part name="flop1" interface="floppy_5_25">
2275         <dataarea name="flop" size="368640">
2276            <rom name="electronicscube.dsk" size="368640" crc="4b01fb2f" sha1="91dbae923da5cc825e57f92a104e6a0087fa9673" offset="0" />
2277         </dataarea>
2278      </part>
2279   </software>
2280
2281   <software name="eletjate">
2282      <description>Életjáték</description>
2283      <year>198?</year>
2284      <publisher>Tekacs Bela</publisher>
2285
2286      <part name="flop1" interface="floppy_5_25">
2287         <dataarea name="flop" size="368640">
2288            <rom name="eletjatek.dsk" size="368640" crc="633cead9" sha1="870c2efef910df058e06038b72d4af5c3aacc002" offset="0" />
2289         </dataarea>
2290      </part>
2291   </software>
2292
2293   <software name="eletkoro">
2294      <description>Életkorod</description>
2295      <year>198?</year>
2296      <publisher>&lt;unknown&gt;</publisher>
2297
2298      <part name="flop1" interface="floppy_5_25">
2299         <dataarea name="flop" size="368640">
2300            <rom name="eletkoro.dsk" size="368640" crc="155620dc" sha1="76b7e9f813d3d9adab4606644c38c2d3b2e76eca" offset="0" />
2301         </dataarea>
2302      </part>
2303   </software>
2304
2305   <software name="elite">
2306      <description>Elite</description>
2307      <year>198?</year>
2308      <publisher>&lt;unknown&gt;</publisher>
2309
2310      <part name="flop1" interface="floppy_5_25">
2311         <dataarea name="flop" size="368640">
2312            <rom name="elite.dsk" size="368640" crc="3545e4fc" sha1="8770d8bef9abb2f962e12b8aa2df6b8ea95d81dc" offset="0" />
2313         </dataarea>
2314      </part>
2315   </software>
2316
2317   <software name="elitea" cloneof="elite">
2318      <description>Elite (Alt)</description>
2319      <year>198?</year>
2320      <publisher>&lt;unknown&gt;</publisher>
2321
2322      <part name="flop1" interface="floppy_5_25">
2323         <dataarea name="flop" size="368640">
2324            <rom name="elitev2.dsk" size="368640" crc="a8f40861" sha1="28b56562d8c06b656c5b77b1acf48f75ddd0b66b" offset="0" />
2325         </dataarea>
2326      </part>
2327   </software>
2328
2329   <software name="ellopo">
2330      <description>Ellopó</description>
2331      <year>198?</year>
2332      <publisher>&lt;unknown&gt;</publisher>
2333
2334      <part name="flop1" interface="floppy_5_25">
2335         <dataarea name="flop" size="368640">
2336            <rom name="ellopo.dsk" size="368640" crc="8bead775" sha1="56e988da9a0fc760fe9f23ca8b46b43fa49676fe" offset="0" />
2337         </dataarea>
2338      </part>
2339   </software>
2340
2341   <software name="english1">
2342      <description>English Test no.1</description>
2343      <year>1986</year>
2344      <publisher>VGy</publisher>
2345
2346      <part name="flop1" interface="floppy_5_25">
2347         <dataarea name="flop" size="368640">
2348            <rom name="english1.dsk" size="368640" crc="e8cfab13" sha1="d05003c445dbe77030a16e9a3f690afd3b47a52d" offset="0" />
2349         </dataarea>
2350      </part>
2351   </software>
2352
2353   <software name="english2">
2354      <description>English Test no.2</description>
2355      <year>1986</year>
2356      <publisher>VGy</publisher>
2357
2358      <part name="flop1" interface="floppy_5_25">
2359         <dataarea name="flop" size="368640">
2360            <rom name="english2.dsk" size="368640" crc="64c2cb71" sha1="be560d97f8d07ecb32645e16788d460b11af7a07" offset="0" />
2361         </dataarea>
2362      </part>
2363   </software>
2364
2365   <software name="english3">
2366      <description>English Test no.3</description>
2367      <year>1986</year>
2368      <publisher>VGy</publisher>
2369
2370      <part name="flop1" interface="floppy_5_25">
2371         <dataarea name="flop" size="368640">
2372            <rom name="english3.dsk" size="368640" crc="69df0d43" sha1="35f5a38caaf9dca88c356839f9d7b16c03f2a982" offset="0" />
2373         </dataarea>
2374      </part>
2375   </software>
2376
2377   <software name="english4">
2378      <description>English Test no.4</description>
2379      <year>1986</year>
2380      <publisher>VGy</publisher>
2381
2382      <part name="flop1" interface="floppy_5_25">
2383         <dataarea name="flop" size="368640">
2384            <rom name="english4.dsk" size="368640" crc="72aaffb4" sha1="a5642e9f30272ad669b8f1ef8c005b81ae0c726a" offset="0" />
2385         </dataarea>
2386      </part>
2387   </software>
2388
2389   <software name="english5">
2390      <description>English Test no.5</description>
2391      <year>1986</year>
2392      <publisher>VGy</publisher>
2393
2394      <part name="flop1" interface="floppy_5_25">
2395         <dataarea name="flop" size="368640">
2396            <rom name="english5.dsk" size="368640" crc="25870265" sha1="8d1a5f7305ad8d78d524db21d5aa56152dff513c" offset="0" />
2397         </dataarea>
2398      </part>
2399   </software>
2400
2401   <software name="erod">
2402      <description>Erőd</description>
2403      <year>198?</year>
2404      <publisher>&lt;unknown&gt;</publisher>
2405
2406      <part name="flop1" interface="floppy_5_25">
2407         <dataarea name="flop" size="368640">
2408            <rom name="erod.dsk" size="368640" crc="4cbe273c" sha1="5d7d2319a193c28ec453fdae268b862b4c12b0c1" offset="0" />
2409         </dataarea>
2410      </part>
2411   </software>
2412
2413   <software name="etforth">
2414      <description>ET-Forth 1.1</description>
2415      <year>1987</year>
2416      <publisher>Geza Kos</publisher>
2417
2418      <part name="flop1" interface="floppy_5_25">
2419         <dataarea name="flop" size="368640">
2420            <rom name="et-forth.dsk" size="368640" crc="9826d74b" sha1="900d4920bf651c55c06258f62ea195358f8a4426" offset="0" />
2421         </dataarea>
2422      </part>
2423   </software>
2424
2425   <software name="europa">
2426      <description>Keresd a Térképen - Európa</description>
2427      <year>198?</year>
2428      <publisher>&lt;unknown&gt;</publisher>
2429
2430      <part name="flop1" interface="floppy_5_25">
2431         <dataarea name="flop" size="368640">
2432            <rom name="europa.dsk" size="368640" crc="3c7f0d4d" sha1="e2f8a4e619a6248f21ddb948c36ed8c9d7861b80" offset="0" />
2433         </dataarea>
2434      </part>
2435   </software>
2436
2437   <software name="europaa" cloneof="europa">
2438      <description>Keresd a Térképen - Európa (Alt)</description>
2439      <year>198?</year>
2440      <publisher>&lt;unknown&gt;</publisher>
2441
2442      <part name="flop1" interface="floppy_5_25">
2443         <dataarea name="flop" size="368640">
2444            <rom name="europav2.dsk" size="368640" crc="5fe0bd7b" sha1="2eec5d88bf63e8e9b3459c01cc0e0938aab956f6" offset="0" />
2445         </dataarea>
2446      </part>
2447   </software>
2448
2449   <software name="expedici">
2450      <description>Expedíció</description>
2451      <year>1989</year>
2452      <publisher>Berysoft</publisher>
2453
2454      <part name="flop1" interface="floppy_5_25">
2455         <dataarea name="flop" size="368640">
2456            <rom name="expedici.dsk" size="368640" crc="3dddaef3" sha1="e97d6863680215895449aee26bdf74920664accf" offset="0" />
2457         </dataarea>
2458      </part>
2459   </software>
2460
2461   <software name="expedicia" cloneof="expedici">
2462      <description>Expedíció (Alt)</description>
2463      <year>1989</year>
2464      <publisher>Berysoft</publisher>
2465
2466      <part name="flop1" interface="floppy_5_25">
2467         <dataarea name="flop" size="368640">
2468            <rom name="expediciov2.dsk" size="368640" crc="d5a82a6f" sha1="d76131ee379a0a0e83a1efe776d0da6626f38dee" offset="0" />
2469         </dataarea>
2470      </part>
2471   </software>
2472
2473   <software name="faltoro">
2474      <description>TV-Computer Faltörő Játék</description>
2475      <year>198?</year>
2476      <publisher>&lt;unknown&gt;</publisher>
2477
2478      <part name="flop1" interface="floppy_5_25">
2479         <dataarea name="flop" size="368640">
2480            <rom name="faltoro.dsk" size="368640" crc="69adadae" sha1="8775f07548f29265b98213abd97211f8a815c83a" offset="0" />
2481         </dataarea>
2482      </part>
2483   </software>
2484
2485   <software name="faltjate">
2486      <description>Faltörő játék</description>
2487      <year>198?</year>
2488      <publisher>&lt;unknown&gt;</publisher>
2489
2490      <part name="flop1" interface="floppy_5_25">
2491         <dataarea name="flop" size="368640">
2492            <rom name="faltorojatek.dsk" size="368640" crc="b879d758" sha1="9686b6af60d137f36a38b5debf91fdde00b7c264" offset="0" />
2493         </dataarea>
2494      </part>
2495   </software>
2496
2497   <software name="family1">
2498      <description>Family 1</description>
2499      <year>198?</year>
2500      <publisher>&lt;unknown&gt;</publisher>
2501
2502      <part name="flop1" interface="floppy_5_25">
2503         <dataarea name="flop" size="368640">
2504            <rom name="family1.dsk" size="368640" crc="b3a6e891" sha1="e11aff8cf1993ced8c65649f48909e03c8dd1471" offset="0" />
2505         </dataarea>
2506      </part>
2507   </software>
2508
2509   <software name="family2">
2510      <description>Family 2</description>
2511      <year>198?</year>
2512      <publisher>&lt;unknown&gt;</publisher>
2513
2514      <part name="flop1" interface="floppy_5_25">
2515         <dataarea name="flop" size="368640">
2516            <rom name="family2.dsk" size="368640" crc="06de22c8" sha1="877e99f888dc711a64286eb9e1371079422438e3" offset="0" />
2517         </dataarea>
2518      </part>
2519   </software>
2520
2521   <software name="family2a" cloneof="family2">
2522      <description>Family 2 (Alt)</description>
2523      <year>198?</year>
2524      <publisher>&lt;unknown&gt;</publisher>
2525
2526      <part name="flop1" interface="floppy_5_25">
2527         <dataarea name="flop" size="368640">
2528            <rom name="family.dsk" size="368640" crc="2be9ff2d" sha1="c4b53ac2477fbaac1bdaefca88e7cc20dd949c0f" offset="0" />
2529         </dataarea>
2530      </part>
2531   </software>
2532
2533   <software name="family2b" cloneof="family2">
2534      <description>Family 2 (Alt 2)</description>
2535      <year>198?</year>
2536      <publisher>&lt;unknown&gt;</publisher>
2537
2538      <part name="flop1" interface="floppy_5_25">
2539         <dataarea name="flop" size="368640">
2540            <rom name="family3.dsk" size="368640" crc="b0ebd77a" sha1="b776717b8ef8da74241ec05ef7feaf04edcd32f4" offset="0" />
2541         </dataarea>
2542      </part>
2543   </software>
2544
2545   <software name="family4">
2546      <description>Family 4 - Lesson 1</description>
2547      <year>198?</year>
2548      <publisher>&lt;unknown&gt;</publisher>
2549
2550      <part name="flop1" interface="floppy_5_25">
2551         <dataarea name="flop" size="368640">
2552            <rom name="family4.dsk" size="368640" crc="2d227803" sha1="d4ca0cf6f7812d881c7533cd1460b5d76d661b52" offset="0" />
2553         </dataarea>
2554      </part>
2555   </software>
2556
2557   <software name="family5">
2558      <description>Family 5 - Test</description>
2559      <year>198?</year>
2560      <publisher>&lt;unknown&gt;</publisher>
2561
2562      <part name="flop1" interface="floppy_5_25">
2563         <dataarea name="flop" size="368640">
2564            <rom name="family5.dsk" size="368640" crc="65fa9bc1" sha1="2462c50c3b2ff896fdcb0f99e588e83ddcbe49d4" offset="0" />
2565         </dataarea>
2566      </part>
2567   </software>
2568
2569   <software name="farao">
2570      <description>Fáraó</description>
2571      <year>1988</year>
2572      <publisher>Gigasoft</publisher>
2573
2574      <part name="flop1" interface="floppy_5_25">
2575         <dataarea name="flop" size="368640">
2576            <rom name="farao.dsk" size="368640" crc="75e1f280" sha1="c34e4b8c87400502356ffaf559ad84ccb13ac2f4" offset="0" />
2577         </dataarea>
2578      </part>
2579   </software>
2580
2581   <software name="fcopy10">
2582      <description>TVC File Copy 1.0</description>
2583      <year>1986</year>
2584      <publisher>Gyorgy Hudoba - Tibor Cseh</publisher>
2585
2586      <part name="flop1" interface="floppy_5_25">
2587         <dataarea name="flop" size="368640">
2588            <rom name="fcopy10.dsk" size="368640" crc="8a798a56" sha1="abb759f90bc23d79f635cd55abc675cf2cf042da" offset="0" />
2589         </dataarea>
2590      </part>
2591   </software>
2592
2593   <software name="fcopyd2t">
2594      <description>File Másolás - Floppy to Magnó</description>
2595      <year>198?</year>
2596      <publisher>&lt;unknown&gt;</publisher>
2597
2598      <part name="flop1" interface="floppy_5_25">
2599         <dataarea name="flop" size="368640">
2600            <rom name="fcopyd2t.dsk" size="368640" crc="2f4d9e30" sha1="7c7f465d118931b2c426644db381dd0ea37d8f1c" offset="0" />
2601         </dataarea>
2602      </part>
2603   </software>
2604
2605   <software name="tapecopy">
2606      <description>File Másolás - Magnó to Floppy</description>
2607      <year>198?</year>
2608      <publisher>&lt;unknown&gt;</publisher>
2609
2610      <part name="flop1" interface="floppy_5_25">
2611         <dataarea name="flop" size="368640">
2612            <rom name="tapecopy.dsk" size="368640" crc="a0b7ffb2" sha1="3e300c66285fe7374227599c947bcf2e0c155619" offset="0" />
2613         </dataarea>
2614      </part>
2615   </software>
2616
2617   <software name="tapedos">
2618      <description>File Másoló - VTDOS to Floppy</description>
2619      <year>1990</year>
2620      <publisher>&lt;unknown&gt;</publisher>
2621
2622      <part name="flop1" interface="floppy_5_25">
2623         <dataarea name="flop" size="368640">
2624            <rom name="tapedos.dsk" size="368640" crc="20d8c027" sha1="b4e20f21f7894a9da438794af19dde406bbd6227" offset="0" />
2625         </dataarea>
2626      </part>
2627   </software>
2628
2629   <software name="fcopyt2t">
2630      <description>File Másoló - Szalag to Szalag</description>
2631      <year>1990</year>
2632      <publisher>László Tóth</publisher>
2633
2634      <part name="flop1" interface="floppy_5_25">
2635         <dataarea name="flop" size="368640">
2636            <rom name="fcopyt2t.dsk" size="368640" crc="871e4cd2" sha1="432ac36ac056862fe795d569b0166f2debaa0a3e" offset="0" />
2637         </dataarea>
2638      </part>
2639   </software>
2640
2641   <software name="fejtoro">
2642      <description>15-ös fejtörő</description>
2643      <year>198?</year>
2644      <publisher>Nyitrai</publisher>
2645
2646      <part name="flop1" interface="floppy_5_25">
2647         <dataarea name="flop" size="368640">
2648            <rom name="fejtoro.dsk" size="368640" crc="3e7cabba" sha1="c852abad0699c9a360b29280e5cf12cbb12f5dbb" offset="0" />
2649         </dataarea>
2650      </part>
2651   </software>
2652
2653   <software name="feketeso">
2654      <description>Fekete Sólyom</description>
2655      <year>198?</year>
2656      <publisher>Software in LUX</publisher>
2657
2658      <part name="flop1" interface="floppy_5_25">
2659         <dataarea name="flop" size="368640">
2660            <rom name="feketesolyom.dsk" size="368640" crc="a7877882" sha1="44f0adf2d07e460d479e71815c34b07bbc309476" offset="0" />
2661         </dataarea>
2662      </part>
2663   </software>
2664
2665   <software name="felderit">
2666      <description>Felderítő</description>
2667      <year>198?</year>
2668      <publisher>Software in LUX</publisher>
2669
2670      <part name="flop1" interface="floppy_5_25">
2671         <dataarea name="flop" size="368640">
2672            <rom name="felderito.dsk" size="368640" crc="39c40157" sha1="c3659996a8d15cd49530f401987181704ebd7429" offset="0" />
2673         </dataarea>
2674      </part>
2675   </software>
2676
2677   <software name="felirato">
2678      <description>Feliratozó</description>
2679      <year>1987</year>
2680      <publisher>STV</publisher>
2681
2682      <part name="flop1" interface="floppy_5_25">
2683         <dataarea name="flop" size="368640">
2684            <rom name="feliratozo.dsk" size="368640" crc="ce756b86" sha1="34f46c7afff954aefbaf76bc996932dbec4b383b" offset="0" />
2685         </dataarea>
2686      </part>
2687   </software>
2688
2689   <software name="felkaru">
2690      <description>Félkarú rabló</description>
2691      <year>1986</year>
2692      <publisher>Gabor Balogh</publisher>
2693
2694      <part name="flop1" interface="floppy_5_25">
2695         <dataarea name="flop" size="368640">
2696            <rom name="felkarurablo.dsk" size="368640" crc="2a4a6539" sha1="cb21892344e743ced485a08bde315426744b041b" offset="0" />
2697         </dataarea>
2698      </part>
2699   </software>
2700
2701   <software name="festojat">
2702      <description>Festő játék</description>
2703      <year>198?</year>
2704      <publisher>Béla Takács</publisher>
2705
2706      <part name="flop1" interface="floppy_5_25">
2707         <dataarea name="flop" size="368640">
2708            <rom name="festojatek.dsk" size="368640" crc="d8e5160f" sha1="9f5accbb2f8eace4c6aa6e691e72ee2db9d656f5" offset="0" />
2709         </dataarea>
2710      </part>
2711   </software>
2712
2713   <software name="fgabr">
2714      <description>Függvényábrázolás</description>
2715      <year>198?</year>
2716      <publisher>&lt;unknown&gt;</publisher>
2717
2718      <part name="flop1" interface="floppy_5_25">
2719         <dataarea name="flop" size="368640">
2720            <rom name="fgabr.dsk" size="368640" crc="01540ca0" sha1="cf3cf1c9828d5e7f556eeb8225cbae5259de8c5f" offset="0" />
2721         </dataarea>
2722      </part>
2723   </software>
2724
2725   <software name="filem">
2726      <description>Fájlmásoló</description>
2727      <year>198?</year>
2728      <publisher>Csongrád - SCS</publisher>
2729
2730      <part name="flop1" interface="floppy_5_25">
2731         <dataarea name="flop" size="368640">
2732            <rom name="filem.dsk" size="368640" crc="7f916870" sha1="c9d249e0e6485aa29cdd71a4dca960150b7c998b" offset="0" />
2733         </dataarea>
2734      </part>
2735   </software>
2736
2737   <software name="firebow">
2738      <description>Firebow - The Planet of Death</description>
2739      <year>1991</year>
2740      <publisher>Zsolt Szigeti</publisher>
2741
2742      <part name="flop1" interface="floppy_5_25">
2743         <dataarea name="flop" size="368640">
2744            <rom name="firebow.dsk" size="368640" crc="1c0b82c8" sha1="5b275ffbe9aadc28176443abc6a248b74969ff73" offset="0" />
2745         </dataarea>
2746      </part>
2747   </software>
2748
2749   <software name="firebowt" cloneof="firebow">
2750      <description>Firebow - The Planet of Death (Trainer)</description>
2751      <year>1991</year>
2752      <publisher>Zsolt Szigeti</publisher>
2753
2754      <part name="flop1" interface="floppy_5_25">
2755         <dataarea name="flop" size="368640">
2756            <rom name="firebow(trainer).dsk" size="368640" crc="99f466d2" sha1="f8bb890cf9f71afa1a7ae8fc31995b01db1b3236" offset="0" />
2757         </dataarea>
2758      </part>
2759   </software>
2760
2761   <software name="firebowl">
2762      <description>Firebow Leírás</description>
2763      <year>1992</year>
2764      <publisher>Krisztan Dunder</publisher>
2765
2766      <part name="flop1" interface="floppy_5_25">
2767         <dataarea name="flop" size="368640">
2768            <rom name="firebowleiras.dsk" size="368640" crc="83a3d2af" sha1="2c329757f1b67f7f83d6e49eb760156bfc079a88" offset="0" />
2769         </dataarea>
2770      </part>
2771   </software>
2772
2773   <software name="fiv03">
2774      <description>Fizika - Soros RC kör - FIV03</description>
2775      <year>198?</year>
2776      <publisher>&lt;unknown&gt;</publisher>
2777
2778      <part name="flop1" interface="floppy_5_25">
2779         <dataarea name="flop" size="368640">
2780            <rom name="fiv03.dsk" size="368640" crc="9c16bae7" sha1="e1ee22d78a7ea303515d22d6082ab862fb24fd58" offset="0" />
2781         </dataarea>
2782      </part>
2783   </software>
2784
2785   <software name="fiv92">
2786      <description>Fizika - Mágneses mező - FIV92</description>
2787      <year>198?</year>
2788      <publisher>&lt;unknown&gt;</publisher>
2789
2790      <part name="flop1" interface="floppy_5_25">
2791         <dataarea name="flop" size="368640">
2792            <rom name="fiv92.dsk" size="368640" crc="660647fe" sha1="f06770d4c7a44bab5485cf5490d087562861c777" offset="0" />
2793         </dataarea>
2794      </part>
2795   </software>
2796
2797   <software name="fizikaio">
2798      <description>Fizikai összefüggések</description>
2799      <year>1987</year>
2800      <publisher>Novotrade - Octasoft</publisher>
2801
2802      <part name="flop1" interface="floppy_5_25">
2803         <dataarea name="flop" size="368640">
2804            <rom name="fizikaio.dsk" size="368640" crc="a9080926" sha1="2bd12c7d8f5239e69db19fdbdf1a991a0e1cea40" offset="0" />
2805         </dataarea>
2806      </part>
2807   </software>
2808
2809   <software name="flight">
2810      <description>Flight</description>
2811      <year>1987</year>
2812      <publisher>BirdSoft</publisher>
2813
2814      <part name="flop1" interface="floppy_5_25">
2815         <dataarea name="flop" size="368640">
2816            <rom name="flight.dsk" size="368640" crc="3a5b39de" sha1="37059f9baf324de69ad4c8be270f63a0bac9b37d" offset="0" />
2817         </dataarea>
2818      </part>
2819   </software>
2820
2821   <software name="flipper">
2822      <description>Flipper</description>
2823      <year>1987</year>
2824      <publisher>Andromeda</publisher>
2825
2826      <part name="flop1" interface="floppy_5_25">
2827         <dataarea name="flop" size="368640">
2828            <rom name="flipper.dsk" size="368640" crc="cac0266d" sha1="61aef2fc0bf5dcbbb9efaff2bd721ff9808c28c4" offset="0" />
2829         </dataarea>
2830      </part>
2831   </software>
2832
2833   <software name="flippera" cloneof="flipper">
2834      <description>Flipper (Alt)</description>
2835      <year>1987</year>
2836      <publisher>Andromeda</publisher>
2837
2838      <part name="flop1" interface="floppy_5_25">
2839         <dataarea name="flop" size="368640">
2840            <rom name="flipperv2.dsk" size="368640" crc="bcc1076e" sha1="4a1780c57c6ee9fad3dca886fff506a00ece69bb" offset="0" />
2841         </dataarea>
2842      </part>
2843   </software>
2844
2845   <software name="flipperb" cloneof="flipper">
2846      <description>Flipper (Alt 2)</description>
2847      <year>1987</year>
2848      <publisher>Andromeda</publisher>
2849
2850      <part name="flop1" interface="floppy_5_25">
2851         <dataarea name="flop" size="368640">
2852            <rom name="flipperv3.dsk" size="368640" crc="62ad6b93" sha1="458ff82ee48e369e3e5eb9f7a8006791b29bd479" offset="0" />
2853         </dataarea>
2854      </part>
2855   </software>
2856
2857   <software name="flopp">
2858      <description>Flopp</description>
2859      <year>198?</year>
2860      <publisher>C.S. Software</publisher>
2861
2862      <part name="flop1" interface="floppy_5_25">
2863         <dataarea name="flop" size="368640">
2864            <rom name="flopp.dsk" size="368640" crc="c786f028" sha1="9dce1035fbeb039039f5353c3c8bbdbe8ab80c96" offset="0" />
2865         </dataarea>
2866      </part>
2867   </software>
2868
2869   <software name="flsgraph">
2870      <description>FLS Graphics Editor</description>
2871      <year>1987</year>
2872      <publisher>Flighter Software</publisher>
2873
2874      <part name="flop1" interface="floppy_5_25">
2875         <dataarea name="flop" size="368640">
2876            <rom name="flsgraph.dsk" size="368640" crc="d9f8635c" sha1="68937de97a2a67ee0a4b0c73f29630e4c3aa2520" offset="0" />
2877         </dataarea>
2878      </part>
2879   </software>
2880
2881   <software name="foci">
2882      <description>Foci</description>
2883      <year>198?</year>
2884      <publisher>&lt;unknown&gt;</publisher>
2885
2886      <part name="flop1" interface="floppy_5_25">
2887         <dataarea name="flop" size="368640">
2888            <rom name="foci.dsk" size="368640" crc="8d2d4fc9" sha1="c07e8ac69109bec00662608cf4ef0d9454a681b6" offset="0" />
2889         </dataarea>
2890      </part>
2891   </software>
2892
2893   <software name="fogmosos">
2894      <description>Fogmosós Játék</description>
2895      <year>198?</year>
2896      <publisher>&lt;unknown&gt;</publisher>
2897
2898      <part name="flop1" interface="floppy_5_25">
2899         <dataarea name="flop" size="368640">
2900            <rom name="fogmosos.dsk" size="368640" crc="5000daa4" sha1="0d0f8507583c2e1eafafcc39601b399483b3070e" offset="0" />
2901         </dataarea>
2902      </part>
2903   </software>
2904
2905   <software name="foldrajz">
2906      <description>Környezetismeret Oktató és Témazáró</description>
2907      <year>198?</year>
2908      <publisher>&lt;unknown&gt;</publisher>
2909
2910      <part name="flop1" interface="floppy_5_25">
2911         <dataarea name="flop" size="368640">
2912            <rom name="foldrajz.dsk" size="368640" crc="c0360132" sha1="3b103b0cb6ee86c10b9a9fdd01945a994c3e1897" offset="0" />
2913         </dataarea>
2914      </part>
2915   </software>
2916
2917   <software name="football">
2918      <description>Football</description>
2919      <year>198?</year>
2920      <publisher>&lt;unknown&gt;</publisher>
2921
2922      <part name="flop1" interface="floppy_5_25">
2923         <dataarea name="flop" size="368640">
2924            <rom name="football.dsk" size="368640" crc="d59dc075" sha1="0a90ac9a7ff6d86ea715db0f4b5568743600a045" offset="0" />
2925         </dataarea>
2926      </part>
2927   </software>
2928
2929   <software name="fordits">
2930      <description>Fordíts</description>
2931      <year>198?</year>
2932      <publisher>&lt;unknown&gt;</publisher>
2933
2934      <part name="flop1" interface="floppy_5_25">
2935         <dataarea name="flop" size="368640">
2936            <rom name="fordits.dsk" size="368640" crc="1be27897" sha1="643d63446829d3cc7ca54c66182140491c9fda55" offset="0" />
2937         </dataarea>
2938      </part>
2939   </software>
2940
2941   <software name="format">
2942      <description>Format</description>
2943      <year>198?</year>
2944      <publisher>&lt;unknown&gt;</publisher>
2945
2946      <part name="flop1" interface="floppy_5_25">
2947         <dataarea name="flop" size="368640">
2948            <rom name="format.dsk" size="368640" crc="6c2c4fcd" sha1="f65022a9c1fe4d7c890d0cf25e4884c64b765086" offset="0" />
2949         </dataarea>
2950      </part>
2951   </software>
2952
2953   <software name="forthlei">
2954      <description>Forth Leírás</description>
2955      <year>198?</year>
2956      <publisher>&lt;unknown&gt;</publisher>
2957
2958      <part name="flop1" interface="floppy_5_25">
2959         <dataarea name="flop" size="368640">
2960            <rom name="forthlei.dsk" size="368640" crc="6d7e861d" sha1="39873721c8c661c97be357f22b3ba44c23ace3c3" offset="0" />
2961         </dataarea>
2962      </part>
2963   </software>
2964
2965   <software name="fov02">
2966      <description>Földrajz - Magyarországi városok - FOV02</description>
2967      <year>198?</year>
2968      <publisher>&lt;unknown&gt;</publisher>
2969
2970      <part name="flop1" interface="floppy_5_25">
2971         <dataarea name="flop" size="368640">
2972            <rom name="fov02.dsk" size="368640" crc="c4b5fbd5" sha1="b7eb0a7373a06358f1c26b6f8515ff847cd393e4" offset="0" />
2973         </dataarea>
2974      </part>
2975   </software>
2976
2977   <software name="fov03">
2978      <description>Földrajz - Szovjetúnió városai - FOV03</description>
2979      <year>198?</year>
2980      <publisher>&lt;unknown&gt;</publisher>
2981
2982      <part name="flop1" interface="floppy_5_25">
2983         <dataarea name="flop" size="368640">
2984            <rom name="fov03.dsk" size="368640" crc="18b44bd1" sha1="21c3758ed188957785e2ec7767165b87a9a8c004" offset="0" />
2985         </dataarea>
2986      </part>
2987   </software>
2988
2989   <software name="fov04">
2990      <description>Földrajz - USA városai - FOV04</description>
2991      <year>198?</year>
2992      <publisher>&lt;unknown&gt;</publisher>
2993
2994      <part name="flop1" interface="floppy_5_25">
2995         <dataarea name="flop" size="368640">
2996            <rom name="fov04.dsk" size="368640" crc="e64fab74" sha1="eae2cfd6b2ccb27652a90af2576f14d59d1c3237" offset="0" />
2997         </dataarea>
2998      </part>
2999   </software>
3000
3001   <software name="freddie">
3002      <description>Freddie</description>
3003      <year>198?</year>
3004      <publisher>Black Star Software</publisher>
3005
3006      <part name="flop1" interface="floppy_5_25">
3007         <dataarea name="flop" size="368640">
3008            <rom name="freddie.dsk" size="368640" crc="31f1b1bd" sha1="1c5f0053406d9e76c7ecb3258d1c1798d8b712c0" offset="0" />
3009         </dataarea>
3010      </part>
3011   </software>
3012
3013   <software name="fuel">
3014      <description>Fuel</description>
3015      <year>1988</year>
3016      <publisher>Attila Barabas</publisher>
3017
3018      <part name="flop1" interface="floppy_5_25">
3019         <dataarea name="flop" size="368640">
3020            <rom name="fuel.dsk" size="368640" crc="2a3f8eb9" sha1="9d626605b1e393d92399fe3d777fd7e301beced5" offset="0" />
3021         </dataarea>
3022      </part>
3023   </software>
3024
3025   <software name="fuggvabr">
3026      <description>Függvény ábrázolás</description>
3027      <year>198?</year>
3028      <publisher>&lt;unknown&gt;</publisher>
3029
3030      <part name="flop1" interface="floppy_5_25">
3031         <dataarea name="flop" size="368640">
3032            <rom name="fuggvabr.dsk" size="368640" crc="287bd584" sha1="f22da75020f875bca769567d935a8ed8df883b3b" offset="0" />
3033         </dataarea>
3034      </part>
3035   </software>
3036
3037   <software name="futakep">
3038      <description>Fut A Kép - Keretlebontás</description>
3039      <year>198?</year>
3040      <publisher>&lt;unknown&gt;</publisher>
3041
3042      <part name="flop1" interface="floppy_5_25">
3043         <dataarea name="flop" size="368640">
3044            <rom name="futakep.dsk" size="368640" crc="36bac09e" sha1="ac3f7546b7bef4eedc5fcbf77d75c1880bcc903c" offset="0" />
3045         </dataarea>
3046      </part>
3047   </software>
3048
3049   <software name="futovad">
3050      <description>Futóvad</description>
3051      <year>198?</year>
3052      <publisher>&lt;unknown&gt;</publisher>
3053
3054      <part name="flop1" interface="floppy_5_25">
3055         <dataarea name="flop" size="368640">
3056            <rom name="futovad.dsk" size="368640" crc="0c4000d9" sha1="df6bac6af111f5b887744adf63ae12204a7d6ee3" offset="0" />
3057         </dataarea>
3058      </part>
3059   </software>
3060
3061   <software name="galaxy">
3062      <description>Galaxy</description>
3063      <year>1991</year>
3064      <publisher>Béla Csatlós</publisher>
3065
3066      <part name="flop1" interface="floppy_5_25">
3067         <dataarea name="flop" size="368640">
3068            <rom name="galaxyv1.dsk" size="368640" crc="52798b37" sha1="047a1e628fa007a7dcc8cbe9925da33d72f2f1b5" offset="0" />
3069         </dataarea>
3070      </part>
3071   </software>
3072
3073   <software name="galaxya" cloneof="galaxy">
3074      <description>Galaxy (Alt)</description>
3075      <year>1991</year>
3076      <publisher>Béla Csatlós</publisher>
3077
3078      <part name="flop1" interface="floppy_5_25">
3079         <dataarea name="flop" size="368640">
3080            <rom name="galaxyv2.dsk" size="368640" crc="2dee5fb4" sha1="bad6a1d6447db78e8f8ea86700d137026f095435" offset="0" />
3081         </dataarea>
3082      </part>
3083   </software>
3084
3085   <software name="galaxyb" cloneof="galaxy">
3086      <description>Galaxy (Alt 2)</description>
3087      <year>1991</year>
3088      <publisher>Béla Csatlós</publisher>
3089
3090      <part name="flop1" interface="floppy_5_25">
3091         <dataarea name="flop" size="368640">
3092            <rom name="galaxyv3.dsk" size="368640" crc="1dd5a65f" sha1="ddbe88f6182beaf94159edd7fc797867b6ce122d" offset="0" />
3093         </dataarea>
3094      </part>
3095   </software>
3096
3097   <software name="gallaste">
3098      <description>Gall Asterix</description>
3099      <year>198?</year>
3100      <publisher>&lt;unknown&gt;</publisher>
3101
3102      <part name="flop1" interface="floppy_5_25">
3103         <dataarea name="flop" size="368640">
3104            <rom name="gallasterix.dsk" size="368640" crc="b919330b" sha1="dcea5391e0ba084d57e99768c8b941e9f62c7bf0" offset="0" />
3105         </dataarea>
3106      </part>
3107   </software>
3108
3109   <software name="generato">
3110      <description>Generátor</description>
3111      <year>198?</year>
3112      <publisher>&lt;unknown&gt;</publisher>
3113
3114      <part name="flop1" interface="floppy_5_25">
3115         <dataarea name="flop" size="368640">
3116            <rom name="generato.dsk" size="368640" crc="c96ac673" sha1="b15b764057b7d4f508800773c62f346df22ccb17" offset="0" />
3117         </dataarea>
3118      </part>
3119   </software>
3120
3121   <software name="geo">
3122      <description>Geo</description>
3123      <year>1987</year>
3124      <publisher>Videoton</publisher>
3125
3126      <part name="flop1" interface="floppy_5_25">
3127         <dataarea name="flop" size="368640">
3128            <rom name="geo_v1.dsk" size="368640" crc="14bc4370" sha1="0ace1946b43ecf5a658ae2c3cb4734b841451ec0" offset="0" />
3129         </dataarea>
3130      </part>
3131   </software>
3132
3133   <software name="geoa" cloneof="geo">
3134      <description>Geo (Alt)</description>
3135      <year>1987</year>
3136      <publisher>Videoton</publisher>
3137
3138      <part name="flop1" interface="floppy_5_25">
3139         <dataarea name="flop" size="368640">
3140            <rom name="geo_v2.dsk" size="368640" crc="36cb7159" sha1="8cee0fcd7306e698ef033761529a566ce8047f9a" offset="0" />
3141         </dataarea>
3142      </part>
3143   </software>
3144
3145   <software name="geob" cloneof="geo">
3146      <description>Geo (Alt 2)</description>
3147      <year>1987</year>
3148      <publisher>Videoton</publisher>
3149
3150      <part name="flop1" interface="floppy_5_25">
3151         <dataarea name="flop" size="368640">
3152            <rom name="geo_v3.dsk" size="368640" crc="3a5b9241" sha1="6b525522aafa3009cd06015bfc04b1aa0527ea3e" offset="0" />
3153         </dataarea>
3154      </part>
3155   </software>
3156
3157   <software name="geomtran">
3158      <description>Geometriai Transzformációk</description>
3159      <year>1988</year>
3160      <publisher>Novotrade - Octasoft</publisher>
3161
3162      <part name="flop1" interface="floppy_5_25">
3163         <dataarea name="flop" size="368640">
3164            <rom name="geomtran.dsk" size="368640" crc="9e86935e" sha1="a976ab430f13f940a5abb7eee1ee1279a74a08d1" offset="0" />
3165         </dataarea>
3166      </part>
3167   </software>
3168
3169   <software name="geomtrana" cloneof="geomtran">
3170      <description>Geometriai Transzformációk (Alt)</description>
3171      <year>1988</year>
3172      <publisher>Novotrade - Octasoft</publisher>
3173
3174      <part name="flop1" interface="floppy_5_25">
3175         <dataarea name="flop" size="368640">
3176            <rom name="mertan.dsk" size="368640" crc="bd6cf35c" sha1="47b9c550f04c3ecf7b982b9688f5f7cc33630398" offset="0" />
3177         </dataarea>
3178      </part>
3179   </software>
3180
3181   <software name="gepzene">
3182      <description>Gépzene</description>
3183      <year>198?</year>
3184      <publisher>&lt;unknown&gt;</publisher>
3185
3186      <part name="flop1" interface="floppy_5_25">
3187         <dataarea name="flop" size="368640">
3188            <rom name="gepzene.dsk" size="368640" crc="8fb491ad" sha1="e7242936df7745926ec90d22130048582a9ef719" offset="0" />
3189         </dataarea>
3190      </part>
3191   </software>
3192
3193   <software name="ghostbus">
3194      <description>Ghostbusters</description>
3195      <year>1991</year>
3196      <publisher>Agilar</publisher>
3197
3198      <part name="flop1" interface="floppy_5_25">
3199         <dataarea name="flop" size="368640">
3200            <rom name="ghostbusters.dsk" size="368640" crc="b74e5558" sha1="b10678784cfc9079eeef64bb925cfd95eb17d864" offset="0" />
3201         </dataarea>
3202      </part>
3203   </software>
3204
3205   <software name="gianti">
3206      <description>Giantigascutus</description>
3207      <year>198?</year>
3208      <publisher>Cápasoft</publisher>
3209
3210      <part name="flop1" interface="floppy_5_25">
3211         <dataarea name="flop" size="368640">
3212            <rom name="gianti.dsk" size="368640" crc="9f0248b0" sha1="ccfb73a120cee14d8c531d651f46339c259ac07c" offset="0" />
3213         </dataarea>
3214      </part>
3215   </software>
3216
3217   <software name="giliszta">
3218      <description>Giliszta</description>
3219      <year>198?</year>
3220      <publisher>&lt;unknown&gt;</publisher>
3221
3222      <part name="flop1" interface="floppy_5_25">
3223         <dataarea name="flop" size="368640">
3224            <rom name="giliszta.dsk" size="368640" crc="52d5ce52" sha1="15c7385ff4c26974c371be84fe7fabe6c9fa7b78" offset="0" />
3225         </dataarea>
3226      </part>
3227   </software>
3228
3229   <software name="goblinka">
3230      <description>Goblin Kastélya</description>
3231      <year>198?</year>
3232      <publisher>&lt;unknown&gt;</publisher>
3233
3234      <part name="flop1" interface="floppy_5_25">
3235         <dataarea name="flop" size="368640">
3236            <rom name="goblinkastelya.dsk" size="368640" crc="dba9b3ad" sha1="b76879ab5cdd45d07a8523114f4feb576722d720" offset="0" />
3237         </dataarea>
3238      </part>
3239   </software>
3240
3241   <software name="goldcopy">
3242      <description>Goldcopy</description>
3243      <year>198?</year>
3244      <publisher>&lt;unknown&gt;</publisher>
3245
3246      <part name="flop1" interface="floppy_5_25">
3247         <dataarea name="flop" size="368640">
3248            <rom name="goldcopy.dsk" size="368640" crc="0790b5e8" sha1="3a2a6d1b0df0101b6736c8bacb50982af4bc4410" offset="0" />
3249         </dataarea>
3250      </part>
3251   </software>
3252
3253   <software name="golf">
3254      <description>Golf</description>
3255      <year>198?</year>
3256      <publisher>Berysoft</publisher>
3257
3258      <part name="flop1" interface="floppy_5_25">
3259         <dataarea name="flop" size="368640">
3260            <rom name="golf.dsk" size="368640" crc="38e35609" sha1="cea07690a1ae4288390152c6b635712749cb05d4" offset="0" />
3261         </dataarea>
3262      </part>
3263   </software>
3264
3265   <software name="golyoviz">
3266      <description>Golyó a Vízben</description>
3267      <year>198?</year>
3268      <publisher>&lt;unknown&gt;</publisher>
3269
3270      <part name="flop1" interface="floppy_5_25">
3271         <dataarea name="flop" size="368640">
3272            <rom name="golyoviz.dsk" size="368640" crc="58b924a2" sha1="03725c7554cc616e7e0360cea3e9c01914d84287" offset="0" />
3273         </dataarea>
3274      </part>
3275   </software>
3276
3277   <software name="gombak">
3278      <description>Gombák</description>
3279      <year>1990</year>
3280      <publisher>Agilar</publisher>
3281
3282      <part name="flop1" interface="floppy_5_25">
3283         <dataarea name="flop" size="368640">
3284            <rom name="gombak.dsk" size="368640" crc="d73779d3" sha1="044f2b4a761071bd31effcbd388aa61ffeadb7f7" offset="0" />
3285         </dataarea>
3286      </part>
3287   </software>
3288
3289   <software name="gombocfa">
3290      <description>Gombócfaló</description>
3291      <year>198?</year>
3292      <publisher>&lt;unknown&gt;</publisher>
3293
3294      <part name="flop1" interface="floppy_5_25">
3295         <dataarea name="flop" size="368640">
3296            <rom name="gombocfalo_v1.dsk" size="368640" crc="2dfdc20f" sha1="dcd1af3a86a444c8d3f3567a7211799791d4f620" offset="0" />
3297         </dataarea>
3298      </part>
3299   </software>
3300
3301   <software name="gombocfaa" cloneof="gombocfa">
3302      <description>Gombócfaló (Alt)</description>
3303      <year>198?</year>
3304      <publisher>&lt;unknown&gt;</publisher>
3305
3306      <part name="flop1" interface="floppy_5_25">
3307         <dataarea name="flop" size="368640">
3308            <rom name="gombocfalo_v2.dsk" size="368640" crc="afe63b34" sha1="c7ab4374cd2541582116ea1ee80951555d92f579" offset="0" />
3309         </dataarea>
3310      </part>
3311   </software>
3312
3313   <software name="gombtuko">
3314      <description>Gömbtükör</description>
3315      <year>198?</year>
3316      <publisher>&lt;unknown&gt;</publisher>
3317
3318      <part name="flop1" interface="floppy_5_25">
3319         <dataarea name="flop" size="368640">
3320            <rom name="gombtuko.dsk" size="368640" crc="b2fc3019" sha1="2257586dbd983ba966b6ca1d9b7cb75008a4fd23" offset="0" />
3321         </dataarea>
3322      </part>
3323   </software>
3324
3325   <software name="gravitac">
3326      <description>Gravitáció</description>
3327      <year>198?</year>
3328      <publisher>&lt;unknown&gt;</publisher>
3329
3330      <part name="flop1" interface="floppy_5_25">
3331         <dataarea name="flop" size="368640">
3332            <rom name="gravitac.dsk" size="368640" crc="bc894aa3" sha1="6954bf9279d9101533835365fc3bf7db219f3afe" offset="0" />
3333         </dataarea>
3334      </part>
3335   </software>
3336
3337   <software name="griff">
3338      <description>Griff</description>
3339      <year>198?</year>
3340      <publisher>Software in LUX</publisher>
3341
3342      <part name="flop1" interface="floppy_5_25">
3343         <dataarea name="flop" size="368640">
3344            <rom name="griff.dsk" size="368640" crc="94d4ece6" sha1="72222d128f9712bc90ea0ba76203ea5c3cffe4d4" offset="0" />
3345         </dataarea>
3346      </part>
3347   </software>
3348
3349   <software name="griff3d">
3350      <description>Griff - 3 Dimenziós Griff Grafika</description>
3351      <year>198?</year>
3352      <publisher>&lt;unknown&gt;</publisher>
3353
3354      <part name="flop1" interface="floppy_5_25">
3355         <dataarea name="flop" size="368640">
3356            <rom name="graf.dsk" size="368640" crc="f9252fad" sha1="015bf77d5815f27a86383d385fc4fd2d344e9581" offset="0" />
3357         </dataarea>
3358      </part>
3359   </software>
3360
3361   <software name="grdemo">
3362      <description>Griff-Grafika Bemutató Program</description>
3363      <year>198?</year>
3364      <publisher>&lt;unknown&gt;</publisher>
3365
3366      <part name="flop1" interface="floppy_5_25">
3367         <dataarea name="flop" size="368640">
3368            <rom name="grdemo.dsk" size="368640" crc="7061705c" sha1="682a4e5ba62af822d5160e8955934e051dfa193f" offset="0" />
3369         </dataarea>
3370      </part>
3371   </software>
3372
3373   <software name="gt2">
3374      <description>Ghost Tower 2</description>
3375      <year>198?</year>
3376      <publisher>&lt;unknown&gt;</publisher>
3377
3378      <part name="flop1" interface="floppy_5_25">
3379         <dataarea name="flop" size="368640">
3380            <rom name="gt2.dsk" size="368640" crc="3b0a70df" sha1="6839ddc5a101eea7e9e8470ed678751676caf780" offset="0" />
3381         </dataarea>
3382      </part>
3383   </software>
3384
3385   <software name="gulpman">
3386      <description>Gulpman (Trainer)</description>
3387      <year>1990</year>
3388      <publisher>Béla Csatlós</publisher>
3389
3390      <part name="flop1" interface="floppy_5_25">
3391         <dataarea name="flop" size="368640">
3392            <rom name="gulpmant.dsk" size="368640" crc="ad6ed72e" sha1="49506c6a68e3c2fb8e29795518d0c2b231b05099" offset="0" />
3393         </dataarea>
3394      </part>
3395   </software>
3396
3397   <software name="gunfight">
3398      <description>Gunfight</description>
3399      <year>198?</year>
3400      <publisher>&lt;unknown&gt;</publisher>
3401
3402      <part name="flop1" interface="floppy_5_25">
3403         <dataarea name="flop" size="368640">
3404            <rom name="gunfight.dsk" size="368640" crc="02587b89" sha1="01696d97379e05b6c6681d1efd454e7d37feadca" offset="0" />
3405         </dataarea>
3406      </part>
3407   </software>
3408
3409   <software name="gusztleg">
3410      <description>Gusztáv legyeket írt</description>
3411      <year>198?</year>
3412      <publisher>&lt;unknown&gt;</publisher>
3413
3414      <part name="flop1" interface="floppy_5_25">
3415         <dataarea name="flop" size="368640">
3416            <rom name="gusztavlegyeketirt.dsk" size="368640" crc="d5b05567" sha1="279bbb9d2ffe3b5c02201f925bf3046c0a8ac65c" offset="0" />
3417         </dataarea>
3418      </part>
3419   </software>
3420
3421   <software name="gusztspo">
3422      <description>Gusztáv Sportol</description>
3423      <year>198?</year>
3424      <publisher>László Nagy</publisher>
3425
3426      <part name="flop1" interface="floppy_5_25">
3427         <dataarea name="flop" size="368640">
3428            <rom name="gusztavsportol.dsk" size="368640" crc="2d48ac6d" sha1="fca224ee59288a49966684671b40841dfd425e08" offset="0" />
3429         </dataarea>
3430      </part>
3431   </software>
3432
3433   <software name="gyertya">
3434      <description>Gyertya</description>
3435      <year>198?</year>
3436      <publisher>&lt;unknown&gt;</publisher>
3437
3438      <part name="flop1" interface="floppy_5_25">
3439         <dataarea name="flop" size="368640">
3440            <rom name="gyertya.dsk" size="368640" crc="53c8018e" sha1="375055eccd09ea61576b6be61f32edcb2f0140e6" offset="0" />
3441         </dataarea>
3442      </part>
3443   </software>
3444
3445   <software name="gyufajat">
3446      <description>Gyufajáték</description>
3447      <year>198?</year>
3448      <publisher>Zsolt</publisher>
3449
3450      <part name="flop1" interface="floppy_5_25">
3451         <dataarea name="flop" size="368640">
3452            <rom name="gyufajatek.dsk" size="368640" crc="64619a01" sha1="a9f5b961cadcdb92fe88af6530d8d54282605005" offset="0" />
3453         </dataarea>
3454      </part>
3455   </software>
3456
3457   <software name="hajo">
3458      <description>Hajó</description>
3459      <year>198?</year>
3460      <publisher>&lt;unknown&gt;</publisher>
3461
3462      <part name="flop1" interface="floppy_5_25">
3463         <dataarea name="flop" size="368640">
3464            <rom name="hajo.dsk" size="368640" crc="17685e78" sha1="79c138213247f2edc082b3a479068fb8e5dd760f" offset="0" />
3465         </dataarea>
3466      </part>
3467   </software>
3468
3469   <software name="hajo1">
3470      <description>Hajó (Different)</description>
3471      <year>198?</year>
3472      <publisher>&lt;unknown&gt;</publisher>
3473
3474      <part name="flop1" interface="floppy_5_25">
3475         <dataarea name="flop" size="368640">
3476            <rom name="hajor.dsk" size="368640" crc="748421f6" sha1="bdd4c622c10b8e89646d2d15f42b5317f592f8a7" offset="0" />
3477         </dataarea>
3478      </part>
3479   </software>
3480
3481   <software name="halak">
3482      <description>Halak</description>
3483      <year>1991</year>
3484      <publisher>K&amp;K Soft</publisher>
3485
3486      <part name="flop1" interface="floppy_5_25">
3487         <dataarea name="flop" size="368640">
3488            <rom name="halak.dsk" size="368640" crc="80fb19d2" sha1="b8241bbee506933f940b08fac8ebdd118c91e117" offset="0" />
3489         </dataarea>
3490      </part>
3491   </software>
3492
3493   <software name="halalla">
3494      <description>Halállabirintus</description>
3495      <year>198?</year>
3496      <publisher>&lt;unknown&gt;</publisher>
3497
3498      <part name="flop1" interface="floppy_5_25">
3499         <dataarea name="flop" size="368640">
3500            <rom name="halallabirintus.dsk" size="368640" crc="fc8a000c" sha1="21e8b97f0da9673b991ac570ed619510b74090d5" offset="0" />
3501         </dataarea>
3502      </part>
3503   </software>
3504
3505   <software name="hamm">
3506      <description>Hamm</description>
3507      <year>198?</year>
3508      <publisher>&lt;unknown&gt;</publisher>
3509
3510      <part name="flop1" interface="floppy_5_25">
3511         <dataarea name="flop" size="368640">
3512            <rom name="hamm.dsk" size="368640" crc="fd020ea9" sha1="0a74f95f21b83da4df10bed9042e3b0cf275c9f1" offset="0" />
3513         </dataarea>
3514      </part>
3515   </software>
3516
3517   <software name="hang">
3518      <description>Hang</description>
3519      <year>198?</year>
3520      <publisher>&lt;unknown&gt;</publisher>
3521
3522      <part name="flop1" interface="floppy_5_25">
3523         <dataarea name="flop" size="368640">
3524            <rom name="hang.dsk" size="368640" crc="8de35864" sha1="bc7c93f9fe36a9a583fa42d6233530b473ef73f9" offset="0" />
3525         </dataarea>
3526      </part>
3527   </software>
3528
3529   <software name="hangd">
3530      <description>Hang (Different)</description>
3531      <year>198?</year>
3532      <publisher>&lt;unknown&gt;</publisher>
3533
3534      <part name="flop1" interface="floppy_5_25">
3535         <dataarea name="flop" size="368640">
3536            <rom name="hangd.dsk" size="368640" crc="2030a412" sha1="d7422817eea76372dd04172331c63091c297c88a" offset="0" />
3537         </dataarea>
3538      </part>
3539   </software>
3540
3541   <software name="hangdigi">
3542      <description>Hangdigitalizáló</description>
3543      <year>198?</year>
3544      <publisher>&lt;unknown&gt;</publisher>
3545
3546      <part name="flop1" interface="floppy_5_25">
3547         <dataarea name="flop" size="368640">
3548            <rom name="hangdigi.dsk" size="368640" crc="bd430ec6" sha1="3961b3732fd2626c4c919f678e42d0da639e580e" offset="0" />
3549         </dataarea>
3550      </part>
3551   </software>
3552
3553   <software name="hanggal">
3554      <description>Hanggal</description>
3555      <year>1989</year>
3556      <publisher>Endre Győrffy</publisher>
3557
3558      <part name="flop1" interface="floppy_5_25">
3559         <dataarea name="flop" size="368640">
3560            <rom name="hanggal.dsk" size="368640" crc="b69352d2" sha1="e6908982c21de9658585750139c0aa7a17327ba0" offset="0" />
3561         </dataarea>
3562      </part>
3563   </software>
3564
3565   <software name="hangok">
3566      <description>Hangok</description>
3567      <year>198?</year>
3568      <publisher>&lt;unknown&gt;</publisher>
3569
3570      <part name="flop1" interface="floppy_5_25">
3571         <dataarea name="flop" size="368640">
3572            <rom name="hangok.dsk" size="368640" crc="c9911b93" sha1="ac67521e71aa840351a0d54f476510a8b3620e8a" offset="0" />
3573         </dataarea>
3574      </part>
3575   </software>
3576
3577   <software name="hangosbi">
3578      <description>Hangos Billentyűzet</description>
3579      <year>198?</year>
3580      <publisher>Tombor Márton</publisher>
3581
3582      <part name="flop1" interface="floppy_5_25">
3583         <dataarea name="flop" size="368640">
3584            <rom name="hangosbi.dsk" size="368640" crc="0d190703" sha1="7dedecbc346a9d4ca9131be6fada161874a66ff6" offset="0" />
3585         </dataarea>
3586      </part>
3587   </software>
3588
3589   <software name="hanoi">
3590      <description>Hanoi Torony</description>
3591      <year>1983</year>
3592      <publisher>Gyorgy Vamos - Janos Horvath</publisher>
3593
3594      <part name="flop1" interface="floppy_5_25">
3595         <dataarea name="flop" size="368640">
3596            <rom name="hanoi.dsk" size="368640" crc="f495f99d" sha1="f56c88ac925e42f3aefe5d14642e5bf7ed3d1370" offset="0" />
3597         </dataarea>
3598      </part>
3599   </software>
3600
3601   <software name="hanoitr">
3602      <description>Hanoi-Torony</description>
3603      <year>1987</year>
3604      <publisher>Zsolt</publisher>
3605
3606      <part name="flop1" interface="floppy_5_25">
3607         <dataarea name="flop" size="368640">
3608            <rom name="hanoi_.dsk" size="368640" crc="a394f747" sha1="f6602f3493586a7fa309f844014e8408a0fa1652" offset="0" />
3609         </dataarea>
3610      </part>
3611   </software>
3612
3613   <software name="hanoi_t">
3614      <description>Hanoi Tornyai</description>
3615      <year>1986</year>
3616      <publisher>ZMKMF</publisher>
3617
3618      <part name="flop1" interface="floppy_5_25">
3619         <dataarea name="flop" size="368640">
3620            <rom name="hanoi_t.dsk" size="368640" crc="63e78bb2" sha1="5fe56dc9cd5011e35ad87119a614ff1171c9ef27" offset="0" />
3621         </dataarea>
3622      </part>
3623   </software>
3624
3625   <software name="harcaflk">
3626      <description>Harc a Föld Körül</description>
3627      <year>198?</year>
3628      <publisher>Novotrade</publisher>
3629
3630      <part name="flop1" interface="floppy_5_25">
3631         <dataarea name="flop" size="368640">
3632            <rom name="harcaflk.dsk" size="368640" crc="5b8a4486" sha1="29cb470ee18232a8b660340830938913e8a42fa7" offset="0" />
3633         </dataarea>
3634      </part>
3635   </software>
3636
3637   <software name="harcaflka" cloneof="harcaflk">
3638      <description>Harc a Föld Körül (Alt)</description>
3639      <year>198?</year>
3640      <publisher>Novotrade</publisher>
3641
3642      <part name="flop1" interface="floppy_5_25">
3643         <dataarea name="flop" size="368640">
3644            <rom name="harcafoldkorul.dsk" size="368640" crc="5cd0d02b" sha1="2b55f2b3a37008ba74d456cd16d1dbb896551915" offset="0" />
3645         </dataarea>
3646      </part>
3647   </software>
3648
3649   <software name="haromtes">
3650      <description>Háromtestprobléma</description>
3651      <year>198?</year>
3652      <publisher>&lt;unknown&gt;</publisher>
3653
3654      <part name="flop1" interface="floppy_5_25">
3655         <dataarea name="flop" size="368640">
3656            <rom name="haromtes.dsk" size="368640" crc="21857488" sha1="deaa347fd5b2810d351ed464f484c31bde273452" offset="0" />
3657         </dataarea>
3658      </part>
3659   </software>
3660
3661   <software name="hcopy">
3662      <description>HCopy</description>
3663      <year>198?</year>
3664      <publisher>&lt;unknown&gt;</publisher>
3665
3666      <part name="flop1" interface="floppy_5_25">
3667         <dataarea name="flop" size="368640">
3668            <rom name="hcopy.dsk" size="368640" crc="e47e3073" sha1="5ebd2c5bb8597c6afc3f37eacd1a082861d56261" offset="0" />
3669         </dataarea>
3670      </part>
3671   </software>
3672
3673   <software name="hds">
3674      <description>Hiper Digital - System v3.5</description>
3675      <year>1989</year>
3676      <publisher>Béla Szalontai</publisher>
3677
3678      <part name="flop1" interface="floppy_5_25">
3679         <dataarea name="flop" size="368640">
3680            <rom name="hds.dsk" size="368640" crc="ee41e22f" sha1="04b14ff93dcfbcac2b84f5a022311362e2cfabc8" offset="0" />
3681         </dataarea>
3682      </part>
3683   </software>
3684
3685   <software name="head">
3686      <description>Head</description>
3687      <year>198?</year>
3688      <publisher>&lt;unknown&gt;</publisher>
3689
3690      <part name="flop1" interface="floppy_5_25">
3691         <dataarea name="flop" size="368640">
3692            <rom name="head.dsk" size="368640" crc="63cd5d17" sha1="196d69350ffb609fdcc657f54a7a9b51ce4e09b8" offset="0" />
3693         </dataarea>
3694      </part>
3695   </software>
3696
3697   <software name="heartlnd">
3698      <description>Heartland</description>
3699      <year>1990</year>
3700      <publisher>Zsolt Szigeti</publisher>
3701
3702      <part name="flop1" interface="floppy_5_25">
3703         <dataarea name="flop" size="368640">
3704            <rom name="heartland.dsk" size="368640" crc="dee6da92" sha1="0df2550e4fb4298bd59f07354f930051dd51e154" offset="0" />
3705         </dataarea>
3706      </part>
3707   </software>
3708
3709   <software name="hlndisme">
3710      <description>Heartland Ismertető</description>
3711      <year>1990</year>
3712      <publisher>Zsolt Szigeti</publisher>
3713
3714      <part name="flop1" interface="floppy_5_25">
3715         <dataarea name="flop" size="368640">
3716            <rom name="heartlandismerteto.dsk" size="368640" crc="2a8506ce" sha1="59cad75f312d85f8bf4b07422bc4478821642cd9" offset="0" />
3717         </dataarea>
3718      </part>
3719   </software>
3720
3721   <software name="helikopt">
3722      <description>Helikopter</description>
3723      <year>198?</year>
3724      <publisher>SCS - Csongrád</publisher>
3725
3726      <part name="flop1" interface="floppy_5_25">
3727         <dataarea name="flop" size="368640">
3728            <rom name="helikopter.dsk" size="368640" crc="d1a324af" sha1="4b54de6bfa4f779faf549f9008ad735acfe82b1a" offset="0" />
3729         </dataarea>
3730      </part>
3731   </software>
3732
3733   <software name="helpbasi">
3734      <description>HELP BASIC v1.0</description>
3735      <year>198?</year>
3736      <publisher>Albatross</publisher>
3737
3738      <part name="flop1" interface="floppy_5_25">
3739         <dataarea name="flop" size="368640">
3740            <rom name="helpbasi.dsk" size="368640" crc="8a564273" sha1="99e6721124369c1e2757d27ce6c5fdac48787102" offset="0" />
3741         </dataarea>
3742      </part>
3743   </software>
3744
3745   <software name="helpleir">
3746      <description>HELP BASIC v1.0 Leírás</description>
3747      <year>198?</year>
3748      <publisher>Albatross</publisher>
3749
3750      <part name="flop1" interface="floppy_5_25">
3751         <dataarea name="flop" size="368640">
3752            <rom name="helpleir.dsk" size="368640" crc="3428c982" sha1="4efce15ca6b93f02fbee84783b1a4a525671b659" offset="0" />
3753         </dataarea>
3754      </part>
3755   </software>
3756
3757   <software name="hexa">
3758      <description>Decimális - Hexadecimális átváltó</description>
3759      <year>198?</year>
3760      <publisher>&lt;unknown&gt;</publisher>
3761
3762      <part name="flop1" interface="floppy_5_25">
3763         <dataarea name="flop" size="368640">
3764            <rom name="hexa.dsk" size="368640" crc="b9dc6633" sha1="9261d4faf479ff05684b11313ece81bff9b1a39d" offset="0" />
3765         </dataarea>
3766      </part>
3767   </software>
3768
3769   <software name="homoru">
3770      <description>Homorú Tükör Képalkotása</description>
3771      <year>198?</year>
3772      <publisher>&lt;unknown&gt;</publisher>
3773
3774      <part name="flop1" interface="floppy_5_25">
3775         <dataarea name="flop" size="368640">
3776            <rom name="homoru.dsk" size="368640" crc="442d979a" sha1="d95e23ef17a7b0af0161e556f1592d7a2238db85" offset="0" />
3777         </dataarea>
3778      </part>
3779   </software>
3780
3781   <software name="hotelneu">
3782      <description>Hotel Neutron</description>
3783      <year>198?</year>
3784      <publisher>&lt;unknown&gt;</publisher>
3785
3786      <part name="flop1" interface="floppy_5_25">
3787         <dataarea name="flop" size="368640">
3788            <rom name="hotelneu.dsk" size="368640" crc="7ac8a035" sha1="40a54e448087c067b4de7173ef740cfc370ce9ea" offset="0" />
3789         </dataarea>
3790      </part>
3791   </software>
3792
3793   <software name="hoterjed">
3794      <description>Hőterjedés</description>
3795      <year>198?</year>
3796      <publisher>&lt;unknown&gt;</publisher>
3797
3798      <part name="flop1" interface="floppy_5_25">
3799         <dataarea name="flop" size="368640">
3800            <rom name="hoterjed.dsk" size="368640" crc="55c792b7" sha1="66a2f22c43b3fb130b90e27629d1c152e8b364fe" offset="0" />
3801         </dataarea>
3802      </part>
3803   </software>
3804
3805   <software name="hullam">
3806      <description>Hullámcsomag</description>
3807      <year>198?</year>
3808      <publisher>&lt;unknown&gt;</publisher>
3809
3810      <part name="flop1" interface="floppy_5_25">
3811         <dataarea name="flop" size="368640">
3812            <rom name="hullam.dsk" size="368640" crc="60cb5ecc" sha1="f324cb4846b956b45a0d637253fb37ed3fd46a5f" offset="0" />
3813         </dataarea>
3814      </part>
3815   </software>
3816
3817   <software name="hungaror">
3818      <description>Hungaroring</description>
3819      <year>198?</year>
3820      <publisher>Novotrade</publisher>
3821
3822      <part name="flop1" interface="floppy_5_25">
3823         <dataarea name="flop" size="368640">
3824            <rom name="hungaroring.dsk" size="368640" crc="fbb2b8d5" sha1="747036ff9aa71c5a729e7a98985c1949b5213484" offset="0" />
3825         </dataarea>
3826      </part>
3827   </software>
3828
3829   <software name="ikplusz">
3830      <description>Interkarate+</description>
3831      <year>1989</year>
3832      <publisher>Tom</publisher>
3833
3834      <part name="flop1" interface="floppy_5_25">
3835         <dataarea name="flop" size="368640">
3836            <rom name="ikplusz.dsk" size="368640" crc="01a364d7" sha1="dbdc90b55b9d58499b2d41cb5364a2fe8f6571b4" offset="0" />
3837         </dataarea>
3838      </part>
3839   </software>
3840
3841   <software name="ikplusza" cloneof="ikplusz">
3842      <description>Interkarate+ (Alt)</description>
3843      <year>1989</year>
3844      <publisher>Tom</publisher>
3845
3846      <part name="flop1" interface="floppy_5_25">
3847         <dataarea name="flop" size="368640">
3848            <rom name="ikpluszv2.dsk" size="368640" crc="862f9832" sha1="f6ff18681bc3a89889a6e376d209a94918c5f3e1" offset="0" />
3849         </dataarea>
3850      </part>
3851   </software>
3852
3853   <software name="inv182">
3854      <description>Angol-Magyar Szótár és Kikérdező - INV182</description>
3855      <year>198?</year>
3856      <publisher>&lt;unknown&gt;</publisher>
3857
3858      <part name="flop1" interface="floppy_5_25">
3859         <dataarea name="flop" size="368640">
3860            <rom name="inv182.dsk" size="368640" crc="cd1fcaa9" sha1="fadd24eef8d47cc752c668f4ec4f8eb792cd1d0d" offset="0" />
3861         </dataarea>
3862      </part>
3863   </software>
3864
3865   <software name="inv183">
3866      <description>Német-Magyar Szótár és Kikérdező - INV183</description>
3867      <year>198?</year>
3868      <publisher>&lt;unknown&gt;</publisher>
3869
3870      <part name="flop1" interface="floppy_5_25">
3871         <dataarea name="flop" size="368640">
3872            <rom name="inv183.dsk" size="368640" crc="fd9dbb26" sha1="39da76b2a482a62edf89b2e7237c982f23b21a94" offset="0" />
3873         </dataarea>
3874      </part>
3875   </software>
3876
3877   <software name="inv24">
3878      <description>Űrcsata - INV24</description>
3879      <year>198?</year>
3880      <publisher>&lt;unknown&gt;</publisher>
3881
3882      <part name="flop1" interface="floppy_5_25">
3883         <dataarea name="flop" size="368640">
3884            <rom name="inv24.dsk" size="368640" crc="6ff75ae0" sha1="863ba2681df9760c5b774d8b42439e73101af1c8" offset="0" />
3885         </dataarea>
3886      </part>
3887   </software>
3888
3889   <software name="invaders">
3890      <description>Space Invaders</description>
3891      <year>198?</year>
3892      <publisher>&lt;unknown&gt;</publisher>
3893
3894      <part name="flop1" interface="floppy_5_25">
3895         <dataarea name="flop" size="368640">
3896            <rom name="invaders.dsk" size="368640" crc="6780bf62" sha1="e351beaadc3684a3c93cd4a38269d281332629bc" offset="0" />
3897         </dataarea>
3898      </part>
3899   </software>
3900
3901   <software name="invazio">
3902      <description>Invázió</description>
3903      <year>198?</year>
3904      <publisher>STV</publisher>
3905
3906      <part name="flop1" interface="floppy_5_25">
3907         <dataarea name="flop" size="368640">
3908            <rom name="invazio.dsk" size="368640" crc="acc155ac" sha1="d4d78bcc3ac18c2ad52e1769d7a7f86d22cf19db" offset="0" />
3909         </dataarea>
3910      </part>
3911   </software>
3912
3913   <software name="iqteszt">
3914      <description>IQ Teszt</description>
3915      <year>198?</year>
3916      <publisher>&lt;unknown&gt;</publisher>
3917
3918      <part name="flop1" interface="floppy_5_25">
3919         <dataarea name="flop" size="368640">
3920            <rom name="iq-teszt.dsk" size="368640" crc="ca412285" sha1="69e6be3d716326f8214b3a1457ef493270050558" offset="0" />
3921         </dataarea>
3922      </part>
3923   </software>
3924
3925   <software name="jancsi">
3926      <description>Jancsi a Várban</description>
3927      <year>1986</year>
3928      <publisher>STV</publisher>
3929
3930      <part name="flop1" interface="floppy_5_25">
3931         <dataarea name="flop" size="368640">
3932            <rom name="jancsiavarban.dsk" size="368640" crc="15f6a09b" sha1="68375326e57cdab2e0309f7bd513c286753420e2" offset="0" />
3933         </dataarea>
3934      </part>
3935   </software>
3936
3937   <software name="jatekok">
3938      <description>Játékok</description>
3939      <year>198?</year>
3940      <publisher>Jozsef Petrovszky - Szabolcs Rota</publisher>
3941
3942      <part name="flop1" interface="floppy_5_25">
3943         <dataarea name="flop" size="368640">
3944            <rom name="jatekok.dsk" size="368640" crc="22e61972" sha1="aab273c53eb00557616ddec10e2818d6d3fbdb38" offset="0" />
3945         </dataarea>
3946      </part>
3947   </software>
3948
3949   <software name="jegyzet">
3950      <description>Jegyzettömb</description>
3951      <year>1987</year>
3952      <publisher>Gyorgy Gerlai</publisher>
3953
3954      <part name="flop1" interface="floppy_5_25">
3955         <dataarea name="flop" size="368640">
3956            <rom name="jegyzettomb.dsk" size="368640" crc="5aeaed3f" sha1="b9f67723f8381371fc27ea9df69790398750ffb2" offset="0" />
3957         </dataarea>
3958      </part>
3959   </software>
3960
3961   <software name="jetpack">
3962      <description>Jet Pack</description>
3963      <year>198?</year>
3964      <publisher>Software in LUX</publisher>
3965
3966      <part name="flop1" interface="floppy_5_25">
3967         <dataarea name="flop" size="368640">
3968            <rom name="jetpack.dsk" size="368640" crc="88b151bf" sha1="4b2dd04d34dad27719bfa3c91ad465e724e1adb9" offset="0" />
3969         </dataarea>
3970      </part>
3971   </software>
3972
3973   <software name="joy">
3974      <description>Joy</description>
3975      <year>198?</year>
3976      <publisher>&lt;unknown&gt;</publisher>
3977
3978      <part name="flop1" interface="floppy_5_25">
3979         <dataarea name="flop" size="368640">
3980            <rom name="joy.dsk" size="368640" crc="59dc043d" sha1="732a0d839884c2207a4c8aa680ee2aa825d38957" offset="0" />
3981         </dataarea>
3982      </part>
3983   </software>
3984
3985   <software name="jumpjack">
3986      <description>Jumping Jack</description>
3987      <year>198?</year>
3988      <publisher>&lt;unknown&gt;</publisher>
3989
3990      <part name="flop1" interface="floppy_5_25">
3991         <dataarea name="flop" size="368640">
3992            <rom name="jumpingjack.dsk" size="368640" crc="673c0c33" sha1="3d620796f4175275fc9d0da40eb8fbb18fb8dd43" offset="0" />
3993         </dataarea>
3994      </part>
3995   </software>
3996
3997   <software name="jupiter">
3998      <description>Jupiter</description>
3999      <year>198?</year>
4000      <publisher>Péter Dörner</publisher>
4001
4002      <part name="flop1" interface="floppy_5_25">
4003         <dataarea name="flop" size="368640">
4004            <rom name="jupiter.dsk" size="368640" crc="7abd132a" sha1="6fd70d5dd176ec13417f0c7033523718a9e91a78" offset="0" />
4005         </dataarea>
4006      </part>
4007   </software>
4008
4009   <software name="kalandfi">
4010      <description>Kalandozások a Fizikában</description>
4011      <year>1987</year>
4012      <publisher>Octasoft</publisher>
4013
4014      <part name="flop1" interface="floppy_5_25">
4015         <dataarea name="flop" size="368640">
4016            <rom name="kalandfi.dsk" size="368640" crc="fb54fb88" sha1="a246a05ca926dc4f67051b5343a696cfff9bca5b" offset="0" />
4017         </dataarea>
4018      </part>
4019   </software>
4020
4021   <software name="kalandoz">
4022      <description>Kalandozz Velem!</description>
4023      <year>198?</year>
4024      <publisher>&lt;unknown&gt;</publisher>
4025
4026      <part name="flop1" interface="floppy_5_25">
4027         <dataarea name="flop" size="368640">
4028            <rom name="kalandozz_velem.dsk" size="368640" crc="41f084d4" sha1="8d88d16e180e3f7ef093758136b5903d589dfd6d" offset="0" />
4029         </dataarea>
4030      </part>
4031   </software>
4032
4033   <software name="kalannen">
4034      <description>Kalán néni puzzle</description>
4035      <year>1989</year>
4036      <publisher>Sume Software Service</publisher>
4037
4038      <part name="flop1" interface="floppy_5_25">
4039         <dataarea name="flop" size="368640">
4040            <rom name="kalanneni.dsk" size="368640" crc="4b91f79a" sha1="984d727686c2279bca1c0f626c49dac5a1fb274e" offset="0" />
4041         </dataarea>
4042      </part>
4043   </software>
4044
4045   <software name="kapkodo">
4046      <description>Kapkodó</description>
4047      <year>198?</year>
4048      <publisher>Zsolt</publisher>
4049
4050      <part name="flop1" interface="floppy_5_25">
4051         <dataarea name="flop" size="368640">
4052            <rom name="kapkodo.dsk" size="368640" crc="7f0665f6" sha1="1e5d0e2d38d47cfdb758ae304fc3431a9bcc2267" offset="0" />
4053         </dataarea>
4054      </part>
4055   </software>
4056
4057   <software name="karakter">
4058      <description>Karakter készítő</description>
4059      <year>1987</year>
4060      <publisher>Octasoft</publisher>
4061
4062      <part name="flop1" interface="floppy_5_25">
4063         <dataarea name="flop" size="368640">
4064            <rom name="karakter.dsk" size="368640" crc="d4bf2e0e" sha1="e2efff44954cb42f875622e994f3124dd5f98fc3" offset="0" />
4065         </dataarea>
4066      </part>
4067   </software>
4068
4069   <software name="karate">
4070      <description>Karate</description>
4071      <year>198?</year>
4072      <publisher>&lt;unknown&gt;</publisher>
4073
4074      <part name="flop1" interface="floppy_5_25">
4075         <dataarea name="flop" size="368640">
4076            <rom name="karate.dsk" size="368640" crc="356c4ccb" sha1="c29415025a952da6e5430301c27e57d19bf46314" offset="0" />
4077         </dataarea>
4078      </part>
4079   </software>
4080
4081   <software name="kardhala">
4082      <description>Kardhalak és Kincsek</description>
4083      <year>198?</year>
4084      <publisher>&lt;unknown&gt;</publisher>
4085
4086      <part name="flop1" interface="floppy_5_25">
4087         <dataarea name="flop" size="368640">
4088            <rom name="kardhalakeskincsek.dsk" size="368640" crc="70985e44" sha1="4f9669b47605d2586c3c2d46a2f5eeaa21d7acc6" offset="0" />
4089         </dataarea>
4090      </part>
4091   </software>
4092
4093   <software name="kardhalf">
4094      <description>Kardhalak és Kincsek (Different)</description>
4095      <year>198?</year>
4096      <publisher>&lt;unknown&gt;</publisher>
4097
4098      <part name="flop1" interface="floppy_5_25">
4099         <dataarea name="flop" size="368640">
4100            <rom name="kardhf.dsk" size="368640" crc="0bc5b2c8" sha1="5747f41ac06a54593fc222d1b7c6c56e09c6d12d" offset="0" />
4101         </dataarea>
4102      </part>
4103   </software>
4104
4105   <software name="keljfelj">
4106      <description>Keljfeljancsi</description>
4107      <year>198?</year>
4108      <publisher>STV</publisher>
4109
4110      <part name="flop1" interface="floppy_5_25">
4111         <dataarea name="flop" size="368640">
4112            <rom name="keljfeljancsi.dsk" size="368640" crc="1e9317d3" sha1="21de1655907fc1df3496cfd800c7b30a66439757" offset="0" />
4113         </dataarea>
4114      </part>
4115   </software>
4116
4117   <software name="kem">
4118      <description>Kém</description>
4119      <year>1988</year>
4120      <publisher>SPT</publisher>
4121
4122      <part name="flop1" interface="floppy_5_25">
4123         <dataarea name="flop" size="368640">
4124            <rom name="kem.dsk" size="368640" crc="6acbb509" sha1="0ee53f33bbd01f1800a63d3019efe7e1df0d364d" offset="0" />
4125         </dataarea>
4126      </part>
4127   </software>
4128
4129   <software name="kemia">
4130      <description>Boszorkánykonyha - Kalandozások a Kémiában</description>
4131      <year>1987</year>
4132      <publisher>Novotrade</publisher>
4133
4134      <part name="flop1" interface="floppy_5_25">
4135         <dataarea name="flop" size="368640">
4136            <rom name="kemia.dsk" size="368640" crc="c17e7e7c" sha1="7f2b8f8d8a39d52e0a2a0804ad9a8d37a9ac4eb9" offset="0" />
4137         </dataarea>
4138      </part>
4139   </software>
4140
4141   <software name="kepek">
4142      <description>Képek</description>
4143      <year>1987</year>
4144      <publisher>VGy</publisher>
4145
4146      <part name="flop1" interface="floppy_5_25">
4147         <dataarea name="flop" size="368640">
4148            <rom name="kepek.dsk" size="368640" crc="cf829ec3" sha1="91c82f053b4ec7ad1bfe77f2842888c7232fc62d" offset="0" />
4149         </dataarea>
4150      </part>
4151   </software>
4152
4153   <software name="keprub">
4154      <description>Keprub</description>
4155      <year>198?</year>
4156      <publisher>&lt;unknown&gt;</publisher>
4157
4158      <part name="flop1" interface="floppy_5_25">
4159         <dataarea name="flop" size="368640">
4160            <rom name="keprub.dsk" size="368640" crc="3c70d715" sha1="b11f5ef24549ed88562eece798c5e4f58328d70a" offset="0" />
4161         </dataarea>
4162      </part>
4163   </software>
4164
4165   <software name="kepujsag">
4166      <description>Képújság</description>
4167      <year>198?</year>
4168      <publisher>&lt;unknown&gt;</publisher>
4169
4170      <part name="flop1" interface="floppy_5_25">
4171         <dataarea name="flop" size="368640">
4172            <rom name="kepujsag.dsk" size="368640" crc="b0637d71" sha1="89e38fbbe6a3863d28bc9aa29d787809172a8594" offset="0" />
4173         </dataarea>
4174      </part>
4175   </software>
4176
4177   <software name="keresd">
4178      <description>Keresd a gyűrűt</description>
4179      <year>198?</year>
4180      <publisher>Software in LUX</publisher>
4181
4182      <part name="flop1" interface="floppy_5_25">
4183         <dataarea name="flop" size="368640">
4184            <rom name="keresdagyurut.dsk" size="368640" crc="47105b8c" sha1="dbbd30c9cb02a5afd04567c25d98bc9200fe7c0f" offset="0" />
4185         </dataarea>
4186      </part>
4187   </software>
4188
4189   <software name="kigyo">
4190      <description>Kígyó</description>
4191      <year>198?</year>
4192      <publisher>&lt;unknown&gt;</publisher>
4193
4194      <part name="flop1" interface="floppy_5_25">
4195         <dataarea name="flop" size="368640">
4196            <rom name="kigyo.dsk" size="368640" crc="5202d07e" sha1="92922d3716fe54c02a4824bc840b856abf3c4a73" offset="0" />
4197         </dataarea>
4198      </part>
4199   </software>
4200
4201   <software name="kigyosja">
4202      <description>Kigyós Játék</description>
4203      <year>198?</year>
4204      <publisher>&lt;unknown&gt;</publisher>
4205
4206      <part name="flop1" interface="floppy_5_25">
4207         <dataarea name="flop" size="368640">
4208            <rom name="kigyosjatekv1.dsk" size="368640" crc="1c2cc376" sha1="72af320d6b665799d2329b10361b8bffb89398f6" offset="0" />
4209         </dataarea>
4210      </part>
4211   </software>
4212
4213   <software name="kigyosjaa" cloneof="kigyosja">
4214      <description>Kigyós Játék (Alt)</description>
4215      <year>198?</year>
4216      <publisher>&lt;unknown&gt;</publisher>
4217
4218      <part name="flop1" interface="floppy_5_25">
4219         <dataarea name="flop" size="368640">
4220            <rom name="kigyosjatekv2.dsk" size="368640" crc="48e87697" sha1="f300bbafab505a33e0f36adab38eb3fa4c2effd4" offset="0" />
4221         </dataarea>
4222      </part>
4223   </software>
4224
4225   <software name="kikzene">
4226      <description>Kikstart - Zene</description>
4227      <year>198?</year>
4228      <publisher>STV</publisher>
4229
4230      <part name="flop1" interface="floppy_5_25">
4231         <dataarea name="flop" size="368640">
4232            <rom name="kikzene.dsk" size="368640" crc="33ff38f9" sha1="fd3b70001588d49cdca7e025be53aae76267e10d" offset="0" />
4233         </dataarea>
4234      </part>
4235   </software>
4236
4237   <software name="kimento">
4238      <description>Kimentő</description>
4239      <year>198?</year>
4240      <publisher>&lt;unknown&gt;</publisher>
4241
4242      <part name="flop1" interface="floppy_5_25">
4243         <dataarea name="flop" size="368640">
4244            <rom name="kimento.dsk" size="368640" crc="3f536d06" sha1="64d352ddc72c677c81b24d32637d6017ad362db1" offset="0" />
4245         </dataarea>
4246      </part>
4247   </software>
4248
4249   <software name="kincsatl">
4250      <description>Kincskereső (Atlas)</description>
4251      <year>1987</year>
4252      <publisher>Atlas</publisher>
4253
4254      <part name="flop1" interface="floppy_5_25">
4255         <dataarea name="flop" size="368640">
4256            <rom name="kincsatl.dsk" size="368640" crc="18f0b1a7" sha1="1c5316da9ecaa8f1c508e91b70824d1d4574a66e" offset="0" />
4257         </dataarea>
4258      </part>
4259   </software>
4260
4261   <software name="kincsker">
4262      <description>Kincskereső</description>
4263      <year>198?</year>
4264      <publisher>&lt;unknown&gt;</publisher>
4265
4266      <part name="flop1" interface="floppy_5_25">
4267         <dataarea name="flop" size="368640">
4268            <rom name="kincsker.dsk" size="368640" crc="bcf771a3" sha1="2f13648b804b9bdcca02c9154699ceb4e40d2b89" offset="0" />
4269         </dataarea>
4270      </part>
4271   </software>
4272
4273   <software name="kiscsava">
4274      <description>Kis Csavargó</description>
4275      <year>198?</year>
4276      <publisher>&lt;unknown&gt;</publisher>
4277
4278      <part name="flop1" interface="floppy_5_25">
4279         <dataarea name="flop" size="368640">
4280            <rom name="kiscsavargo.dsk" size="368640" crc="d3213065" sha1="e52a1f72c43a0efa138dfe302ab38a918fd50109" offset="0" />
4281         </dataarea>
4282      </part>
4283   </software>
4284
4285   <software name="kisersil">
4286      <description>Kísértetkastély 1</description>
4287      <year>198?</year>
4288      <publisher>Software in LUX</publisher>
4289
4290      <part name="flop1" interface="floppy_5_25">
4291         <dataarea name="flop" size="368640">
4292            <rom name="kisertet1.dsk" size="368640" crc="b5a52864" sha1="8bf0fffa8257493bbe94e585d2d530a70161f43e" offset="0" />
4293         </dataarea>
4294      </part>
4295   </software>
4296
4297   <software name="kisertet">
4298      <description>Kísértetkastély</description>
4299      <year>1989</year>
4300      <publisher>Attila Canjavec</publisher>
4301
4302      <part name="flop1" interface="floppy_5_25">
4303         <dataarea name="flop" size="368640">
4304            <rom name="kisertetkastelyv1.dsk" size="368640" crc="d1891cf8" sha1="c52971b50a01a6318c8e755c0b02ae2f82e080be" offset="0" />
4305         </dataarea>
4306      </part>
4307   </software>
4308
4309   <software name="kiserteta" cloneof="kisertet">
4310      <description>Kísértetkastély (Alt)</description>
4311      <year>1989</year>
4312      <publisher>Attila Canjavec</publisher>
4313
4314      <part name="flop1" interface="floppy_5_25">
4315         <dataarea name="flop" size="368640">
4316            <rom name="kisertetkastelyv2.dsk" size="368640" crc="87b931b0" sha1="cd4be66c2c4e9814a8a7f16d0bd8524ab4ed2b65" offset="0" />
4317         </dataarea>
4318      </part>
4319   </software>
4320
4321   <software name="kisertetb" cloneof="kisertet">
4322      <description>Kísértetkastély (Alt 2)</description>
4323      <year>1989</year>
4324      <publisher>Attila Canjavec</publisher>
4325
4326      <part name="flop1" interface="floppy_5_25">
4327         <dataarea name="flop" size="368640">
4328            <rom name="kisertetkastelyv3.dsk" size="368640" crc="9982a4b7" sha1="7de873f25e6c801a6b672b975ca25ff8cd3cf7d9" offset="0" />
4329         </dataarea>
4330      </part>
4331   </software>
4332
4333   <software name="kismozdo">
4334      <description>Kismozdony</description>
4335      <year>198?</year>
4336      <publisher>STV</publisher>
4337
4338      <part name="flop1" interface="floppy_5_25">
4339         <dataarea name="flop" size="368640">
4340            <rom name="kismozdony.dsk" size="368640" crc="0948f8b7" sha1="d7280c6cc8bf4db7df73ca73df237be2ee82b828" offset="0" />
4341         </dataarea>
4342      </part>
4343   </software>
4344
4345   <software name="kitoltes">
4346      <description>Kitöltés</description>
4347      <year>198?</year>
4348      <publisher>&lt;unknown&gt;</publisher>
4349
4350      <part name="flop1" interface="floppy_5_25">
4351         <dataarea name="flop" size="368640">
4352            <rom name="kitoltes.dsk" size="368640" crc="d738746c" sha1="fbb5ba1400e7a86133b8c58ade73411d378f2674" offset="0" />
4353         </dataarea>
4354      </part>
4355   </software>
4356
4357   <software name="knemet11">
4358      <description>Képes Német 1-1 - Szófelismerés</description>
4359      <year>198?</year>
4360      <publisher>&lt;unknown&gt;</publisher>
4361
4362      <part name="flop1" interface="floppy_5_25">
4363         <dataarea name="flop" size="368640">
4364            <rom name="knemet11.dsk" size="368640" crc="04d651a8" sha1="69a668fd1bd84be54aa58ac39bf863c51f6c005c" offset="0" />
4365         </dataarea>
4366      </part>
4367   </software>
4368
4369   <software name="knemet12">
4370      <description>Képes Német 1-2 - Szófelismerés</description>
4371      <year>198?</year>
4372      <publisher>&lt;unknown&gt;</publisher>
4373
4374      <part name="flop1" interface="floppy_5_25">
4375         <dataarea name="flop" size="368640">
4376            <rom name="knemet12.dsk" size="368640" crc="70881a05" sha1="63dc6ccf62b5fbcdf5239fc0176bb03275895539" offset="0" />
4377         </dataarea>
4378      </part>
4379   </software>
4380
4381   <software name="knemet13">
4382      <description>Képes Német 1-3 - Szófelismerés</description>
4383      <year>198?</year>
4384      <publisher>&lt;unknown&gt;</publisher>
4385
4386      <part name="flop1" interface="floppy_5_25">
4387         <dataarea name="flop" size="368640">
4388            <rom name="knemet13.dsk" size="368640" crc="01099321" sha1="11c9101ad167b1330f24ee4f9e103f4d63fa8a4c" offset="0" />
4389         </dataarea>
4390      </part>
4391   </software>
4392
4393   <software name="knemet14">
4394      <description>Képes Német 1-4 - Szófelismerés</description>
4395      <year>198?</year>
4396      <publisher>&lt;unknown&gt;</publisher>
4397
4398      <part name="flop1" interface="floppy_5_25">
4399         <dataarea name="flop" size="368640">
4400            <rom name="knemet14.dsk" size="368640" crc="b4064713" sha1="cae6a0371fae44034fb7771bcdfc5c98070dd1b8" offset="0" />
4401         </dataarea>
4402      </part>
4403   </software>
4404
4405   <software name="knemet15">
4406      <description>Képes Német 1-5 - Szófelismerés</description>
4407      <year>198?</year>
4408      <publisher>&lt;unknown&gt;</publisher>
4409
4410      <part name="flop1" interface="floppy_5_25">
4411         <dataarea name="flop" size="368640">
4412            <rom name="knemet15.dsk" size="368640" crc="de5d4c90" sha1="f5ff92ddec2de81e6228aade43c4bf27bfac66ff" offset="0" />
4413         </dataarea>
4414      </part>
4415   </software>
4416
4417   <software name="knemet21">
4418      <description>Képes Német 2-1 - Szófelismerés</description>
4419      <year>198?</year>
4420      <publisher>&lt;unknown&gt;</publisher>
4421
4422      <part name="flop1" interface="floppy_5_25">
4423         <dataarea name="flop" size="368640">
4424            <rom name="knemet21.dsk" size="368640" crc="94ea8482" sha1="1d0168a552fd8a5191592ddf8d17ce85eda72c0b" offset="0" />
4425         </dataarea>
4426      </part>
4427   </software>
4428
4429   <software name="knemet22">
4430      <description>Képes Német 2-2 - Szófelismerés</description>
4431      <year>198?</year>
4432      <publisher>&lt;unknown&gt;</publisher>
4433
4434      <part name="flop1" interface="floppy_5_25">
4435         <dataarea name="flop" size="368640">
4436            <rom name="knemet22.dsk" size="368640" crc="5f4e78a5" sha1="62f6999e7f42bcdb8ed1c82fe5dc9d967cbe6bd9" offset="0" />
4437         </dataarea>
4438      </part>
4439   </software>
4440
4441   <software name="knemet23">
4442      <description>Képes Német 2-3 - Szófelismerés</description>
4443      <year>198?</year>
4444      <publisher>&lt;unknown&gt;</publisher>
4445
4446      <part name="flop1" interface="floppy_5_25">
4447         <dataarea name="flop" size="368640">
4448            <rom name="knemet23.dsk" size="368640" crc="b0fdf6a7" sha1="9d614fa19262249a8ebc9124ad911fa0d32b09d3" offset="0" />
4449         </dataarea>
4450      </part>
4451   </software>
4452
4453   <software name="knemet24">
4454      <description>Képes Német 2-4 - Szófelismerés</description>
4455      <year>198?</year>
4456      <publisher>&lt;unknown&gt;</publisher>
4457
4458      <part name="flop1" interface="floppy_5_25">
4459         <dataarea name="flop" size="368640">
4460            <rom name="knemet24.dsk" size="368640" crc="8a21b4d1" sha1="2fe8d62a05f93e527228538a3479a68e1fafa39e" offset="0" />
4461         </dataarea>
4462      </part>
4463   </software>
4464
4465   <software name="knemet25">
4466      <description>Képes Német 2-5 - Szófelismerés</description>
4467      <year>198?</year>
4468      <publisher>&lt;unknown&gt;</publisher>
4469
4470      <part name="flop1" interface="floppy_5_25">
4471         <dataarea name="flop" size="368640">
4472            <rom name="knemet25.dsk" size="368640" crc="7ddc67c3" sha1="4663f171ce70e2ee5eabdd75806015c395f657ae" offset="0" />
4473         </dataarea>
4474      </part>
4475   </software>
4476
4477   <software name="knemet31">
4478      <description>Képes Német 3-1 - Der, Die Das</description>
4479      <year>198?</year>
4480      <publisher>&lt;unknown&gt;</publisher>
4481
4482      <part name="flop1" interface="floppy_5_25">
4483         <dataarea name="flop" size="368640">
4484            <rom name="knemet31.dsk" size="368640" crc="fb513d65" sha1="65e3efc96880c69c39a8af367ec720ff90cc6f77" offset="0" />
4485         </dataarea>
4486      </part>
4487   </software>
4488
4489   <software name="knemet32">
4490      <description>Képes Német 3-2 - Der, Die Das</description>
4491      <year>198?</year>
4492      <publisher>&lt;unknown&gt;</publisher>
4493
4494      <part name="flop1" interface="floppy_5_25">
4495         <dataarea name="flop" size="368640">
4496            <rom name="knemet32.dsk" size="368640" crc="1b6bc8d1" sha1="d0ca6ea21fb24b0833e659adfb328ecb55f87a61" offset="0" />
4497         </dataarea>
4498      </part>
4499   </software>
4500
4501   <software name="knemet33">
4502      <description>Képes Német 3-3 - Der, Die Das</description>
4503      <year>198?</year>
4504      <publisher>&lt;unknown&gt;</publisher>
4505
4506      <part name="flop1" interface="floppy_5_25">
4507         <dataarea name="flop" size="368640">
4508            <rom name="knemet33.dsk" size="368640" crc="0aa0e921" sha1="63ae1e9877c5441bc40e79d64f3bd32b3b48401b" offset="0" />
4509         </dataarea>
4510      </part>
4511   </software>
4512
4513   <software name="knemet34">
4514      <description>Képes Német 3-4 - Der, Die Das</description>
4515      <year>198?</year>
4516      <publisher>&lt;unknown&gt;</publisher>
4517
4518      <part name="flop1" interface="floppy_5_25">
4519         <dataarea name="flop" size="368640">
4520            <rom name="knemet34.dsk" size="368640" crc="83bb5bc7" sha1="222d777e52e2ca96aaffa1c25e1afa802f4acd2c" offset="0" />
4521         </dataarea>
4522      </part>
4523   </software>
4524
4525   <software name="knemet35">
4526      <description>Képes Német 3-5 - Der, Die Das</description>
4527      <year>198?</year>
4528      <publisher>&lt;unknown&gt;</publisher>
4529
4530      <part name="flop1" interface="floppy_5_25">
4531         <dataarea name="flop" size="368640">
4532            <rom name="knemet35.dsk" size="368640" crc="4951173d" sha1="37b4f78a7f018ade206defe1d6f129f80f111d8e" offset="0" />
4533         </dataarea>
4534      </part>
4535   </software>
4536
4537   <software name="knemet41">
4538      <description>Képes Német 4-1 - Ja Oder Nein</description>
4539      <year>198?</year>
4540      <publisher>&lt;unknown&gt;</publisher>
4541
4542      <part name="flop1" interface="floppy_5_25">
4543         <dataarea name="flop" size="368640">
4544            <rom name="knemet41.dsk" size="368640" crc="e7b34c1c" sha1="559bf3b0799c5002587fb9bc82d8f0997fb51dfd" offset="0" />
4545         </dataarea>
4546      </part>
4547   </software>
4548
4549   <software name="knemet42">
4550      <description>Képes Német 4-2 - Ja Oder Nein</description>
4551      <year>198?</year>
4552      <publisher>&lt;unknown&gt;</publisher>
4553
4554      <part name="flop1" interface="floppy_5_25">
4555         <dataarea name="flop" size="368640">
4556            <rom name="knemet42.dsk" size="368640" crc="0423165a" sha1="46b142a11990f1595d22d0c51b97119fd0fc5a40" offset="0" />
4557         </dataarea>
4558      </part>
4559   </software>
4560
4561   <software name="knemet43">
4562      <description>Képes Német 4-3 - Ja Oder Nein</description>
4563      <year>198?</year>
4564      <publisher>&lt;unknown&gt;</publisher>
4565
4566      <part name="flop1" interface="floppy_5_25">
4567         <dataarea name="flop" size="368640">
4568            <rom name="knemet43.dsk" size="368640" crc="eaaee9ba" sha1="c07c9a18c024b437262b92c3ed07e1b1fe77010d" offset="0" />
4569         </dataarea>
4570      </part>
4571   </software>
4572
4573   <software name="knemet44">
4574      <description>Képes Német 4-4 - Ja Oder Nein</description>
4575      <year>198?</year>
4576      <publisher>&lt;unknown&gt;</publisher>
4577
4578      <part name="flop1" interface="floppy_5_25">
4579         <dataarea name="flop" size="368640">
4580            <rom name="knemet44.dsk" size="368640" crc="28723bf0" sha1="37b3cc3a7dc1a004f561626840e620efc7f4a1aa" offset="0" />
4581         </dataarea>
4582      </part>
4583   </software>
4584
4585   <software name="knemet45">
4586      <description>Képes Német 4-5 - Ja Oder Nein</description>
4587      <year>198?</year>
4588      <publisher>&lt;unknown&gt;</publisher>
4589
4590      <part name="flop1" interface="floppy_5_25">
4591         <dataarea name="flop" size="368640">
4592            <rom name="knemet45.dsk" size="368640" crc="7b139737" sha1="a293d32779e5a6fcb8e457f94e8acf93af9b29a8" offset="0" />
4593         </dataarea>
4594      </part>
4595   </software>
4596
4597   <software name="knightlo">
4598      <description>Knight Lore</description>
4599      <year>1985</year>
4600      <publisher>'a' Studio</publisher>
4601
4602      <part name="flop1" interface="floppy_5_25">
4603         <dataarea name="flop" size="368640">
4604            <rom name="knightlore.dsk" size="368640" crc="cf5d6bf5" sha1="2093aac40dba54b8b1a79d95b8f23377df1af634" offset="0" />
4605         </dataarea>
4606      </part>
4607   </software>
4608
4609   <software name="knightloa" cloneof="knightlo">
4610      <description>Knight Lore (Alt)</description>
4611      <year>1985</year>
4612      <publisher>'a' Studio</publisher>
4613
4614      <part name="flop1" interface="floppy_5_25">
4615         <dataarea name="flop" size="368640">
4616            <rom name="knightv2.dsk" size="368640" crc="1e9c98d6" sha1="cef586695001c7ae2b2833c62025a9f984300343" offset="0" />
4617         </dataarea>
4618      </part>
4619   </software>
4620
4621   <software name="knkdemo">
4622      <description>K&amp;K Soft Szinuszdemo</description>
4623      <year>198?</year>
4624      <publisher>K&amp;K Soft</publisher>
4625
4626      <part name="flop1" interface="floppy_5_25">
4627         <dataarea name="flop" size="368640">
4628            <rom name="knksoft.dsk" size="368640" crc="330ed3b8" sha1="bfc3a7843db0121a5cccf81cb5c1d382946c2412" offset="0" />
4629         </dataarea>
4630      </part>
4631   </software>
4632
4633   <software name="kobanya">
4634      <description>Kőbánya</description>
4635      <year>198?</year>
4636      <publisher>&lt;unknown&gt;</publisher>
4637
4638      <part name="flop1" interface="floppy_5_25">
4639         <dataarea name="flop" size="368640">
4640            <rom name="kobanya.dsk" size="368640" crc="d3cf2e11" sha1="616ea697d0ccbb6cf8b9d81db0dd74303f9a5aaf" offset="0" />
4641         </dataarea>
4642      </part>
4643   </software>
4644
4645   <software name="kocka">
4646      <description>Kocka</description>
4647      <year>198?</year>
4648      <publisher>&lt;unknown&gt;</publisher>
4649
4650      <part name="flop1" interface="floppy_5_25">
4651         <dataarea name="flop" size="368640">
4652            <rom name="kocka.dsk" size="368640" crc="c030cd26" sha1="ee2a45ad2ffbd5afe269e8d2d1529715b6f21247" offset="0" />
4653         </dataarea>
4654      </part>
4655   </software>
4656
4657   <software name="kocka98">
4658      <description>Kocka98</description>
4659      <year>198?</year>
4660      <publisher>&lt;unknown&gt;</publisher>
4661
4662      <part name="flop1" interface="floppy_5_25">
4663         <dataarea name="flop" size="368640">
4664            <rom name="kocka98.dsk" size="368640" crc="0471280a" sha1="1d9c9fe166ed34ea0f9f02ba1ee897048371cb82" offset="0" />
4665         </dataarea>
4666      </part>
4667   </software>
4668
4669   <software name="kockapok">
4670      <description>Kockapóker</description>
4671      <year>1986</year>
4672      <publisher>Unisoft GMK</publisher>
4673
4674      <part name="flop1" interface="floppy_5_25">
4675         <dataarea name="flop" size="368640">
4676            <rom name="kockapoker.dsk" size="368640" crc="a5752a15" sha1="335c6f0d34dbc1decbc5791395fcf3e83a991f07" offset="0" />
4677         </dataarea>
4678      </part>
4679   </software>
4680
4681   <software name="kockapokj" cloneof="kockapok">
4682      <description>Kockapóker (Joystick)</description>
4683      <year>1986</year>
4684      <publisher>Unisoft GMK</publisher>
4685
4686      <part name="flop1" interface="floppy_5_25">
4687         <dataarea name="flop" size="368640">
4688            <rom name="kockapokerjoy.dsk" size="368640" crc="e8b7a446" sha1="d738c6d83d3fb6f3321213f93272b80fb1a22ca1" offset="0" />
4689         </dataarea>
4690      </part>
4691   </software>
4692
4693   <software name="komparsz">
4694      <description>Komparátor Számítás</description>
4695      <year>198?</year>
4696      <publisher>&lt;unknown&gt;</publisher>
4697
4698      <part name="flop1" interface="floppy_5_25">
4699         <dataarea name="flop" size="368640">
4700            <rom name="komparsz.dsk" size="368640" crc="992c4410" sha1="bd2ba6f3e96bb58c7264f7304441aac25267dddf" offset="0" />
4701         </dataarea>
4702      </part>
4703   </software>
4704
4705   <software name="kormoci">
4706      <description>Körmöci Arany</description>
4707      <year>198?</year>
4708      <publisher>&lt;unknown&gt;</publisher>
4709
4710      <part name="flop1" interface="floppy_5_25">
4711         <dataarea name="flop" size="368640">
4712            <rom name="kormociarany.dsk" size="368640" crc="6b8d2743" sha1="592250fb90f2876c7b4596b3017b5ced496f205e" offset="0" />
4713         </dataarea>
4714      </part>
4715   </software>
4716
4717   <software name="korok">
4718      <description>Körök</description>
4719      <year>198?</year>
4720      <publisher>&lt;unknown&gt;</publisher>
4721
4722      <part name="flop1" interface="floppy_5_25">
4723         <dataarea name="flop" size="368640">
4724            <rom name="korok.dsk" size="368640" crc="60124740" sha1="b2bf6e520fe1a331cce842f67c113667f31702fb" offset="0" />
4725         </dataarea>
4726      </part>
4727   </software>
4728
4729   <software name="korong">
4730      <description>Korongbiliárd</description>
4731      <year>198?</year>
4732      <publisher>Software in LUX</publisher>
4733
4734      <part name="flop1" interface="floppy_5_25">
4735         <dataarea name="flop" size="368640">
4736            <rom name="korong.dsk" size="368640" crc="54f8d41f" sha1="5d84684bb7211ad2f49914c53213db84a76f66ca" offset="0" />
4737         </dataarea>
4738      </part>
4739   </software>
4740
4741   <software name="korvonal">
4742      <description>Körvonal</description>
4743      <year>198?</year>
4744      <publisher>K&amp;K Soft</publisher>
4745
4746      <part name="flop1" interface="floppy_5_25">
4747         <dataarea name="flop" size="368640">
4748            <rom name="korvonal.dsk" size="368640" crc="3f1d463e" sha1="88e783d5f13c00f64969cffb781796634d4914e4" offset="0" />
4749         </dataarea>
4750      </part>
4751   </software>
4752
4753   <software name="krok">
4754      <description>Krok</description>
4755      <year>198?</year>
4756      <publisher>&lt;unknown&gt;</publisher>
4757
4758      <part name="flop1" interface="floppy_5_25">
4759         <dataarea name="flop" size="368640">
4760            <rom name="krokv1.dsk" size="368640" crc="2867a806" sha1="8fcce1104a677698332bad6f7b542dcb90f15b8f" offset="0" />
4761         </dataarea>
4762      </part>
4763   </software>
4764
4765   <software name="kroka" cloneof="krok">
4766      <description>Krok (Alt)</description>
4767      <year>198?</year>
4768      <publisher>&lt;unknown&gt;</publisher>
4769
4770      <part name="flop1" interface="floppy_5_25">
4771         <dataarea name="flop" size="368640">
4772            <rom name="krokv2.dsk" size="368640" crc="1dd3097b" sha1="61294ac6655a9cb5807d1a2200c80a78e0327269" offset="0" />
4773         </dataarea>
4774      </part>
4775   </software>
4776
4777   <software name="kugli">
4778      <description>Kugli</description>
4779      <year>198?</year>
4780      <publisher>&lt;unknown&gt;</publisher>
4781
4782      <part name="flop1" interface="floppy_5_25">
4783         <dataarea name="flop" size="368640">
4784            <rom name="kugli.dsk" size="368640" crc="e55dc4fb" sha1="0f643b81ae3924f5267218c44ab56dcb32ad75b6" offset="0" />
4785         </dataarea>
4786      </part>
4787   </software>
4788
4789   <software name="kukucs">
4790      <description>Kukucs</description>
4791      <year>1987</year>
4792      <publisher>King ec Software</publisher>
4793
4794      <part name="flop1" interface="floppy_5_25">
4795         <dataarea name="flop" size="368640">
4796            <rom name="kukucs.dsk" size="368640" crc="06c5a2af" sha1="29c663aeb43538fcc1076fef3362fdfe10972cca" offset="0" />
4797         </dataarea>
4798      </part>
4799   </software>
4800
4801   <software name="kulcs">
4802      <description>Kulcs</description>
4803      <year>198?</year>
4804      <publisher>&lt;unknown&gt;</publisher>
4805
4806      <part name="flop1" interface="floppy_5_25">
4807         <dataarea name="flop" size="368640">
4808            <rom name="kulcs.dsk" size="368640" crc="e4561aee" sha1="971b05f18007d2cb78352b4719aa07d88897805a" offset="0" />
4809         </dataarea>
4810      </part>
4811   </software>
4812
4813   <software name="kulcsjat" cloneof="kulcs">
4814      <description>Kulcs Játék</description>
4815      <year>198?</year>
4816      <publisher>&lt;unknown&gt;</publisher>
4817
4818      <part name="flop1" interface="floppy_5_25">
4819         <dataarea name="flop" size="368640">
4820            <rom name="kulcsjatek.dsk" size="368640" crc="27bda7f6" sha1="863bff36cc4f86e9d64cf4c327cd9b55a14a53e0" offset="0" />
4821         </dataarea>
4822      </part>
4823   </software>
4824
4825   <software name="kulcshaz">
4826      <description>Kulcsház</description>
4827      <year>198?</year>
4828      <publisher>K&amp;K Soft</publisher>
4829
4830      <part name="flop1" interface="floppy_5_25">
4831         <dataarea name="flop" size="368640">
4832            <rom name="kulcshaz.dsk" size="368640" crc="b982cd65" sha1="1ab9f988e0257430640928e194c81fe22ccdbc97" offset="0" />
4833         </dataarea>
4834      </part>
4835   </software>
4836
4837   <software name="kulcsha2">
4838      <description>Kulcsház 2</description>
4839      <year>198?</year>
4840      <publisher>K&amp;K Soft</publisher>
4841
4842      <part name="flop1" interface="floppy_5_25">
4843         <dataarea name="flop" size="368640">
4844            <rom name="kulcshaz2.dsk" size="368640" crc="be503833" sha1="b07b23bdb7774d9414b5be4ebe2babffce1429eb" offset="0" />
4845         </dataarea>
4846      </part>
4847   </software>
4848
4849   <software name="kwfb">
4850      <description>Keywords + F-BASIC 1.0</description>
4851      <year>1987</year>
4852      <publisher>Péter Bereczky</publisher>
4853
4854      <part name="flop1" interface="floppy_5_25">
4855         <dataarea name="flop" size="368640">
4856            <rom name="kwfb.dsk" size="368640" crc="7e8e8445" sha1="81f2001bf6daae10a65480ebb72b570616f49b33" offset="0" />
4857         </dataarea>
4858      </part>
4859   </software>
4860
4861   <software name="lablesli">
4862      <description>Labirintus Leslie</description>
4863      <year>1987</year>
4864      <publisher>Zsolt Dobrovics</publisher>
4865
4866      <part name="flop1" interface="floppy_5_25">
4867         <dataarea name="flop" size="368640">
4868            <rom name="lab_lesl.dsk" size="368640" crc="5a12cff2" sha1="d08bb9d6cde063553db5b032dc955521e071af11" offset="0" />
4869         </dataarea>
4870      </part>
4871   </software>
4872
4873   <software name="labizold">
4874      <description>Labirintus (Zoltán Gugi)</description>
4875      <year>198?</year>
4876      <publisher>Zoltán Gugi</publisher>
4877
4878      <part name="flop1" interface="floppy_5_25">
4879         <dataarea name="flop" size="368640">
4880            <rom name="lab_zold.dsk" size="368640" crc="bf0efe93" sha1="bb079eabc0d4ae9f9f0a70db0fd5043d6fca100b" offset="0" />
4881         </dataarea>
4882      </part>
4883   </software>
4884
4885   <software name="labirint">
4886      <description>Labirintus</description>
4887      <year>198?</year>
4888      <publisher>&lt;unknown&gt;</publisher>
4889
4890      <part name="flop1" interface="floppy_5_25">
4891         <dataarea name="flop" size="368640">
4892            <rom name="labirint.dsk" size="368640" crc="ffb06c68" sha1="2e190011d8ed826845be9889a7acab90d8e6edb1" offset="0" />
4893         </dataarea>
4894      </part>
4895   </software>
4896
4897   <software name="labikigy">
4898      <description>Labirintus - Kígyós</description>
4899      <year>198?</year>
4900      <publisher>&lt;unknown&gt;</publisher>
4901
4902      <part name="flop1" interface="floppy_5_25">
4903         <dataarea name="flop" size="368640">
4904            <rom name="labirintus-kigyo.dsk" size="368640" crc="b3dd7235" sha1="795145247e03b7b24d5aea4015c7e3a3ee5db9d4" offset="0" />
4905         </dataarea>
4906      </part>
4907   </software>
4908
4909   <software name="labiri3d">
4910      <description>Labirintus (3D)</description>
4911      <year>198?</year>
4912      <publisher>Zoltán Gugi</publisher>
4913
4914      <part name="flop1" interface="floppy_5_25">
4915         <dataarea name="flop" size="368640">
4916            <rom name="labirintus.dsk" size="368640" crc="e9d7ab1b" sha1="006d1cc41cf34009b32356999ddd350b5c055253" offset="0" />
4917         </dataarea>
4918      </part>
4919   </software>
4920
4921   <software name="laddman">
4922      <description>Ladderman</description>
4923      <year>1989</year>
4924      <publisher>Berysoft</publisher>
4925
4926      <part name="flop1" interface="floppy_5_25">
4927         <dataarea name="flop" size="368640">
4928            <rom name="ladderman.dsk" size="368640" crc="7c28b953" sha1="4a533baa384af18de3e2cdbb717ef87e2d6871f9" offset="0" />
4929         </dataarea>
4930      </part>
4931   </software>
4932
4933   <software name="laddmana" cloneof="laddman">
4934      <description>Ladderman (Alt)</description>
4935      <year>1989</year>
4936      <publisher>Berysoft</publisher>
4937
4938      <part name="flop1" interface="floppy_5_25">
4939         <dataarea name="flop" size="368640">
4940            <rom name="laddermanv2.dsk" size="368640" crc="ef9dafd3" sha1="94dde5148c605b9cd88f25216a11ef81731f46fc" offset="0" />
4941         </dataarea>
4942      </part>
4943   </software>
4944
4945   <software name="lagreno">
4946      <description>La Grenoiulle</description>
4947      <year>1991</year>
4948      <publisher>Agilar - Cápasoft</publisher>
4949
4950      <part name="flop1" interface="floppy_5_25">
4951         <dataarea name="flop" size="368640">
4952            <rom name="lagreno.dsk" size="368640" crc="84575c84" sha1="00be72f7fc54ca59c16593404f76c1f798fd8002" offset="0" />
4953         </dataarea>
4954      </part>
4955   </software>
4956
4957   <software name="lampacs">
4958      <description>Bűvös lámpácskák</description>
4959      <year>198?</year>
4960      <publisher>&lt;unknown&gt;</publisher>
4961
4962      <part name="flop1" interface="floppy_5_25">
4963         <dataarea name="flop" size="368640">
4964            <rom name="lampacs.dsk" size="368640" crc="0b7663d3" sha1="b149ea52329d140fabeb50707aa661bdac390643" offset="0" />
4965         </dataarea>
4966      </part>
4967   </software>
4968
4969   <software name="lampak">
4970      <description>Lámpák</description>
4971      <year>1986</year>
4972      <publisher>István Németh</publisher>
4973
4974      <part name="flop1" interface="floppy_5_25">
4975         <dataarea name="flop" size="368640">
4976            <rom name="lampak.dsk" size="368640" crc="f60c55a3" sha1="c63a514816f9c6815774788889f329b12d95185c" offset="0" />
4977         </dataarea>
4978      </part>
4979   </software>
4980
4981   <software name="lede">
4982      <description>Le Dé</description>
4983      <year>198?</year>
4984      <publisher>Cápasoft</publisher>
4985
4986      <part name="flop1" interface="floppy_5_25">
4987         <dataarea name="flop" size="368640">
4988            <rom name="lede.dsk" size="368640" crc="ba2ffe77" sha1="6b37df060e97830f21af4e6dfc7ca56b4f4e1be7" offset="0" />
4989         </dataarea>
4990      </part>
4991   </software>
4992
4993   <software name="ledea" cloneof="lede">
4994      <description>Le Dé (Alt)</description>
4995      <year>198?</year>
4996      <publisher>Cápasoft</publisher>
4997
4998      <part name="flop1" interface="floppy_5_25">
4999         <dataarea name="flop" size="368640">
5000            <rom name="ledev2.dsk" size="368640" crc="1ae15727" sha1="bbc3b72363095184852d47891c684285871443f8" offset="0" />
5001         </dataarea>
5002      </part>
5003   </software>
5004
5005   <software name="legvedel">
5006      <description>Légvédelem</description>
5007      <year>198?</year>
5008      <publisher>&lt;unknown&gt;</publisher>
5009
5010      <part name="flop1" interface="floppy_5_25">
5011         <dataarea name="flop" size="368640">
5012            <rom name="legvedelem.dsk" size="368640" crc="3f75b564" sha1="a4b3b743a7360ed6b2e6d474df873f80bd5ae4cb" offset="0" />
5013         </dataarea>
5014      </part>
5015   </software>
5016
5017   <software name="lennon">
5018      <description>Lennon</description>
5019      <year>198?</year>
5020      <publisher>&lt;unknown&gt;</publisher>
5021
5022      <part name="flop1" interface="floppy_5_25">
5023         <dataarea name="flop" size="368640">
5024            <rom name="lennon.dsk" size="368640" crc="94610c08" sha1="7b936bff392b46cbd758fa0261beacb0051ca4d9" offset="0" />
5025         </dataarea>
5026      </part>
5027   </software>
5028
5029   <software name="lepke">
5030      <description>Mentsd Meg a Lepkéket!</description>
5031      <year>198?</year>
5032      <publisher>Janos Racz</publisher>
5033
5034      <part name="flop1" interface="floppy_5_25">
5035         <dataarea name="flop" size="368640">
5036            <rom name="lepke.dsk" size="368640" crc="c897a5cd" sha1="25f10a58927852fc90c14ab82423157f8d339499" offset="0" />
5037         </dataarea>
5038      </part>
5039   </software>
5040
5041   <software name="letiltas">
5042      <description>Letiltás</description>
5043      <year>1986</year>
5044      <publisher>Gaba Software</publisher>
5045
5046      <part name="flop1" interface="floppy_5_25">
5047         <dataarea name="flop" size="368640">
5048            <rom name="letiltas.dsk" size="368640" crc="e62d5b93" sha1="6594a5e74cce06d2f9a61250a2d67b43f156bb6d" offset="0" />
5049         </dataarea>
5050      </part>
5051   </software>
5052
5053   <software name="letra">
5054      <description>Létra</description>
5055      <year>198?</year>
5056      <publisher>Novotrade</publisher>
5057
5058      <part name="flop1" interface="floppy_5_25">
5059         <dataarea name="flop" size="368640">
5060            <rom name="letra.dsk" size="368640" crc="e03a929e" sha1="1579a10a2eaca6364a327c2b53f84c7e6f99a36b" offset="0" />
5061         </dataarea>
5062      </part>
5063   </software>
5064
5065   <software name="letraa" cloneof="letra">
5066      <description>Létra (Alt)</description>
5067      <year>198?</year>
5068      <publisher>Novotrade</publisher>
5069
5070      <part name="flop1" interface="floppy_5_25">
5071         <dataarea name="flop" size="368640">
5072            <rom name="letrav2.dsk" size="368640" crc="906001ba" sha1="a1683e6c4f9ce4b795da2e05a4a30939b7191db2" offset="0" />
5073         </dataarea>
5074      </part>
5075   </software>
5076
5077   <software name="level3">
5078      <description>Level Three</description>
5079      <year>198?</year>
5080      <publisher>Software in LUX</publisher>
5081
5082      <part name="flop1" interface="floppy_5_25">
5083         <dataarea name="flop" size="368640">
5084            <rom name="level3.dsk" size="368640" crc="47c788d8" sha1="4d07efa6dfbfb07aecf7869a8d119ded7d0388bb" offset="0" />
5085         </dataarea>
5086      </part>
5087   </software>
5088
5089   <software name="levelkes">
5090      <description>Levélkészítő</description>
5091      <year>1988</year>
5092      <publisher>&lt;unknown&gt;</publisher>
5093
5094      <part name="flop1" interface="floppy_5_25">
5095         <dataarea name="flop" size="368640">
5096            <rom name="levelkes.dsk" size="368640" crc="eddc7759" sha1="77a14a91ac6891ad1bb95d6aa7cc54e7397b7adb" offset="0" />
5097         </dataarea>
5098      </part>
5099   </software>
5100
5101   <software name="lezer">
5102      <description>Lézer</description>
5103      <year>1988</year>
5104      <publisher>SYS</publisher>
5105
5106      <part name="flop1" interface="floppy_5_25">
5107         <dataarea name="flop" size="368640">
5108            <rom name="lezer.dsk" size="368640" crc="4eec87f4" sha1="daa436c796a8c5f6e9c1da26391f8a1a450c682d" offset="0" />
5109         </dataarea>
5110      </part>
5111   </software>
5112
5113   <software name="liba">
5114      <description>Liba</description>
5115      <year>198?</year>
5116      <publisher>&lt;unknown&gt;</publisher>
5117
5118      <part name="flop1" interface="floppy_5_25">
5119         <dataarea name="flop" size="368640">
5120            <rom name="liba.dsk" size="368640" crc="1de057d1" sha1="cc70fab54071483d03d388b299da535584cb353d" offset="0" />
5121         </dataarea>
5122      </part>
5123   </software>
5124
5125   <software name="lift">
5126      <description>Lift</description>
5127      <year>198?</year>
5128      <publisher>Software in LUX</publisher>
5129
5130      <part name="flop1" interface="floppy_5_25">
5131         <dataarea name="flop" size="368640">
5132            <rom name="lift.dsk" size="368640" crc="c5f4d962" sha1="014ffaf6d48ceda56a1efc31937b84dad03c4c33" offset="0" />
5133         </dataarea>
5134      </part>
5135   </software>
5136
5137   <software name="liftes">
5138      <description>Liftes Fiú</description>
5139      <year>198?</year>
5140      <publisher>K&amp;K Soft</publisher>
5141
5142      <part name="flop1" interface="floppy_5_25">
5143         <dataarea name="flop" size="368640">
5144            <rom name="liftes.dsk" size="368640" crc="ee9ad39e" sha1="6e9c07ad93fd251027f4786818e4f5eaa9d10d00" offset="0" />
5145         </dataarea>
5146      </part>
5147   </software>
5148
5149   <software name="lina">
5150      <description>Lina</description>
5151      <year>198?</year>
5152      <publisher>STV</publisher>
5153
5154      <part name="flop1" interface="floppy_5_25">
5155         <dataarea name="flop" size="368640">
5156            <rom name="lina.dsk" size="368640" crc="dddd1fb9" sha1="475ff4f6f57f26e9f2240be06ab4aa617aed64fd" offset="0" />
5157         </dataarea>
5158      </part>
5159   </software>
5160
5161   <software name="locomot">
5162      <description>Locomotion</description>
5163      <year>1985</year>
5164      <publisher>Mastertronic</publisher>
5165
5166      <part name="flop1" interface="floppy_5_25">
5167         <dataarea name="flop" size="368640">
5168            <rom name="locomotion.dsk" size="368640" crc="340939d0" sha1="4dbb587dbc82f37f7f85439107d12fe4f0d3d997" offset="0" />
5169         </dataarea>
5170      </part>
5171   </software>
5172
5173   <software name="logo">
5174      <description>Logo - Teknocgrafika</description>
5175      <year>1987</year>
5176      <publisher>László Nagy</publisher>
5177
5178      <part name="flop1" interface="floppy_5_25">
5179         <dataarea name="flop" size="368640">
5180            <rom name="logo.dsk" size="368640" crc="4cbf5e18" sha1="1b131c84ee19da2ffa9af1a7ca2c67dbd7ebd9e2" offset="0" />
5181         </dataarea>
5182      </part>
5183   </software>
5184
5185   <software name="logosz">
5186      <description>Logo</description>
5187      <year>198?</year>
5188      <publisher>&lt;unknown&gt;</publisher>
5189
5190      <part name="flop1" interface="floppy_5_25">
5191         <dataarea name="flop" size="368640">
5192            <rom name="logosz.dsk" size="368640" crc="afc9f94b" sha1="e4445daa99e22c2cb755df08d91823331fe8fd86" offset="0" />
5193         </dataarea>
5194      </part>
5195   </software>
5196
5197   <software name="logosza" cloneof="logosz">
5198      <description>Logo (Alt)</description>
5199      <year>198?</year>
5200      <publisher>&lt;unknown&gt;</publisher>
5201
5202      <part name="flop1" interface="floppy_5_25">
5203         <dataarea name="flop" size="368640">
5204            <rom name="logoszv2.dsk" size="368640" crc="0bd67ecc" sha1="01401aa78ff0f073f42507db25eed70cc93dc819" offset="0" />
5205         </dataarea>
5206      </part>
5207   </software>
5208
5209   <software name="lottojat">
5210      <description>Lotto - Jatekot Segito Program</description>
5211      <year>1986</year>
5212      <publisher>Centrumdata VGMK</publisher>
5213
5214      <part name="flop1" interface="floppy_5_25">
5215         <dataarea name="flop" size="368640">
5216            <rom name="lotto [a].dsk" size="368640" crc="0373b542" sha1="c788f979e03f1c3416a718ebff7451c5fedd60b5" offset="0" />
5217         </dataarea>
5218      </part>
5219   </software>
5220
5221   <software name="lotto">
5222      <description>Lotto</description>
5223      <year>198?</year>
5224      <publisher>&lt;unknown&gt;</publisher>
5225
5226      <part name="flop1" interface="floppy_5_25">
5227         <dataarea name="flop" size="368640">
5228            <rom name="lotto.dsk" size="368640" crc="1457f31c" sha1="d55af47473fd55ea3817682437fa5dc53f7aa2a3" offset="0" />
5229         </dataarea>
5230      </part>
5231   </software>
5232
5233   <software name="lotto1">
5234      <description>Lotto (Different)</description>
5235      <year>198?</year>
5236      <publisher>&lt;unknown&gt;</publisher>
5237
5238      <part name="flop1" interface="floppy_5_25">
5239         <dataarea name="flop" size="368640">
5240            <rom name="lottosza.dsk" size="368640" crc="3d70c636" sha1="4305792f0fe5b0cda9d8c2306c37a312e532e3f3" offset="0" />
5241         </dataarea>
5242      </part>
5243   </software>
5244
5245   <software name="lovagito">
5246      <description>Lovagi Torna</description>
5247      <year>1988</year>
5248      <publisher>Berysoft</publisher>
5249
5250      <part name="flop1" interface="floppy_5_25">
5251         <dataarea name="flop" size="368640">
5252            <rom name="lovagitorna.dsk" size="368640" crc="92212618" sha1="d05cf02fb2cdfb9981f9453d1eb3965461dbf749" offset="0" />
5253         </dataarea>
5254      </part>
5255   </software>
5256
5257   <software name="lovascsa">
5258      <description>Lovascsata</description>
5259      <year>198?</year>
5260      <publisher>Steve Software</publisher>
5261
5262      <part name="flop1" interface="floppy_5_25">
5263         <dataarea name="flop" size="368640">
5264            <rom name="lovascsata.dsk" size="368640" crc="f2980151" sha1="0d49a62fcd54f5013ea0e749a05729a33e33a8da" offset="0" />
5265         </dataarea>
5266      </part>
5267   </software>
5268
5269   <software name="loversen">
5270      <description>Lóverseny</description>
5271      <year>198?</year>
5272      <publisher>&lt;unknown&gt;</publisher>
5273
5274      <part name="flop1" interface="floppy_5_25">
5275         <dataarea name="flop" size="368640">
5276            <rom name="loverseny.dsk" size="368640" crc="f6dfba2e" sha1="1ac2ae0e2e08eff8189665d06bf6ed68b627ed6a" offset="0" />
5277         </dataarea>
5278      </part>
5279   </software>
5280
5281   <software name="loversena" cloneof="loversen">
5282      <description>Lóverseny (Alt)</description>
5283      <year>198?</year>
5284      <publisher>&lt;unknown&gt;</publisher>
5285
5286      <part name="flop1" interface="floppy_5_25">
5287         <dataarea name="flop" size="368640">
5288            <rom name="loverv2.dsk" size="368640" crc="19e53cc6" sha1="78ef78618696f177aa6a8056948edc0f0112e975" offset="0" />
5289         </dataarea>
5290      </part>
5291   </software>
5292
5293   <software name="lsrutin">
5294      <description>Load-Save usr Rutinok</description>
5295      <year>1986</year>
5296      <publisher>Géza Garai</publisher>
5297
5298      <part name="flop1" interface="floppy_5_25">
5299         <dataarea name="flop" size="368640">
5300            <rom name="lsrutin.dsk" size="368640" crc="51cb71a1" sha1="a18147aec89051b601df79a5f11904828c201894" offset="0" />
5301         </dataarea>
5302      </part>
5303   </software>
5304
5305   <software name="lsrutin2" cloneof="lsrutin">
5306      <description>Load-Save usr Rutinok v2</description>
5307      <year>1986</year>
5308      <publisher>Géza Garai</publisher>
5309
5310      <part name="flop1" interface="floppy_5_25">
5311         <dataarea name="flop" size="368640">
5312            <rom name="lsrutin2.dsk" size="368640" crc="e66b29a8" sha1="b7281e32fe3ed7da30a1c0da0871c5984c1ee317" offset="0" />
5313         </dataarea>
5314      </part>
5315   </software>
5316
5317   <software name="lsrutin3" cloneof="lsrutin">
5318      <description>Load-Save usr Rutinok v3</description>
5319      <year>1986</year>
5320      <publisher>Géza Garai</publisher>
5321
5322      <part name="flop1" interface="floppy_5_25">
5323         <dataarea name="flop" size="368640">
5324            <rom name="lsrutin3.dsk" size="368640" crc="37adfa87" sha1="02f049283d9b29a6d04c8ce9aa5a23949bfc00e2" offset="0" />
5325         </dataarea>
5326      </part>
5327   </software>
5328
5329   <software name="holdra">
5330      <description>Holdra szállás</description>
5331      <year>198?</year>
5332      <publisher>&lt;unknown&gt;</publisher>
5333
5334      <part name="flop1" interface="floppy_5_25">
5335         <dataarea name="flop" size="368640">
5336            <rom name="luna.dsk" size="368640" crc="e063e19b" sha1="97a1fb8372f621724ed3cbed307d70a4a1f735c1" offset="0" />
5337         </dataarea>
5338      </part>
5339   </software>
5340
5341   <software name="monitor">
5342      <description>Monitor v0.5</description>
5343      <year>1990</year>
5344      <publisher>Andras Soos</publisher>
5345
5346      <part name="flop1" interface="floppy_5_25">
5347         <dataarea name="flop" size="368640">
5348            <rom name="m5.dsk" size="368640" crc="61266824" sha1="13f71d09af887fe25e5481e328903599fae6bb4c" offset="0" />
5349         </dataarea>
5350      </part>
5351   </software>
5352
5353   <software name="macskafo">
5354      <description>Macskafogó</description>
5355      <year>198?</year>
5356      <publisher>&lt;unknown&gt;</publisher>
5357
5358      <part name="flop1" interface="floppy_5_25">
5359         <dataarea name="flop" size="368640">
5360            <rom name="macskafo.dsk" size="368640" crc="1dd54927" sha1="bd6e8ae826f7202d01d7bf294d650b302348dcf5" offset="0" />
5361         </dataarea>
5362      </part>
5363   </software>
5364
5365   <software name="magicbal">
5366      <description>Magic Ball</description>
5367      <year>1989</year>
5368      <publisher>'a' Studio</publisher>
5369
5370      <part name="flop1" interface="floppy_5_25">
5371         <dataarea name="flop" size="368640">
5372            <rom name="magicball.dsk" size="368640" crc="154419cd" sha1="9ea0f702d0784d3176a15366e1ac455f3da9fdb9" offset="0" />
5373         </dataarea>
5374      </part>
5375   </software>
5376
5377   <software name="magicbala" cloneof="magicbal">
5378      <description>Magic Ball (Alt)</description>
5379      <year>1989</year>
5380      <publisher>'a' Studio</publisher>
5381
5382      <part name="flop1" interface="floppy_5_25">
5383         <dataarea name="flop" size="368640">
5384            <rom name="magicballv2.dsk" size="368640" crc="52dbb66d" sha1="b5588fc6dc456e5e0ea1f3c87a875d0c86fcd7a1" offset="0" />
5385         </dataarea>
5386      </part>
5387   </software>
5388
5389   <software name="magyaror">
5390      <description>Magyarország</description>
5391      <year>198?</year>
5392      <publisher>&lt;unknown&gt;</publisher>
5393
5394      <part name="flop1" interface="floppy_5_25">
5395         <dataarea name="flop" size="368640">
5396            <rom name="magyaror.dsk" size="368640" crc="2149a25c" sha1="286bb4da936e61c4cfd2dfe8ca6ac11417717470" offset="0" />
5397         </dataarea>
5398      </part>
5399   </software>
5400
5401   <software name="magyasil">
5402      <description>Magyarország (SIL)</description>
5403      <year>198?</year>
5404      <publisher>Software in LUX</publisher>
5405
5406      <part name="flop1" interface="floppy_5_25">
5407         <dataarea name="flop" size="368640">
5408            <rom name="magyarorszag.dsk" size="368640" crc="3af5efd8" sha1="2ead3b732ef5b127a6be128a4e13f929bb019da1" offset="0" />
5409         </dataarea>
5410      </part>
5411   </software>
5412
5413   <software name="malom">
5414      <description>Malom (S.P. Studio)</description>
5415      <year>1987</year>
5416      <publisher>S.P. Studio</publisher>
5417
5418      <part name="flop1" interface="floppy_5_25">
5419         <dataarea name="flop" size="368640">
5420            <rom name="malom.dsk" size="368640" crc="abf85c56" sha1="f0704af9ac9bdebb56806ea55ff88e4f393fa882" offset="0" />
5421         </dataarea>
5422      </part>
5423   </software>
5424
5425   <software name="malom2">
5426      <description>Malom</description>
5427      <year>198?</year>
5428      <publisher>&lt;unknown&gt;</publisher>
5429
5430      <part name="flop1" interface="floppy_5_25">
5431         <dataarea name="flop" size="368640">
5432            <rom name="malom2.dsk" size="368640" crc="51751dec" sha1="7bc2c90cf618e37459f4c54297013546c3a7e03d" offset="0" />
5433         </dataarea>
5434      </part>
5435   </software>
5436
5437   <software name="mandelma">
5438      <description>Mandelmagic v1.0</description>
5439      <year>198?</year>
5440      <publisher>Albatross - Flocky Chocs</publisher>
5441
5442      <part name="flop1" interface="floppy_5_25">
5443         <dataarea name="flop" size="368640">
5444            <rom name="mandelma.dsk" size="368640" crc="5c4549d8" sha1="2690311568a1001af464a8f98010c4c423659630" offset="0" />
5445         </dataarea>
5446      </part>
5447   </software>
5448
5449   <software name="mandfrak">
5450      <description>Mandelbrot-Fraktál Generátor</description>
5451      <year>198?</year>
5452      <publisher>&lt;unknown&gt;</publisher>
5453
5454      <part name="flop1" interface="floppy_5_25">
5455         <dataarea name="flop" size="368640">
5456            <rom name="mandfrak.dsk" size="368640" crc="9f34c8ea" sha1="83847a5a52e295106d987bb543fbf9d5457d6d61" offset="0" />
5457         </dataarea>
5458      </part>
5459   </software>
5460
5461   <software name="mariolab">
5462      <description>Márió a Labirintusban</description>
5463      <year>198?</year>
5464      <publisher>Béla Takács</publisher>
5465
5466      <part name="flop1" interface="floppy_5_25">
5467         <dataarea name="flop" size="368640">
5468            <rom name="marioalabirintusban.dsk" size="368640" crc="9b6e568e" sha1="8ad4b12fec95c936ff4af69441c8d7a386e6583c" offset="0" />
5469         </dataarea>
5470      </part>
5471   </software>
5472
5473   <software name="mariolaba" cloneof="mariolab">
5474      <description>Márió a Labirintusban (Alt)</description>
5475      <year>198?</year>
5476      <publisher>Béla Takács</publisher>
5477
5478      <part name="flop1" interface="floppy_5_25">
5479         <dataarea name="flop" size="368640">
5480            <rom name="marioalabirintusbanv2.dsk" size="368640" crc="79461a9f" sha1="6aa2274efe0c1595ce59b540e628486a20394c05" offset="0" />
5481         </dataarea>
5482      </part>
5483   </software>
5484
5485   <software name="marokko">
5486      <description>Marokkó</description>
5487      <year>198?</year>
5488      <publisher>'a' Studio</publisher>
5489
5490      <part name="flop1" interface="floppy_5_25">
5491         <dataarea name="flop" size="368640">
5492            <rom name="marokko.dsk" size="368640" crc="19925136" sha1="6934768e0ddf496c0c2d2b1cf8d1c7c0174ab7d1" offset="0" />
5493         </dataarea>
5494      </part>
5495   </software>
5496
5497   <software name="mars">
5498      <description>Mars</description>
5499      <year>1988</year>
5500      <publisher>Gigasoft</publisher>
5501
5502      <part name="flop1" interface="floppy_5_25">
5503         <dataarea name="flop" size="368640">
5504            <rom name="mars.dsk" size="368640" crc="9a45ab50" sha1="04c2271b96f69cfa1c831b2fa63cf1ed8064c322" offset="0" />
5505         </dataarea>
5506      </part>
5507   </software>
5508
5509   <software name="marsa" cloneof="mars">
5510      <description>Mars (Alt)</description>
5511      <year>1988</year>
5512      <publisher>Gigasoft</publisher>
5513
5514      <part name="flop1" interface="floppy_5_25">
5515         <dataarea name="flop" size="368640">
5516            <rom name="marsv2.dsk" size="368640" crc="58ccf31e" sha1="fce4cb3b8430e13e8fa0f8dc79be4324468b3d47" offset="0" />
5517         </dataarea>
5518      </part>
5519   </software>
5520
5521   <software name="masolo1">
5522      <description>Másoló 1</description>
5523      <year>198?</year>
5524      <publisher>&lt;unknown&gt;</publisher>
5525
5526      <part name="flop1" interface="floppy_5_25">
5527         <dataarea name="flop" size="368640">
5528            <rom name="masolo1.dsk" size="368640" crc="0cf4491e" sha1="17e89fd5b70051e4257c675c115e591b14fb22bd" offset="0" />
5529         </dataarea>
5530      </part>
5531   </software>
5532
5533   <software name="mastermi">
5534      <description>Mastermind</description>
5535      <year>198?</year>
5536      <publisher>&lt;unknown&gt;</publisher>
5537
5538      <part name="flop1" interface="floppy_5_25">
5539         <dataarea name="flop" size="368640">
5540            <rom name="mastermind.dsk" size="368640" crc="faf2b2e0" sha1="b5e6a89e64eedaee435743e2fe8fd2dca7202804" offset="0" />
5541         </dataarea>
5542      </part>
5543   </software>
5544
5545   <software name="matrix">
5546      <description>Mátrix</description>
5547      <year>1987</year>
5548      <publisher>József Cseh</publisher>
5549
5550      <part name="flop1" interface="floppy_5_25">
5551         <dataarea name="flop" size="368640">
5552            <rom name="matrix.dsk" size="368640" crc="71327938" sha1="22c99839901c69c2fdb6f3dc47b990fe8ae7fbd1" offset="0" />
5553         </dataarea>
5554      </part>
5555   </software>
5556
5557   <software name="mav10">
5558      <description>Számelméleti Programok - MAV 10</description>
5559      <year>198?</year>
5560      <publisher>Dr. Andras Varga</publisher>
5561
5562      <part name="flop1" interface="floppy_5_25">
5563         <dataarea name="flop" size="368640">
5564            <rom name="mav10.dsk" size="368640" crc="f07c50f5" sha1="6797ad2b45721087b9c9cfe09145ac05450ea0d2" offset="0" />
5565         </dataarea>
5566      </part>
5567   </software>
5568
5569   <software name="mav11">
5570      <description>Egyenletek megoldása - MAV 11</description>
5571      <year>1983</year>
5572      <publisher>Dr. Andras Varga</publisher>
5573
5574      <part name="flop1" interface="floppy_5_25">
5575         <dataarea name="flop" size="368640">
5576            <rom name="mav11.dsk" size="368640" crc="345dd238" sha1="13210c3257488f411f9c2857fa52c9dec707f268" offset="0" />
5577         </dataarea>
5578      </part>
5579   </software>
5580
5581   <software name="mav12">
5582      <description>Kombinatorikai Programok - MAV 12</description>
5583      <year>1983</year>
5584      <publisher>Dr. Andras Varga</publisher>
5585
5586      <part name="flop1" interface="floppy_5_25">
5587         <dataarea name="flop" size="368640">
5588            <rom name="mav12.dsk" size="368640" crc="516bb2c4" sha1="2c2c7095dc30927dab41e4c72370c326f7eacc25" offset="0" />
5589         </dataarea>
5590      </part>
5591   </software>
5592
5593   <software name="mav13">
5594      <description>Függvényábrázolás és transzformáció - MAV 13</description>
5595      <year>1983</year>
5596      <publisher>Dr. Andras Varga</publisher>
5597
5598      <part name="flop1" interface="floppy_5_25">
5599         <dataarea name="flop" size="368640">
5600            <rom name="mav13.dsk" size="368640" crc="ca223903" sha1="62af098b57d360b552f9661abd21243c344e8d0d" offset="0" />
5601         </dataarea>
5602      </part>
5603   </software>
5604
5605   <software name="mav23">
5606      <description>Gyokkereso - MAV 23</description>
5607      <year>1983</year>
5608      <publisher>Dr. Andras Varga</publisher>
5609
5610      <part name="flop1" interface="floppy_5_25">
5611         <dataarea name="flop" size="368640">
5612            <rom name="mav23.dsk" size="368640" crc="4fba8f1b" sha1="779a0cd109ad2e918669d9d9e8b7053f19fa51ab" offset="0" />
5613         </dataarea>
5614      </part>
5615   </software>
5616
5617   <software name="mav24">
5618      <description>Galton Deszka - MAV24</description>
5619      <year>1983</year>
5620      <publisher>Dr. András Varga</publisher>
5621
5622      <part name="flop1" interface="floppy_5_25">
5623         <dataarea name="flop" size="368640">
5624            <rom name="mav24.dsk" size="368640" crc="912ea58d" sha1="6e965508ff325dcf1ebe7a4537abf09173d2c701" offset="0" />
5625         </dataarea>
5626      </part>
5627   </software>
5628
5629   <software name="mav26">
5630      <description>Prímszámok - MAV 26</description>
5631      <year>198?</year>
5632      <publisher>&lt;unknown&gt;</publisher>
5633
5634      <part name="flop1" interface="floppy_5_25">
5635         <dataarea name="flop" size="368640">
5636            <rom name="mav26.dsk" size="368640" crc="a493757e" sha1="69124b0f8f135d404f986f01504273f44b74305d" offset="0" />
5637         </dataarea>
5638      </part>
5639   </software>
5640
5641   <software name="maya">
5642      <description>Maya</description>
5643      <year>1986</year>
5644      <publisher>Steve Software</publisher>
5645
5646      <part name="flop1" interface="floppy_5_25">
5647         <dataarea name="flop" size="368640">
5648            <rom name="maya.dsk" size="368640" crc="c9c8daa9" sha1="ac5d1cb7ba73099651b7b42e0119ddd47256d13d" offset="0" />
5649         </dataarea>
5650      </part>
5651   </software>
5652
5653   <software name="mbas">
5654      <description>Magyar BASIC v1.2</description>
5655      <year>198?</year>
5656      <publisher>Albatross</publisher>
5657
5658      <part name="flop1" interface="floppy_5_25">
5659         <dataarea name="flop" size="368640">
5660            <rom name="mbas.dsk" size="368640" crc="bf15bba4" sha1="e837ed6a7503b6b0060dd2d9ae9695bece4798da" offset="0" />
5661         </dataarea>
5662      </part>
5663   </software>
5664
5665   <software name="mbashasz">
5666      <description>Magyar BASIC v1.2 - Hasznalati Utmutato</description>
5667      <year>198?</year>
5668      <publisher>Albatross</publisher>
5669
5670      <part name="flop1" interface="floppy_5_25">
5671         <dataarea name="flop" size="368640">
5672            <rom name="mbashasz.dsk" size="368640" crc="0b164a92" sha1="d3f75f72ef688a54c121cb1263c9a99ca52582e2" offset="0" />
5673         </dataarea>
5674      </part>
5675   </software>
5676
5677   <software name="medence">
5678      <description>Medence</description>
5679      <year>198?</year>
5680      <publisher>&lt;unknown&gt;</publisher>
5681
5682      <part name="flop1" interface="floppy_5_25">
5683         <dataarea name="flop" size="368640">
5684            <rom name="medence.dsk" size="368640" crc="6edad536" sha1="366e1076264bd9c9836b92d4a880f76aa09b0899" offset="0" />
5685         </dataarea>
5686      </part>
5687   </software>
5688
5689   <software name="memo">
5690      <description>Memo</description>
5691      <year>1986</year>
5692      <publisher>&lt;unknown&gt;</publisher>
5693
5694      <part name="flop1" interface="floppy_5_25">
5695         <dataarea name="flop" size="368640">
5696            <rom name="memo.dsk" size="368640" crc="b664fab4" sha1="87db14c5d08253e660e66a5534591e0dd815b755" offset="0" />
5697         </dataarea>
5698      </part>
5699   </software>
5700
5701   <software name="memoa" cloneof="memo">
5702      <description>Memo (Alt)</description>
5703      <year>1986</year>
5704      <publisher>&lt;unknown&gt;</publisher>
5705
5706      <part name="flop1" interface="floppy_5_25">
5707         <dataarea name="flop" size="368640">
5708            <rom name="memov2.dsk" size="368640" crc="07e2fa4a" sha1="ee7f4992f70d6683a806299222d9c6926ee7e522" offset="0" />
5709         </dataarea>
5710      </part>
5711   </software>
5712
5713   <software name="memoria">
5714      <description>Memória</description>
5715      <year>198?</year>
5716      <publisher>&lt;unknown&gt;</publisher>
5717
5718      <part name="flop1" interface="floppy_5_25">
5719         <dataarea name="flop" size="368640">
5720            <rom name="memoria.dsk" size="368640" crc="51e1d566" sha1="9d84c731896f5f9ecb8968fd6286624aa9d4dca7" offset="0" />
5721         </dataarea>
5722      </part>
5723   </software>
5724
5725   <software name="memory">
5726      <description>Memory</description>
5727      <year>1986</year>
5728      <publisher>VGy</publisher>
5729
5730      <part name="flop1" interface="floppy_5_25">
5731         <dataarea name="flop" size="368640">
5732            <rom name="memory.dsk" size="368640" crc="24b8ca5e" sha1="6883590a413451e3ce86ae07c3aabe5700712c0d" offset="0" />
5733         </dataarea>
5734      </part>
5735   </software>
5736
5737   <software name="mentohaj">
5738      <description>Mentőhajó</description>
5739      <year>198?</year>
5740      <publisher>&lt;unknown&gt;</publisher>
5741
5742      <part name="flop1" interface="floppy_5_25">
5743         <dataarea name="flop" size="368640">
5744            <rom name="mentohajo.dsk" size="368640" crc="08f8f5bf" sha1="4819ab2b754bac117f78629bb09478434b2b8830" offset="0" />
5745         </dataarea>
5746      </part>
5747   </software>
5748
5749   <software name="mentsdme">
5750      <description>Mentsd Meg Erdélyt</description>
5751      <year>198?</year>
5752      <publisher>Osmagyar Software</publisher>
5753
5754      <part name="flop1" interface="floppy_5_25">
5755         <dataarea name="flop" size="368640">
5756            <rom name="mentsdmegerdelyt.dsk" size="368640" crc="5d895bfd" sha1="c72c46c89223310acc3c83849af07c27ced3519b" offset="0" />
5757         </dataarea>
5758      </part>
5759   </software>
5760
5761   <software name="merorezg">
5762      <description>Merőleges Rezgések</description>
5763      <year>198?</year>
5764      <publisher>&lt;unknown&gt;</publisher>
5765
5766      <part name="flop1" interface="floppy_5_25">
5767         <dataarea name="flop" size="368640">
5768            <rom name="merorezg.dsk" size="368640" crc="fa5e0f37" sha1="6b38161e1aa37eb3ad18b90b268af627a4b35dd4" offset="0" />
5769         </dataarea>
5770      </part>
5771   </software>
5772
5773   <software name="merryboy">
5774      <description>Merryboy</description>
5775      <year>1991</year>
5776      <publisher>Cápasoft</publisher>
5777
5778      <part name="flop1" interface="floppy_5_25">
5779         <dataarea name="flop" size="368640">
5780            <rom name="merryboy.dsk" size="368640" crc="53cc03c1" sha1="eac3d73ec1036f919f4739c4e37dfdd7c3626e57" offset="0" />
5781         </dataarea>
5782      </part>
5783   </software>
5784
5785   <software name="meseadv">
5786      <description>Mese-Adventure</description>
5787      <year>198?</year>
5788      <publisher>&lt;unknown&gt;</publisher>
5789
5790      <part name="flop1" interface="floppy_5_25">
5791         <dataarea name="flop" size="368640">
5792            <rom name="mese-adventure.dsk" size="368640" crc="5be567d1" sha1="bfe5f8e949f2acda102696049428845ffb59dcea" offset="0" />
5793         </dataarea>
5794      </part>
5795   </software>
5796
5797   <software name="meteorit">
5798      <description>Meteorit</description>
5799      <year>198?</year>
5800      <publisher>K&amp;K Soft</publisher>
5801
5802      <part name="flop1" interface="floppy_5_25">
5803         <dataarea name="flop" size="368640">
5804            <rom name="meteorit.dsk" size="368640" crc="f98bcbcd" sha1="34624aaa7b452f2b77024609cdcbe0ef2a21b8fa" offset="0" />
5805         </dataarea>
5806      </part>
5807   </software>
5808
5809   <software name="mikropro">
5810      <description>Z80 Mikroprocesszor</description>
5811      <year>198?</year>
5812      <publisher>&lt;unknown&gt;</publisher>
5813
5814      <part name="flop1" interface="floppy_5_25">
5815         <dataarea name="flop" size="368640">
5816            <rom name="mikropro.dsk" size="368640" crc="83be0019" sha1="8f6d3dc6accd14d5aef223820b8b293ad090ed9e" offset="0" />
5817         </dataarea>
5818      </part>
5819   </software>
5820
5821   <software name="millikan">
5822      <description>Millikan Kísérlete</description>
5823      <year>198?</year>
5824      <publisher>&lt;unknown&gt;</publisher>
5825
5826      <part name="flop1" interface="floppy_5_25">
5827         <dataarea name="flop" size="368640">
5828            <rom name="millikan.dsk" size="368640" crc="d29c5351" sha1="14fcb0aa450a89211d384aeb0bba5573302dca79" offset="0" />
5829         </dataarea>
5830      </part>
5831   </software>
5832
5833   <software name="minedout">
5834      <description>Minedout</description>
5835      <year>198?</year>
5836      <publisher>&lt;unknown&gt;</publisher>
5837
5838      <part name="flop1" interface="floppy_5_25">
5839         <dataarea name="flop" size="368640">
5840            <rom name="minedout.dsk" size="368640" crc="c2fa3908" sha1="233940e6b9c74485a24da52391ad5748bc7ac25c" offset="0" />
5841         </dataarea>
5842      </part>
5843   </software>
5844
5845   <software name="miniart">
5846      <description>Mini Art</description>
5847      <year>1986</year>
5848      <publisher>Tibor Kerekes</publisher>
5849
5850      <part name="flop1" interface="floppy_5_25">
5851         <dataarea name="flop" size="368640">
5852            <rom name="mini_art.dsk" size="368640" crc="c2bb80ff" sha1="d3b4ef5a37e1ddb3de9589723a2611324182fb7c" offset="0" />
5853         </dataarea>
5854      </part>
5855   </software>
5856
5857   <software name="miniddt">
5858      <description>Mini DDT</description>
5859      <year>1986</year>
5860      <publisher>Gaba Software</publisher>
5861
5862      <part name="flop1" interface="floppy_5_25">
5863         <dataarea name="flop" size="368640">
5864            <rom name="miniddt.dsk" size="368640" crc="b332edef" sha1="b44d14ec8f595d60473624dd193ca07d84983964" offset="0" />
5865         </dataarea>
5866      </part>
5867   </software>
5868
5869   <software name="minigolf">
5870      <description>Minigolf</description>
5871      <year>198?</year>
5872      <publisher>&lt;unknown&gt;</publisher>
5873
5874      <part name="flop1" interface="floppy_5_25">
5875         <dataarea name="flop" size="368640">
5876            <rom name="minigolf.dsk" size="368640" crc="5309be9a" sha1="9c1667592539191ce48159fc53ed10f16aa0d65b" offset="0" />
5877         </dataarea>
5878      </part>
5879   </software>
5880
5881   <software name="miniraj">
5882      <description>Mini Rajzoló</description>
5883      <year>198?</year>
5884      <publisher>&lt;unknown&gt;</publisher>
5885
5886      <part name="flop1" interface="floppy_5_25">
5887         <dataarea name="flop" size="368640">
5888            <rom name="minir.dsk" size="368640" crc="8072fef5" sha1="74dbe9f29cf5cf9767539ba496241b2b996a70e6" offset="0" />
5889         </dataarea>
5890      </part>
5891   </software>
5892
5893   <software name="minotaur">
5894      <description>Minotaurusz</description>
5895      <year>198?</year>
5896      <publisher>Gigasoft</publisher>
5897
5898      <part name="flop1" interface="floppy_5_25">
5899         <dataarea name="flop" size="368640">
5900            <rom name="minotaurusz.dsk" size="368640" crc="d89611a0" sha1="9780702566a97cdda67f75be32a34af91c31e336" offset="0" />
5901         </dataarea>
5902      </part>
5903   </software>
5904
5905   <software name="missgal">
5906      <description>Mission Galaktic</description>
5907      <year>1987</year>
5908      <publisher>Hungarie Software</publisher>
5909
5910      <part name="flop1" interface="floppy_5_25">
5911         <dataarea name="flop" size="368640">
5912            <rom name="missiongalaktic.dsk" size="368640" crc="c60c8758" sha1="806f94e3e77666931b60613de3ed00703eb97bab" offset="0" />
5913         </dataarea>
5914      </part>
5915   </software>
5916
5917   <software name="monge">
5918      <description>Monge</description>
5919      <year>198?</year>
5920      <publisher>&lt;unknown&gt;</publisher>
5921
5922      <part name="flop1" interface="floppy_5_25">
5923         <dataarea name="flop" size="368640">
5924            <rom name="monge.dsk" size="368640" crc="adb2d9d9" sha1="2270a2c0bcabe75a4a42b1f49313690902770b72" offset="0" />
5925         </dataarea>
5926      </part>
5927   </software>
5928
5929   <software name="monszkop">
5930      <description>Monoszkóp</description>
5931      <year>2007</year>
5932      <publisher>Viktor Varga</publisher>
5933
5934      <part name="flop1" interface="floppy_5_25">
5935         <dataarea name="flop" size="368640">
5936            <rom name="monoszkop.dsk" size="368640" crc="d4c08ce2" sha1="e22928be36d54dd4b55bff0c6096395ec33b0f59" offset="0" />
5937         </dataarea>
5938      </part>
5939   </software>
5940
5941   <software name="motorode">
5942      <description>Motorodeó</description>
5943      <year>198?</year>
5944      <publisher>STV - Imre Ehreth</publisher>
5945
5946      <part name="flop1" interface="floppy_5_25">
5947         <dataarea name="flop" size="368640">
5948            <rom name="motorodeo.dsk" size="368640" crc="8887a29f" sha1="16c0c9fa6f6594cdd4cf61654af26d102c407f11" offset="0" />
5949         </dataarea>
5950      </part>
5951   </software>
5952
5953   <software name="motorode2" cloneof="motorode">
5954      <description>Motorodeó 2</description>
5955      <year>198?</year>
5956      <publisher>STV - Imre Ehreth</publisher>
5957
5958      <part name="flop1" interface="floppy_5_25">
5959         <dataarea name="flop" size="368640">
5960            <rom name="motorodeo2.dsk" size="368640" crc="b903c989" sha1="b47b0ac80c0168203c3d94a448f0522f9bc99fb9" offset="0" />
5961         </dataarea>
5962      </part>
5963   </software>
5964
5965   <software name="mozdony">
5966      <description>Mozdony</description>
5967      <year>198?</year>
5968      <publisher>&lt;unknown&gt;</publisher>
5969
5970      <part name="flop1" interface="floppy_5_25">
5971         <dataarea name="flop" size="368640">
5972            <rom name="mozdony.dsk" size="368640" crc="1f5694d6" sha1="715faa2cc6d20da00f2fe46592b2fbf3af68cb08" offset="0" />
5973         </dataarea>
5974      </part>
5975   </software>
5976
5977   <software name="mozdonya" cloneof="mozdony">
5978      <description>Mozdony (Alt)</description>
5979      <year>198?</year>
5980      <publisher>&lt;unknown&gt;</publisher>
5981
5982      <part name="flop1" interface="floppy_5_25">
5983         <dataarea name="flop" size="368640">
5984            <rom name="mozdonyv2.dsk" size="368640" crc="5daf18fc" sha1="55bf44939a73696b7a24240d560173a7a581fc7d" offset="0" />
5985         </dataarea>
5986      </part>
5987   </software>
5988
5989   <software name="mozgoo">
5990      <description>Mozgó O</description>
5991      <year>198?</year>
5992      <publisher>&lt;unknown&gt;</publisher>
5993
5994      <part name="flop1" interface="floppy_5_25">
5995         <dataarea name="flop" size="368640">
5996            <rom name="mozgoov1.dsk" size="368640" crc="7dbb2044" sha1="e06bc49096c12ef2f0feec4a80d0006f0d04fcd8" offset="0" />
5997         </dataarea>
5998      </part>
5999   </software>
6000
6001   <software name="mozgooa" cloneof="mozgoo">
6002      <description>Mozgó O (Alt)</description>
6003      <year>198?</year>
6004      <publisher>&lt;unknown&gt;</publisher>
6005
6006      <part name="flop1" interface="floppy_5_25">
6007         <dataarea name="flop" size="368640">
6008            <rom name="mozgoov2.dsk" size="368640" crc="c9a238f1" sha1="5f47274f59dc2ef89b906eacfa8fb466099943ac" offset="0" />
6009         </dataarea>
6010      </part>
6011   </software>
6012
6013   <software name="mps1000">
6014      <description>MPS-1000 Beállítás</description>
6015      <year>198?</year>
6016      <publisher>&lt;unknown&gt;</publisher>
6017
6018      <part name="flop1" interface="floppy_5_25">
6019         <dataarea name="flop" size="368640">
6020            <rom name="mps1000.dsk" size="368640" crc="748704b2" sha1="5339729ceee8de67659d705909462d7c733bbfcc" offset="0" />
6021         </dataarea>
6022      </part>
6023   </software>
6024
6025   <software name="mralex">
6026      <description>Mr. Alex</description>
6027      <year>1985</year>
6028      <publisher>Videoton</publisher>
6029
6030      <part name="flop1" interface="floppy_5_25">
6031         <dataarea name="flop" size="368640">
6032            <rom name="mralex.dsk" size="368640" crc="723c506d" sha1="45c3aa848502f5a9d1bfd43f5a7ec4fe2b9503c1" offset="0" />
6033         </dataarea>
6034      </part>
6035   </software>
6036
6037   <software name="mralexp" cloneof="mralex">
6038      <description>Mr. Alex (64+)</description>
6039      <year>1985</year>
6040      <publisher>Videoton</publisher>
6041
6042      <part name="flop1" interface="floppy_5_25">
6043         <dataarea name="flop" size="368640">
6044            <rom name="mralexplus.dsk" size="368640" crc="4c1bb711" sha1="94a8e351e19d14476f9ab46a8eab20b3caf89e3f" offset="0" />
6045         </dataarea>
6046      </part>
6047   </software>
6048
6049   <software name="mralexa" cloneof="mralex">
6050      <description>Mr. Alex (Alt)</description>
6051      <year>1985</year>
6052      <publisher>Videoton</publisher>
6053
6054      <part name="flop1" interface="floppy_5_25">
6055         <dataarea name="flop" size="368640">
6056            <rom name="mralexv2.dsk" size="368640" crc="fcf2b47f" sha1="7597731360696726069c45481236aa22d9bd0c83" offset="0" />
6057         </dataarea>
6058      </part>
6059   </software>
6060
6061   <software name="mralexb" cloneof="mralex">
6062      <description>Mr. Alex (Alt 2)</description>
6063      <year>1985</year>
6064      <publisher>Videoton</publisher>
6065
6066      <part name="flop1" interface="floppy_5_25">
6067         <dataarea name="flop" size="368640">
6068            <rom name="mralexv3.dsk" size="368640" crc="8fbbef48" sha1="54069c548442e612d1f420e3a866a40d9d3f4573" offset="0" />
6069         </dataarea>
6070      </part>
6071   </software>
6072
6073   <software name="msdeng1">
6074      <description>Medium State Degree in English - Preparatory Test No. 1</description>
6075      <year>1986</year>
6076      <publisher>VGy</publisher>
6077
6078      <part name="flop1" interface="floppy_5_25">
6079         <dataarea name="flop" size="368640">
6080            <rom name="msdeng1.dsk" size="368640" crc="66dab331" sha1="49e0dfbdaa671eea1bd5fcd4f1a7953cd6369539" offset="0" />
6081         </dataarea>
6082      </part>
6083   </software>
6084
6085   <software name="msdeng2">
6086      <description>Medium State Degree in English - Preparatory Test No. 2</description>
6087      <year>1986</year>
6088      <publisher>VGy</publisher>
6089
6090      <part name="flop1" interface="floppy_5_25">
6091         <dataarea name="flop" size="368640">
6092            <rom name="msdeng2.dsk" size="368640" crc="f186ea23" sha1="082c4fe45b2e425cdfd8c9ac1460459159a4fd0e" offset="0" />
6093         </dataarea>
6094      </part>
6095   </software>
6096
6097   <software name="msdeng3">
6098      <description>Medium State Degree in English - Preparatory Test No. 3</description>
6099      <year>1986</year>
6100      <publisher>VGy</publisher>
6101
6102      <part name="flop1" interface="floppy_5_25">
6103         <dataarea name="flop" size="368640">
6104            <rom name="msdeng3.dsk" size="368640" crc="35eee3c9" sha1="839090ab78c9a841d3dd7d93f92cea015a89deb4" offset="0" />
6105         </dataarea>
6106      </part>
6107   </software>
6108
6109   <software name="musicdig">
6110      <description>Music-Digit</description>
6111      <year>198?</year>
6112      <publisher>&lt;unknown&gt;</publisher>
6113
6114      <part name="flop1" interface="floppy_5_25">
6115         <dataarea name="flop" size="368640">
6116            <rom name="musikdig.dsk" size="368640" crc="f112c769" sha1="1eb039b921402db7d1eeb6e059ee1f3932a4925e" offset="0" />
6117         </dataarea>
6118      </part>
6119   </software>
6120
6121   <software name="muu">
6122      <description>Múú</description>
6123      <year>198?</year>
6124      <publisher>&lt;unknown&gt;</publisher>
6125
6126      <part name="flop1" interface="floppy_5_25">
6127         <dataarea name="flop" size="368640">
6128            <rom name="muu.dsk" size="368640" crc="ab5b97e9" sha1="8c13477b1712ef388d72973dc0bd771544ecb711" offset="0" />
6129         </dataarea>
6130      </part>
6131   </software>
6132
6133   <software name="nagyfugg">
6134      <description>Nagy Függvényábrázoló</description>
6135      <year>1987</year>
6136      <publisher>Novotrade</publisher>
6137
6138      <part name="flop1" interface="floppy_5_25">
6139         <dataarea name="flop" size="368640">
6140            <rom name="nagyfuggvenyabrazolo.dsk" size="368640" crc="8c91af21" sha1="5b606256b228ab64ac9d2b211565743410896090" offset="0" />
6141         </dataarea>
6142      </part>
6143   </software>
6144
6145   <software name="naturaba">
6146      <description>Back to the Nature</description>
6147      <year>198?</year>
6148      <publisher>&lt;unknown&gt;</publisher>
6149
6150      <part name="flop1" interface="floppy_5_25">
6151         <dataarea name="flop" size="368640">
6152            <rom name="naturaba.dsk" size="368640" crc="1abae8f7" sha1="c56a1c937b796377b003347dc28f4415967ef8b1" offset="0" />
6153         </dataarea>
6154      </part>
6155   </software>
6156
6157   <software name="nautilus">
6158      <description>Nautilus</description>
6159      <year>198?</year>
6160      <publisher>'a' Studio</publisher>
6161
6162      <part name="flop1" interface="floppy_5_25">
6163         <dataarea name="flop" size="368640">
6164            <rom name="nautilus.dsk" size="368640" crc="e5b42196" sha1="498776cd0ffd37f257a262fce90dac8ae1e2c6df" offset="0" />
6165         </dataarea>
6166      </part>
6167   </software>
6168
6169   <software name="nebulus">
6170      <description>Nebulus</description>
6171      <year>198?</year>
6172      <publisher>C.S. Software</publisher>
6173
6174      <part name="flop1" interface="floppy_5_25">
6175         <dataarea name="flop" size="368640">
6176            <rom name="nebulus.dsk" size="368640" crc="ed1b77a8" sha1="13789687a210fba14bb952c2cf6cee5780da361f" offset="0" />
6177         </dataarea>
6178      </part>
6179   </software>
6180
6181   <software name="nightsha">
6182      <description>Night Shade</description>
6183      <year>1985</year>
6184      <publisher>'a' Studio</publisher>
6185
6186      <part name="flop1" interface="floppy_5_25">
6187         <dataarea name="flop" size="368640">
6188            <rom name="nightshade.dsk" size="368640" crc="60f764b2" sha1="2b361b92b1081fbd9244035060d14b68f7479b0c" offset="0" />
6189         </dataarea>
6190      </part>
6191   </software>
6192
6193   <software name="nim">
6194      <description>Nim</description>
6195      <year>198?</year>
6196      <publisher>L.S.</publisher>
6197
6198      <part name="flop1" interface="floppy_5_25">
6199         <dataarea name="flop" size="368640">
6200            <rom name="nim.dsk" size="368640" crc="ec28f298" sha1="164a8cc790ac34706a6f6616fc95f30446988e43" offset="0" />
6201         </dataarea>
6202      </part>
6203   </software>
6204
6205   <software name="ninja">
6206      <description>Ninja</description>
6207      <year>198?</year>
6208      <publisher>Béla Takács</publisher>
6209
6210      <part name="flop1" interface="floppy_5_25">
6211         <dataarea name="flop" size="368640">
6212            <rom name="ninja_v1.dsk" size="368640" crc="37f2c152" sha1="d1c5acb7a8971a9908ac41e06340858f49ff1baa" offset="0" />
6213         </dataarea>
6214      </part>
6215   </software>
6216
6217   <software name="ninjaa" cloneof="ninja">
6218      <description>Ninja (Alt)</description>
6219      <year>198?</year>
6220      <publisher>Béla Takács</publisher>
6221
6222      <part name="flop1" interface="floppy_5_25">
6223         <dataarea name="flop" size="368640">
6224            <rom name="ninja_v2.dsk" size="368640" crc="b317f2ef" sha1="18e7df426dfe1137e62277bb89ec1b9b7aa9f970" offset="0" />
6225         </dataarea>
6226      </part>
6227   </software>
6228
6229   <software name="ninoo">
6230      <description>Ninóó</description>
6231      <year>198?</year>
6232      <publisher>&lt;unknown&gt;</publisher>
6233
6234      <part name="flop1" interface="floppy_5_25">
6235         <dataarea name="flop" size="368640">
6236            <rom name="ninoo.dsk" size="368640" crc="e048eb3f" sha1="a886d215fde0280bfbdfbf05ae23bdab90280495" offset="0" />
6237         </dataarea>
6238      </part>
6239   </software>
6240
6241   <software name="no">
6242      <description>Nő</description>
6243      <year>198?</year>
6244      <publisher>&lt;unknown&gt;</publisher>
6245
6246      <part name="flop1" interface="floppy_5_25">
6247         <dataarea name="flop" size="368640">
6248            <rom name="no.dsk" size="368640" crc="b83df24d" sha1="b51111c5b2ed5cb9095f1d3d55f63bc99d985213" offset="0" />
6249         </dataarea>
6250      </part>
6251   </software>
6252
6253   <software name="novocopy">
6254      <description>Novotrade-Copy</description>
6255      <year>198?</year>
6256      <publisher>&lt;unknown&gt;</publisher>
6257
6258      <part name="flop1" interface="floppy_5_25">
6259         <dataarea name="flop" size="368640">
6260            <rom name="novocopy.dsk" size="368640" crc="758c6ae0" sha1="f842fbcb1a56a20b8a82cbd251a5568611d64ccf" offset="0" />
6261         </dataarea>
6262      </part>
6263   </software>
6264
6265   <software name="novotape" cloneof="novocopy">
6266      <description>Novotrade-Copy (Tape)</description>
6267      <year>198?</year>
6268      <publisher>&lt;unknown&gt;</publisher>
6269
6270      <part name="flop1" interface="floppy_5_25">
6271         <dataarea name="flop" size="368640">
6272            <rom name="novotape.dsk" size="368640" crc="ec034666" sha1="ddd05b1a63263e1cb74cafad3f2a01e8a13d046e" offset="0" />
6273         </dataarea>
6274      </part>
6275   </software>
6276
6277   <software name="nyakter">
6278      <description>Nyáktervező</description>
6279      <year>198?</year>
6280      <publisher>TVCM</publisher>
6281
6282      <part name="flop1" interface="floppy_5_25">
6283         <dataarea name="flop" size="368640">
6284            <rom name="nyaktervezo.dsk" size="368640" crc="896eba37" sha1="d67363bf0466898cec31c9cb1b3af87e6d032bf9" offset="0" />
6285         </dataarea>
6286      </part>
6287   </software>
6288
6289   <software name="nyelvtan">
6290      <description>Nyelvtanító Program</description>
6291      <year>1986</year>
6292      <publisher>ZMKMF</publisher>
6293
6294      <part name="flop1" interface="floppy_5_25">
6295         <dataarea name="flop" size="368640">
6296            <rom name="nyelvtanito.dsk" size="368640" crc="dcf6e651" sha1="f897e9f23a3f7bfef6e9fe4f6d25c23efc41ac12" offset="0" />
6297         </dataarea>
6298      </part>
6299   </software>
6300
6301   <software name="nyilvan">
6302      <description>Nyilvántartó Program</description>
6303      <year>1989</year>
6304      <publisher>Berysoft</publisher>
6305
6306      <part name="flop1" interface="floppy_5_25">
6307         <dataarea name="flop" size="368640">
6308            <rom name="nyilvantarto.dsk" size="368640" crc="dc5a1ad0" sha1="93401b99a4ec5c53190f03dd919acf56c211a9f2" offset="0" />
6309         </dataarea>
6310      </part>
6311   </software>
6312
6313   <software name="nyulvada">
6314      <description>Nyúlvadászat</description>
6315      <year>198?</year>
6316      <publisher>&lt;unknown&gt;</publisher>
6317
6318      <part name="flop1" interface="floppy_5_25">
6319         <dataarea name="flop" size="368640">
6320            <rom name="nyulvadaszat.dsk" size="368640" crc="23aeda7e" sha1="65480395440aa2debbe6634deb473601686106bb" offset="0" />
6321         </dataarea>
6322      </part>
6323   </software>
6324
6325   <software name="nyuszi1">
6326      <description>Nyuszi Olvasni Tanít 1</description>
6327      <year>198?</year>
6328      <publisher>György Papp - László Ludányi - Mónika Fekete</publisher>
6329
6330      <part name="flop1" interface="floppy_5_25">
6331         <dataarea name="flop" size="368640">
6332            <rom name="nyuszi1.dsk" size="368640" crc="5fce2b0b" sha1="fb4d71d6cd15767ac6fa1ba45975ad8b241463d6" offset="0" />
6333         </dataarea>
6334      </part>
6335   </software>
6336
6337   <software name="nyuszi2">
6338      <description>Nyuszi Olvasni Tanít 2</description>
6339      <year>198?</year>
6340      <publisher>György Papp - László Ludányi - Mónika Fekete</publisher>
6341
6342      <part name="flop1" interface="floppy_5_25">
6343         <dataarea name="flop" size="368640">
6344            <rom name="nyuszi2.dsk" size="368640" crc="9afd7e64" sha1="70adb09010a979b5d1567f179aaf6338d1f4de0f" offset="0" />
6345         </dataarea>
6346      </part>
6347   </software>
6348
6349   <software name="nyuszi3">
6350      <description>Nyuszi Olvasni Tanít 3</description>
6351      <year>198?</year>
6352      <publisher>György Papp - László Ludányi - Mónika Fekete</publisher>
6353
6354      <part name="flop1" interface="floppy_5_25">
6355         <dataarea name="flop" size="368640">
6356            <rom name="nyuszi3.dsk" size="368640" crc="ce42a55b" sha1="d082492f76765388e010309c06800dcc580a7348" offset="0" />
6357         </dataarea>
6358      </part>
6359   </software>
6360
6361   <software name="nyuszi4">
6362      <description>Nyuszi Olvasni Tanít 4</description>
6363      <year>198?</year>
6364      <publisher>György Papp - László Ludányi - Mónika Fekete</publisher>
6365
6366      <part name="flop1" interface="floppy_5_25">
6367         <dataarea name="flop" size="368640">
6368            <rom name="nyuszi4.dsk" size="368640" crc="9a457779" sha1="69e54ae70940473c21e17da89a0396a03dbbde92" offset="0" />
6369         </dataarea>
6370      </part>
6371   </software>
6372
6373   <software name="nyuszi5">
6374      <description>Nyuszi Olvasni Tanít 5</description>
6375      <year>198?</year>
6376      <publisher>György Papp - László Ludányi - Mónika Fekete</publisher>
6377
6378      <part name="flop1" interface="floppy_5_25">
6379         <dataarea name="flop" size="368640">
6380            <rom name="nyuszi5.dsk" size="368640" crc="ccd36745" sha1="a26c9e88d4bb7c2c3c2c412a675f697c040bde03" offset="0" />
6381         </dataarea>
6382      </part>
6383   </software>
6384
6385   <software name="nyuszi6">
6386      <description>Nyuszi Olvasni Tanít 6</description>
6387      <year>198?</year>
6388      <publisher>György Papp - László Ludányi - Mónika Fekete</publisher>
6389
6390      <part name="flop1" interface="floppy_5_25">
6391         <dataarea name="flop" size="368640">
6392            <rom name="nyuszi6.dsk" size="368640" crc="19349e31" sha1="04edcca5d6c97d3f891e1b69b11bcd8a60798c55" offset="0" />
6393         </dataarea>
6394      </part>
6395   </software>
6396
6397   <software name="olajsejk">
6398      <description>Olajsejk</description>
6399      <year>198?</year>
6400      <publisher>Software in LUX</publisher>
6401
6402      <part name="flop1" interface="floppy_5_25">
6403         <dataarea name="flop" size="368640">
6404            <rom name="olajsejk.dsk" size="368640" crc="86231b86" sha1="423589b8ef7d450f3ddbeeaf3858185e200c4071" offset="0" />
6405         </dataarea>
6406      </part>
6407   </software>
6408
6409   <software name="optika">
6410      <description>Optika</description>
6411      <year>1987</year>
6412      <publisher>Zoltán Rózsavölgyi</publisher>
6413
6414      <part name="flop1" interface="floppy_5_25">
6415         <dataarea name="flop" size="368640">
6416            <rom name="optika.dsk" size="368640" crc="a2608400" sha1="5ba1778d4284ca9e9332358b8872f651cb6625d1" offset="0" />
6417         </dataarea>
6418      </part>
6419   </software>
6420
6421   <software name="ordogmot">
6422      <description>Ördögmotor</description>
6423      <year>1990</year>
6424      <publisher>STV</publisher>
6425
6426      <part name="flop1" interface="floppy_5_25">
6427         <dataarea name="flop" size="368640">
6428            <rom name="ordogmotor.dsk" size="368640" crc="a8426659" sha1="5c17ec95e1efd8ec0f55fde36e65ad28baa07f07" offset="0" />
6429         </dataarea>
6430      </part>
6431   </software>
6432
6433   <software name="orgona">
6434      <description>Orgona</description>
6435      <year>1986</year>
6436      <publisher>László Bata</publisher>
6437
6438      <part name="flop1" interface="floppy_5_25">
6439         <dataarea name="flop" size="368640">
6440            <rom name="orgona.dsk" size="368640" crc="abba09a4" sha1="e8cfd69cabd1dc03b9dd6e831999507853e20066" offset="0" />
6441         </dataarea>
6442      </part>
6443   </software>
6444
6445   <software name="orjarat">
6446      <description>Őrjárat</description>
6447      <year>198?</year>
6448      <publisher>Béla Takács</publisher>
6449
6450      <part name="flop1" interface="floppy_5_25">
6451         <dataarea name="flop" size="368640">
6452            <rom name="orjarat.dsk" size="368640" crc="89ad125b" sha1="f39a2bea60da78f01110eb9a81d5b27f4c23970c" offset="0" />
6453         </dataarea>
6454      </part>
6455   </software>
6456
6457   <software name="ostrom">
6458      <description>Ostrom</description>
6459      <year>198?</year>
6460      <publisher>&lt;unknown&gt;</publisher>
6461
6462      <part name="flop1" interface="floppy_5_25">
6463         <dataarea name="flop" size="368640">
6464            <rom name="ostrom.dsk" size="368640" crc="dffe0366" sha1="e6252ab79eb604b6e03ada5be981dd3d8fd9012e" offset="0" />
6465         </dataarea>
6466      </part>
6467   </software>
6468
6469   <software name="oszcilo">
6470      <description>Digitális Tároló-Oszciloszkóp</description>
6471      <year>1986</year>
6472      <publisher>&lt;unknown&gt;</publisher>
6473
6474      <part name="flop1" interface="floppy_5_25">
6475         <dataarea name="flop" size="368640">
6476            <rom name="oszcilo.dsk" size="368640" crc="fb457014" sha1="f1ac94a7e197500f454ce6b09fec9626bfebba70" offset="0" />
6477         </dataarea>
6478      </part>
6479   </software>
6480
6481   <software name="oszkar">
6482      <description>Oszkár a Lovag</description>
6483      <year>198?</year>
6484      <publisher>STV</publisher>
6485
6486      <part name="flop1" interface="floppy_5_25">
6487         <dataarea name="flop" size="368640">
6488            <rom name="oszkaralovag.dsk" size="368640" crc="669cdacc" sha1="33c154b80b18b3b185302d3fee459e46c3af0c6b" offset="0" />
6489         </dataarea>
6490      </part>
6491   </software>
6492
6493   <software name="othello">
6494      <description>Othello</description>
6495      <year>198?</year>
6496      <publisher>&lt;unknown&gt;</publisher>
6497
6498      <part name="flop1" interface="floppy_5_25">
6499         <dataarea name="flop" size="368640">
6500            <rom name="othelev.dsk" size="368640" crc="923fe4b5" sha1="648b2d341aa49df55ec3f4ba17ec75b8d0a39f0c" offset="0" />
6501         </dataarea>
6502      </part>
6503   </software>
6504
6505   <software name="othelloa" cloneof="othello">
6506      <description>Othello (Alt)</description>
6507      <year>198?</year>
6508      <publisher>&lt;unknown&gt;</publisher>
6509
6510      <part name="flop1" interface="floppy_5_25">
6511         <dataarea name="flop" size="368640">
6512            <rom name="othello.dsk" size="368640" crc="d9e755c3" sha1="45e15660c0a0d4ca4fbfd6d6abedc728243bb09a" offset="0" />
6513         </dataarea>
6514      </part>
6515   </software>
6516
6517   <software name="othel3d">
6518      <description>Othello 3D</description>
6519      <year>1988</year>
6520      <publisher>Ludanyi Laszlo</publisher>
6521
6522      <part name="flop1" interface="floppy_5_25">
6523         <dataarea name="flop" size="368640">
6524            <rom name="othello3d.dsk" size="368640" crc="1d060dc9" sha1="399c7e501978aa9e80e5eac6a009161185625953" offset="0" />
6525         </dataarea>
6526      </part>
6527   </software>
6528
6529   <software name="ottolova">
6530      <description>Ottó a Lovag</description>
6531      <year>198?</year>
6532      <publisher>Laszlo Giricz</publisher>
6533
6534      <part name="flop1" interface="floppy_5_25">
6535         <dataarea name="flop" size="368640">
6536            <rom name="ottoalovag.dsk" size="368640" crc="a312fd3c" sha1="5d5b275669732aa505d44c945f14f1308ccff563" offset="0" />
6537         </dataarea>
6538      </part>
6539   </software>
6540
6541   <software name="outhang">
6542      <description>Out-Hang</description>
6543      <year>198?</year>
6544      <publisher>Szabolcs Rota</publisher>
6545
6546      <part name="flop1" interface="floppy_5_25">
6547         <dataarea name="flop" size="368640">
6548            <rom name="out-hang.dsk" size="368640" crc="1580aa8a" sha1="f6079055006e7e2c7b933fa417b37adf7ca15224" offset="0" />
6549         </dataarea>
6550      </part>
6551   </software>
6552
6553   <software name="pacific">
6554      <description>Pacific</description>
6555      <year>1987</year>
6556      <publisher>Zsolt Dobrovics</publisher>
6557
6558      <part name="flop1" interface="floppy_5_25">
6559         <dataarea name="flop" size="368640">
6560            <rom name="pacific.dsk" size="368640" crc="39a18ab1" sha1="800638e76f8ba61e8b0e3bc312f20decccb79549" offset="0" />
6561         </dataarea>
6562      </part>
6563   </software>
6564
6565   <software name="pacifica" cloneof="pacific">
6566      <description>Pacific (Alt)</description>
6567      <year>1987</year>
6568      <publisher>Zsolt Dobrovics</publisher>
6569
6570      <part name="flop1" interface="floppy_5_25">
6571         <dataarea name="flop" size="368640">
6572            <rom name="pacifv2.dsk" size="368640" crc="32f99198" sha1="a2fa40ec8a3cf3cc4860db31bd2e8bc714d8814f" offset="0" />
6573         </dataarea>
6574      </part>
6575   </software>
6576
6577   <software name="packman">
6578      <description>Pack Man</description>
6579      <year>198?</year>
6580      <publisher>'a' Studio</publisher>
6581
6582      <part name="flop1" interface="floppy_5_25">
6583         <dataarea name="flop" size="368640">
6584            <rom name="packman_v1.dsk" size="368640" crc="04569528" sha1="4f7b2c0b0dcd2113cc51bdbafff0ada27c3368fc" offset="0" />
6585         </dataarea>
6586      </part>
6587   </software>
6588
6589   <software name="packmana" cloneof="packman">
6590      <description>Pack Man (Alt)</description>
6591      <year>198?</year>
6592      <publisher>'a' Studio</publisher>
6593
6594      <part name="flop1" interface="floppy_5_25">
6595         <dataarea name="flop" size="368640">
6596            <rom name="packman_v2.dsk" size="368640" crc="fb9c61f3" sha1="6c94d3d86b913bec6bc151a540e4d2b68a527609" offset="0" />
6597         </dataarea>
6598      </part>
6599   </software>
6600
6601   <software name="panik">
6602      <description>Pánik</description>
6603      <year>1991</year>
6604      <publisher>STV</publisher>
6605
6606      <part name="flop1" interface="floppy_5_25">
6607         <dataarea name="flop" size="368640">
6608            <rom name="panik.dsk" size="368640" crc="00688f61" sha1="b405e39afdff1b34fd406f12b806ee53367c7d63" offset="0" />
6609         </dataarea>
6610      </part>
6611   </software>
6612
6613   <software name="panikj" cloneof="panik">
6614      <description>Pánik (Joystick)</description>
6615      <year>1991</year>
6616      <publisher>STV</publisher>
6617
6618      <part name="flop1" interface="floppy_5_25">
6619         <dataarea name="flop" size="368640">
6620            <rom name="panikjoy.dsk" size="368640" crc="4a7b3c81" sha1="0c47899e42e26d7977694fb2528bf920a774f0f0" offset="0" />
6621         </dataarea>
6622      </part>
6623   </software>
6624
6625   <software name="panikste">
6626      <description>Pánik (Steve Software)</description>
6627      <year>1988</year>
6628      <publisher>Steve Software</publisher>
6629
6630      <part name="flop1" interface="floppy_5_25">
6631         <dataarea name="flop" size="368640">
6632            <rom name="panikste.dsk" size="368640" crc="5a6b58bf" sha1="4ada4fcf2377656130fbc17dc68319050966f1ac" offset="0" />
6633         </dataarea>
6634      </part>
6635   </software>
6636
6637   <software name="para3ter">
6638      <description>Parabolikus Háromszög Területe</description>
6639      <year>198?</year>
6640      <publisher>&lt;unknown&gt;</publisher>
6641
6642      <part name="flop1" interface="floppy_5_25">
6643         <dataarea name="flop" size="368640">
6644            <rom name="para3ter.dsk" size="368640" crc="a87105a0" sha1="959cbe70b1af67e9a69f9e81e76ed02bfd7321a3" offset="0" />
6645         </dataarea>
6646      </part>
6647   </software>
6648
6649   <software name="parbaj">
6650      <description>Párbaj</description>
6651      <year>1991</year>
6652      <publisher>STV</publisher>
6653
6654      <part name="flop1" interface="floppy_5_25">
6655         <dataarea name="flop" size="368640">
6656            <rom name="parbaj.dsk" size="368640" crc="3476c1b0" sha1="817c337a040b0fdeb6f169a46710adc19590938c" offset="0" />
6657         </dataarea>
6658      </part>
6659   </software>
6660
6661   <software name="parbaja" cloneof="parbaj">
6662      <description>Párbaj (Alt)</description>
6663      <year>1991</year>
6664      <publisher>STV</publisher>
6665
6666      <part name="flop1" interface="floppy_5_25">
6667         <dataarea name="flop" size="368640">
6668            <rom name="parbajv2.dsk" size="368640" crc="831ff74b" sha1="0f787f48db2a75a76523308a34320c229c27076a" offset="0" />
6669         </dataarea>
6670      </part>
6671   </software>
6672
6673   <software name="parhrezg">
6674      <description>Párhuzamos Rezgések</description>
6675      <year>198?</year>
6676      <publisher>&lt;unknown&gt;</publisher>
6677
6678      <part name="flop1" interface="floppy_5_25">
6679         <dataarea name="flop" size="368640">
6680            <rom name="parhrezg.dsk" size="368640" crc="ac9fb2e4" sha1="51a6ec634f0411d7daf6804d4c2a4a0018ac945a" offset="0" />
6681         </dataarea>
6682      </part>
6683   </software>
6684
6685   <software name="paszians">
6686      <description>Pasziánsz</description>
6687      <year>198?</year>
6688      <publisher>&lt;unknown&gt;</publisher>
6689
6690      <part name="flop1" interface="floppy_5_25">
6691         <dataarea name="flop" size="368640">
6692            <rom name="paszians.dsk" size="368640" crc="f01cdc8c" sha1="5a1ab056bcfaf4df67c423425210d4cec7ed9702" offset="0" />
6693         </dataarea>
6694      </part>
6695   </software>
6696
6697   <software name="peepshow">
6698      <description>Peep Show</description>
6699      <year>1984</year>
6700      <publisher>STV</publisher>
6701
6702      <part name="flop1" interface="floppy_5_25">
6703         <dataarea name="flop" size="368640">
6704            <rom name="pipso.dsk" size="368640" crc="fc4fbc85" sha1="e94511ddffb43afb4600d14aae99897c929aab9f" offset="0" />
6705         </dataarea>
6706      </part>
6707   </software>
6708
6709   <software name="pemzli">
6710      <description>Pemzli</description>
6711      <year>198?</year>
6712      <publisher>King ec Software</publisher>
6713
6714      <part name="flop1" interface="floppy_5_25">
6715         <dataarea name="flop" size="368640">
6716            <rom name="pemzli.dsk" size="368640" crc="6dcfc2bd" sha1="e204b6c9b383576f13d66a4b839c631144571803" offset="0" />
6717         </dataarea>
6718      </part>
6719   </software>
6720
6721   <software name="pentomin">
6722      <description>Pentomino</description>
6723      <year>198?</year>
6724      <publisher>STV</publisher>
6725
6726      <part name="flop1" interface="floppy_5_25">
6727         <dataarea name="flop" size="368640">
6728            <rom name="pentomino.dsk" size="368640" crc="4f8e0c9b" sha1="ecdd4ca8fb1db857eb89856fc1c63b9e3b5478df" offset="0" />
6729         </dataarea>
6730      </part>
6731   </software>
6732
6733   <software name="pentolei">
6734      <description>Pentomino Leírás</description>
6735      <year>198?</year>
6736      <publisher>STV</publisher>
6737
6738      <part name="flop1" interface="floppy_5_25">
6739         <dataarea name="flop" size="368640">
6740            <rom name="pentomino_leiras.dsk" size="368640" crc="12359069" sha1="2da41806123014f194ad475ffe2441f52b3c0b62" offset="0" />
6741         </dataarea>
6742      </part>
6743   </software>
6744
6745   <software name="perifer">
6746      <description>Kazetta-Floppy Választó</description>
6747      <year>198?</year>
6748      <publisher>&lt;unknown&gt;</publisher>
6749
6750      <part name="flop1" interface="floppy_5_25">
6751         <dataarea name="flop" size="368640">
6752            <rom name="perifer.dsk" size="368640" crc="7e818e9f" sha1="c70da41b0de8a57d93cf89a85385665b1cee7c09" offset="0" />
6753         </dataarea>
6754      </part>
6755   </software>
6756
6757   <software name="pifubrut">
6758      <description>Pifu és Brutusz</description>
6759      <year>1988</year>
6760      <publisher>SonySoft</publisher>
6761
6762      <part name="flop1" interface="floppy_5_25">
6763         <dataarea name="flop" size="368640">
6764            <rom name="pifubrut.dsk" size="368640" crc="27a1aede" sha1="8f79b597710f9a407a15d0fab56e3eb7bc8765d2" offset="0" />
6765         </dataarea>
6766      </part>
6767   </software>
6768
6769   <software name="piki01">
6770      <description>Piki 01</description>
6771      <year>198?</year>
6772      <publisher>&lt;unknown&gt;</publisher>
6773
6774      <part name="flop1" interface="floppy_5_25">
6775         <dataarea name="flop" size="737280">
6776            <rom name="piki 01.dsk" size="737280" crc="e424360a" sha1="96a3f046324d0a8c5ae0a9e95c808cfba3229b5a" offset="0" />
6777         </dataarea>
6778      </part>
6779   </software>
6780
6781   <software name="piki02">
6782      <description>Piki 02</description>
6783      <year>198?</year>
6784      <publisher>&lt;unknown&gt;</publisher>
6785
6786      <part name="flop1" interface="floppy_5_25">
6787         <dataarea name="flop" size="737280">
6788            <rom name="piki 02.dsk" size="737280" crc="a86fd188" sha1="13e30e03e509e833476143b9320c9be238e5e87a" offset="0" />
6789         </dataarea>
6790      </part>
6791   </software>
6792
6793   <software name="piki03">
6794      <description>Piki 03</description>
6795      <year>198?</year>
6796      <publisher>&lt;unknown&gt;</publisher>
6797
6798      <part name="flop1" interface="floppy_5_25">
6799         <dataarea name="flop" size="737280">
6800            <rom name="piki 03.dsk" size="737280" crc="0b44e12c" sha1="79a21df49276f2583ec0b85503d0bd5a04ef02f9" offset="0" />
6801         </dataarea>
6802      </part>
6803   </software>
6804
6805   <software name="piki04">
6806      <description>Piki 04</description>
6807      <year>198?</year>
6808      <publisher>&lt;unknown&gt;</publisher>
6809
6810      <part name="flop1" interface="floppy_5_25">
6811         <dataarea name="flop" size="737280">
6812            <rom name="piki 04.dsk" size="737280" crc="3717f5ff" sha1="c41a5402abd0c5425ea4bf32dc6f27fb73246a9e" offset="0" />
6813         </dataarea>
6814      </part>
6815   </software>
6816
6817   <software name="piki05">
6818      <description>Piki 05 (Bad)</description>
6819      <year>198?</year>
6820      <publisher>&lt;unknown&gt;</publisher>
6821
6822      <part name="flop1" interface="floppy_5_25">
6823         <dataarea name="flop" size="737280">
6824            <rom name="piki 05 [b].dsk" size="737280" crc="e1091b09" sha1="4c8bb8ea249db9d7fc282c2397527896a0668cb0" offset="0" status="baddump" />
6825         </dataarea>
6826      </part>
6827   </software>
6828
6829   <software name="piki06">
6830      <description>Piki 06</description>
6831      <year>198?</year>
6832      <publisher>&lt;unknown&gt;</publisher>
6833
6834      <part name="flop1" interface="floppy_5_25">
6835         <dataarea name="flop" size="737280">
6836            <rom name="piki 06.dsk" size="737280" crc="abe568b9" sha1="d06bd0ad31e8e1572ec92746389079325050bcbb" offset="0" />
6837         </dataarea>
6838      </part>
6839   </software>
6840
6841   <software name="piki07">
6842      <description>Piki 07</description>
6843      <year>198?</year>
6844      <publisher>&lt;unknown&gt;</publisher>
6845
6846      <part name="flop1" interface="floppy_5_25">
6847         <dataarea name="flop" size="737280">
6848            <rom name="piki 07.dsk" size="737280" crc="fd726510" sha1="17f236415d3968989acd3a5d5c20ed3f79742af4" offset="0" />
6849         </dataarea>
6850      </part>
6851   </software>
6852
6853   <software name="piki08">
6854      <description>Piki 08</description>
6855      <year>198?</year>
6856      <publisher>&lt;unknown&gt;</publisher>
6857
6858      <part name="flop1" interface="floppy_5_25">
6859         <dataarea name="flop" size="737280">
6860            <rom name="piki 08.dsk" size="737280" crc="8671e5f4" sha1="9201d9b9a312bd4947dc67061ee18ac77d46565d" offset="0" />
6861         </dataarea>
6862      </part>
6863   </software>
6864
6865   <software name="piki09">
6866      <description>Piki 09</description>
6867      <year>198?</year>
6868      <publisher>&lt;unknown&gt;</publisher>
6869
6870      <part name="flop1" interface="floppy_5_25">
6871         <dataarea name="flop" size="737280">
6872            <rom name="piki 09.dsk" size="737280" crc="f5795366" sha1="5ec7058fab3813612b21da8eea9cb1ed8b9f1320" offset="0" />
6873         </dataarea>
6874      </part>
6875   </software>
6876
6877   <software name="piki10">
6878      <description>Piki 10</description>
6879      <year>198?</year>
6880      <publisher>&lt;unknown&gt;</publisher>
6881
6882      <part name="flop1" interface="floppy_5_25">
6883         <dataarea name="flop" size="737280">
6884            <rom name="piki 10.dsk" size="737280" crc="9f816c34" sha1="a236e3dd17711d0beca5c2db848c6305376eee25" offset="0" />
6885         </dataarea>
6886      </part>
6887   </software>
6888
6889   <software name="piki11">
6890      <description>Piki 11</description>
6891      <year>198?</year>
6892      <publisher>&lt;unknown&gt;</publisher>
6893
6894      <part name="flop1" interface="floppy_5_25">
6895         <dataarea name="flop" size="737280">
6896            <rom name="piki 11.dsk" size="737280" crc="f6f68bd9" sha1="2675c0d11f2b79d8844962a20edbeeb2a84c43ef" offset="0" />
6897         </dataarea>
6898      </part>
6899   </software>
6900
6901   <software name="piki16">
6902      <description>Piki 16</description>
6903      <year>198?</year>
6904      <publisher>&lt;unknown&gt;</publisher>
6905
6906      <part name="flop1" interface="floppy_5_25">
6907         <dataarea name="flop" size="737280">
6908            <rom name="piki 16.dsk" size="737280" crc="aba7e991" sha1="7fdd7cdbffc408f55caf9e82cec7e43eb92ea229" offset="0" />
6909         </dataarea>
6910      </part>
6911   </software>
6912
6913   <software name="piki17">
6914      <description>Piki 17</description>
6915      <year>198?</year>
6916      <publisher>&lt;unknown&gt;</publisher>
6917
6918      <part name="flop1" interface="floppy_5_25">
6919         <dataarea name="flop" size="737280">
6920            <rom name="piki 17.dsk" size="737280" crc="294d01a4" sha1="c6fa71ab0805c1cdcff5834979cbd44c3d4c79a2" offset="0" />
6921         </dataarea>
6922      </part>
6923   </software>
6924
6925   <software name="piki18">
6926      <description>Piki 18</description>
6927      <year>198?</year>
6928      <publisher>&lt;unknown&gt;</publisher>
6929
6930      <part name="flop1" interface="floppy_5_25">
6931         <dataarea name="flop" size="737280">
6932            <rom name="piki 18.dsk" size="737280" crc="9d79fcbc" sha1="47e75db427a143f98125632a01a76a4f39192fdd" offset="0" />
6933         </dataarea>
6934      </part>
6935   </software>
6936
6937   <software name="piktor">
6938      <description>Piktor</description>
6939      <year>1987</year>
6940      <publisher>B.B. Soft</publisher>
6941
6942      <part name="flop1" interface="floppy_5_25">
6943         <dataarea name="flop" size="368640">
6944            <rom name="piktor.dsk" size="368640" crc="9e9033c4" sha1="3ed30659c36ee3e8a9d10ffbeab45ab80584b4d2" offset="0" />
6945         </dataarea>
6946      </part>
6947   </software>
6948
6949   <software name="piktora" cloneof="piktor">
6950      <description>Piktor (Alt)</description>
6951      <year>1987</year>
6952      <publisher>B.B. Soft</publisher>
6953
6954      <part name="flop1" interface="floppy_5_25">
6955         <dataarea name="flop" size="368640">
6956            <rom name="piktordsk.dsk" size="368640" crc="dfda0223" sha1="d028b94f87e0578f475668cbf192224ea3097c00" offset="0" />
6957         </dataarea>
6958      </part>
6959   </software>
6960
6961   <software name="pilota">
6962      <description>Pilóta</description>
6963      <year>198?</year>
6964      <publisher>&lt;unknown&gt;</publisher>
6965
6966      <part name="flop1" interface="floppy_5_25">
6967         <dataarea name="flop" size="368640">
6968            <rom name="pilota.dsk" size="368640" crc="4d6b66a1" sha1="a431cbc3caddf198189bd68f035e455241c6289b" offset="0" />
6969         </dataarea>
6970      </part>
6971   </software>
6972
6973   <software name="pinkpant">
6974      <description>Pink Panther</description>
6975      <year>1989</year>
6976      <publisher>Cápasoft</publisher>
6977
6978      <part name="flop1" interface="floppy_5_25">
6979         <dataarea name="flop" size="368640">
6980            <rom name="pink_panther_1.dsk" size="368640" crc="82df597f" sha1="14032799f2eee7d0602f44f3988ecf1266a92138" offset="0" />
6981         </dataarea>
6982      </part>
6983   </software>
6984
6985   <software name="pinkpan2">
6986      <description>Pink Panther II</description>
6987      <year>1989</year>
6988      <publisher>Cápasoft</publisher>
6989
6990      <part name="flop1" interface="floppy_5_25">
6991         <dataarea name="flop" size="368640">
6992            <rom name="pink_panther_2.dsk" size="368640" crc="1dd50c99" sha1="198b2d82e4bc693d2a14440fa2395725329908d1" offset="0" />
6993         </dataarea>
6994      </part>
6995   </software>
6996
6997   <software name="pipemani">
6998      <description>Pipemánia</description>
6999      <year>1991</year>
7000      <publisher>Béla Csatlós</publisher>
7001
7002      <part name="flop1" interface="floppy_5_25">
7003         <dataarea name="flop" size="368640">
7004            <rom name="pipemania.dsk" size="368640" crc="fc2f6e18" sha1="f649bd203ad4875c728e62253e922164fbae96e8" offset="0" />
7005         </dataarea>
7006      </part>
7007   </software>
7008
7009   <software name="met_pir">
7010      <description>Meteor and Pirate</description>
7011      <year>1988</year>
7012      <publisher>Cápasoft</publisher>
7013
7014      <part name="flop1" interface="floppy_5_25">
7015         <dataarea name="flop" size="368640">
7016            <rom name="pirate.dsk" size="368640" crc="1bfcc853" sha1="0c24046a98647df0fcb80b03048cc7b0474eda76" offset="0" />
7017         </dataarea>
7018      </part>
7019   </software>
7020
7021   <software name="planpara">
7022      <description>Plánparalell Lemez</description>
7023      <year>198?</year>
7024      <publisher>&lt;unknown&gt;</publisher>
7025
7026      <part name="flop1" interface="floppy_5_25">
7027         <dataarea name="flop" size="368640">
7028            <rom name="planpara.dsk" size="368640" crc="b27dc32f" sha1="e34709892325d031f5086e25b7442a4aea21c8d8" offset="0" />
7029         </dataarea>
7030      </part>
7031   </software>
7032
7033   <software name="pokernyi">
7034      <description>Póker (Nyitrai)</description>
7035      <year>1986</year>
7036      <publisher>Nyitrai</publisher>
7037
7038      <part name="flop1" interface="floppy_5_25">
7039         <dataarea name="flop" size="368640">
7040            <rom name="poker.dsk" size="368640" crc="6e823799" sha1="10e3faea0def4dea594045008a047600e001222d" offset="0" />
7041         </dataarea>
7042      </part>
7043   </software>
7044
7045   <software name="pokerbar">
7046      <description>Póker (Barsony)</description>
7047      <year>1988</year>
7048      <publisher>Barsony</publisher>
7049
7050      <part name="flop1" interface="floppy_5_25">
7051         <dataarea name="flop" size="368640">
7052            <rom name="poker2.dsk" size="368640" crc="aa940567" sha1="d86d432d18f03ec9ba05f23b9cfe7f4440c7882a" offset="0" />
7053         </dataarea>
7054      </part>
7055   </software>
7056
7057   <software name="poker">
7058      <description>Póker</description>
7059      <year>198?</year>
7060      <publisher>&lt;unknown&gt;</publisher>
7061
7062      <part name="flop1" interface="floppy_5_25">
7063         <dataarea name="flop" size="368640">
7064            <rom name="pokerz.dsk" size="368640" crc="8c032d8a" sha1="b4f68973cc52efded1e99ec54c91e401d49daf56" offset="0" />
7065         </dataarea>
7066      </part>
7067   </software>
7068
7069   <software name="poklakom">
7070      <description>Póklakoma</description>
7071      <year>1987</year>
7072      <publisher>Novotrade</publisher>
7073
7074      <part name="flop1" interface="floppy_5_25">
7075         <dataarea name="flop" size="368640">
7076            <rom name="poklakoma.dsk" size="368640" crc="51d4f2ae" sha1="3d662c54b2c167be717c2ece1957347fe50eabdb" offset="0" />
7077         </dataarea>
7078      </part>
7079   </software>
7080
7081   <software name="poklakoma" cloneof="poklakom">
7082      <description>Póklakoma (Alt)</description>
7083      <year>1987</year>
7084      <publisher>Novotrade</publisher>
7085
7086      <part name="flop1" interface="floppy_5_25">
7087         <dataarea name="flop" size="368640">
7088            <rom name="poklakomav2.dsk" size="368640" crc="2d447319" sha1="58f941af018d2fd75391bfd66afa9625f569436b" offset="0" />
7089         </dataarea>
7090      </part>
7091   </software>
7092
7093   <software name="pokok">
7094      <description>Pókok - Pókvadászat</description>
7095      <year>198?</year>
7096      <publisher>&lt;unknown&gt;</publisher>
7097
7098      <part name="flop1" interface="floppy_5_25">
7099         <dataarea name="flop" size="368640">
7100            <rom name="pokok.dsk" size="368640" crc="479182b7" sha1="76d23bfb6bac27965aa98ba1586488610565510d" offset="0" />
7101         </dataarea>
7102      </part>
7103   </software>
7104
7105   <software name="pokol7">
7106      <description>A Pokol 7 Kapuja</description>
7107      <year>198?</year>
7108      <publisher>Molmix</publisher>
7109
7110      <part name="flop1" interface="floppy_5_25">
7111         <dataarea name="flop" size="368640">
7112            <rom name="pokol7.dsk" size="368640" crc="07692d80" sha1="acb68f82f0ebf156fdc54209348246ff91dc5245" offset="0" />
7113         </dataarea>
7114      </part>
7115   </software>
7116
7117   <software name="ponthalm">
7118      <description>Ponthalmazok</description>
7119      <year>198?</year>
7120      <publisher>&lt;unknown&gt;</publisher>
7121
7122      <part name="flop1" interface="floppy_5_25">
7123         <dataarea name="flop" size="368640">
7124            <rom name="ponthalmazok.dsk" size="368640" crc="eb394a2e" sha1="b40d0e2e267afc8d8fff292daffc7402fca323d9" offset="0" />
7125         </dataarea>
7126      </part>
7127   </software>
7128
7129   <software name="poseidon">
7130      <description>Poseidon Kincse</description>
7131      <year>1989</year>
7132      <publisher>Novotrade</publisher>
7133
7134      <part name="flop1" interface="floppy_5_25">
7135         <dataarea name="flop" size="368640">
7136            <rom name="poseidon.dsk" size="368640" crc="3f1cb19a" sha1="0de20749cec932b956ac5a6e16e9e09b55b6f409" offset="0" />
7137         </dataarea>
7138      </part>
7139   </software>
7140
7141   <software name="pottompe">
7142      <description>Pöttöm Peti</description>
7143      <year>198?</year>
7144      <publisher>&lt;unknown&gt;</publisher>
7145
7146      <part name="flop1" interface="floppy_5_25">
7147         <dataarea name="flop" size="368640">
7148            <rom name="pottompeti.dsk" size="368640" crc="d8f6bcba" sha1="c8171a39c67471aa82649ff8e60da33835c4ac4b" offset="0" />
7149         </dataarea>
7150      </part>
7151   </software>
7152
7153   <software name="potty">
7154      <description>Potty</description>
7155      <year>198?</year>
7156      <publisher>Nándor Sieben</publisher>
7157
7158      <part name="flop1" interface="floppy_5_25">
7159         <dataarea name="flop" size="368640">
7160            <rom name="potty.dsk" size="368640" crc="13c048cd" sha1="4cfbd9261628983f9e1c2a36a21230f04bd1bd9e" offset="0" />
7161         </dataarea>
7162      </part>
7163   </software>
7164
7165   <software name="prgrend">
7166      <description>Program Rendező</description>
7167      <year>198?</year>
7168      <publisher>&lt;unknown&gt;</publisher>
7169
7170      <part name="flop1" interface="floppy_5_25">
7171         <dataarea name="flop" size="368640">
7172            <rom name="prgrend.dsk" size="368640" crc="3eaf00a4" sha1="31fdf827381ecfd8bec8298d27ef7c93ba813a02" offset="0" />
7173         </dataarea>
7174      </part>
7175   </software>
7176
7177   <software name="prokat">
7178      <description>Program Katalógus</description>
7179      <year>198?</year>
7180      <publisher>&lt;unknown&gt;</publisher>
7181
7182      <part name="flop1" interface="floppy_5_25">
7183         <dataarea name="flop" size="368640">
7184            <rom name="prokat.dsk" size="368640" crc="bece438c" sha1="9930e55f90c45d0b79d5e55d218c155662d0493a" offset="0" />
7185         </dataarea>
7186      </part>
7187   </software>
7188
7189   <software name="questfor">
7190      <description>Quest for Tires</description>
7191      <year>198?</year>
7192      <publisher>&lt;unknown&gt;</publisher>
7193
7194      <part name="flop1" interface="floppy_5_25">
7195         <dataarea name="flop" size="368640">
7196            <rom name="questfor.dsk" size="368640" crc="a2d3cba1" sha1="31226fa94d14a5c8e41eb2a995bca8db8a108b0f" offset="0" />
7197         </dataarea>
7198      </part>
7199   </software>
7200
7201   <software name="raceace">
7202      <description>Race Ace</description>
7203      <year>1990</year>
7204      <publisher>Zsolt Szigeti</publisher>
7205
7206      <part name="flop1" interface="floppy_5_25">
7207         <dataarea name="flop" size="368640">
7208            <rom name="raceace.dsk" size="368640" crc="6296ac52" sha1="6db1ed2361cf2ead684656843863b7678076dc0f" offset="0" />
7209         </dataarea>
7210      </part>
7211   </software>
7212
7213   <software name="raceacea" cloneof="raceace">
7214      <description>Race Ace (Alt)</description>
7215      <year>1990</year>
7216      <publisher>Zsolt Szigeti</publisher>
7217
7218      <part name="flop1" interface="floppy_5_25">
7219         <dataarea name="flop" size="368640">
7220            <rom name="raceacev2.dsk" size="368640" crc="6431bbea" sha1="381ffe09368e7d7e0b8d69684e322dcc356c8cb5" offset="0" />
7221         </dataarea>
7222      </part>
7223   </software>
7224
7225   <software name="radar">
7226      <description>Radar</description>
7227      <year>1987</year>
7228      <publisher>Flighter Software</publisher>
7229
7230      <part name="flop1" interface="floppy_5_25">
7231         <dataarea name="flop" size="368640">
7232            <rom name="radar.dsk" size="368640" crc="d9f4c7a1" sha1="74f59b64f0ff0d4e1779e4efce7bb204010a51ad" offset="0" />
7233         </dataarea>
7234      </part>
7235   </software>
7236
7237   <software name="raiders">
7238      <description>Raiders of the Lost Ark</description>
7239      <year>198?</year>
7240      <publisher>&lt;unknown&gt;</publisher>
7241
7242      <part name="flop1" interface="floppy_5_25">
7243         <dataarea name="flop" size="368640">
7244            <rom name="raidersofthelostark.dsk" size="368640" crc="e8411835" sha1="5f85c5ee143a97881d0813c8e0daeac3b66229c7" offset="0" />
7245         </dataarea>
7246      </part>
7247   </software>
7248
7249   <software name="rajz">
7250      <description>Rajz</description>
7251      <year>198?</year>
7252      <publisher>&lt;unknown&gt;</publisher>
7253
7254      <part name="flop1" interface="floppy_5_25">
7255         <dataarea name="flop" size="368640">
7256            <rom name="rajz.dsk" size="368640" crc="65890ad4" sha1="777950a65119dc534bd3c797654aaf57c25926f3" offset="0" />
7257         </dataarea>
7258      </part>
7259   </software>
7260
7261   <software name="rajzolo">
7262      <description>Rajzoló</description>
7263      <year>1987</year>
7264      <publisher>Atlas</publisher>
7265
7266      <part name="flop1" interface="floppy_5_25">
7267         <dataarea name="flop" size="368640">
7268            <rom name="rajzolo.dsk" size="368640" crc="093c296e" sha1="490a9956e9fc8672bdae5b1f98e662b62860a6d2" offset="0" />
7269         </dataarea>
7270      </part>
7271   </software>
7272
7273   <software name="raketa">
7274      <description>Rakéta</description>
7275      <year>198?</year>
7276      <publisher>&lt;unknown&gt;</publisher>
7277
7278      <part name="flop1" interface="floppy_5_25">
7279         <dataarea name="flop" size="368640">
7280            <rom name="raketa.dsk" size="368640" crc="da21a2ee" sha1="7df96f85388be8db1800de9aa3e0edca36796143" offset="0" />
7281         </dataarea>
7282      </part>
7283   </software>
7284
7285   <software name="rallye">
7286      <description>Rallye</description>
7287      <year>1987</year>
7288      <publisher>Zsolt Dobrovics</publisher>
7289
7290      <part name="flop1" interface="floppy_5_25">
7291         <dataarea name="flop" size="368640">
7292            <rom name="rallye.dsk" size="368640" crc="8d153eb7" sha1="02d65f8088fe6070fb2e65d09bc4380b8fd65644" offset="0" />
7293         </dataarea>
7294      </part>
7295   </software>
7296
7297   <software name="ramazuri">
7298      <description>Ramazuri</description>
7299      <year>1988</year>
7300      <publisher>Béla Csatlós</publisher>
7301
7302      <part name="flop1" interface="floppy_5_25">
7303         <dataarea name="flop" size="368640">
7304            <rom name="ramazuri.dsk" size="368640" crc="f787b41c" sha1="5ee0dd2428284d51b4ca4d79aec64d68385bd19a" offset="0" />
7305         </dataarea>
7306      </part>
7307   </software>
7308
7309   <software name="ramleir">
7310      <description>RAM Címek Leírása</description>
7311      <year>198?</year>
7312      <publisher>&lt;unknown&gt;</publisher>
7313
7314      <part name="flop1" interface="floppy_5_25">
7315         <dataarea name="flop" size="368640">
7316            <rom name="ramleir.dsk" size="368640" crc="18137bf2" sha1="4c8f0912907311fad4f2ba4edc9ae17d066b641b" offset="0" />
7317         </dataarea>
7318      </part>
7319   </software>
7320
7321   <software name="rastan">
7322      <description>Rastan the Barbarian Fighter</description>
7323      <year>198?</year>
7324      <publisher>C.S. Software</publisher>
7325
7326      <part name="flop1" interface="floppy_5_25">
7327         <dataarea name="flop" size="368640">
7328            <rom name="rastanthebarbarianfighter.dsk" size="368640" crc="8ea7f1b2" sha1="7969d28c088bec0aa7af38041ead238f74de95e9" offset="0" />
7329         </dataarea>
7330      </part>
7331   </software>
7332
7333   <software name="raszter">
7334      <description>TVC Raszterdemo</description>
7335      <year>198?</year>
7336      <publisher>Peter Rakos</publisher>
7337
7338      <part name="flop1" interface="floppy_5_25">
7339         <dataarea name="flop" size="368640">
7340            <rom name="raszter.dsk" size="368640" crc="59e66454" sha1="1d438f7edfa2a9d43ce893345faeb6e1053704bf" offset="0" />
7341         </dataarea>
7342      </part>
7343   </software>
7344
7345   <software name="rckor">
7346      <description>RC Kör</description>
7347      <year>198?</year>
7348      <publisher>&lt;unknown&gt;</publisher>
7349
7350      <part name="flop1" interface="floppy_5_25">
7351         <dataarea name="flop" size="368640">
7352            <rom name="rckor.dsk" size="368640" crc="a0efc17c" sha1="54e486a044c69d96c6aff1cb3e607990fbe494ba" offset="0" />
7353         </dataarea>
7354      </part>
7355   </software>
7356
7357   <software name="reaktor">
7358      <description>Reaktor</description>
7359      <year>198?</year>
7360      <publisher>Béla Takács</publisher>
7361
7362      <part name="flop1" interface="floppy_5_25">
7363         <dataarea name="flop" size="368640">
7364            <rom name="reaktor.dsk" size="368640" crc="40716071" sha1="117d042e79d0dcf36175c4f298466afe53d557dd" offset="0" />
7365         </dataarea>
7366      </part>
7367   </software>
7368
7369   <software name="reflex">
7370      <description>Reflex</description>
7371      <year>198?</year>
7372      <publisher>Software in LUX</publisher>
7373
7374      <part name="flop1" interface="floppy_5_25">
7375         <dataarea name="flop" size="368640">
7376            <rom name="reflex.dsk" size="368640" crc="49bf026c" sha1="5c4a8912c5db0ffa5cc39ceca043c0f6ee4c4f80" offset="0" />
7377         </dataarea>
7378      </part>
7379   </software>
7380
7381   <software name="relativ">
7382      <description>Relatív Koordináta</description>
7383      <year>198?</year>
7384      <publisher>Laci's Soft Studio</publisher>
7385
7386      <part name="flop1" interface="floppy_5_25">
7387         <dataarea name="flop" size="368640">
7388            <rom name="relativ.dsk" size="368640" crc="ac911f2c" sha1="bed6b2574a1fe0eb63a193ab459c4175f7848c9d" offset="0" />
7389         </dataarea>
7390      </part>
7391   </software>
7392
7393   <software name="repules">
7394      <description>Repülés szimulátor BASIC-ül</description>
7395      <year>1987</year>
7396      <publisher>SPLTD</publisher>
7397
7398      <part name="flop1" interface="floppy_5_25">
7399         <dataarea name="flop" size="368640">
7400            <rom name="repulesszimulator.dsk" size="368640" crc="ccad68f1" sha1="fd99a84b6f1c94e735b9d5c3a3317cc2ff4556cf" offset="0" />
7401         </dataarea>
7402      </part>
7403   </software>
7404
7405   <software name="repulesa" cloneof="repules">
7406      <description>Repülés szimulátor BASIC-ül (Alt)</description>
7407      <year>1987</year>
7408      <publisher>SPLTD</publisher>
7409
7410      <part name="flop1" interface="floppy_5_25">
7411         <dataarea name="flop" size="368640">
7412            <rom name="fsimv2.dsk" size="368640" crc="b3f6161e" sha1="acf5773aeb8380aa1b795f73910193ff9debb205" offset="0" />
7413         </dataarea>
7414      </part>
7415   </software>
7416
7417   <software name="repulesb" cloneof="repules">
7418      <description>Repülés szimulátor BASIC-ül (Alt 2)</description>
7419      <year>1987</year>
7420      <publisher>SPLTD</publisher>
7421
7422      <part name="flop1" interface="floppy_5_25">
7423         <dataarea name="flop" size="368640">
7424            <rom name="fsimv3.dsk" size="368640" crc="61c10240" sha1="e3ae067e4f5bc70d7bc7936800285c7a20d7ede5" offset="0" />
7425         </dataarea>
7426      </part>
7427   </software>
7428
7429   <software name="repulesc" cloneof="repules">
7430      <description>Repülés szimulátor BASIC-ül (Alt 3)</description>
7431      <year>1987</year>
7432      <publisher>SPLTD</publisher>
7433
7434      <part name="flop1" interface="floppy_5_25">
7435         <dataarea name="flop" size="368640">
7436            <rom name="fsimv4.dsk" size="368640" crc="4b09f697" sha1="b7e6950df79bef963b07f4e0af5a9f1851ad2ed6" offset="0" />
7437         </dataarea>
7438      </part>
7439   </software>
7440
7441   <software name="reversi">
7442      <description>Reversi</description>
7443      <year>198?</year>
7444      <publisher>&lt;unknown&gt;</publisher>
7445
7446      <part name="flop1" interface="floppy_5_25">
7447         <dataarea name="flop" size="368640">
7448            <rom name="reversi.dsk" size="368640" crc="499f8a2c" sha1="ec7020f0401dac71b282077d1ed141144dfcc325" offset="0" />
7449         </dataarea>
7450      </part>
7451   </software>
7452
7453   <software name="rezgom">
7454      <description>Rezgőmozgás</description>
7455      <year>1985</year>
7456      <publisher>HLV</publisher>
7457
7458      <part name="flop1" interface="floppy_5_25">
7459         <dataarea name="flop" size="368640">
7460            <rom name="rezgom.dsk" size="368640" crc="5357c400" sha1="d3f5a4d4fca6ca4891058245a9f6942fbd2f2800" offset="0" />
7461         </dataarea>
7462      </part>
7463   </software>
7464
7465   <software name="riderboy">
7466      <description>Riderboy</description>
7467      <year>1991</year>
7468      <publisher>&lt;unknown&gt;</publisher>
7469
7470      <part name="flop1" interface="floppy_5_25">
7471         <dataarea name="flop" size="368640">
7472            <rom name="riderboy.dsk" size="368640" crc="dc02aef5" sha1="24c00236b495524a0a920f88fee5586d744d7b3f" offset="0" />
7473         </dataarea>
7474      </part>
7475   </software>
7476
7477   <software name="robhood">
7478      <description>Robin Hood - Íjászverseny</description>
7479      <year>198?</year>
7480      <publisher>Berysoft</publisher>
7481
7482      <part name="flop1" interface="floppy_5_25">
7483         <dataarea name="flop" size="368640">
7484            <rom name="robinhood.dsk" size="368640" crc="0948123c" sha1="4929079db39abf88f9eb6edc6d5258adff1315e6" offset="0" />
7485         </dataarea>
7486      </part>
7487   </software>
7488
7489   <software name="rohamm">
7490      <description>Rohamm</description>
7491      <year>1989</year>
7492      <publisher>GATO Bt.</publisher>
7493
7494      <part name="flop1" interface="floppy_5_25">
7495         <dataarea name="flop" size="368640">
7496            <rom name="rohamm.dsk" size="368640" crc="af03f94b" sha1="549c0bbfefa3f265f336dcdd73cb6878036c0266" offset="0" />
7497         </dataarea>
7498      </part>
7499   </software>
7500
7501   <software name="rohammt" cloneof="rohamm">
7502      <description>Rohamm (Trainer)</description>
7503      <year>1989</year>
7504      <publisher>GATO Bt.</publisher>
7505
7506      <part name="flop1" interface="floppy_5_25">
7507         <dataarea name="flop" size="368640">
7508            <rom name="rohammtrainer.dsk" size="368640" crc="64e658f9" sha1="3ef70d0475f0508ab35d12d7238717277f2cfa22" offset="0" />
7509         </dataarea>
7510      </part>
7511   </software>
7512
7513   <software name="rokavads">
7514      <description>Rókavadász</description>
7515      <year>1988</year>
7516      <publisher>Cápasoft</publisher>
7517
7518      <part name="flop1" interface="floppy_5_25">
7519         <dataarea name="flop" size="368640">
7520            <rom name="rokavads.dsk" size="368640" crc="1ee3a6ea" sha1="6ce10360270a210b8858a004750fa2df2fce74bb" offset="0" />
7521         </dataarea>
7522      </part>
7523   </software>
7524
7525   <software name="rombolo">
7526      <description>Romboló</description>
7527      <year>198?</year>
7528      <publisher>&lt;unknown&gt;</publisher>
7529
7530      <part name="flop1" interface="floppy_5_25">
7531         <dataarea name="flop" size="368640">
7532            <rom name="rombolo.dsk" size="368640" crc="9f91da7d" sha1="9c36f9ad8c4b13d78c10496e5cd2cf2ec7840123" offset="0" />
7533         </dataarea>
7534      </part>
7535   </software>
7536
7537   <software name="rombolop">
7538      <description>Romboló (Police Sowtver)</description>
7539      <year>198?</year>
7540      <publisher>Police Sowtver</publisher>
7541
7542      <part name="flop1" interface="floppy_5_25">
7543         <dataarea name="flop" size="368640">
7544            <rom name="rombolo2.dsk" size="368640" crc="db4de3a6" sha1="639ecc9992215bf0a73f72e73a9a65a76628dd06" offset="0" />
7545         </dataarea>
7546      </part>
7547   </software>
7548
7549   <software name="rombolov">
7550      <description>Romboló (Sandor Vekony)</description>
7551      <year>1987</year>
7552      <publisher>Sandor Vekony</publisher>
7553
7554      <part name="flop1" interface="floppy_5_25">
7555         <dataarea name="flop" size="368640">
7556            <rom name="rombszur.dsk" size="368640" crc="ee3f3afc" sha1="3ed3a42674f2d546e6e8984f78498819df9cbf81" offset="0" />
7557         </dataarea>
7558      </part>
7559   </software>
7560
7561   <software name="rondo">
7562      <description>Rondo</description>
7563      <year>1988</year>
7564      <publisher>Ubisoft</publisher>
7565
7566      <part name="flop1" interface="floppy_5_25">
7567         <dataarea name="flop" size="368640">
7568            <rom name="rondo.dsk" size="368640" crc="428ef3fe" sha1="c931dbcc7e9032c43d3b29974dcf3428ea25da3d" offset="0" />
7569         </dataarea>
7570      </part>
7571   </software>
7572
7573   <software name="rondoa" cloneof="rondo">
7574      <description>Rondo (Alt)</description>
7575      <year>1988</year>
7576      <publisher>Ubisoft</publisher>
7577
7578      <part name="flop1" interface="floppy_5_25">
7579         <dataarea name="flop" size="368640">
7580            <rom name="rondov2.dsk" size="368640" crc="42fd9ea3" sha1="2c0adef53905ba138160de9eafe7f1c8a315c55f" offset="0" />
7581         </dataarea>
7582      </part>
7583   </software>
7584
7585   <software name="rowar" cloneof="rohamm">
7586      <description>RoWar</description>
7587      <year>1991</year>
7588      <publisher>GATO Bt.</publisher>
7589
7590      <part name="flop1" interface="floppy_5_25">
7591         <dataarea name="flop" size="368640">
7592            <rom name="rowar.dsk" size="368640" crc="a649fbde" sha1="e07238d371110e23122b85a93e210c65e199bd49" offset="0" />
7593         </dataarea>
7594      </part>
7595   </software>
7596
7597   <software name="rtadatba">
7598      <description>Rádiótechnika Adatbázis</description>
7599      <year>198?</year>
7600      <publisher>Atlas</publisher>
7601
7602      <part name="flop1" interface="floppy_5_25">
7603         <dataarea name="flop" size="368640">
7604            <rom name="rt_adatbazis.dsk" size="368640" crc="f0d4bd79" sha1="20ea229caa06be0e454c09183e2f222f094b1f47" offset="0" />
7605         </dataarea>
7606      </part>
7607   </software>
7608
7609   <software name="rubikkoc">
7610      <description>Rubik Kocka</description>
7611      <year>1988</year>
7612      <publisher>Varga Softver</publisher>
7613
7614      <part name="flop1" interface="floppy_5_25">
7615         <dataarea name="flop" size="368640">
7616            <rom name="rubikkocka.dsk" size="368640" crc="5bcbf9ef" sha1="96ea534f9887683cbcf6b7812a6fb16bc480b870" offset="0" />
7617         </dataarea>
7618      </part>
7619   </software>
7620
7621   <software name="rulett">
7622      <description>Roulette De Luxe</description>
7623      <year>1986</year>
7624      <publisher>Ferenc Dobai</publisher>
7625
7626      <part name="flop1" interface="floppy_5_25">
7627         <dataarea name="flop" size="368640">
7628            <rom name="rulett.dsk" size="368640" crc="8287da91" sha1="2b41f2237e5cca195d6af327728a2ccd2da996b0" offset="0" />
7629         </dataarea>
7630      </part>
7631   </software>
7632
7633   <software name="sajtvajo">
7634      <description>Sajtvájó</description>
7635      <year>1991</year>
7636      <publisher>STV</publisher>
7637
7638      <part name="flop1" interface="floppy_5_25">
7639         <dataarea name="flop" size="368640">
7640            <rom name="sajtvajo.dsk" size="368640" crc="36e6e679" sha1="a5ac83cb2875cbb2f5c783f93ebfcaf07b328904" offset="0" />
7641         </dataarea>
7642      </part>
7643   </software>
7644
7645   <software name="sajtvajoa" cloneof="sajtvajo">
7646      <description>Sajtvájó (Alt)</description>
7647      <year>1991</year>
7648      <publisher>STV</publisher>
7649
7650      <part name="flop1" interface="floppy_5_25">
7651         <dataarea name="flop" size="368640">
7652            <rom name="sajtvav2.dsk" size="368640" crc="7d875559" sha1="affa40b13035427b2f8e4703abc99a357806d256" offset="0" />
7653         </dataarea>
7654      </part>
7655   </software>
7656
7657   <software name="samantha">
7658      <description>Samantha Fox's Strip</description>
7659      <year>1988</year>
7660      <publisher>Buddha Softhouse</publisher>
7661
7662      <part name="flop1" interface="floppy_5_25">
7663         <dataarea name="flop" size="368640">
7664            <rom name="samthafox.dsk" size="368640" crc="21291a1f" sha1="03813eb5b2b2c04bce9b7b2e31b57664d9ff7641" offset="0" />
7665         </dataarea>
7666      </part>
7667   </software>
7668
7669   <software name="samuraj">
7670      <description>Samuraj</description>
7671      <year>198?</year>
7672      <publisher>Béla Takács</publisher>
7673
7674      <part name="flop1" interface="floppy_5_25">
7675         <dataarea name="flop" size="368640">
7676            <rom name="samuraj.dsk" size="368640" crc="52ee419c" sha1="45e9fe530261afdd70e89fb832951cdeb4df558e" offset="0" />
7677         </dataarea>
7678      </part>
7679   </software>
7680
7681   <software name="samuraja" cloneof="samuraj">
7682      <description>Samuraj (Alt)</description>
7683      <year>198?</year>
7684      <publisher>Béla Takács</publisher>
7685
7686      <part name="flop1" interface="floppy_5_25">
7687         <dataarea name="flop" size="368640">
7688            <rom name="samurv2.dsk" size="368640" crc="c330d5cc" sha1="75ad2dca2bb04815128560e63c8ef2ebc9f64116" offset="0" />
7689         </dataarea>
7690      </part>
7691   </software>
7692
7693   <software name="samus">
7694      <description>Samus' Guest</description>
7695      <year>1987</year>
7696      <publisher>CSC Software - Skoda Software</publisher>
7697
7698      <part name="flop1" interface="floppy_5_25">
7699         <dataarea name="flop" size="368640">
7700            <rom name="samusguest.dsk" size="368640" crc="36102679" sha1="598b8db5f23b7a472f9aee2f240f68b88a3eb34a" offset="0" />
7701         </dataarea>
7702      </part>
7703   </software>
7704
7705   <software name="sarkany">
7706      <description>Sárkánybarlang</description>
7707      <year>198?</year>
7708      <publisher>&lt;unknown&gt;</publisher>
7709
7710      <part name="flop1" interface="floppy_5_25">
7711         <dataarea name="flop" size="368640">
7712            <rom name="sarkanybarlang.dsk" size="368640" crc="1b0e31fd" sha1="38a3d6873e1fe491eb08d1bceba33d7d815eb978" offset="0" />
7713         </dataarea>
7714      </part>
7715   </software>
7716
7717   <software name="satiroza">
7718      <description>Satírozás</description>
7719      <year>1991</year>
7720      <publisher>STV</publisher>
7721
7722      <part name="flop1" interface="floppy_5_25">
7723         <dataarea name="flop" size="368640">
7724            <rom name="satirozasv1.dsk" size="368640" crc="6eb8bb21" sha1="66fe63e266a17188e527fce4fc4b6410202db7ad" offset="0" />
7725         </dataarea>
7726      </part>
7727   </software>
7728
7729   <software name="satirozaa" cloneof="satiroza">
7730      <description>Satírozás (Alt)</description>
7731      <year>1991</year>
7732      <publisher>STV</publisher>
7733
7734      <part name="flop1" interface="floppy_5_25">
7735         <dataarea name="flop" size="368640">
7736            <rom name="satirozasv2.dsk" size="368640" crc="d32f81ed" sha1="f83fa73e29472ce1879d35dbc18abd9a1cea54ab" offset="0" />
7737         </dataarea>
7738      </part>
7739   </software>
7740
7741   <software name="scroll">
7742      <description>Scroll</description>
7743      <year>198?</year>
7744      <publisher>&lt;unknown&gt;</publisher>
7745
7746      <part name="flop1" interface="floppy_5_25">
7747         <dataarea name="flop" size="368640">
7748            <rom name="scroll.dsk" size="368640" crc="43d5a628" sha1="a03b07b6d40903e1da843472c229cd4225d1e0e3" offset="0" />
7749         </dataarea>
7750      </part>
7751   </software>
7752
7753   <software name="sex">
7754      <description>A TVC 1. Szexoktató Programja</description>
7755      <year>198?</year>
7756      <publisher>&lt;unknown&gt;</publisher>
7757
7758      <part name="flop1" interface="floppy_5_25">
7759         <dataarea name="flop" size="368640">
7760            <rom name="sex.dsk" size="368640" crc="5a48736b" sha1="d0ab3b2449f4652f9436bbf0ce2b12fed892eebb" offset="0" />
7761         </dataarea>
7762      </part>
7763   </software>
7764
7765   <software name="sexshow">
7766      <description>A TVC 2. Szexoktató Programja</description>
7767      <year>1988</year>
7768      <publisher>Buddha Softhouse</publisher>
7769
7770      <part name="flop1" interface="floppy_5_25">
7771         <dataarea name="flop" size="368640">
7772            <rom name="sexshow.dsk" size="368640" crc="8a376d05" sha1="d44165b97d929e5019541d68223cf17d68237efb" offset="0" />
7773         </dataarea>
7774      </part>
7775   </software>
7776
7777   <software name="olympski">
7778      <description>Olympic Ski</description>
7779      <year>1985</year>
7780      <publisher>Béla Szalontai</publisher>
7781
7782      <part name="flop1" interface="floppy_5_25">
7783         <dataarea name="flop" size="368640">
7784            <rom name="sielo.dsk" size="368640" crc="4fc38c7e" sha1="3507e5e37edfa5448304bddbe2b524fb4eedacac" offset="0" />
7785         </dataarea>
7786      </part>
7787   </software>
7788
7789   <software name="simul86">
7790      <description>Simulator 86 - Flight Simulator</description>
7791      <year>1986</year>
7792      <publisher>S.P. Studio</publisher>
7793
7794      <part name="flop1" interface="floppy_5_25">
7795         <dataarea name="flop" size="368640">
7796            <rom name="simul86.dsk" size="368640" crc="50bc9767" sha1="7c8af86372f098617fb1288bcf9a70b5a7d79b0d" offset="0" />
7797         </dataarea>
7798      </part>
7799   </software>
7800
7801   <software name="sinus">
7802      <description>Sinus</description>
7803      <year>1985</year>
7804      <publisher>HLV</publisher>
7805
7806      <part name="flop1" interface="floppy_5_25">
7807         <dataarea name="flop" size="368640">
7808            <rom name="sinus.dsk" size="368640" crc="526ef6be" sha1="560f841d3ae2ba25b8dc7a406dec1242314a3a3d" offset="0" />
7809         </dataarea>
7810      </part>
7811   </software>
7812
7813   <software name="sirartur">
7814      <description>Sir Artur</description>
7815      <year>1989</year>
7816      <publisher>Béla Takács</publisher>
7817
7818      <part name="flop1" interface="floppy_5_25">
7819         <dataarea name="flop" size="368640">
7820            <rom name="sirartur.dsk" size="368640" crc="eeba76c7" sha1="b1ade230d146979506dcc578fd9f627f164d397c" offset="0" />
7821         </dataarea>
7822      </part>
7823   </software>
7824
7825   <software name="siraso">
7826      <description>Sírásó</description>
7827      <year>198?</year>
7828      <publisher>&lt;unknown&gt;</publisher>
7829
7830      <part name="flop1" interface="floppy_5_25">
7831         <dataarea name="flop" size="368640">
7832            <rom name="siraso.dsk" size="368640" crc="24adb822" sha1="fa82f7fc50ceb0d3b900335dd3f1ff3263dce302" offset="0" />
7833         </dataarea>
7834      </part>
7835   </software>
7836
7837   <software name="sokoban">
7838      <description>Soko-ban</description>
7839      <year>1990</year>
7840      <publisher>Ubul</publisher>
7841
7842      <part name="flop1" interface="floppy_5_25">
7843         <dataarea name="flop" size="368640">
7844            <rom name="soko-ban.dsk" size="368640" crc="07b499a6" sha1="4cafe95ba7f717af3909ee05c457beca61a888c4" offset="0" />
7845         </dataarea>
7846      </part>
7847   </software>
7848
7849   <software name="sokobang">
7850      <description>Soko-Ban Game</description>
7851      <year>1989</year>
7852      <publisher>Andras Soos</publisher>
7853
7854      <part name="flop1" interface="floppy_5_25">
7855         <dataarea name="flop" size="368640">
7856            <rom name="sokobangame.dsk" size="368640" crc="988dcbb2" sha1="0888da813afc88e5da30419beec1571737d70fb5" offset="0" />
7857         </dataarea>
7858      </part>
7859   </software>
7860
7861   <software name="soliter">
7862      <description>Soliter</description>
7863      <year>1986</year>
7864      <publisher>Unisoft GMK</publisher>
7865
7866      <part name="flop1" interface="floppy_5_25">
7867         <dataarea name="flop" size="368640">
7868            <rom name="soliter(unisoft).dsk" size="368640" crc="f7bcb35c" sha1="8d191533e78f42096cac904c597432342448503b" offset="0" />
7869         </dataarea>
7870      </part>
7871   </software>
7872
7873   <software name="spacesap">
7874      <description>Space Sapper</description>
7875      <year>1987</year>
7876      <publisher>Novotrade</publisher>
7877
7878      <part name="flop1" interface="floppy_5_25">
7879         <dataarea name="flop" size="368640">
7880            <rom name="spacesapper.dsk" size="368640" crc="df679391" sha1="a9acf7f2ab79fd6124eb17fc31e35e96d28abb1b" offset="0" />
7881         </dataarea>
7882      </part>
7883   </software>
7884
7885   <software name="spacesapa" cloneof="spacesap">
7886      <description>Space Sapper (Alt)</description>
7887      <year>1987</year>
7888      <publisher>Novotrade</publisher>
7889
7890      <part name="flop1" interface="floppy_5_25">
7891         <dataarea name="flop" size="368640">
7892            <rom name="spacev2.dsk" size="368640" crc="5ed54dbf" sha1="3d73771a57f0d6bb2d638661dd444cf484d41110" offset="0" />
7893         </dataarea>
7894      </part>
7895   </software>
7896
7897   <software name="spectrum">
7898      <description>Spectrum</description>
7899      <year>198?</year>
7900      <publisher>&lt;unknown&gt;</publisher>
7901
7902      <part name="flop1" interface="floppy_5_25">
7903         <dataarea name="flop" size="368640">
7904            <rom name="spectrum.dsk" size="368640" crc="c68f00db" sha1="e2bf291ceddc052e4dca4684816e1fc40892ef50" offset="0" />
7905         </dataarea>
7906      </part>
7907   </software>
7908
7909   <software name="spherica">
7910      <description>Spherical</description>
7911      <year>198?</year>
7912      <publisher>C.S. Software</publisher>
7913
7914      <part name="flop1" interface="floppy_5_25">
7915         <dataarea name="flop" size="368640">
7916            <rom name="spherical.dsk" size="368640" crc="e86db571" sha1="6453d33e336802eabf56766cc9b8880249873427" offset="0" />
7917         </dataarea>
7918      </part>
7919   </software>
7920
7921   <software name="spherdem">
7922      <description>Spherical Demo</description>
7923      <year>198?</year>
7924      <publisher>&lt;unknown&gt;</publisher>
7925
7926      <part name="flop1" interface="floppy_5_25">
7927         <dataarea name="flop" size="368640">
7928            <rom name="sphericaldemo.dsk" size="368640" crc="e8ecd920" sha1="e8736b4945c4675e78862b30e58c70b7abd4fab1" offset="0" />
7929         </dataarea>
7930      </part>
7931   </software>
7932
7933   <software name="sphericaa" cloneof="spherica">
7934      <description>Spherical (Alt)</description>
7935      <year>198?</year>
7936      <publisher>C.S. Software</publisher>
7937
7938      <part name="flop1" interface="floppy_5_25">
7939         <dataarea name="flop" size="368640">
7940            <rom name="sphericalv2.dsk" size="368640" crc="2d773fd0" sha1="7ca5c0ba59c5fcab96811137d399a86ddd795d30" offset="0" />
7941         </dataarea>
7942      </part>
7943   </software>
7944
7945   <software name="sprinter">
7946      <description>Sprinter</description>
7947      <year>198?</year>
7948      <publisher>Berysoft</publisher>
7949
7950      <part name="flop1" interface="floppy_5_25">
7951         <dataarea name="flop" size="368640">
7952            <rom name="sprinter.dsk" size="368640" crc="e9b40029" sha1="69300a0f60132e34b69a5e72c449d584fb0cdfdc" offset="0" />
7953         </dataarea>
7954      </part>
7955   </software>
7956
7957   <software name="sprite">
7958      <description>Sprite Készítő (Cracked by Csabi)</description>
7959      <year>198?</year>
7960      <publisher>Attila Canjavec</publisher>
7961
7962      <part name="flop1" interface="floppy_5_25">
7963         <dataarea name="flop" size="368640">
7964            <rom name="sprite.dsk" size="368640" crc="7c869449" sha1="743b16e44cdc54d26cad8514d9544949cfe5e4a0" offset="0" />
7965         </dataarea>
7966      </part>
7967   </software>
7968
7969   <software name="spritele">
7970      <description>Sprite Készítő - Leírás</description>
7971      <year>198?</year>
7972      <publisher>Attila Canjavec</publisher>
7973
7974      <part name="flop1" interface="floppy_5_25">
7975         <dataarea name="flop" size="368640">
7976            <rom name="spritele.dsk" size="368640" crc="62a82ec8" sha1="66cbf1c2a5f83826f6531ac06070c8666ff03f54" offset="0" />
7977         </dataarea>
7978      </part>
7979   </software>
7980
7981   <software name="spritepr">
7982      <description>Sprite-Programozó</description>
7983      <year>198?</year>
7984      <publisher>Mono-Sw</publisher>
7985
7986      <part name="flop1" interface="floppy_5_25">
7987         <dataarea name="flop" size="368640">
7988            <rom name="spritepr.dsk" size="368640" crc="e6dc9b83" sha1="892646bcc53e255bc772ae3c234195048621baea" offset="0" />
7989         </dataarea>
7990      </part>
7991   </software>
7992
7993   <software name="spyhunt">
7994      <description>Spy Hunter</description>
7995      <year>198?</year>
7996      <publisher>&lt;unknown&gt;</publisher>
7997
7998      <part name="flop1" interface="floppy_5_25">
7999         <dataarea name="flop" size="368640">
8000            <rom name="spyhunt.dsk" size="368640" crc="318d1c9a" sha1="cb70e56983583cb78c34d8b8c5dac0e9145e319b" offset="0" />
8001         </dataarea>
8002      </part>
8003   </software>
8004
8005   <software name="starship">
8006      <description>Starship</description>
8007      <year>1989</year>
8008      <publisher>Zoltan Arvai</publisher>
8009
8010      <part name="flop1" interface="floppy_5_25">
8011         <dataarea name="flop" size="368640">
8012            <rom name="starship.dsk" size="368640" crc="d4795666" sha1="33c7366f1dc1c512d8bc21b3a38ab64edfdce246" offset="0" />
8013         </dataarea>
8014      </part>
8015   </software>
8016
8017   <software name="start">
8018      <description>Start</description>
8019      <year>198?</year>
8020      <publisher>&lt;unknown&gt;</publisher>
8021
8022      <part name="flop1" interface="floppy_5_25">
8023         <dataarea name="flop" size="368640">
8024            <rom name="start.dsk" size="368640" crc="2c971ee0" sha1="dc232eb478d6f83f817be6488aac48cac77abf3e" offset="0" />
8025         </dataarea>
8026      </part>
8027   </software>
8028
8029   <software name="startrek">
8030      <description>Star Trek</description>
8031      <year>1987</year>
8032      <publisher>&lt;unknown&gt;</publisher>
8033
8034      <part name="flop1" interface="floppy_5_25">
8035         <dataarea name="flop" size="368640">
8036            <rom name="startrek.dsk" size="368640" crc="4aa6bddc" sha1="9e80e1639c8db84c22a5451600ce0291ed1ad206" offset="0" />
8037         </dataarea>
8038      </part>
8039   </software>
8040
8041   <software name="starwars">
8042      <description>Star Wars</description>
8043      <year>198?</year>
8044      <publisher>Software in LUX</publisher>
8045
8046      <part name="flop1" interface="floppy_5_25">
8047         <dataarea name="flop" size="368640">
8048            <rom name="starwars.dsk" size="368640" crc="62e14b10" sha1="3f9c4b1de1ebabeca8edfa40db08f4c8380e24b2" offset="0" />
8049         </dataarea>
8050      </part>
8051   </software>
8052
8053   <software name="stevens">
8054      <description>Steven's Gambling</description>
8055      <year>1986</year>
8056      <publisher>BirdSoft</publisher>
8057
8058      <part name="flop1" interface="floppy_5_25">
8059         <dataarea name="flop" size="368640">
8060            <rom name="stevensgambling.dsk" size="368640" crc="7f4544c5" sha1="83a41218369550adcadf5ce7afa3275e9cfe34fe" offset="0" />
8061         </dataarea>
8062      </part>
8063   </software>
8064
8065   <software name="stonesca">
8066      <description>Stone Scamp</description>
8067      <year>1988</year>
8068      <publisher>Zsolt Szíjártó</publisher>
8069
8070      <part name="flop1" interface="floppy_5_25">
8071         <dataarea name="flop" size="368640">
8072            <rom name="stonescamp.dsk" size="368640" crc="7d4e6587" sha1="bb4a2c7c7c367adf68376a5558d31900adb05afb" offset="0" />
8073         </dataarea>
8074      </part>
8075   </software>
8076
8077   <software name="stonescaa" cloneof="stonesca">
8078      <description>Stone Scamp (Örökélet)</description>
8079      <year>1988</year>
8080      <publisher>Zsolt Szíjártó</publisher>
8081
8082      <part name="flop1" interface="floppy_5_25">
8083         <dataarea name="flop" size="368640">
8084            <rom name="stonescamp(orokelet).dsk" size="368640" crc="86105435" sha1="38bf50bc87d03a399b07ba182e7a9d66f2bd6e62" offset="0" />
8085         </dataarea>
8086      </part>
8087   </software>
8088
8089   <software name="strategm">
8090      <description>Strategem 2/C - Gazdasági Döntésjáték</description>
8091      <year>1987</year>
8092      <publisher>Bela Kertesz</publisher>
8093
8094      <part name="flop1" interface="floppy_5_25">
8095         <dataarea name="flop" size="368640">
8096            <rom name="strategm.dsk" size="368640" crc="19d9cb2e" sha1="1189b9b08236650bb793492176d9ff4aa4c07f7c" offset="0" />
8097         </dataarea>
8098      </part>
8099   </software>
8100
8101   <software name="stripfrg">
8102      <description>Strip-Forgó (Piros)</description>
8103      <year>198?</year>
8104      <publisher>Ubisoft</publisher>
8105
8106      <part name="flop1" interface="floppy_5_25">
8107         <dataarea name="flop" size="368640">
8108            <rom name="stripforgopiros.dsk" size="368640" crc="29a64669" sha1="5614739fb1f8d972389d29aac10d01ee1ca00984" offset="0" />
8109         </dataarea>
8110      </part>
8111   </software>
8112
8113   <software name="stripfrga" cloneof="stripfrg">
8114      <description>Strip-Forgó (Zold)</description>
8115      <year>198?</year>
8116      <publisher>Ubisoft</publisher>
8117
8118      <part name="flop1" interface="floppy_5_25">
8119         <dataarea name="flop" size="368640">
8120            <rom name="stripforgozold.dsk" size="368640" crc="3870a3d0" sha1="988c678ac1fc5578b29c1851816b5fc53bc48124" offset="0" />
8121         </dataarea>
8122      </part>
8123   </software>
8124
8125   <software name="su1">
8126      <description>SU 1</description>
8127      <year>198?</year>
8128      <publisher>Octasoft</publisher>
8129
8130      <part name="flop1" interface="floppy_5_25">
8131         <dataarea name="flop" size="368640">
8132            <rom name="su1.dsk" size="368640" crc="a2f209b0" sha1="a15f289a8e5388593fb7ba419dd762ebe11fa1b5" offset="0" />
8133         </dataarea>
8134      </part>
8135   </software>
8136
8137   <software name="su2">
8138      <description>SU 2</description>
8139      <year>198?</year>
8140      <publisher>Octasoft</publisher>
8141
8142      <part name="flop1" interface="floppy_5_25">
8143         <dataarea name="flop" size="368640">
8144            <rom name="su2.dsk" size="368640" crc="7e5c6992" sha1="f3a1fe522786c7f14b4c92bc6045baa37c5e7ebe" offset="0" />
8145         </dataarea>
8146      </part>
8147   </software>
8148
8149   <software name="su3">
8150      <description>SU 3</description>
8151      <year>198?</year>
8152      <publisher>Octasoft</publisher>
8153
8154      <part name="flop1" interface="floppy_5_25">
8155         <dataarea name="flop" size="368640">
8156            <rom name="su3.dsk" size="368640" crc="aa806da0" sha1="b9a4a4b61bbf362753a0bd0c081e1f10996dfaf9" offset="0" />
8157         </dataarea>
8158      </part>
8159   </software>
8160
8161   <software name="su4">
8162      <description>SU 4</description>
8163      <year>198?</year>
8164      <publisher>Octasoft</publisher>
8165
8166      <part name="flop1" interface="floppy_5_25">
8167         <dataarea name="flop" size="368640">
8168            <rom name="su4.dsk" size="368640" crc="0a1145ad" sha1="3df443eb6db94f0b13f4288ea983509546ad3cf3" offset="0" />
8169         </dataarea>
8170      </part>
8171   </software>
8172
8173   <software name="su5">
8174      <description>SU 5</description>
8175      <year>198?</year>
8176      <publisher>Octasoft</publisher>
8177
8178      <part name="flop1" interface="floppy_5_25">
8179         <dataarea name="flop" size="368640">
8180            <rom name="su5.dsk" size="368640" crc="34ae209a" sha1="006f2ff8e872a2c74d27d1449cb85e4bac3cbdd4" offset="0" />
8181         </dataarea>
8182      </part>
8183   </software>
8184
8185   <software name="su6">
8186      <description>SU 6</description>
8187      <year>198?</year>
8188      <publisher>Octasoft</publisher>
8189
8190      <part name="flop1" interface="floppy_5_25">
8191         <dataarea name="flop" size="368640">
8192            <rom name="su6.dsk" size="368640" crc="60019d45" sha1="c917721e8805a3645cd749190ff5127e6d0c8342" offset="0" />
8193         </dataarea>
8194      </part>
8195   </software>
8196
8197   <software name="submarin">
8198      <description>Submarine</description>
8199      <year>198?</year>
8200      <publisher>&lt;unknown&gt;</publisher>
8201
8202      <part name="flop1" interface="floppy_5_25">
8203         <dataarea name="flop" size="368640">
8204            <rom name="submarin.dsk" size="368640" crc="03de8c89" sha1="fa85a5bede55351074a2760e49310b8dd351f987" offset="0" />
8205         </dataarea>
8206      </part>
8207   </software>
8208
8209   <software name="submarina" cloneof="submarin">
8210      <description>Submarine (Alt)</description>
8211      <year>198?</year>
8212      <publisher>&lt;unknown&gt;</publisher>
8213
8214      <part name="flop1" interface="floppy_5_25">
8215         <dataarea name="flop" size="368640">
8216            <rom name="submv2.dsk" size="368640" crc="cc5b10ee" sha1="753155bfc20bfd60be23696732f81f5b9eea59a6" offset="0" />
8217         </dataarea>
8218      </part>
8219   </software>
8220
8221   <software name="sulyesz">
8222      <description>Süllyesztő</description>
8223      <year>1986</year>
8224      <publisher>Magyar-Holi Studió</publisher>
8225
8226      <part name="flop1" interface="floppy_5_25">
8227         <dataarea name="flop" size="368640">
8228            <rom name="sulyesz.dsk" size="368640" crc="7d7962e8" sha1="50f781401bd1d8144a015921517966f447638539" offset="0" />
8229         </dataarea>
8230      </part>
8231   </software>
8232
8233   <software name="surito">
8234      <description>Sürítő</description>
8235      <year>198?</year>
8236      <publisher>Gigasoft</publisher>
8237
8238      <part name="flop1" interface="floppy_5_25">
8239         <dataarea name="flop" size="368640">
8240            <rom name="surito.dsk" size="368640" crc="c010b573" sha1="ad90d8be67af128cac9d3a957951288bc7704cd8" offset="0" />
8241         </dataarea>
8242      </part>
8243   </software>
8244
8245   <software name="szakmai">
8246      <description>Szakmai számítások</description>
8247      <year>198?</year>
8248      <publisher>Software in LUX</publisher>
8249
8250      <part name="flop1" interface="floppy_5_25">
8251         <dataarea name="flop" size="368640">
8252            <rom name="szakmai.dsk" size="368640" crc="1377c12b" sha1="d0f8d8184fc364531620672c613920ec641ec06a" offset="0" />
8253         </dataarea>
8254      </part>
8255   </software>
8256
8257   <software name="szamolas">
8258      <description>Számolás</description>
8259      <year>198?</year>
8260      <publisher>&lt;unknown&gt;</publisher>
8261
8262      <part name="flop1" interface="floppy_5_25">
8263         <dataarea name="flop" size="368640">
8264            <rom name="szamolas.dsk" size="368640" crc="c499bc3d" sha1="ba44c1d670edea5653e61f18dc83829ff3026176" offset="0" />
8265         </dataarea>
8266      </part>
8267   </software>
8268
8269   <software name="szamolog">
8270      <description>Számológép</description>
8271      <year>1986</year>
8272      <publisher>István Rábai</publisher>
8273
8274      <part name="flop1" interface="floppy_5_25">
8275         <dataarea name="flop" size="368640">
8276            <rom name="szamologep.dsk" size="368640" crc="d8ee486a" sha1="64c38f9b698ec470f7c6704ec18e2b92f88dac19" offset="0" />
8277         </dataarea>
8278      </part>
8279   </software>
8280
8281   <software name="szankove">
8282      <description>Szánkóverseny</description>
8283      <year>198?</year>
8284      <publisher>&lt;unknown&gt;</publisher>
8285
8286      <part name="flop1" interface="floppy_5_25">
8287         <dataarea name="flop" size="368640">
8288            <rom name="szankoev.dsk" size="368640" crc="7bd07585" sha1="18f4ae7d4644c9932184a660ec6e41235d9c564a" offset="0" />
8289         </dataarea>
8290      </part>
8291   </software>
8292
8293   <software name="szankovea" cloneof="szankove">
8294      <description>Szánkóverseny (Alt)</description>
8295      <year>198?</year>
8296      <publisher>&lt;unknown&gt;</publisher>
8297
8298      <part name="flop1" interface="floppy_5_25">
8299         <dataarea name="flop" size="368640">
8300            <rom name="szanko.dsk" size="368640" crc="efcafb97" sha1="a4e840b3c995674acfac934a7ac55b500366c5fa" offset="0" />
8301         </dataarea>
8302      </part>
8303   </software>
8304
8305   <software name="szellova">
8306      <description>Széllovas</description>
8307      <year>198?</year>
8308      <publisher>&lt;unknown&gt;</publisher>
8309
8310      <part name="flop1" interface="floppy_5_25">
8311         <dataarea name="flop" size="368640">
8312            <rom name="szellovas.dsk" size="368640" crc="c0d345b4" sha1="e7af8a802bde9432e9fb48a18a2ad1a78ab44b5f" offset="0" />
8313         </dataarea>
8314      </part>
8315   </software>
8316
8317   <software name="szextesz">
8318      <description>Szex-Teszt</description>
8319      <year>198?</year>
8320      <publisher>&lt;unknown&gt;</publisher>
8321
8322      <part name="flop1" interface="floppy_5_25">
8323         <dataarea name="flop" size="368640">
8324            <rom name="szex-teszt.dsk" size="368640" crc="7a254898" sha1="a7e14bf825bed3118bf32e18f8e9e0d5bd4e0b1b" offset="0" />
8325         </dataarea>
8326      </part>
8327   </software>
8328
8329   <software name="szinbox">
8330      <description>Színbox</description>
8331      <year>198?</year>
8332      <publisher>&lt;unknown&gt;</publisher>
8333
8334      <part name="flop1" interface="floppy_5_25">
8335         <dataarea name="flop" size="368640">
8336            <rom name="szinbox.dsk" size="368640" crc="7b611ba3" sha1="7b023c6664678f89987cda3f1c7cd88ccb168eda" offset="0" />
8337         </dataarea>
8338      </part>
8339   </software>
8340
8341   <software name="szingorg">
8342      <description>Színgörgetés Keretben</description>
8343      <year>198?</year>
8344      <publisher>&lt;unknown&gt;</publisher>
8345
8346      <part name="flop1" interface="floppy_5_25">
8347         <dataarea name="flop" size="368640">
8348            <rom name="szingorg.dsk" size="368640" crc="d23731ca" sha1="e139b28e8b32990d46000e2dfa342e9e704f81b1" offset="0" />
8349         </dataarea>
8350      </part>
8351   </software>
8352
8353   <software name="szinresz">
8354      <description>Színre színt</description>
8355      <year>198?</year>
8356      <publisher>Berysoft</publisher>
8357
8358      <part name="flop1" interface="floppy_5_25">
8359         <dataarea name="flop" size="368640">
8360            <rom name="szinreszint.dsk" size="368640" crc="03446701" sha1="a7e3418d086f0251918785e6a265f225e7995136" offset="0" />
8361         </dataarea>
8362      </part>
8363   </software>
8364
8365   <software name="szinsav">
8366      <description>Színsávok</description>
8367      <year>198?</year>
8368      <publisher>István Tóth</publisher>
8369
8370      <part name="flop1" interface="floppy_5_25">
8371         <dataarea name="flop" size="368640">
8372            <rom name="szinsav.dsk" size="368640" crc="fcbcd969" sha1="33e6dddbe5ec3923510c332369204dcac56a62ce" offset="0" />
8373         </dataarea>
8374      </part>
8375   </software>
8376
8377   <software name="szinteti">
8378      <description>Szintetizátor</description>
8379      <year>198?</year>
8380      <publisher>&lt;unknown&gt;</publisher>
8381
8382      <part name="flop1" interface="floppy_5_25">
8383         <dataarea name="flop" size="368640">
8384            <rom name="szintetizator.dsk" size="368640" crc="ec7ce730" sha1="f876d72178ba63f040db0f27a44ab82421173fcc" offset="0" />
8385         </dataarea>
8386      </part>
8387   </software>
8388
8389   <software name="sziv10">
8390      <description>Szivárvány 10</description>
8391      <year>198?</year>
8392      <publisher>&lt;unknown&gt;</publisher>
8393
8394      <part name="flop1" interface="floppy_5_25">
8395         <dataarea name="flop" size="368640">
8396            <rom name="sziv10.dsk" size="368640" crc="81b2c92e" sha1="5d2acb1f92f3e6279e0b47cf180ffa84953c2369" offset="0" />
8397         </dataarea>
8398      </part>
8399   </software>
8400
8401   <software name="sziv11">
8402      <description>Szivárvány 11</description>
8403      <year>198?</year>
8404      <publisher>&lt;unknown&gt;</publisher>
8405
8406      <part name="flop1" interface="floppy_5_25">
8407         <dataarea name="flop" size="368640">
8408            <rom name="sziv11.dsk" size="368640" crc="f451520b" sha1="8aa31f97c9efcbb5fa1b9312700cbcf8d25a0a9d" offset="0" />
8409         </dataarea>
8410      </part>
8411   </software>
8412
8413   <software name="sziv12">
8414      <description>Szivárvány 12</description>
8415      <year>198?</year>
8416      <publisher>&lt;unknown&gt;</publisher>
8417
8418      <part name="flop1" interface="floppy_5_25">
8419         <dataarea name="flop" size="368640">
8420            <rom name="sziv12.dsk" size="368640" crc="8f2d36dd" sha1="3c39123bdefd80c8ac0e366802c1daec65bfc78b" offset="0" />
8421         </dataarea>
8422      </part>
8423   </software>
8424
8425   <software name="sziv13">
8426      <description>Szivárvány 13</description>
8427      <year>198?</year>
8428      <publisher>&lt;unknown&gt;</publisher>
8429
8430      <part name="flop1" interface="floppy_5_25">
8431         <dataarea name="flop" size="368640">
8432            <rom name="sziv13.dsk" size="368640" crc="12164a68" sha1="1239fb8acc7cd34886364072b2e60c245cf31bb8" offset="0" />
8433         </dataarea>
8434      </part>
8435   </software>
8436
8437   <software name="sziv14">
8438      <description>Szivárvány 14</description>
8439      <year>198?</year>
8440      <publisher>&lt;unknown&gt;</publisher>
8441
8442      <part name="flop1" interface="floppy_5_25">
8443         <dataarea name="flop" size="368640">
8444            <rom name="sziv14.dsk" size="368640" crc="49606daa" sha1="7f512528d506924f47d1d513b8a9756759f24423" offset="0" />
8445         </dataarea>
8446      </part>
8447   </software>
8448
8449   <software name="sziv15">
8450      <description>Szivárvány 15</description>
8451      <year>198?</year>
8452      <publisher>&lt;unknown&gt;</publisher>
8453
8454      <part name="flop1" interface="floppy_5_25">
8455         <dataarea name="flop" size="368640">
8456            <rom name="sziv15.dsk" size="368640" crc="8d33fa85" sha1="5fd6e34a0d3dd84904e9fe261e9b6bd869b841a9" offset="0" />
8457         </dataarea>
8458      </part>
8459   </software>
8460
8461   <software name="szocske">
8462      <description>Szöcske</description>
8463      <year>198?</year>
8464      <publisher>&lt;unknown&gt;</publisher>
8465
8466      <part name="flop1" interface="floppy_5_25">
8467         <dataarea name="flop" size="368640">
8468            <rom name="szocske.dsk" size="368640" crc="85fe3eb0" sha1="3bbc89efc52f41dc91e8167049cbacf839c3e536" offset="0" />
8469         </dataarea>
8470      </part>
8471   </software>
8472
8473   <software name="szoliter">
8474      <description>Szoliter (TVCM)</description>
8475      <year>1992</year>
8476      <publisher>TVCM</publisher>
8477
8478      <part name="flop1" interface="floppy_5_25">
8479         <dataarea name="flop" size="368640">
8480            <rom name="szoliter.dsk" size="368640" crc="d9fdc4ae" sha1="788f92878d29ac33564f370f8b95885f6258e16b" offset="0" />
8481         </dataarea>
8482      </part>
8483   </software>
8484
8485   <software name="szolitny">
8486      <description>Szoliter (Nyitrai)</description>
8487      <year>1986</year>
8488      <publisher>Nyitrai</publisher>
8489
8490      <part name="flop1" interface="floppy_5_25">
8491         <dataarea name="flop" size="368640">
8492            <rom name="szolit86.dsk" size="368640" crc="05e0b07b" sha1="e8d1876c7fa87fcfbfda9003194430d67865694d" offset="0" />
8493         </dataarea>
8494      </part>
8495   </software>
8496
8497   <software name="szolitny03" cloneof="szolitny">
8498      <description>Szoliter (Nyitrai, Newer)</description>
8499      <year>2003</year>
8500      <publisher>Nyitrai</publisher>
8501
8502      <part name="flop1" interface="floppy_5_25">
8503         <dataarea name="flop" size="368640">
8504            <rom name="szolitjg.dsk" size="368640" crc="acbc983e" sha1="1af207963f7d640ea405676e919884bf6ca7cef4" offset="0" />
8505         </dataarea>
8506      </part>
8507   </software>
8508
8509   <software name="szonda">
8510      <description>Szonda</description>
8511      <year>198?</year>
8512      <publisher>Software in LUX</publisher>
8513
8514      <part name="flop1" interface="floppy_5_25">
8515         <dataarea name="flop" size="368640">
8516            <rom name="szonda.dsk" size="368640" crc="9138e191" sha1="d4f5714aa0528b49bf826bcef3d209ce3467dc97" offset="0" />
8517         </dataarea>
8518      </part>
8519   </software>
8520
8521   <software name="szopoker">
8522      <description>Szó-Póker</description>
8523      <year>198?</year>
8524      <publisher>Jozsef Szoldatics - Jozsefne Szoldatics</publisher>
8525
8526      <part name="flop1" interface="floppy_5_25">
8527         <dataarea name="flop" size="368640">
8528            <rom name="szopoker.dsk" size="368640" crc="2a82c981" sha1="0f5d4c6601116be7d08e496dc4990240aeeef732" offset="0" />
8529         </dataarea>
8530      </part>
8531   </software>
8532
8533   <software name="szorny">
8534      <description>Szörny</description>
8535      <year>198?</year>
8536      <publisher>Software in LUX</publisher>
8537
8538      <part name="flop1" interface="floppy_5_25">
8539         <dataarea name="flop" size="368640">
8540            <rom name="szorny.dsk" size="368640" crc="f6231c02" sha1="ab85714c18d9da9b4b2513c38987e474df483fdd" offset="0" />
8541         </dataarea>
8542      </part>
8543   </software>
8544
8545   <software name="szornyek">
8546      <description>Szörnyek az útvesztőben</description>
8547      <year>198?</year>
8548      <publisher>C.S. Software</publisher>
8549
8550      <part name="flop1" interface="floppy_5_25">
8551         <dataarea name="flop" size="368640">
8552            <rom name="szornyekazutvesztoben.dsk" size="368640" crc="74b3315e" sha1="56f8bf0145c75a980607dda5877fbedfedbb4142" offset="0" />
8553         </dataarea>
8554      </part>
8555   </software>
8556
8557   <software name="szorzas">
8558      <description>Szorzás</description>
8559      <year>198?</year>
8560      <publisher>&lt;unknown&gt;</publisher>
8561
8562      <part name="flop1" interface="floppy_5_25">
8563         <dataarea name="flop" size="368640">
8564            <rom name="szorzas.dsk" size="368640" crc="02e3ec25" sha1="afc913842019eefa162637487f4650f8e1aa4fc6" offset="0" />
8565         </dataarea>
8566      </part>
8567   </software>
8568
8569   <software name="szorzasa" cloneof="szorzas">
8570      <description>Szorzás (Alt)</description>
8571      <year>198?</year>
8572      <publisher>&lt;unknown&gt;</publisher>
8573
8574      <part name="flop1" interface="floppy_5_25">
8575         <dataarea name="flop" size="368640">
8576            <rom name="szorzav2.dsk" size="368640" crc="1f46fda6" sha1="7fe95a085903401a2ce917196d72b315e082b55b" offset="0" />
8577         </dataarea>
8578      </part>
8579   </software>
8580
8581   <software name="szoved">
8582      <description>Kazettás Szövegszerkesztő TV-Computerre</description>
8583      <year>198?</year>
8584      <publisher>Novotrade</publisher>
8585
8586      <part name="flop1" interface="floppy_5_25">
8587         <dataarea name="flop" size="368640">
8588            <rom name="szoved.dsk" size="368640" crc="0ccfa08f" sha1="8610cddac1e4f9ccf04fcc0914d925ae80021e87" offset="0" />
8589         </dataarea>
8590      </part>
8591   </software>
8592
8593   <software name="szurosz">
8594      <description>Szűrő Számítás</description>
8595      <year>198?</year>
8596      <publisher>&lt;unknown&gt;</publisher>
8597
8598      <part name="flop1" interface="floppy_5_25">
8599         <dataarea name="flop" size="368640">
8600            <rom name="szurosz.dsk" size="368640" crc="0844fa9f" sha1="5f38465d6ece0696b604011d168f7ccca141206d" offset="0" />
8601         </dataarea>
8602      </part>
8603   </software>
8604
8605   <software name="tabla">
8606      <description>Bűvös Tábla</description>
8607      <year>198?</year>
8608      <publisher>&lt;unknown&gt;</publisher>
8609
8610      <part name="flop1" interface="floppy_5_25">
8611         <dataarea name="flop" size="368640">
8612            <rom name="tabla.dsk" size="368640" crc="5430933e" sha1="ef6484b3f25a0e3635ef606f5d8f1161a9204ce4" offset="0" />
8613         </dataarea>
8614      </part>
8615   </software>
8616
8617   <software name="talalkoz">
8618      <description>Találkozók</description>
8619      <year>198?</year>
8620      <publisher>Béla Csatlós</publisher>
8621
8622      <part name="flop1" interface="floppy_5_25">
8623         <dataarea name="flop" size="368640">
8624            <rom name="talalkozok.dsk" size="368640" crc="10a6c559" sha1="dd227266f66a6b70eec966731928321ccdf13735" offset="0" />
8625         </dataarea>
8626      </part>
8627   </software>
8628
8629   <software name="tamadas">
8630      <description>Támadás</description>
8631      <year>198?</year>
8632      <publisher>&lt;unknown&gt;</publisher>
8633
8634      <part name="flop1" interface="floppy_5_25">
8635         <dataarea name="flop" size="368640">
8636            <rom name="tamadas.dsk" size="368640" crc="a9219002" sha1="3f491cbf0c8351aef5c9496181b4f235c5d93599" offset="0" />
8637         </dataarea>
8638      </part>
8639   </software>
8640
8641   <software name="tankcsat">
8642      <description>Tankcsata</description>
8643      <year>1988</year>
8644      <publisher>László Nagy</publisher>
8645
8646      <part name="flop1" interface="floppy_5_25">
8647         <dataarea name="flop" size="368640">
8648            <rom name="tankcsata.dsk" size="368640" crc="578c039c" sha1="bc82079b9c6056ec1acde052658be833d03d84b0" offset="0" />
8649         </dataarea>
8650      </part>
8651   </software>
8652
8653   <software name="tapsi">
8654      <description>Tapsi és a Nagy Vadász</description>
8655      <year>1988</year>
8656      <publisher>L&amp;M Software</publisher>
8657
8658      <part name="flop1" interface="floppy_5_25">
8659         <dataarea name="flop" size="368640">
8660            <rom name="tapsiesanagyvadasz.dsk" size="368640" crc="c5f0569c" sha1="e313fce9da29899044f7a37fd1cc2f23409e64b8" offset="0" />
8661         </dataarea>
8662      </part>
8663   </software>
8664
8665   <software name="tartalom">
8666      <description>Tartalom</description>
8667      <year>1992</year>
8668      <publisher>&lt;unknown&gt;</publisher>
8669
8670      <part name="flop1" interface="floppy_5_25">
8671         <dataarea name="flop" size="368640">
8672            <rom name="tartalom.dsk" size="368640" crc="29ac99f4" sha1="073864b9f4a78fa7d79db1fbff8968a133dddfa8" offset="0" />
8673         </dataarea>
8674      </part>
8675   </software>
8676
8677   <software name="teke">
8678      <description>Teke</description>
8679      <year>198?</year>
8680      <publisher>L&amp;M Software</publisher>
8681
8682      <part name="flop1" interface="floppy_5_25">
8683         <dataarea name="flop" size="368640">
8684            <rom name="teke.dsk" size="368640" crc="94353cf8" sha1="07447a05b5ce6f8f971f0520f3db74684b4645c1" offset="0" />
8685         </dataarea>
8686      </part>
8687   </software>
8688
8689   <software name="telex1">
8690      <description>Telex - 1500 szó magyarul 1</description>
8691      <year>1988</year>
8692      <publisher>Novotrade - Octasoft</publisher>
8693
8694      <part name="flop1" interface="floppy_5_25">
8695         <dataarea name="flop" size="368640">
8696            <rom name="telex1.dsk" size="368640" crc="78562d4c" sha1="8d15a9a0efd0c14cb98f44383b8becc104eb99b1" offset="0" />
8697         </dataarea>
8698      </part>
8699   </software>
8700
8701   <software name="telex1a" cloneof="telex1">
8702      <description>Telex - 1500 szó magyarul 1 (Alt)</description>
8703      <year>1988</year>
8704      <publisher>Novotrade - Octasoft</publisher>
8705
8706      <part name="flop1" interface="floppy_5_25">
8707         <dataarea name="flop" size="368640">
8708            <rom name="telex1 [a].dsk" size="368640" crc="08bada71" sha1="c97b5b66dccb439505164201a76fba0d1be0b8af" offset="0" />
8709         </dataarea>
8710      </part>
8711   </software>
8712
8713   <software name="telex2">
8714      <description>Telex - 1500 szó magyarul 2</description>
8715      <year>1988</year>
8716      <publisher>Novotrade - Octasoft</publisher>
8717
8718      <part name="flop1" interface="floppy_5_25">
8719         <dataarea name="flop" size="368640">
8720            <rom name="telex2.dsk" size="368640" crc="c16a70a2" sha1="cfb8ea7460d68a636c713cbcde0c0ad07d9c0da9" offset="0" />
8721         </dataarea>
8722      </part>
8723   </software>
8724
8725   <software name="telex2a" cloneof="telex2">
8726      <description>Telex - 1500 szó magyarul 2 (Alt)</description>
8727      <year>1988</year>
8728      <publisher>Novotrade - Octasoft</publisher>
8729
8730      <part name="flop1" interface="floppy_5_25">
8731         <dataarea name="flop" size="368640">
8732            <rom name="telex2 [a].dsk" size="368640" crc="6e4d0a6f" sha1="e8841bb40773bbe0ef6cae4b62c6be33dfcbbc5b" offset="0" />
8733         </dataarea>
8734      </part>
8735   </software>
8736
8737   <software name="tenbrick">
8738      <description>Ten Brick</description>
8739      <year>198?</year>
8740      <publisher>Cápasoft</publisher>
8741
8742      <part name="flop1" interface="floppy_5_25">
8743         <dataarea name="flop" size="368640">
8744            <rom name="tenbrick.dsk" size="368640" crc="559c7067" sha1="5df09df2304a6a4993a531525416201113e9c2d6" offset="0" />
8745         </dataarea>
8746      </part>
8747   </software>
8748
8749   <software name="tenbricka" cloneof="tenbrick">
8750      <description>Ten Brick (Alt)</description>
8751      <year>198?</year>
8752      <publisher>Cápasoft</publisher>
8753
8754      <part name="flop1" interface="floppy_5_25">
8755         <dataarea name="flop" size="368640">
8756            <rom name="tenbriv2.dsk" size="368640" crc="818c16cd" sha1="eee11e5551232cd09f638047f82a47bf3c671bd9" offset="0" />
8757         </dataarea>
8758      </part>
8759   </software>
8760
8761   <software name="tetris">
8762      <description>Tetris</description>
8763      <year>198?</year>
8764      <publisher>&lt;unknown&gt;</publisher>
8765
8766      <part name="flop1" interface="floppy_5_25">
8767         <dataarea name="flop" size="368640">
8768            <rom name="tetris.dsk" size="368640" crc="a4cf58fc" sha1="14a853c6aa8601d3088432a695ccd846c5ff6d3d" offset="0" />
8769         </dataarea>
8770      </part>
8771   </software>
8772
8773   <software name="tievadas">
8774      <description>TIE Vadász</description>
8775      <year>1988</year>
8776      <publisher>László Nagy</publisher>
8777
8778      <part name="flop1" interface="floppy_5_25">
8779         <dataarea name="flop" size="368640">
8780            <rom name="tievad.dsk" size="368640" crc="b1695e54" sha1="84b30e32ee529a6dfcdca7a3e3ed55d02abeeec6" offset="0" />
8781         </dataarea>
8782      </part>
8783   </software>
8784
8785   <software name="tiktakto">
8786      <description>Tik-Tak-To</description>
8787      <year>198?</year>
8788      <publisher>&lt;unknown&gt;</publisher>
8789
8790      <part name="flop1" interface="floppy_5_25">
8791         <dataarea name="flop" size="368640">
8792            <rom name="tiktakto.dsk" size="368640" crc="e6f8ff24" sha1="134e2856a18b401460ca1648fc2efa21df9d157c" offset="0" />
8793         </dataarea>
8794      </part>
8795   </software>
8796
8797   <software name="tisztala">
8798      <description>Tiszta Lappal</description>
8799      <year>1987</year>
8800      <publisher>King ec Software</publisher>
8801
8802      <part name="flop1" interface="floppy_5_25">
8803         <dataarea name="flop" size="368640">
8804            <rom name="tisztalappal.dsk" size="368640" crc="d324e290" sha1="2fd8d2407704f19f26eb0a275605b33c60cec708" offset="0" />
8805         </dataarea>
8806      </part>
8807   </software>
8808
8809   <software name="toccs">
8810      <description>Toccsanó Játék</description>
8811      <year>198?</year>
8812      <publisher>&lt;unknown&gt;</publisher>
8813
8814      <part name="flop1" interface="floppy_5_25">
8815         <dataarea name="flop" size="368640">
8816            <rom name="toccs.dsk" size="368640" crc="d27f3a97" sha1="0dcf961bc6b94183c5b9090f01b0f305de2859bf" offset="0" />
8817         </dataarea>
8818      </part>
8819   </software>
8820
8821   <software name="toli">
8822      <description>Toli v1.0</description>
8823      <year>1993</year>
8824      <publisher>GATO Bt.</publisher>
8825
8826      <part name="flop1" interface="floppy_5_25">
8827         <dataarea name="flop" size="368640">
8828            <rom name="toli.dsk" size="368640" crc="bdd54b1d" sha1="21f2e91e0e8a648885b17cc16fc2a2d6a620f306" offset="0" />
8829         </dataarea>
8830      </part>
8831   </software>
8832
8833   <software name="tomjerry">
8834      <description>Tom és Jerry</description>
8835      <year>198?</year>
8836      <publisher>Gigasoft</publisher>
8837
8838      <part name="flop1" interface="floppy_5_25">
8839         <dataarea name="flop" size="368640">
8840            <rom name="tomesjerry.dsk" size="368640" crc="71578fb0" sha1="547087457c116c8e292b04c2534f6da660b868d9" offset="0" />
8841         </dataarea>
8842      </part>
8843   </software>
8844
8845   <software name="tomjerrya" cloneof="tomjerry">
8846      <description>Tom és Jerry (Alt)</description>
8847      <year>198?</year>
8848      <publisher>Gigasoft</publisher>
8849
8850      <part name="flop1" interface="floppy_5_25">
8851         <dataarea name="flop" size="368640">
8852            <rom name="tomjv2.dsk" size="368640" crc="6420b05a" sha1="1aaa6fc267ae17ec908740e62a9cd35fb62a63ce" offset="0" />
8853         </dataarea>
8854      </part>
8855   </software>
8856
8857   <software name="tomjerryb" cloneof="tomjerry">
8858      <description>Tom és Jerry (Alt 2)</description>
8859      <year>198?</year>
8860      <publisher>Gigasoft</publisher>
8861
8862      <part name="flop1" interface="floppy_5_25">
8863         <dataarea name="flop" size="368640">
8864            <rom name="tomjv3.dsk" size="368640" crc="f6a22e74" sha1="6031f0e01e0519ea418f8d04f87cc94c40895088" offset="0" />
8865         </dataarea>
8866      </part>
8867   </software>
8868
8869   <software name="tomjerrycr" cloneof="tomjerry">
8870      <description>Tom és Jerry (Cracked)</description>
8871      <year>198?</year>
8872      <publisher>Gigasoft</publisher>
8873
8874      <part name="flop1" interface="floppy_5_25">
8875         <dataarea name="flop" size="368640">
8876            <rom name="tomesjerrykirako.dsk" size="368640" crc="55cda685" sha1="749fb902fd1db24781e416825916e98037f567b3" offset="0" />
8877         </dataarea>
8878      </part>
8879   </software>
8880
8881   <software name="asmtop">
8882      <description>Mnemonic IV Assembler-Monitor - Top</description>
8883      <year>198?</year>
8884      <publisher>&lt;unknown&gt;</publisher>
8885
8886      <part name="flop1" interface="floppy_5_25">
8887         <dataarea name="flop" size="368640">
8888            <rom name="top.dsk" size="368640" crc="8c5457fe" sha1="376f2b18dfd8feaa8b6787beada9e042ff563f8c" offset="0" />
8889         </dataarea>
8890      </part>
8891   </software>
8892
8893   <software name="torokind">
8894      <description>Török Induló</description>
8895      <year>198?</year>
8896      <publisher>&lt;unknown&gt;</publisher>
8897
8898      <part name="flop1" interface="floppy_5_25">
8899         <dataarea name="flop" size="368640">
8900            <rom name="torokindulo.dsk" size="368640" crc="dd6552ee" sha1="cb610113cdbc3ed21a8a3356beccc4e6b41aa7ea" offset="0" />
8901         </dataarea>
8902      </part>
8903   </software>
8904
8905   <software name="torokinda" cloneof="torokind">
8906      <description>Török Induló (Alt)</description>
8907      <year>198?</year>
8908      <publisher>&lt;unknown&gt;</publisher>
8909
8910      <part name="flop1" interface="floppy_5_25">
8911         <dataarea name="flop" size="368640">
8912            <rom name="indulo.dsk" size="368640" crc="fd585fe8" sha1="ff22b93830ee127e5e0f26a86a9857a6c7c7681c" offset="0" />
8913         </dataarea>
8914      </part>
8915   </software>
8916
8917   <software name="torpe">
8918      <description>Törpe</description>
8919      <year>198?</year>
8920      <publisher>Béla Takács</publisher>
8921
8922      <part name="flop1" interface="floppy_5_25">
8923         <dataarea name="flop" size="368640">
8924            <rom name="torpe.dsk" size="368640" crc="4b6f7947" sha1="cec7b174b6f02e068617698c05412efce6b5a120" offset="0" />
8925         </dataarea>
8926      </part>
8927   </software>
8928
8929   <software name="torpedca">
8930      <description>Torpedó (Attila Canjavec)</description>
8931      <year>1988</year>
8932      <publisher>Attila Canjavec</publisher>
8933
8934      <part name="flop1" interface="floppy_5_25">
8935         <dataarea name="flop" size="368640">
8936            <rom name="torpedca.dsk" size="368640" crc="5c7281c0" sha1="5522a450f659dc5ededeef4fce5f065ffb7a2a3e" offset="0" />
8937         </dataarea>
8938      </part>
8939   </software>
8940
8941   <software name="torpedo">
8942      <description>Torpedó</description>
8943      <year>198?</year>
8944      <publisher>&lt;unknown&gt;</publisher>
8945
8946      <part name="flop1" interface="floppy_5_25">
8947         <dataarea name="flop" size="368640">
8948            <rom name="torpedo.dsk" size="368640" crc="8937fb4e" sha1="95ba7f26ad8bf826fa85b30558eaddbf6307a10c" offset="0" />
8949         </dataarea>
8950      </part>
8951   </software>
8952
8953   <software name="torpedou">
8954      <description>Torpedó (Unisoft)</description>
8955      <year>1986</year>
8956      <publisher>Unisoft GMK</publisher>
8957
8958      <part name="flop1" interface="floppy_5_25">
8959         <dataarea name="flop" size="368640">
8960            <rom name="torpedounisoft.dsk" size="368640" crc="08fda78b" sha1="a7c3fda5feebc137318762d68182c90c6358c783" offset="0" />
8961         </dataarea>
8962      </part>
8963   </software>
8964
8965   <software name="torpedoua" cloneof="torpedou">
8966      <description>Torpedó (Unisoft, Alt)</description>
8967      <year>1986</year>
8968      <publisher>Unisoft GMK</publisher>
8969
8970      <part name="flop1" interface="floppy_5_25">
8971         <dataarea name="flop" size="368640">
8972            <rom name="torpedov2-unisoft.dsk" size="368640" crc="1bf5b8c9" sha1="4f134bd9f6dbecb1585b9dddf272d46d3f8c956a" offset="0" />
8973         </dataarea>
8974      </part>
8975   </software>
8976
8977   <software name="torpeism">
8978      <description>Törpe Ismertető</description>
8979      <year>198?</year>
8980      <publisher>Béla Takács</publisher>
8981
8982      <part name="flop1" interface="floppy_5_25">
8983         <dataarea name="flop" size="368640">
8984            <rom name="torpeism.dsk" size="368640" crc="98cb819d" sha1="cbab778a7153e6c861a0e8f7419f69c8ff87f6b1" offset="0" />
8985         </dataarea>
8986      </part>
8987   </software>
8988
8989   <software name="toto">
8990      <description>Toto - Jatekot Segito Program</description>
8991      <year>1986</year>
8992      <publisher>Centrumdata VGMK</publisher>
8993
8994      <part name="flop1" interface="floppy_5_25">
8995         <dataarea name="flop" size="368640">
8996            <rom name="toto.dsk" size="368640" crc="0ad06fe1" sha1="0cedfc3267b8f925de4e9768788c3d0115c0a928" offset="0" />
8997         </dataarea>
8998      </part>
8999   </software>
9000
9001   <software name="tower">
9002      <description>Tower</description>
9003      <year>198?</year>
9004      <publisher>Berysoft</publisher>
9005
9006      <part name="flop1" interface="floppy_5_25">
9007         <dataarea name="flop" size="368640">
9008            <rom name="tower.dsk" size="368640" crc="f2149783" sha1="a2202d2606632d690799d1f6a97e47342a26c455" offset="0" />
9009         </dataarea>
9010      </part>
9011   </software>
9012
9013   <software name="towera" cloneof="tower">
9014      <description>Tower (Alt)</description>
9015      <year>198?</year>
9016      <publisher>Berysoft</publisher>
9017
9018      <part name="flop1" interface="floppy_5_25">
9019         <dataarea name="flop" size="368640">
9020            <rom name="towerv2.dsk" size="368640" crc="18359cd6" sha1="ed72607b17c01b3f594d0362b1ef1e3b8f5483e7" offset="0" />
9021         </dataarea>
9022      </part>
9023   </software>
9024
9025   <software name="trafosz">
9026      <description>Transzformátor Méretezés</description>
9027      <year>198?</year>
9028      <publisher>H&amp;M</publisher>
9029
9030      <part name="flop1" interface="floppy_5_25">
9031         <dataarea name="flop" size="368640">
9032            <rom name="trafosz.dsk" size="368640" crc="e191be73" sha1="1d93e8ec9a2260ed4afb82871aa48b0e561dd6e1" offset="0" />
9033         </dataarea>
9034      </part>
9035   </software>
9036
9037   <software name="trailer">
9038      <description>Trailer</description>
9039      <year>198?</year>
9040      <publisher>&lt;unknown&gt;</publisher>
9041
9042      <part name="flop1" interface="floppy_5_25">
9043         <dataarea name="flop" size="368640">
9044            <rom name="trailer.dsk" size="368640" crc="a234a673" sha1="b7237199286056feb1e4b14441662841714eea18" offset="0" />
9045         </dataarea>
9046      </part>
9047   </software>
9048
9049   <software name="transver">
9050      <description>Transversion</description>
9051      <year>198?</year>
9052      <publisher>TVCM</publisher>
9053
9054      <part name="flop1" interface="floppy_5_25">
9055         <dataarea name="flop" size="368640">
9056            <rom name="transversion.dsk" size="368640" crc="a3ebbb91" sha1="b08b53664a4510cd5967cef25ae0275a29c3f31e" offset="0" />
9057         </dataarea>
9058      </part>
9059   </software>
9060
9061   <software name="transvert" cloneof="transver">
9062      <description>Transversion (Trainer)</description>
9063      <year>198?</year>
9064      <publisher>TVCM</publisher>
9065
9066      <part name="flop1" interface="floppy_5_25">
9067         <dataarea name="flop" size="368640">
9068            <rom name="transvt.dsk" size="368640" crc="f0b46063" sha1="3300d9cb3f2526a3e8c3967774a0fe0da679f322" offset="0" />
9069         </dataarea>
9070      </part>
9071   </software>
9072
9073   <software name="treasure">
9074      <description>Treasure-Hunting</description>
9075      <year>1988</year>
9076      <publisher>Béla Szalontai</publisher>
9077
9078      <part name="flop1" interface="floppy_5_25">
9079         <dataarea name="flop" size="368640">
9080            <rom name="treasurehunting.dsk" size="368640" crc="448cc296" sha1="5015c880b0de0c6782f8e83ef91aca746a553ed2" offset="0" />
9081         </dataarea>
9082      </part>
9083   </software>
9084
9085   <software name="startreka" cloneof="startrek">
9086      <description>Star Trek (Alt, Newer?)</description>
9087      <year>1987</year>
9088      <publisher>&lt;unknown&gt;</publisher>
9089
9090      <part name="flop1" interface="floppy_5_25">
9091         <dataarea name="flop" size="368640">
9092            <rom name="trekk.dsk" size="368640" crc="5cd60714" sha1="6ecf5852ae3994ce07243bdb08dd932421d5d569" offset="0" />
9093         </dataarea>
9094      </part>
9095   </software>
9096
9097   <software name="tunnel">
9098      <description>Tunnel</description>
9099      <year>198?</year>
9100      <publisher>Ubisoft</publisher>
9101
9102      <part name="flop1" interface="floppy_5_25">
9103         <dataarea name="flop" size="368640">
9104            <rom name="tunnel.dsk" size="368640" crc="f28f9a67" sha1="d715d799f159e910930ac6af007d77048bb5c72a" offset="0" />
9105         </dataarea>
9106      </part>
9107   </software>
9108
9109   <software name="turboesp">
9110      <description>Turbo Esprit</description>
9111      <year>198?</year>
9112      <publisher>Zsolt Szigeti</publisher>
9113
9114      <part name="flop1" interface="floppy_5_25">
9115         <dataarea name="flop" size="368640">
9116            <rom name="turboespirit.dsk" size="368640" crc="91f91928" sha1="9770435e56dd6e3f27ac65d7e8b35c90eeea7077" offset="0" />
9117         </dataarea>
9118      </part>
9119   </software>
9120
9121   <software name="turbojac">
9122      <description>Turbo Jack</description>
9123      <year>1991</year>
9124      <publisher>STV</publisher>
9125
9126      <part name="flop1" interface="floppy_5_25">
9127         <dataarea name="flop" size="368640">
9128            <rom name="turbojack.dsk" size="368640" crc="09233b23" sha1="72229e0c9a68a323344f7f1be495836f3501ee65" offset="0" />
9129         </dataarea>
9130      </part>
9131   </software>
9132
9133   <software name="turborud">
9134      <description>Turbó Rudi</description>
9135      <year>1987</year>
9136      <publisher>'a' Studio</publisher>
9137
9138      <part name="flop1" interface="floppy_5_25">
9139         <dataarea name="flop" size="368640">
9140            <rom name="turborudi.dsk" size="368640" crc="9f82bd37" sha1="794ec13d8e1d932c349a8f7bd4e4e39806ef90b9" offset="0" />
9141         </dataarea>
9142      </part>
9143   </software>
9144
9145   <software name="turboruda" cloneof="turborud">
9146      <description>Turbó Rudi (Alt)</description>
9147      <year>1987</year>
9148      <publisher>'a' Studio</publisher>
9149
9150      <part name="flop1" interface="floppy_5_25">
9151         <dataarea name="flop" size="368640">
9152            <rom name="turborudiv2.dsk" size="368640" crc="cab7764e" sha1="b6b95d69cec766dcc06b50d4ed660b425d7f0f1d" offset="0" />
9153         </dataarea>
9154      </part>
9155   </software>
9156
9157   <software name="tvball">
9158      <description>TV Ball</description>
9159      <year>1988</year>
9160      <publisher>'a' Studio</publisher>
9161
9162      <part name="flop1" interface="floppy_5_25">
9163         <dataarea name="flop" size="368640">
9164            <rom name="tvball.dsk" size="368640" crc="001ec8ed" sha1="e980c49a36a6a7a0b595089f2f2de3746389ab93" offset="0" />
9165         </dataarea>
9166      </part>
9167   </software>
9168
9169   <software name="tvballa" cloneof="tvball">
9170      <description>TV Ball (Alt)</description>
9171      <year>1988</year>
9172      <publisher>'a' Studio</publisher>
9173
9174      <part name="flop1" interface="floppy_5_25">
9175         <dataarea name="flop" size="368640">
9176            <rom name="tvballv2.dsk" size="368640" crc="5e7ee724" sha1="2287090afc93699392d8c6806027a7504e62cd01" offset="0" />
9177         </dataarea>
9178      </part>
9179   </software>
9180
9181   <software name="tvc-ass">
9182      <description>TVC-Assembler v1.0</description>
9183      <year>198?</year>
9184      <publisher>&lt;unknown&gt;</publisher>
9185
9186      <part name="flop1" interface="floppy_5_25">
9187         <dataarea name="flop" size="368640">
9188            <rom name="tvc-ass.dsk" size="368640" crc="3b1df259" sha1="901fe8a140182f293c31a70aec0658fb1a6fd14c" offset="0" />
9189         </dataarea>
9190      </part>
9191   </software>
9192
9193   <software name="tvclist2">
9194      <description>TVC Program Lista 2</description>
9195      <year>198?</year>
9196      <publisher>Molmix</publisher>
9197
9198      <part name="flop1" interface="floppy_5_25">
9199         <dataarea name="flop" size="368640">
9200            <rom name="tvc-list.dsk" size="368640" crc="bab36ccb" sha1="be1c7bcc813afd88e75d448716dfdb30ab1dd729" offset="0" />
9201         </dataarea>
9202      </part>
9203   </software>
9204
9205   <software name="tvc123">
9206      <description>TVC123 - Táblázatkezelő</description>
9207      <year>1989</year>
9208      <publisher>Sandor Vekony</publisher>
9209
9210      <part name="flop1" interface="floppy_5_25">
9211         <dataarea name="flop" size="368640">
9212            <rom name="tvc123.dsk" size="368640" crc="1fefacde" sha1="f80aac12c4186be76727e1c66207f5c9deba7610" offset="0" />
9213         </dataarea>
9214      </part>
9215   </software>
9216
9217   <software name="tvcass14a" cloneof="tvcass14">
9218      <description>TVC-Assembler v1.4 (Alt)</description>
9219      <year>198?</year>
9220      <publisher>&lt;unknown&gt;</publisher>
9221
9222      <part name="flop1" interface="floppy_5_25">
9223         <dataarea name="flop" size="368640">
9224            <rom name="tvca14v2.dsk" size="368640" crc="9a1b3c97" sha1="4d311460cf834a997cd847f3fc9d5f5eb3216066" offset="0" />
9225         </dataarea>
9226      </part>
9227   </software>
9228
9229   <software name="tvcass11">
9230      <description>TVC-Assembler v1.1</description>
9231      <year>198?</year>
9232      <publisher>&lt;unknown&gt;</publisher>
9233
9234      <part name="flop1" interface="floppy_5_25">
9235         <dataarea name="flop" size="368640">
9236            <rom name="tvcass11.dsk" size="368640" crc="a8a180e0" sha1="1b355bae76d12ad03514ec2ed6f3a8c88deb7016" offset="0" />
9237         </dataarea>
9238      </part>
9239   </software>
9240
9241   <software name="tvcass14">
9242      <description>TVC-Assembler v1.4</description>
9243      <year>198?</year>
9244      <publisher>&lt;unknown&gt;</publisher>
9245
9246      <part name="flop1" interface="floppy_5_25">
9247         <dataarea name="flop" size="368640">
9248            <rom name="tvcass14.dsk" size="368640" crc="37a1935c" sha1="9056bdc5cb604b8c84466472191673fe2f96326f" offset="0" />
9249         </dataarea>
9250      </part>
9251   </software>
9252
9253   <software name="tvccopy">
9254      <description>TV-Computer Copy</description>
9255      <year>1986</year>
9256      <publisher>Géza Garai</publisher>
9257
9258      <part name="flop1" interface="floppy_5_25">
9259         <dataarea name="flop" size="368640">
9260            <rom name="tvccopy.dsk" size="368640" crc="67cdd689" sha1="3dd2f80aeeefcf15aac338504b09d5044dff6864" offset="0" />
9261         </dataarea>
9262      </part>
9263   </software>
9264
9265   <software name="tvcedi">
9266      <description>TVC-EDI</description>
9267      <year>1987</year>
9268      <publisher>IHS GMK</publisher>
9269
9270      <part name="flop1" interface="floppy_5_25">
9271         <dataarea name="flop" size="368640">
9272            <rom name="tvcedi.dsk" size="368640" crc="e4a8f717" sha1="c0501c8a9170451cf29270045cca4cb9151ab369" offset="0" />
9273         </dataarea>
9274      </part>
9275   </software>
9276
9277   <software name="tvceprom">
9278      <description>TVC-EPROM Programming System</description>
9279      <year>198?</year>
9280      <publisher>&lt;unknown&gt;</publisher>
9281
9282      <part name="flop1" interface="floppy_5_25">
9283         <dataarea name="flop" size="368640">
9284            <rom name="tvceprom.dsk" size="368640" crc="017ceadc" sha1="aac34f47612eb61cf572bdbaad63a2417d9cdec6" offset="0" />
9285         </dataarea>
9286      </part>
9287   </software>
9288
9289   <software name="tvclista">
9290      <description>TVC Programlista</description>
9291      <year>198?</year>
9292      <publisher>Erno Kiraly</publisher>
9293
9294      <part name="flop1" interface="floppy_5_25">
9295         <dataarea name="flop" size="368640">
9296            <rom name="tvclista.dsk" size="368640" crc="e588904b" sha1="3dc67f6e192360520deb75d080b65853872e8818" offset="0" />
9297         </dataarea>
9298      </part>
9299   </software>
9300
9301   <software name="tvpoker">
9302      <description>TV-Póker (Blacksoft)</description>
9303      <year>1987</year>
9304      <publisher>Blacksoft</publisher>
9305
9306      <part name="flop1" interface="floppy_5_25">
9307         <dataarea name="flop" size="368640">
9308            <rom name="tvpoker.dsk" size="368640" crc="4de78e7d" sha1="55aa5fb7294908049cfda3659a52364239001c8b" offset="0" />
9309         </dataarea>
9310      </part>
9311   </software>
9312
9313   <software name="tvpokern">
9314      <description>TV-Póker (Novotrade)</description>
9315      <year>198?</year>
9316      <publisher>Novotrade</publisher>
9317
9318      <part name="flop1" interface="floppy_5_25">
9319         <dataarea name="flop" size="368640">
9320            <rom name="tvpokern.dsk" size="368640" crc="3b8700ae" sha1="7e2538d345febda9e42346453d8c55e76976a8f8" offset="0" />
9321         </dataarea>
9322      </part>
9323   </software>
9324
9325   <software name="tvpokerna" cloneof="tvpokern">
9326      <description>TV-Póker (Novotrade, Alt)</description>
9327      <year>198?</year>
9328      <publisher>Novotrade</publisher>
9329
9330      <part name="flop1" interface="floppy_5_25">
9331         <dataarea name="flop" size="368640">
9332            <rom name="tvpokernv2.dsk" size="368640" crc="6cfc9463" sha1="bca56290ab4b6e5a5687355646dcacee31440072" offset="0" />
9333         </dataarea>
9334      </part>
9335   </software>
9336
9337   <software name="tvstack">
9338      <description>TV Stack (Cracked by Nameless)</description>
9339      <year>1987</year>
9340      <publisher>'a' Studio</publisher>
9341
9342      <part name="flop1" interface="floppy_5_25">
9343         <dataarea name="flop" size="368640">
9344            <rom name="tvstack.dsk" size="368640" crc="d2006117" sha1="82494a6b19a72910c84375e644d3823a59cce461" offset="0" />
9345         </dataarea>
9346      </part>
9347   </software>
9348
9349   <software name="tvtenisz">
9350      <description>TV-Tenisz</description>
9351      <year>1987</year>
9352      <publisher>Zsolt Dobrovics</publisher>
9353
9354      <part name="flop1" interface="floppy_5_25">
9355         <dataarea name="flop" size="368640">
9356            <rom name="tvtenisz.dsk" size="368640" crc="7dad8871" sha1="cd119a8a42c6540f25e09c3edf8908e7317c5497" offset="0" />
9357         </dataarea>
9358      </part>
9359   </software>
9360
9361   <software name="ubulball">
9362      <description>Ubul's Ball</description>
9363      <year>1988</year>
9364      <publisher>Ubisoft</publisher>
9365
9366      <part name="flop1" interface="floppy_5_25">
9367         <dataarea name="flop" size="368640">
9368            <rom name="ubulball.dsk" size="368640" crc="7e623a14" sha1="d126268421de09d732c46465e3ac5e4a94e5d255" offset="0" />
9369         </dataarea>
9370      </part>
9371   </software>
9372
9373   <software name="ubulesap">
9374      <description>Ubul és a Pince</description>
9375      <year>198?</year>
9376      <publisher>&lt;unknown&gt;</publisher>
9377
9378      <part name="flop1" interface="floppy_5_25">
9379         <dataarea name="flop" size="368640">
9380            <rom name="ubulesapince.dsk" size="368640" crc="2c6e0f33" sha1="b8af10b369afb3945ba74c995124afbef27bd3e4" offset="0" />
9381         </dataarea>
9382      </part>
9383   </software>
9384
9385   <software name="ufo">
9386      <description>UFO</description>
9387      <year>1985</year>
9388      <publisher>STV</publisher>
9389
9390      <part name="flop1" interface="floppy_5_25">
9391         <dataarea name="flop" size="368640">
9392            <rom name="ufo.dsk" size="368640" crc="ca12d576" sha1="ae395bd32727b4365e7a19b4f48d08f334c2fbd7" offset="0" />
9393         </dataarea>
9394      </part>
9395   </software>
9396
9397   <software name="ufoka">
9398      <description>Ufóka</description>
9399      <year>198?</year>
9400      <publisher>József Kovács</publisher>
9401
9402      <part name="flop1" interface="floppy_5_25">
9403         <dataarea name="flop" size="368640">
9404            <rom name="ufoka.dsk" size="368640" crc="b55da4dc" sha1="0b333771e1c91ccbadd7720c0320b46a796b9b9f" offset="0" />
9405         </dataarea>
9406      </part>
9407   </software>
9408
9409   <software name="ujawari">
9410      <description>Új Awari</description>
9411      <year>198?</year>
9412      <publisher>&lt;unknown&gt;</publisher>
9413
9414      <part name="flop1" interface="floppy_5_25">
9415         <dataarea name="flop" size="368640">
9416            <rom name="ujawari.dsk" size="368640" crc="7bb7d686" sha1="b5785a4e153c4207392211d33c924ffe40bfbcfd" offset="0" />
9417         </dataarea>
9418      </part>
9419   </software>
9420
9421   <software name="unicopy">
9422      <description>UniCopy</description>
9423      <year>1987</year>
9424      <publisher>Zsolt Szigyártó</publisher>
9425
9426      <part name="flop1" interface="floppy_5_25">
9427         <dataarea name="flop" size="368640">
9428            <rom name="unicopy.dsk" size="368640" crc="54dade63" sha1="e331f2309fe74c9b36b599d50c8c5af602d8c723" offset="0" />
9429         </dataarea>
9430      </part>
9431   </software>
9432
9433   <software name="unicum">
9434      <description>Unicum</description>
9435      <year>1988</year>
9436      <publisher>Red-Green-Blue Software - Compi System</publisher>
9437
9438      <part name="flop1" interface="floppy_5_25">
9439         <dataarea name="flop" size="368640">
9440            <rom name="unicum.dsk" size="368640" crc="64f23f36" sha1="3f844b6bc710559faed0fa2c0256c316d6b92927" offset="0" />
9441         </dataarea>
9442      </part>
9443   </software>
9444
9445   <software name="unicuma" cloneof="unicum">
9446      <description>Unicum (Alt)</description>
9447      <year>1988</year>
9448      <publisher>Red-Green-Blue Software - Compi System</publisher>
9449
9450      <part name="flop1" interface="floppy_5_25">
9451         <dataarea name="flop" size="368640">
9452            <rom name="unicumv2.dsk" size="368640" crc="cca3fa09" sha1="e14c1591709f21929d676c74aaa42cfa4da0c24d" offset="0" />
9453         </dataarea>
9454      </part>
9455   </software>
9456
9457   <software name="unicumb" cloneof="unicum">
9458      <description>Unicum (Alt 2)</description>
9459      <year>1988</year>
9460      <publisher>Red-Green-Blue Software - Compi System</publisher>
9461
9462      <part name="flop1" interface="floppy_5_25">
9463         <dataarea name="flop" size="368640">
9464            <rom name="unicumv3.dsk" size="368640" crc="c9e7495f" sha1="5db1719c51a1b6fa4f9284b85d89ed20d211d5a5" offset="0" />
9465         </dataarea>
9466      </part>
9467   </software>
9468
9469   <software name="unifel">
9470      <description>Univerzális Feleltető Program</description>
9471      <year>198?</year>
9472      <publisher>&lt;unknown&gt;</publisher>
9473
9474      <part name="flop1" interface="floppy_5_25">
9475         <dataarea name="flop" size="368640">
9476            <rom name="unifel.dsk" size="368640" crc="f8044dff" sha1="d4afb644e5201377a720438b7e0257b25bc73ef5" offset="0" />
9477         </dataarea>
9478      </part>
9479   </software>
9480
9481   <software name="unigraph">
9482      <description>Unigraph v1.0</description>
9483      <year>198?</year>
9484      <publisher>Béla Csatlós</publisher>
9485
9486      <part name="flop1" interface="floppy_5_25">
9487         <dataarea name="flop" size="368640">
9488            <rom name="unigraph10.dsk" size="368640" crc="58e37171" sha1="76d87bdce94e546d9cd9a23aaa4016a58b212f9f" offset="0" />
9489         </dataarea>
9490      </part>
9491   </software>
9492
9493   <software name="urhaszim">
9494      <description>Űrhajó Szimulátor</description>
9495      <year>198?</year>
9496      <publisher>Vincze Szoftver</publisher>
9497
9498      <part name="flop1" interface="floppy_5_25">
9499         <dataarea name="flop" size="368640">
9500            <rom name="urhaszim.dsk" size="368640" crc="4add71d9" sha1="c62962afde4015b640cacd99a26f115561072f6b" offset="0" />
9501         </dataarea>
9502      </part>
9503   </software>
9504
9505   <software name="urjatek">
9506      <description>Űrjáték</description>
9507      <year>198?</year>
9508      <publisher>&lt;unknown&gt;</publisher>
9509
9510      <part name="flop1" interface="floppy_5_25">
9511         <dataarea name="flop" size="368640">
9512            <rom name="urjatek.dsk" size="368640" crc="985ab1e4" sha1="d0370572c78a15bb895d5e7ecb9fcd33b89b9808" offset="0" />
9513         </dataarea>
9514      </part>
9515   </software>
9516
9517   <software name="ursiklo">
9518      <description>Űrsikló</description>
9519      <year>198?</year>
9520      <publisher>Software in LUX</publisher>
9521
9522      <part name="flop1" interface="floppy_5_25">
9523         <dataarea name="flop" size="368640">
9524            <rom name="ursiklo.dsk" size="368640" crc="69addc69" sha1="0f926f9e8bfb0be83857880d1eda44bf35ea0d05" offset="0" />
9525         </dataarea>
9526      </part>
9527   </software>
9528
9529   <software name="utsebido">
9530      <description>Út-sebesség-idő Grafikon</description>
9531      <year>198?</year>
9532      <publisher>&lt;unknown&gt;</publisher>
9533
9534      <part name="flop1" interface="floppy_5_25">
9535         <dataarea name="flop" size="368640">
9536            <rom name="utsebido.dsk" size="368640" crc="1070ac1b" sha1="cb848a1f90fa3c738aae8c24588871ad1d9e4253" offset="0" />
9537         </dataarea>
9538      </part>
9539   </software>
9540
9541   <software name="vadasz">
9542      <description>Vadász</description>
9543      <year>1987</year>
9544      <publisher>Csaba Kiss</publisher>
9545
9546      <part name="flop1" interface="floppy_5_25">
9547         <dataarea name="flop" size="368640">
9548            <rom name="vadasz.dsk" size="368640" crc="321ce23f" sha1="a21122aac402f82aaa757aa6493124f7712ba337" offset="0" />
9549         </dataarea>
9550      </part>
9551   </software>
9552
9553   <software name="vadnyuga">
9554      <description>Vadnyugat</description>
9555      <year>1987</year>
9556      <publisher>Szabolcs Pőcze</publisher>
9557
9558      <part name="flop1" interface="floppy_5_25">
9559         <dataarea name="flop" size="368640">
9560            <rom name="vadnyugat.dsk" size="368640" crc="e9297c4c" sha1="4243e0210df7361c72abf61fd6ca11b1d6ff0125" offset="0" />
9561         </dataarea>
9562      </part>
9563   </software>
9564
9565   <software name="varak">
9566      <description>Várak</description>
9567      <year>198?</year>
9568      <publisher>Zoltan Halasz</publisher>
9569
9570      <part name="flop1" interface="floppy_5_25">
9571         <dataarea name="flop" size="368640">
9572            <rom name="varakv1.dsk" size="368640" crc="f0923f84" sha1="e81a3cfb0737a34c7b8519280ac2717dfc3f1121" offset="0" />
9573         </dataarea>
9574      </part>
9575   </software>
9576
9577   <software name="varaka" cloneof="varak">
9578      <description>Várak (Alt)</description>
9579      <year>198?</year>
9580      <publisher>Zoltan Halasz</publisher>
9581
9582      <part name="flop1" interface="floppy_5_25">
9583         <dataarea name="flop" size="368640">
9584            <rom name="varakv2.dsk" size="368640" crc="10b3ad2c" sha1="ac0832ccc85d7f62bc771736cb60145a47ddc368" offset="0" />
9585         </dataarea>
9586      </part>
9587   </software>
9588
9589   <software name="varazsec">
9590      <description>Varázsecset</description>
9591      <year>1988</year>
9592      <publisher>Novotrade</publisher>
9593
9594      <part name="flop1" interface="floppy_5_25">
9595         <dataarea name="flop" size="368640">
9596            <rom name="varazsecset.dsk" size="368640" crc="2deb2a16" sha1="64df2ad5180f4339d63eee2c3f40e653152ef491" offset="0" />
9597         </dataarea>
9598      </part>
9599   </software>
9600
9601   <software name="varazseca" cloneof="varazsec">
9602      <description>Varázsecset (Alt)</description>
9603      <year>1988</year>
9604      <publisher>Novotrade</publisher>
9605
9606      <part name="flop1" interface="floppy_5_25">
9607         <dataarea name="flop" size="368640">
9608            <rom name="varazsecsetv2.dsk" size="368640" crc="544bf2a5" sha1="44735a8b4c8b02a0abfdb2349e73911c20c24c9f" offset="0" />
9609         </dataarea>
9610      </part>
9611   </software>
9612
9613   <software name="varazsecb" cloneof="varazsec">
9614      <description>Varázsecset (Alt 2)</description>
9615      <year>1988</year>
9616      <publisher>Novotrade</publisher>
9617
9618      <part name="flop1" interface="floppy_5_25">
9619         <dataarea name="flop" size="368640">
9620            <rom name="varazsecsetv3.dsk" size="368640" crc="fe102ffb" sha1="41e48300c43dbdd2eff90daa0cf9acc0ff77fec4" offset="0" />
9621         </dataarea>
9622      </part>
9623   </software>
9624
9625   <software name="varazsgo">
9626      <description>Varázsgömb</description>
9627      <year>198?</year>
9628      <publisher>Berysoft</publisher>
9629
9630      <part name="flop1" interface="floppy_5_25">
9631         <dataarea name="flop" size="368640">
9632            <rom name="varazsgomb.dsk" size="368640" crc="2c2259c5" sha1="e932ccfa7cca80dd7b37601b42f0207457017684" offset="0" />
9633         </dataarea>
9634      </part>
9635   </software>
9636
9637   <software name="varos">
9638      <description>Város</description>
9639      <year>1986</year>
9640      <publisher>Ferenc Dobai</publisher>
9641
9642      <part name="flop1" interface="floppy_5_25">
9643         <dataarea name="flop" size="368640">
9644            <rom name="varos.dsk" size="368640" crc="a96bb898" sha1="ec7786e36e4db9d235c109fa3e7912884ac36654" offset="0" />
9645         </dataarea>
9646      </part>
9647   </software>
9648
9649   <software name="vasarely">
9650      <description>Vasarely</description>
9651      <year>198?</year>
9652      <publisher>&lt;unknown&gt;</publisher>
9653
9654      <part name="flop1" interface="floppy_5_25">
9655         <dataarea name="flop" size="368640">
9656            <rom name="vasarely.dsk" size="368640" crc="4634111d" sha1="011be5aa91f03629e8dfac12bdf48e21f4ee320c" offset="0" />
9657         </dataarea>
9658      </part>
9659   </software>
9660
9661   <software name="vaterlo">
9662      <description>Vaterlo</description>
9663      <year>198?</year>
9664      <publisher>&lt;unknown&gt;</publisher>
9665
9666      <part name="flop1" interface="floppy_5_25">
9667         <dataarea name="flop" size="368640">
9668            <rom name="vaterlo.dsk" size="368640" crc="5d5b8f09" sha1="ff75a501e65ac6b22eeec9467a387e32fdd04296" offset="0" />
9669         </dataarea>
9670      </part>
9671   </software>
9672
9673   <software name="vektorgf">
9674      <description>Perspektívikus Real-Time Vektor</description>
9675      <year>198?</year>
9676      <publisher>Peter Rakos</publisher>
9677
9678      <part name="flop1" interface="floppy_5_25">
9679         <dataarea name="flop" size="368640">
9680            <rom name="vektorgf.dsk" size="368640" crc="39ca7a01" sha1="fea8951fd29e9999d8c9889d9f0abe72975cb6f0" offset="0" />
9681         </dataarea>
9682      </part>
9683   </software>
9684
9685   <software name="vezetes">
9686      <description>Vezetés</description>
9687      <year>1987</year>
9688      <publisher>King ec Software</publisher>
9689
9690      <part name="flop1" interface="floppy_5_25">
9691         <dataarea name="flop" size="368640">
9692            <rom name="vezetes.dsk" size="368640" crc="331fda0a" sha1="607aabb21294b081c896fcc04d40ffedd5029993" offset="0" />
9693         </dataarea>
9694      </part>
9695   </software>
9696
9697   <software name="vidas64">
9698      <description>VIDAS - TVC Assembler</description>
9699      <year>1986</year>
9700      <publisher>Tamas Bakos - Tibor Bereznai</publisher>
9701
9702      <part name="flop1" interface="floppy_5_25">
9703         <dataarea name="flop" size="368640">
9704            <rom name="vidas64.dsk" size="368640" crc="6ade85c1" sha1="848e4f0b5ccd8a7636cc0ead085a95c83faf2699" offset="0" />
9705         </dataarea>
9706      </part>
9707   </software>
9708
9709   <software name="videoton">
9710      <description>Videoton</description>
9711      <year>198?</year>
9712      <publisher>Videoton</publisher>
9713
9714      <part name="flop1" interface="floppy_5_25">
9715         <dataarea name="flop" size="368640">
9716            <rom name="videoton.dsk" size="368640" crc="ecc4f646" sha1="3c9f11eda5e86b83b9ac74e6406b980620512fbe" offset="0" />
9717         </dataarea>
9718      </part>
9719   </software>
9720
9721   <software name="viditype">
9722      <description>VidiType</description>
9723      <year>1986</year>
9724      <publisher>Géza Garai</publisher>
9725
9726      <part name="flop1" interface="floppy_5_25">
9727         <dataarea name="flop" size="368640">
9728            <rom name="viditype.dsk" size="368640" crc="584883d8" sha1="12f3113cd87a6d441bac10b6372b7222fc42a5b4" offset="0" />
9729         </dataarea>
9730      </part>
9731   </software>
9732
9733   <software name="vidzene">
9734      <description>Videoton Zene</description>
9735      <year>198?</year>
9736      <publisher>JozsiSoft</publisher>
9737
9738      <part name="flop1" interface="floppy_5_25">
9739         <dataarea name="flop" size="368640">
9740            <rom name="vidizene.dsk" size="368640" crc="30d8797b" sha1="9cfc8639f723b0800e31994dd0d9915a22d9faaa" offset="0" />
9741         </dataarea>
9742      </part>
9743   </software>
9744
9745   <software name="vigyori">
9746      <description>Vigyori</description>
9747      <year>198?</year>
9748      <publisher>Software in LUX</publisher>
9749
9750      <part name="flop1" interface="floppy_5_25">
9751         <dataarea name="flop" size="368640">
9752            <rom name="vigyori.dsk" size="368640" crc="c0b7de42" sha1="627a229443ff2d4d16bf419a7d2768b8e4400189" offset="0" />
9753         </dataarea>
9754      </part>
9755   </software>
9756
9757   <software name="viliaban">
9758      <description>Vili a Bányász</description>
9759      <year>1991</year>
9760      <publisher>STV</publisher>
9761
9762      <part name="flop1" interface="floppy_5_25">
9763         <dataarea name="flop" size="368640">
9764            <rom name="viliabanyasz.dsk" size="368640" crc="8aa88b24" sha1="94330623455f48430f4aedfff7a0f95e097b645e" offset="0" />
9765         </dataarea>
9766      </part>
9767   </software>
9768
9769   <software name="viliabanj" cloneof="viliaban">
9770      <description>Vili A Banyasz (Joystick)</description>
9771      <year>1991</year>
9772      <publisher>STV</publisher>
9773
9774      <part name="flop1" interface="floppy_5_25">
9775         <dataarea name="flop" size="368640">
9776            <rom name="viliabanyaszjoy.dsk" size="368640" crc="06a7ca1a" sha1="0534488b9264cf46ef24edec9d03945ebe0bc4b8" offset="0" />
9777         </dataarea>
9778      </part>
9779   </software>
9780
9781   <software name="vipera">
9782      <description>Vipera</description>
9783      <year>1987</year>
9784      <publisher>Atlas</publisher>
9785
9786      <part name="flop1" interface="floppy_5_25">
9787         <dataarea name="flop" size="368640">
9788            <rom name="vipera.dsk" size="368640" crc="9b410dd2" sha1="2109a2f84d239f092099a2aa620a04d3d250480a" offset="0" />
9789         </dataarea>
9790      </part>
9791   </software>
9792
9793   <software name="viszhang">
9794      <description>Visszhang</description>
9795      <year>198?</year>
9796      <publisher>&lt;unknown&gt;</publisher>
9797
9798      <part name="flop1" interface="floppy_5_25">
9799         <dataarea name="flop" size="368640">
9800            <rom name="viszhang.dsk" size="368640" crc="c72758a3" sha1="f27312dd23fba5ba4abf99276927e9b15911c74d" offset="0" />
9801         </dataarea>
9802      </part>
9803   </software>
9804
9805   <software name="volleyba">
9806      <description>Volleyball</description>
9807      <year>1990</year>
9808      <publisher>Berysoft</publisher>
9809
9810      <part name="flop1" interface="floppy_5_25">
9811         <dataarea name="flop" size="368640">
9812            <rom name="volleyball_v1.dsk" size="368640" crc="02f2a992" sha1="a79d869c8381e998f7b178b2118d662d6938c025" offset="0" />
9813         </dataarea>
9814      </part>
9815   </software>
9816
9817   <software name="volleybaa" cloneof="volleyba">
9818      <description>Volleyball (Alt)</description>
9819      <year>1990</year>
9820      <publisher>Berysoft</publisher>
9821
9822      <part name="flop1" interface="floppy_5_25">
9823         <dataarea name="flop" size="368640">
9824            <rom name="volleyball_v2.dsk" size="368640" crc="9c2ff2a5" sha1="b32e4a85931b46dc8610cf7601d6e31bb844741c" offset="0" />
9825         </dataarea>
9826      </part>
9827   </software>
9828
9829   <software name="vtbridzs">
9830      <description>VT Bridzs</description>
9831      <year>198?</year>
9832      <publisher>Videoton</publisher>
9833
9834      <part name="flop1" interface="floppy_5_25">
9835         <dataarea name="flop" size="368640">
9836            <rom name="vtbridzsv1.dsk" size="368640" crc="0a234ab2" sha1="2c0e075098098418a14ac1d686692b3e2e389828" offset="0" />
9837         </dataarea>
9838      </part>
9839   </software>
9840
9841   <software name="vtbridzsa" cloneof="vtbridzs">
9842      <description>VT Bridzs (Alt)</description>
9843      <year>198?</year>
9844      <publisher>Videoton</publisher>
9845
9846      <part name="flop1" interface="floppy_5_25">
9847         <dataarea name="flop" size="368640">
9848            <rom name="vtbridzsv2.dsk" size="368640" crc="2fe325c5" sha1="458441b9d46193fce6f546423630cafb23cd80b6" offset="0" />
9849         </dataarea>
9850      </part>
9851   </software>
9852
9853   <software name="vtbridzsb" cloneof="vtbridzs">
9854      <description>VT Bridzs (Alt 2)</description>
9855      <year>198?</year>
9856      <publisher>&lt;unknown&gt;</publisher>
9857
9858      <part name="flop1" interface="floppy_5_25">
9859         <dataarea name="flop" size="368640">
9860            <rom name="vtbridv3.dsk" size="368640" crc="09bd925c" sha1="e043c76ec82209aac5a9ba0feb46ac5b04d917bd" offset="0" />
9861         </dataarea>
9862      </part>
9863   </software>
9864
9865   <software name="walltris">
9866      <description>Walltris</description>
9867      <year>198?</year>
9868      <publisher>STV</publisher>
9869
9870      <part name="flop1" interface="floppy_5_25">
9871         <dataarea name="flop" size="368640">
9872            <rom name="walltris.dsk" size="368640" crc="76ce49dc" sha1="52b8a7028e21fdde51cf28c87ad180047a58ea42" offset="0" />
9873         </dataarea>
9874      </part>
9875   </software>
9876
9877   <software name="war2200d">
9878      <description>War in 2200 Demo</description>
9879      <year>198?</year>
9880      <publisher>TVCM</publisher>
9881
9882      <part name="flop1" interface="floppy_5_25">
9883         <dataarea name="flop" size="368640">
9884            <rom name="war2200demo.dsk" size="368640" crc="0eb7ede9" sha1="7b2a0e013c7fd7adf62814816385c765f54515bf" offset="0" />
9885         </dataarea>
9886      </part>
9887   </software>
9888
9889   <software name="war2100">
9890      <description>War in 2100</description>
9891      <year>198?</year>
9892      <publisher>TVCM</publisher>
9893
9894      <part name="flop1" interface="floppy_5_25">
9895         <dataarea name="flop" size="368640">
9896            <rom name="warin2100.dsk" size="368640" crc="ef086158" sha1="cc55ef0ddb4a663903afaaae24a63ac04315894f" offset="0" />
9897         </dataarea>
9898      </part>
9899   </software>
9900
9901   <software name="wimbledo">
9902      <description>Wimbledon</description>
9903      <year>198?</year>
9904      <publisher>Software in LUX</publisher>
9905
9906      <info name="usage" value="Load file wimbledo.cas"/>
9907      <part name="flop1" interface="floppy_5_25">
9908         <dataarea name="flop" size="368640">
9909            <rom name="wimbledon.dsk" size="368640" crc="d1311da4" sha1="a3c681bd8a871c1d2127c2397628951aca7d6671" offset="0" />
9910         </dataarea>
9911      </part>
9912   </software>
9913
9914   <software name="wimbledoa" cloneof="wimbledo">
9915      <description>Wimbledon (Alt)</description>
9916      <year>198?</year>
9917      <publisher>Software in LUX</publisher>
9918
9919      <part name="flop1" interface="floppy_5_25">
9920         <dataarea name="flop" size="368640">
9921            <rom name="wimblev2.dsk" size="368640" crc="5ef42a61" sha1="21c753ba0de135caf9b7854ee7c2235d27fd017d" offset="0" />
9922         </dataarea>
9923      </part>
9924   </software>
9925
9926   <software name="wst">
9927      <description>World Soccer Trainer</description>
9928      <year>1994</year>
9929      <publisher>STV</publisher>
9930
9931      <part name="flop1" interface="floppy_5_25">
9932         <dataarea name="flop" size="368640">
9933            <rom name="wst.dsk" size="368640" crc="6bb8a4f3" sha1="4c2cfb572206573758fa158c98883a330d81c610" offset="0" />
9934         </dataarea>
9935      </part>
9936   </software>
9937
9938   <software name="xeno">
9939      <description>Xeno</description>
9940      <year>1986</year>
9941      <publisher>STV</publisher>
9942
9943      <part name="flop1" interface="floppy_5_25">
9944         <dataarea name="flop" size="368640">
9945            <rom name="xeno.dsk" size="368640" crc="5b7bcd6e" sha1="aee4eb09790ddfb36ea2ed5e670e3ef019e88c42" offset="0" />
9946         </dataarea>
9947      </part>
9948   </software>
9949
9950   <software name="xstore">
9951      <description>Hexadecimális töltőprogram</description>
9952      <year>1987</year>
9953      <publisher>&lt;unknown&gt;</publisher>
9954
9955      <part name="flop1" interface="floppy_5_25">
9956         <dataarea name="flop" size="368640">
9957            <rom name="xstore.dsk" size="368640" crc="676e5961" sha1="64b26b0f2c75172a931f3d67daf64f0eb9ebecbb" offset="0" />
9958         </dataarea>
9959      </part>
9960   </software>
9961
9962   <software name="yogi">
9963      <description>Yogi</description>
9964      <year>198?</year>
9965      <publisher>Agilar</publisher>
9966
9967      <part name="flop1" interface="floppy_5_25">
9968         <dataarea name="flop" size="368640">
9969            <rom name="yogi.dsk" size="368640" crc="4656e157" sha1="6db97baf0e9c820deb6b7192db1db62d9eec2a9b" offset="0" />
9970         </dataarea>
9971      </part>
9972   </software>
9973
9974   <software name="zenebona">
9975      <description>Zenebona</description>
9976      <year>1986</year>
9977      <publisher>'a' Studio</publisher>
9978
9979      <part name="flop1" interface="floppy_5_25">
9980         <dataarea name="flop" size="368640">
9981            <rom name="zenebona.dsk" size="368640" crc="a3a0ebe3" sha1="beba8fdb597c00cfced2a8071ceedbb9ec60a370" offset="0" />
9982         </dataarea>
9983      </part>
9984   </software>
9985
9986   <software name="zenezenea" cloneof="zenezene">
9987      <description>Zene-Zene-Zene (Alt Colors)</description>
9988      <year>198?</year>
9989      <publisher>&lt;unknown&gt;</publisher>
9990
9991      <part name="flop1" interface="floppy_5_25">
9992         <dataarea name="flop" size="368640">
9993            <rom name="zeneev.dsk" size="368640" crc="d64c7183" sha1="1e45852513a672336eaf07dceb91140026efee32" offset="0" />
9994         </dataarea>
9995      </part>
9996   </software>
9997
9998   <software name="zenegyar">
9999      <description>Zenegyár v1.3</description>
10000      <year>1989</year>
10001      <publisher>Software in LUX</publisher>
10002
10003      <part name="flop1" interface="floppy_5_25">
10004         <dataarea name="flop" size="368640">
10005            <rom name="zenegyar.dsk" size="368640" crc="3b3279bf" sha1="43ca1c4c0f3dbee80d5369238a8a2dd06d76ceda" offset="0" />
10006         </dataarea>
10007      </part>
10008   </software>
10009
10010   <software name="zenezene">
10011      <description>Zene-Zene-Zene</description>
10012      <year>198?</year>
10013      <publisher>&lt;unknown&gt;</publisher>
10014
10015      <part name="flop1" interface="floppy_5_25">
10016         <dataarea name="flop" size="368640">
10017            <rom name="zenek.dsk" size="368640" crc="ed5161c2" sha1="5c33ac0a675567f890ea8424051a018d8e27029c" offset="0" />
10018         </dataarea>
10019      </part>
10020   </software>
10021
10022   <software name="zenek">
10023      <description>Zenék</description>
10024      <year>198?</year>
10025      <publisher>&lt;unknown&gt;</publisher>
10026
10027      <part name="flop1" interface="floppy_5_25">
10028         <dataarea name="flop" size="368640">
10029            <rom name="zenekz.dsk" size="368640" crc="7375518c" sha1="7e3c1df2645e90877655601e2b9296a52e90c8c4" offset="0" />
10030         </dataarea>
10031      </part>
10032   </software>
10033
10034   <software name="zeneszer">
10035      <description>Zeneszerző</description>
10036      <year>198?</year>
10037      <publisher>&lt;unknown&gt;</publisher>
10038
10039      <part name="flop1" interface="floppy_5_25">
10040         <dataarea name="flop" size="368640">
10041            <rom name="zeneszer.dsk" size="368640" crc="8b0c48ab" sha1="f87fe786e1a177222fdc28f659f459711991446d" offset="0" />
10042         </dataarea>
10043      </part>
10044   </software>
10045
10046   <software name="zsidu3">
10047      <description>Zsid U3</description>
10048      <year>198?</year>
10049      <publisher>&lt;unknown&gt;</publisher>
10050
10051      <part name="flop1" interface="floppy_5_25">
10052         <dataarea name="flop" size="368640">
10053            <rom name="zsidu3.dsk" size="368640" crc="f3beacc0" sha1="b61f92722ddf7039a26561db3572daf3dbf75f3e" offset="0" />
10054         </dataarea>
10055      </part>
10056   </software>
10057
10058   <software name="zsir">
10059      <description>Zsír</description>
10060      <year>198?</year>
10061      <publisher>Berysoft</publisher>
10062
10063      <part name="flop1" interface="floppy_5_25">
10064         <dataarea name="flop" size="368640">
10065            <rom name="zsir.dsk" size="368640" crc="5c587e01" sha1="f07b150651981efce447d0a5aeb4a2d32edec208" offset="0" />
10066         </dataarea>
10067      </part>
10068   </software>
10069
10070
10071
10072<!--
10073    <software name="blankdsk">
10074        <description>Blank Disk (TV-DOS v1.2)</description>
10075        <year>198?</year>
10076        <publisher>&lt;unknown&gt;</publisher>
10077
10078        <part name="flop1" interface="floppy_5_25">
10079            <dataarea name="flop" size="368640">
10080                <rom name="realtiv.dsk" size="368640" crc="ef5198e5" sha1="63c25cbee70f667c0403ba85829391c07c201a2c" offset="0" />
10081            </dataarea>
10082        </part>
10083    </software>
10084
10085
10086    <software name="astrobla" cloneof="astrobl">
10087        <description>Astro Blaster (Alt)</description>
10088        <year>1991</year>
10089        <publisher>STV</publisher>
10090
10091        <part name="flop1" interface="floppy_5_25">
10092            <dataarea name="flop" size="368640">
10093                <rom name="astro.dsk" size="737280" crc="9b43b63d" sha1="ce632f216055d8ecffd99e23f4c91481c5e0bd12" offset="0" />
10094            </dataarea>
10095        </part>
10096    </software>
10097
10098    <software name="bobb" cloneof="bob">
10099        <description>Bob (Alt 2)</description>
10100        <year>198?</year>
10101        <publisher>Mamut Soft</publisher>
10102
10103        <part name="flop1" interface="floppy_5_25">
10104            <dataarea name="flop" size="368640">
10105                <rom name="bobv1.dsk" size="368640" crc="a3eb8cd9" sha1="640cfe393b40f88c44ab781c91f87b725b50f5a7" offset="0" />
10106            </dataarea>
10107        </part>
10108    </software>
10109
10110    <software name="bobc" cloneof="bob">
10111        <description>Bob (Alt 3)</description>
10112        <year>198?</year>
10113        <publisher>Mamut Soft</publisher>
10114
10115        <part name="flop1" interface="floppy_5_25">
10116            <dataarea name="flop" size="368640">
10117                <rom name="bobv2_.dsk" size="368640" crc="cadf10cd" sha1="32f6215e9ab16a6f272820311f88ac7cbdcae052" offset="0" />
10118            </dataarea>
10119        </part>
10120    </software>
10121
10122    <software name="bombazoa" cloneof="bombazo">
10123        <description>Az Utolso Bombazo (Alt)</description>
10124        <year>198?</year>
10125        <publisher>&lt;unknown&gt;</publisher>
10126
10127        <part name="flop1" interface="floppy_5_25">
10128            <dataarea name="flop" size="737280">
10129                <rom name="bombazo.dsk" size="737280" crc="297f8e3a" sha1="16ea50b5e7fb1f68d0c6b1c910ad08b7cf894023" offset="0" />
10130            </dataarea>
10131        </part>
10132    </software>
10133
10134    <software name="break">
10135        <description>Break</description>
10136        <year>198?</year>
10137        <publisher>&lt;unknown&gt;</publisher>
10138
10139        <part name="flop1" interface="floppy_5_25">
10140            <dataarea name="flop" size="368640">
10141                <rom name="break.dsk" size="368640" crc="ec0765bc" sha1="4cd47552c883751528a8b0674ee23c56c07a2f05" offset="0" />
10142            </dataarea>
10143        </part>
10144    </software>
10145
10146    <software name="centipeda" cloneof="centiped">
10147        <description>Centipede (Alt)</description>
10148        <year>198?</year>
10149        <publisher>STV</publisher>
10150
10151        <part name="flop1" interface="floppy_5_25">
10152            <dataarea name="flop" size="737280">
10153                <rom name="cent.dsk" size="737280" crc="1dd2c577" sha1="06595792be54bbbad9b220134ddf10435bac8f2a" offset="0" />
10154            </dataarea>
10155        </part>
10156    </software>
10157
10158    <software name="crackeda" cloneof="cracked">
10159        <description>Crack Ed (Alt)</description>
10160        <year>198?</year>
10161        <publisher>&lt;unknown&gt;</publisher>
10162
10163        <part name="flop1" interface="floppy_5_25">
10164            <dataarea name="flop" size="368640">
10165                <rom name="crak.dsk" size="368640" crc="eb6a363f" sha1="743b726d8430b1c55f2003f5ad24133377eff9ec" offset="0" />
10166            </dataarea>
10167        </part>
10168    </software>
10169
10170    <software name="cyrus2a" cloneof="cyrus2">
10171        <description>Cyrus 2 (Alt)</description>
10172        <year>1985</year>
10173        <publisher>Intelligent Chess Software</publisher>
10174
10175        <part name="flop1" interface="floppy_5_25">
10176            <dataarea name="flop" size="737280">
10177                <rom name="cyrus2 [a].dsk" size="737280" crc="5f1de574" sha1="069641cdd004acfe0071ffe43f7679b63e50ccec" offset="0" />
10178            </dataarea>
10179        </part>
10180    </software>
10181
10182    <software name="dobgepa" cloneof="dobgep">
10183        <description>Dobgép (Alt)</description>
10184        <year>198?</year>
10185        <publisher>STV</publisher>
10186
10187        <part name="flop1" interface="floppy_5_25">
10188            <dataarea name="flop" size="737280">
10189                <rom name="dob.dsk" size="737280" crc="5b5d0bc5" sha1="2c9d3d349ef97c21c64c3a5fbe7e99f29e8035f1" offset="0" />
10190            </dataarea>
10191        </part>
10192    </software>
10193
10194    <software name="hamburg">
10195        <description>Hamburger</description>
10196        <year>198?</year>
10197        <publisher>&lt;unknown&gt;</publisher>
10198
10199        <part name="flop1" interface="floppy_5_25">
10200            <dataarea name="flop" size="368640">
10201                <rom name="hamburger.dsk" size="368640" crc="fe540e2c" sha1="4520e085c21e0b4c3dfe6aa92b269b4b9e73c982" offset="0" />
10202            </dataarea>
10203        </part>
10204    </software>
10205
10206    <software name="invazioa" cloneof="invazio">
10207        <description>Invázió (Alt)</description>
10208        <year>198?</year>
10209        <publisher>STV</publisher>
10210
10211        <part name="flop1" interface="floppy_5_25">
10212            <dataarea name="flop" size="737280">
10213                <rom name="inv.dsk" size="737280" crc="16169e62" sha1="9ee2c1890ac273ee49da023c41cd1d8ff7a8608d" offset="0" />
10214            </dataarea>
10215        </part>
10216    </software>
10217
10218    <software name="iq">
10219        <description>Hasznalati Utasitas</description>
10220        <year>198?</year>
10221        <publisher>&lt;unknown&gt;</publisher>
10222
10223        <part name="flop1" interface="floppy_5_25">
10224            <dataarea name="flop" size="737280">
10225                <rom name="iq.dsk" size="737280" crc="46ce5ec6" sha1="887d95912347a39052a3ac98f5f5e655732b7ccd" offset="0" />
10226            </dataarea>
10227        </part>
10228    </software>
10229
10230    <software name="jancsia" cloneof="jancsi">
10231        <description>Jancsi a Várban (Alt)</description>
10232        <year>1986</year>
10233        <publisher>STV</publisher>
10234
10235        <part name="flop1" interface="floppy_5_25">
10236            <dataarea name="flop" size="737280">
10237                <rom name="jancs.dsk" size="737280" crc="fd406d9b" sha1="4136b8925bfb87485f4a882eb50744f0b10f9d70" offset="0" />
10238            </dataarea>
10239        </part>
10240    </software>
10241
10242    <software name="kardhalaa" cloneof="kardhala">
10243        <description>Kardhalak és Kincsek (Alt)</description>
10244        <year>198?</year>
10245        <publisher>&lt;unknown&gt;</publisher>
10246
10247        <part name="flop1" interface="floppy_5_25">
10248            <dataarea name="flop" size="737280">
10249                <rom name="kardhal.dsk" size="737280" crc="31743be0" sha1="f44e32caf176055e254b9540591eda496c4ff0d1" offset="0" />
10250            </dataarea>
10251        </part>
10252    </software>
10253
10254    <software name="katalogu">
10255        <description>Katalogus Program</description>
10256        <year>1986</year>
10257        <publisher>Kronosz</publisher>
10258
10259        <part name="flop1" interface="floppy_5_25">
10260            <dataarea name="flop" size="368640">
10261                <rom name="katalogus.dsk" size="368640" crc="a3d08af1" sha1="68336f5e904aada1f0bf93dcd30ee284dff65206" offset="0" />
10262            </dataarea>
10263        </part>
10264    </software>
10265
10266    <software name="keljfelja" cloneof="keljfelj">
10267        <description>Keljfeljancsi (Alt)</description>
10268        <year>198?</year>
10269        <publisher>STV</publisher>
10270
10271        <part name="flop1" interface="floppy_5_25">
10272            <dataarea name="flop" size="737280">
10273                <rom name="keljfel.dsk" size="737280" crc="6e09e8c5" sha1="f5a043f2eddd88d7207bdd862887d3c3a9af66c3" offset="0" />
10274            </dataarea>
10275        </part>
10276    </software>
10277
10278    <software name="kismozdoa" cloneof="kismozdo">
10279        <description>Kismozdony (Alt)</description>
10280        <year>198?</year>
10281        <publisher>STV</publisher>
10282
10283        <part name="flop1" interface="floppy_5_25">
10284            <dataarea name="flop" size="737280">
10285                <rom name="kismozony.dsk" size="737280" crc="0af2cc13" sha1="de13c7326810609fc81046333c689919f8ea3c2b" offset="0" />
10286            </dataarea>
10287        </part>
10288    </software>
10289
10290    <software name="labirinta" cloneof="labirint">
10291        <description>Labirintus (Alt)</description>
10292        <year>198?</year>
10293        <publisher>&lt;unknown&gt;</publisher>
10294
10295        <part name="flop1" interface="floppy_5_25">
10296            <dataarea name="flop" size="368640">
10297                <rom name="labiv2.dsk" size="368640" crc="7b90a57c" sha1="2f0ba8595584141e2ea7dacd0b1f758ff27b5743" offset="0" />
10298            </dataarea>
10299        </part>
10300    </software>
10301
10302    <software name="linaa" cloneof="lina">
10303        <description>Lina (Alt)</description>
10304        <year>198?</year>
10305        <publisher>STV</publisher>
10306
10307        <part name="flop1" interface="floppy_5_25">
10308            <dataarea name="flop" size="737280">
10309                <rom name="lina [a].dsk" size="737280" crc="dbe61e9a" sha1="50fda0f33be072c40d2050efc6e4f3531971f9d5" offset="0" />
10310            </dataarea>
10311        </part>
10312    </software>
10313
10314    <software name="masolo">
10315        <description>Másoló</description>
10316        <year>198?</year>
10317        <publisher>&lt;unknown&gt;</publisher>
10318
10319        <part name="flop1" interface="floppy_5_25">
10320            <dataarea name="flop" size="368640">
10321                <rom name="masolo.dsk" size="368640" crc="33b27e3e" sha1="7e542be169d5a6de3cd5dcdf4f50f65fc48ce055" offset="0" />
10322            </dataarea>
10323        </part>
10324    </software>
10325
10326    <software name="newintro">
10327        <description>Newintro</description>
10328        <year>198?</year>
10329        <publisher>C.S. Software</publisher>
10330
10331        <part name="flop1" interface="floppy_5_25">
10332            <dataarea name="flop" size="368640">
10333                <rom name="newintro.dsk" size="368640" crc="bde3cf32" sha1="994fe451f537f42686367984e3ef449ecbf18263" offset="0" />
10334            </dataarea>
10335        </part>
10336    </software>
10337
10338    <software name="ordogmota" cloneof="ordogmot">
10339        <description>Ördögmotor (Alt)</description>
10340        <year>1990</year>
10341        <publisher>STV</publisher>
10342
10343        <part name="flop1" interface="floppy_5_25">
10344            <dataarea name="flop" size="737280">
10345                <rom name="ordogmotor [a].dsk" size="737280" crc="8bfa6cbf" sha1="e6758720567aa72cd2afc8be5b413c2015ab1fcf" offset="0" />
10346            </dataarea>
10347        </part>
10348    </software>
10349
10350    <software name="oszkara" cloneof="oszkar">
10351        <description>Oszkár a Lovag (Alt)</description>
10352        <year>198?</year>
10353        <publisher>STV</publisher>
10354
10355        <part name="flop1" interface="floppy_5_25">
10356            <dataarea name="flop" size="737280">
10357                <rom name="oszkar.dsk" size="737280" crc="62d1c2b2" sha1="76ea86b6661a35c2de1e202154599c2b613df32b" offset="0" />
10358            </dataarea>
10359        </part>
10360    </software>
10361
10362    <software name="panika" cloneof="panik">
10363        <description>Pánik (Alt)</description>
10364        <year>1991</year>
10365        <publisher>STV</publisher>
10366
10367        <part name="flop1" interface="floppy_5_25">
10368            <dataarea name="flop" size="737280">
10369                <rom name="panik [a].dsk" size="737280" crc="ac5ac41b" sha1="ec78040a45ab5419478f0a9ad159bb74dcdf9b10" offset="0" />
10370            </dataarea>
10371        </part>
10372    </software>
10373
10374    <software name="parbajb" cloneof="parbaj">
10375        <description>Párbaj (Alt 2)</description>
10376        <year>1991</year>
10377        <publisher>STV</publisher>
10378
10379        <part name="flop1" interface="floppy_5_25">
10380            <dataarea name="flop" size="737280">
10381                <rom name="parbaj [a].dsk" size="737280" crc="296e157b" sha1="c3b71a97597257253057c4c41e9cc97c7741e93e" offset="0" />
10382            </dataarea>
10383        </part>
10384    </software>
10385
10386    <software name="peepshowa" cloneof="peepshow">
10387        <description>Peep Show (Alt)</description>
10388        <year>1984</year>
10389        <publisher>STV</publisher>
10390
10391        <part name="flop1" interface="floppy_5_25">
10392            <dataarea name="flop" size="737280">
10393                <rom name="peepshow.dsk" size="737280" crc="c3628300" sha1="01b45844089b16341ab1bc8964208f6304f97222" offset="0" />
10394            </dataarea>
10395        </part>
10396    </software>
10397
10398    <software name="poseidona" cloneof="poseidon">
10399        <description>Poseidon Kincse (Alt)</description>
10400        <year>1989</year>
10401        <publisher>Novotrade</publisher>
10402
10403        <part name="flop1" interface="floppy_5_25">
10404            <dataarea name="flop" size="368640">
10405                <rom name="poseidonkincse.dsk" size="368640" crc="2acff3a1" sha1="cc3af65157cd00645c8f2f45dbec17dcdd13ca71" offset="0" />
10406            </dataarea>
10407        </part>
10408    </software>
10409
10410    <software name="raceaceb" cloneof="raceace">
10411        <description>Race Ace (Alt 2)</description>
10412        <year>1990</year>
10413        <publisher>Zsolt Szigeti</publisher>
10414
10415        <part name="flop1" interface="floppy_5_25">
10416            <dataarea name="flop" size="368640">
10417                <rom name="race_ace.dsk" size="368640" crc="af7378e5" sha1="553a0bc4909afd55b59eca95d4a5b1a998590dd5" offset="0" />
10418            </dataarea>
10419        </part>
10420    </software>
10421
10422    <software name="rohammcr" cloneof="rohamm">
10423        <description>Rohamm (Cracked)</description>
10424        <year>1989</year>
10425        <publisher>GATO Bt.</publisher>
10426
10427        <part name="flop1" interface="floppy_5_25">
10428            <dataarea name="flop" size="368640">
10429                <rom name="rohammcracked.dsk" size="368640" crc="5c1b9675" sha1="338864ac3231d73af5a24def9c676c08d49e1b19" offset="0" />
10430            </dataarea>
10431        </part>
10432    </software>
10433
10434    <software name="sajtvajob" cloneof="sajtvajo">
10435        <description>Sajtvájó (Alt 2)</description>
10436        <year>1991</year>
10437        <publisher>STV</publisher>
10438
10439        <part name="flop1" interface="floppy_5_25">
10440            <dataarea name="flop" size="737280">
10441                <rom name="sajtvajo [a].dsk" size="737280" crc="1e73fb64" sha1="83f0953be53663c8cc3881a06a124a5186ac0dcf" offset="0" />
10442            </dataarea>
10443        </part>
10444    </software>
10445
10446    <software name="satirozab" cloneof="satiroza">
10447        <description>Satírozás (Alt 2)</description>
10448        <year>1991</year>
10449        <publisher>STV</publisher>
10450
10451        <part name="flop1" interface="floppy_5_25">
10452            <dataarea name="flop" size="737280">
10453                <rom name="satirozas.dsk" size="737280" crc="23fa33d8" sha1="d3048a2e17254270c2a8ccd28a65a6e936e81539" offset="0" />
10454            </dataarea>
10455        </part>
10456    </software>
10457
10458    <software name="sinuscr">
10459        <description>Sinuscr</description>
10460        <year>198?</year>
10461        <publisher>Peter Rakos</publisher>
10462
10463        <part name="flop1" interface="floppy_5_25">
10464            <dataarea name="flop" size="368640">
10465                <rom name="sinusscr.dsk" size="368640" crc="bb893ca8" sha1="17dc0c5eb70b4718654718cae1be2acd38a1dff7" offset="0" />
10466            </dataarea>
10467        </part>
10468    </software>
10469
10470    <software name="spacesapb" cloneof="spacesap">
10471        <description>Space Sapper (Alt 2)</description>
10472        <year>1987</year>
10473        <publisher>Novotrade</publisher>
10474
10475        <part name="flop1" interface="floppy_5_25">
10476            <dataarea name="flop" size="368640">
10477                <rom name="spacesapperv2.dsk" size="368640" crc="2c0c2b0e" sha1="e9294e4a1b82cc6bc60ced8a27081442ed3e4c62" offset="0" />
10478            </dataarea>
10479        </part>
10480    </software>
10481
10482    <software name="teszt">
10483        <description>Teszt</description>
10484        <year>198?</year>
10485        <publisher>&lt;unknown&gt;</publisher>
10486
10487        <part name="flop1" interface="floppy_5_25">
10488            <dataarea name="flop" size="737280">
10489                <rom name="teszt.dsk" size="737280" crc="31fbc7bb" sha1="cf9521931f5aa45459a64ab8258c4dddd5f9d788" offset="0" />
10490            </dataarea>
10491        </part>
10492    </software>
10493
10494    <software name="turbojaca" cloneof="turbojac">
10495        <description>Turbo Jack (Alt)</description>
10496        <year>1991</year>
10497        <publisher>STV</publisher>
10498
10499        <part name="flop1" interface="floppy_5_25">
10500            <dataarea name="flop" size="737280">
10501                <rom name="turbojack [a].dsk" size="737280" crc="2ea588e9" sha1="acbc0f2d1907406f2a44489124c3a3fe30e851bf" offset="0" />
10502            </dataarea>
10503        </part>
10504    </software>
10505
10506    <software name="ufoa">
10507        <description>UFO (Alt)</description>
10508        <year>1985</year>
10509        <publisher>STV</publisher>
10510
10511        <part name="flop1" interface="floppy_5_25">
10512            <dataarea name="flop" size="737280">
10513                <rom name="ufo [a].dsk" size="737280" crc="941110b4" sha1="453504556562f0ccd00089dcf2c86d67004df053" offset="0" />
10514            </dataarea>
10515        </part>
10516    </software>
10517
10518    <software name="upmleme1">
10519        <description>UPM Lemez 1</description>
10520        <year>198?</year>
10521        <publisher>&lt;unknown&gt;</publisher>
10522
10523        <part name="flop1" interface="floppy_5_25">
10524            <dataarea name="flop" size="737280">
10525                <rom name="upmlemez1.dsk" size="737280" crc="d3698df2" sha1="1b944fff0b41007fc6c482ba28407fb851e3ec16" offset="0" />
10526            </dataarea>
10527        </part>
10528    </software>
10529
10530    <software name="upmleme2">
10531        <description>UPM Lemez 2</description>
10532        <year>198?</year>
10533        <publisher>&lt;unknown&gt;</publisher>
10534
10535        <part name="flop1" interface="floppy_5_25">
10536            <dataarea name="flop" size="737280">
10537                <rom name="upmlemez2.dsk" size="737280" crc="1f51ce73" sha1="3de8a6e44bbd34e0abacd0fcdfb76b6965cc5b5a" offset="0" />
10538            </dataarea>
10539        </part>
10540    </software>
10541
10542    <software name="upmleme3">
10543        <description>UPM Lemez 3</description>
10544        <year>198?</year>
10545        <publisher>&lt;unknown&gt;</publisher>
10546
10547        <part name="flop1" interface="floppy_5_25">
10548            <dataarea name="flop" size="737280">
10549                <rom name="upmlemez3.dsk" size="737280" crc="c8966ad8" sha1="a38ac0cd6eec559cbf4f306f64dd8e4c7cab9c57" offset="0" />
10550            </dataarea>
10551        </part>
10552    </software>
10553
10554    <software name="vidzenea" cloneof="vidzene">
10555        <description>Videoton Zene (Alt)</description>
10556        <year>198?</year>
10557        <publisher>JozsiSoft</publisher>
10558
10559        <part name="flop1" interface="floppy_5_25">
10560            <dataarea name="flop" size="368640">
10561                <rom name="vidizev2.dsk" size="368640" crc="7ef1328a" sha1="99b708e16a8c49b63661a4b44afa30fecb0079dc" offset="0" />
10562            </dataarea>
10563        </part>
10564    </software>
10565
10566    <software name="viliabana" cloneof="viliaban">
10567        <description>Vili a Bányász (Alt)</description>
10568        <year>1991</year>
10569        <publisher>STV</publisher>
10570
10571        <part name="flop1" interface="floppy_5_25">
10572            <dataarea name="flop" size="737280">
10573                <rom name="vili.dsk" size="737280" crc="90b96888" sha1="0a38c2d1704f5cdfdc5f2cb7c60f7035caaa28b4" offset="0" />
10574            </dataarea>
10575        </part>
10576    </software>
10577
10578-->
10579</softwarelist>
trunk/hash/vsmile_cart.xml
r242231r242232
585880-084007(SP)   | Action Mania
5959-
606080-084020(US)   | Dora the Explorer : Dora's Fix It Adventure
6180-084021(US)   | Dora the Explorer : Dora's Fix It Adventure (pocket version)
616280-084022(NL)   | Dora: Dora's Reparatie Avontuur
626380-084023(UK)   | Dora the Explorer : Dora's Fix It Adventure
636480-084024(GE)   | Dora: Doras Reparatur-Abenteuer
r242231r242232
14014180-084307(SP)   | Campeonato de Futbol
141142-
14214380-084320(US)   | Disney Fairies: TinkerBell
14480-084321(US)   | Disney Fairies: TinkerBell (pocket version)
14314580-084322(NL)   | TinkerBell
14414680-084323(UK)   | TinkerBell
14514780-084324(GE)   | TinkerBell
r242231r242232
17918180-084407(SP)   | Cars: Acelera el Motor en Radiador Springs
180182-
18118380-084420(US)   | Toy Story 3
18480-084421(US)   | Toy Story 3 (pocket version)
182185         (IT)   | Toy Story 3 (EAN 8033836704196) GP470419?
18318680-084422(NL)   | Toy Story 3
18418780-084423(UK)   | Toy Story 3
r242231r242232
21621980-084520(US)   | <Unknown>
217220-
21822180-084540(US)   | Super Why to the Rescue! The Beach Day Mystery
21980-084541(US)   | Super Why to the Rescue! The Beach Day Mystery   <- really odd serial# but other 'pocket' games have this also as there is no Italian version
22280-084541(US)   | Super Why to the Rescue! The Beach Day Mystery   (pocket version)
220223-
22122480-084560(US)   | <Unknown>
222225-
22322680-084580(US)   | Cars 2
22780-084581(US)   | Cars 2  (pocket version)
22422880-084583(UK)   | Cars 2
22522980-084584(GE)   | Cars 2
22623080-084585(FR)   | Cars 2
r242231r242232
63864280-099020(US)   | Pooh's Hundred Acre Wood Adventure
63964380-099022(NL)   | Poeh's Honderd Bunderbos Avontuur
64064480-099023(UK)   | Pooh's Hundred Acre Wood Adventure
64580-099025(FR)   | Winnie et ses amis dans la Faret des Reves Bieus
641646-
64264780-099040(US)   | Baby Einstein - World of Discoveries
64364880-099040(US)   | Baby Einstein - World of Discoveries (no # on front label)
r242231r242232
709714      </part>
710715   </software>
711716
717   <software name="alphaprk" supported="no">
718      <description>Alphabet Park Adventure (USA)</description>
719      <year>200?</year>
720      <publisher>VTech</publisher>
721      <part name="cart" interface="vsmile_cart">
722         <dataarea name="rom" size="8388608">
723            <rom name="52-92000.bin" size="8388608" crc="69ef24ff" sha1="82b89bdc5e9050e4152866fc774d3996f9836d65" offset="0" />
724         </dataarea>
725      </part>
726   </software>
727
712728   <software name="ariel" supported="no">
713729      <description>Arielle Die Meerjungfrau - Arielles aufregendes Abenteuer (Ger)</description>
714730      <year>200?</year>
r242231r242232
756772   </software>
757773
758774   <software name="cinderla" supported="no">
775      <description>Cinderella - Cinderella's Magic Wishes (USA)</description>
776      <year>200?</year>
777      <publisher>VTech</publisher>
778      <part name="cart" interface="vsmile_cart">
779         <dataarea name="rom" size="8388608">
780            <rom name="52-92240.bin" size="8388608" crc="2723728c" sha1="32fd6a5b9718ccc7e10e64046d7ac320cfa47362" offset="0" />
781         </dataarea>
782      </part>
783   </software>
784
785   <software name="cinderlag" cloneof="cinderla" supported="no">
759786      <description>Cinderella - Lernen im Märchenland (Ger, Rev. 1)</description>
760787      <year>200?</year>
761788      <publisher>VTech</publisher>
r242231r242232
766793      </part>
767794   </software>
768795
769   <software name="cinderla1" cloneof="cinderla" supported="no">
796   <software name="cinderlag1" cloneof="cinderla" supported="no">
770797      <description>Cinderella - Lernen im Märchenland (Ger, Rev. 0)</description>
771798      <year>200?</year>
772799      <publisher>VTech</publisher>
trunk/src/emu/bus/isa/sc499.c
r242231r242232
1616 */
1717
1818#include "sc499.h"
19#include "formats/ioprocs.h"
1920
2021#define VERBOSE 0
2122
r242231r242232
13071308
13081309bool sc499_ctape_image_device::call_load()
13091310{
1310   if (software_entry() == NULL)
1311   {
1312      m_ctape_data.resize(length());
1313      fread(m_ctape_data, length());
1314   }
1315   else
1316   {
1317      m_ctape_data.resize(get_software_region_length("ctape"));
1318      memcpy(m_ctape_data, get_software_region("ctape"), get_software_region_length("ctape"));
1319   }
1311   UINT32 size;
1312   io_generic io;
1313   io.file = (device_image_interface *)this;
1314   io.procs = &image_ioprocs;
1315   io.filler = 0xff;
13201316
1317   size = io_generic_size(&io);
1318   m_ctape_data.resize(size);
1319
1320   io_generic_read(&io, m_ctape_data, 0, size);
1321
13211322   return IMAGE_INIT_PASS;
13221323}
13231324
trunk/src/emu/bus/isa/sc499.h
r242231r242232
3131   
3232   // image-level overrides
3333   virtual bool call_load();
34//   virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry) { return load_software(swlist, swname, start_entry); }
35   virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry) { printf("%s\n", swname); return load_software(swlist, swname, start_entry); }
34   virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry) { return load_software(swlist, swname, start_entry); }
3635   virtual void call_unload();
3736   virtual iodevice_t image_type() const { return IO_MAGTAPE; }
3837   
trunk/src/emu/bus/psx/memcard.h
r242231r242232
6363   virtual void device_reset();
6464   virtual void device_config_complete();
6565
66   void clock_w(bool state) { if(m_clock && !m_sel && !state && !m_pad) do_card(); m_clock = state; }
66   void clock_w(bool state) { if(!m_clock && !m_sel && state && !m_pad) do_card(); m_clock = state; }
6767   void sel_w(bool state);
6868   bool rx_r() { return m_rx; }
6969   bool ack_r() { return m_ack; }
trunk/src/emu/bus/psx/multitap.c
r242231r242232
7979         dev = m_portd;
8080         break;
8181   }
82   dev->clock_w(0);
83   dev->tx_w(tx);
8284   dev->clock_w(1);
83   dev->tx_w(tx);
84   dev->clock_w(0);
8585}
8686
8787bool psx_multitap_device::get_rx_line(int port)
trunk/src/emu/cpu/alto2/a2disp.h
r242231r242232
7676#define ALTO2_DISPLAY_HEIGHT 808                                                    //!< number of visible scanlines per frame; 808 really, but there are some empty lines?
7777#define ALTO2_DISPLAY_WIDTH 606                                                     //!< visible width of the display; 38 x 16 bit words - 2 pixels
7878#define ALTO2_DISPLAY_VISIBLE_WORDS ((ALTO2_DISPLAY_WIDTH+15)/16)                   //!< visible words per scanline
79#define ALTO2_DISPLAY_BITCLOCK 20160000ll                                           //!< display bit clock in in Hertz (20.16MHz)
80#define ALTO2_DISPLAY_BITTIME(n) (U64(1000000000000)*(n)/ALTO2_DISPLAY_BITCLOCK)    //!< display bit time in in pico seconds (~= 49.6031ns)
79#define ALTO2_DISPLAY_BITCLOCK 20160000ll                                           //!< display bit clock in Hertz (20.16MHz)
80#define ALTO2_DISPLAY_BITTIME(n) (U64(1000000000000)*(n)/ALTO2_DISPLAY_BITCLOCK)    //!< display bit time in pico seconds (~= 49.6031ns)
8181#define ALTO2_DISPLAY_SCANLINE_TIME ALTO2_DISPLAY_BITTIME(ALTO2_DISPLAY_TOTAL_WIDTH)//!< time for a scanline in pico seconds (768 * 49.6031ns ~= 38095.1808ns)
8282#define ALTO2_DISPLAY_VISIBLE_TIME ALTO2_DISPLAY_BITTIME(ALTO2_DISPLAY_WIDTH)       //!< time of the visible part of a scanline in pico seconds (606 * 49.6031ns ~= 30059.4786ns)
8383#define ALTO2_DISPLAY_WORD_TIME ALTO2_DISPLAY_BITTIME(16)                           //!< time for a word in pico seconds (16 pixels * 49.6031ns ~= 793.6496ns)
trunk/src/emu/cpu/alto2/a2ether.c
r242231r242232
416416 * polynomials listed in Tabel I by applying the appropriate logic levels
417417 * to the select pins S0, S1 and S2.
418418 *
419 * Teh 'F401 consists of a 16-bit register, a Read Only Memory (ROM) and
419 * The 'F401 consists of a 16-bit register, a Read Only Memory (ROM) and
420420 * associated control circuitry as shown in the block diagram. The
421421 * polynomial control code presented at inputs S0, S1 and S2 is decoded
422422 * by the ROM, selecting the desired polynomial by establishing shift
trunk/src/emu/cpu/arc/arc.c
r0r242232
1/*********************************\
2
3 ARCtangent (A4) core
4 ARC == Argonaut RISC Core
5
6 (this is a skeleton core)
7
8\*********************************/
9
10#include "emu.h"
11#include "debugger.h"
12#include "arc.h"
13
14
15const device_type ARC = &device_creator<arc_device>;
16
17
18arc_device::arc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
19   : cpu_device(mconfig, ARC, "ARCtangent A4", tag, owner, clock, "arc", __FILE__)
20   , m_program_config("program", ENDIANNESS_BIG, 32, 24, 0) // some docs describe these as 'middle endian'?!
21{
22}
23
24
25offs_t arc_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
26{
27   extern CPU_DISASSEMBLE( arc );
28   return CPU_DISASSEMBLE_NAME(arc)(this, buffer, pc, oprom, opram, options);
29}
30
31
32/*****************************************************************************/
33
34/*****************************************************************************/
35
36void arc_device::unimplemented_opcode(UINT16 op)
37{
38   fatalerror("arc: unknown opcode %04x at %04x\n", op, m_pc << 2);
39}
40
41/*****************************************************************************/
42
43UINT32 arc_device::READ32(UINT32 address)
44{
45   return m_program->read_dword(address << 2);
46}
47
48void arc_device::WRITE32(UINT32 address, UINT32 data)
49{
50   m_program->write_dword(address << 2, data);
51}
52
53/*****************************************************************************/
54
55void arc_device::device_start()
56{
57   m_pc = 0;
58
59   m_debugger_temp = 0;
60
61   m_program = &space(AS_PROGRAM);
62
63   state_add( 0,  "PC", m_debugger_temp).callimport().callexport().formatstr("%08X");
64   state_add(STATE_GENPC, "GENPC", m_debugger_temp).callexport().noshow();
65
66   m_icountptr = &m_icount;
67}
68
69void arc_device::state_export(const device_state_entry &entry)
70{
71   switch (entry.index())
72   {
73      case 0:
74         m_debugger_temp = m_pc << 2;
75         break;
76
77      case STATE_GENPC:
78         m_debugger_temp = m_pc << 2;
79         break;
80   }
81}
82
83void arc_device::state_import(const device_state_entry &entry)
84{
85   switch (entry.index())
86   {
87      case 0:
88         m_pc = (m_debugger_temp & 0xfffffffc) >> 2;
89         break;
90   }
91}
92
93void arc_device::device_reset()
94{
95   m_pc = 0x00000000;
96}
97
98/*****************************************************************************/
99
100void arc_device::execute_set_input(int irqline, int state)
101{
102
103}
104
105
106void arc_device::execute_run()
107{
108   //UINT32 lres;
109   //lres = 0;
110
111   while (m_icount > 0)
112   {
113      debugger_instruction_hook(this, m_pc<<2);
114
115      //UINT32 op = READ32(m_pc);
116
117      m_pc++;
118
119      m_icount--;
120   }
121
122}
trunk/src/emu/cpu/arc/arc.h
r0r242232
1/*********************************\
2
3 ARCtangent (A4) core
4 ARC == Argonaut RISC Core
5
6\*********************************/
7
8#pragma once
9
10#ifndef __ARC_H__
11#define __ARC_H__
12
13class arc_device : public cpu_device
14{
15public:
16   // construction/destruction
17   arc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
18
19protected:
20   // device-level overrides
21   virtual void device_start();
22   virtual void device_reset();
23
24   // device_execute_interface overrides
25   virtual UINT32 execute_min_cycles() const { return 5; }
26   virtual UINT32 execute_max_cycles() const { return 5; }
27   virtual UINT32 execute_input_lines() const { return 0; }
28   virtual void execute_run();
29   virtual void execute_set_input(int inputnum, int state);
30
31   // device_memory_interface overrides
32   virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : NULL; }
33
34   // device_state_interface overrides
35   virtual void state_import(const device_state_entry &entry);
36   virtual void state_export(const device_state_entry &entry);
37
38   // device_disasm_interface overrides
39   virtual UINT32 disasm_min_opcode_bytes() const { return 4; }
40   virtual UINT32 disasm_max_opcode_bytes() const { return 4; }
41   virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
42
43private:
44   address_space_config m_program_config;
45
46   // 0 - 28 = r00 - r28 (General Purpose Registers)
47   //     29 = r29 (ILINK1)
48   //     30 = r30 (ILINE2)
49   //     31 = r31 (BLINK)
50   // 32- 59 = r32 - r59 (Reserved Registers)
51   //     60 = LPCOUNT
52   //     61 = Short Immediate Data Indicator Settings Flag
53   //     62 = Long Immediate Data Indicator
54   //     63 = Short Immediate Data Indicator NOT Settings Flag
55   UINT32 m_pc;
56   //UINT32 m_r[64];
57
58
59   address_space *m_program;
60   int m_icount;
61
62   UINT32 m_debugger_temp;
63
64   void unimplemented_opcode(UINT16 op);
65   inline UINT32 READ32(UINT32 address);
66   inline void WRITE32(UINT32 address, UINT32 data);
67};
68
69
70extern const device_type ARC;
71
72
73#endif /* __ARC_H__ */
trunk/src/emu/cpu/arc/arcdasm.c
r0r242232
1/*********************************\
2
3 ARCtangent A4 disassembler
4
5\*********************************/
6
7#include "emu.h"
8#include <stdarg.h>
9
10static char *output;
11
12static void ATTR_PRINTF(1,2) print(const char *fmt, ...)
13{
14   va_list vl;
15
16   va_start(vl, fmt);
17   vsprintf(output, fmt, vl);
18   va_end(vl);
19}
20
21/*****************************************************************************/
22
23
24
25/*****************************************************************************/
26
27static const char *basic[0x20] =
28{
29   /* 00 */ "LD r+r",
30   /* 01 */ "LD r+o",
31   /* 02 */ "ST r+o",
32   /* 03 */ "extended",
33   /* 04 */ "B",
34   /* 05 */ "BL",
35   /* 06 */ "LPcc",
36   /* 07 */ "Jcc JLcc",
37   /* 08 */ "ADD",
38   /* 09 */ "ADC",
39   /* 0a */ "SUB",
40   /* 0b */ "SBC",
41   /* 0c */ "AND",
42   /* 0d */ "OR",
43   /* 0e */ "BIC",
44   /* 0f */ "XOR",
45   /* 10 */ "ASL",
46   /* 11 */ "LSR",
47   /* 12 */ "ASR",
48   /* 13 */ "ROR",
49   /* 14 */ "MUL64",
50   /* 15 */ "MULU64",
51   /* 16 */ "undefined",
52   /* 17 */ "undefined",
53   /* 18 */ "undefined",
54   /* 19 */ "undefined",
55   /* 1a */ "undefined",
56   /* 1b */ "undefined",
57   /* 1c */ "undefined",
58   /* 1d */ "undefined",
59   /* 1e */ "MAX",
60   /* 1f */ "MIN"
61};
62
63static const char *conditions[0x20] =
64{
65   /* 00 */ "AL", // (aka RA         - Always)
66   /* 01 */ "EQ", // (aka Z          - Zero
67   /* 02 */ "NE", // (aka NZ         - Non-Zero)
68   /* 03 */ "PL", // (aka P          - Positive)
69   /* 04 */ "MI", // (aka N          - Negative)
70   /* 05 */ "CS", // (aka C,  LO     - Carry set / Lower than) (unsigned)
71   /* 06 */ "CC", // (aka CC, NC, HS - Carry Clear / Higher or Same) (unsigned)
72   /* 07 */ "VS", // (aka V          - Overflow set)
73   /* 08 */ "VC", // (aka NV         - Overflow clear)
74   /* 09 */ "GT", // (               - Greater than) (signed)
75   /* 0a */ "GE", // (               - Greater than or Equal) (signed)
76   /* 0b */ "LT", // (               - Less than) (signed)
77   /* 0c */ "LE", // (               - Less than or Equal) (signed)
78   /* 0d */ "HI", // (               - Higher than) (unsigned)
79   /* 0e */ "LS", // (               - Lower or Same) (unsigned)
80   /* 0f */ "PNZ",// (               - Positive non-0 value)
81   /* 10 */ "0x10 Reserved", // possible CPU implementation specifics
82   /* 11 */ "0x11 Reserved",
83   /* 12 */ "0x12 Reserved",
84   /* 13 */ "0x13 Reserved",
85   /* 14 */ "0x14 Reserved",
86   /* 15 */ "0x15 Reserved",
87   /* 16 */ "0x16 Reserved",
88   /* 17 */ "0x17 Reserved",
89   /* 18 */ "0x18 Reserved",
90   /* 19 */ "0x19 Reserved",
91   /* 1a */ "0x1a Reserved",
92   /* 1b */ "0x1b Reserved",
93   /* 1c */ "0x1c Reserved",
94   /* 1d */ "0x1d Reserved",
95   /* 1e */ "0x1e Reserved",
96   /* 1f */ "0x1f Reserved"
97};
98
99static const char *delaytype[0x4] =
100{
101   "ND", // NO DELAY - execute next instruction only when NOT jumping
102   "D",  // always execute next instruction
103   "JD", // only execute next instruction when jumping
104   "Res!", // reserved / invalid
105};
106
107static const char *regnames[0x40] =
108{
109   /* 0x00 */ "r00",
110   /* 0x01 */ "r01",
111   /* 0x02 */ "r02",
112   /* 0x03 */ "r03",
113   /* 0x04 */ "r04",
114   /* 0x05 */ "r05",
115   /* 0x06 */ "r06",
116   /* 0x07 */ "r07",
117   /* 0x08 */ "r08",
118   /* 0x09 */ "r09",
119   /* 0x0a */ "r10",
120   /* 0x0b */ "r11",
121   /* 0x0c */ "r12",
122   /* 0x0d */ "r13",
123   /* 0x0e */ "r14",
124   /* 0x0f */ "r15",
125
126   /* 0x10 */ "r16",
127   /* 0x11 */ "r17",
128   /* 0x12 */ "r18",
129   /* 0x13 */ "r19",
130   /* 0x14 */ "r20",
131   /* 0x15 */ "r21",
132   /* 0x16 */ "r22",
133   /* 0x17 */ "r23",
134   /* 0x18 */ "r24",
135   /* 0x19 */ "r25",
136   /* 0x1a */ "r26",
137   /* 0x1b */ "r27",
138   /* 0x1c */ "r28",
139   /* 0x1d */ "ILINK1",
140   /* 0x1e */ "ILINK2",
141   /* 0x1f */ "BLINK",
142
143   /* 0x20 */ "r32res", // reserved for manufacturer specific extensions
144   /* 0x21 */ "r33res",
145   /* 0x22 */ "r34res",
146   /* 0x23 */ "r35res",
147   /* 0x24 */ "r36res",
148   /* 0x25 */ "r37res",
149   /* 0x26 */ "r38res",
150   /* 0x27 */ "r39res",
151   /* 0x28 */ "r40res",
152   /* 0x29 */ "r41res",
153   /* 0x2a */ "r42res",
154   /* 0x2b */ "r43res",
155   /* 0x2c */ "r44res",
156   /* 0x2d */ "r45res",
157   /* 0x2e */ "r46res",
158   /* 0x2f */ "r47res",
159
160   /* 0x30 */ "r48res",
161   /* 0x31 */ "r49res",
162   /* 0x32 */ "r50res",
163   /* 0x33 */ "r51res",
164   /* 0x34 */ "r52res",
165   /* 0x35 */ "r53res",
166   /* 0x36 */ "r54res",
167   /* 0x37 */ "r55res",
168   /* 0x38 */ "r56res",
169   /* 0x39 */ "r57res",
170   /* 0x3a */ "r58res",
171   /* 0x3b */ "r59res",
172   /* 0x3c */ "LPCOUNT",
173   /* 0x3d */ "sImm F",
174   /* 0x3e */ "lImm",
175   /* 0x3f */ "sImm NF",
176};
177
178#define ARC_CONDITION ((op & 0x0000001f) >> 0 ) // aka Q
179
180// used in jumps
181#define ARC_BRANCH_DELAY     ((op & 0x00000060) >> 5 ) // aka N
182#define ARC_BRANCH_ADDR      ((op & 0x07ffff80) >> 7 ) // aka L
183
184#define ARC_OPERATION ((op & 0xf8000000) >> 27)
185
186#define ARC_REGOP_DEST      ((op & 0x07e00000) >> 21 ) // aka A
187#define ARC_REGOP_OP1       ((op & 0x001f8000) >> 15 ) // aka B
188#define ARC_REGOP_OP2       ((op & 0x00007e00) >> 9  ) // aka C
189#define ARC_REGOP_SHIMM     ((op & 0x000001ff) >> 0  ) // aka D
190
191
192CPU_DISASSEMBLE(arc)
193{
194   UINT32 op = oprom[0] | (oprom[1] << 8) | (oprom[2] << 16) | (oprom[3] << 24);
195   op = BIG_ENDIANIZE_INT32(op);
196
197   output = buffer;
198
199   UINT8 opcode = ARC_OPERATION;
200
201   switch (opcode)
202   {
203      case 0x04: // B
204      case 0x05: // BL
205      print("%s(%s)(%s) %08x", basic[opcode], conditions[ARC_CONDITION], delaytype[ARC_BRANCH_DELAY], (ARC_BRANCH_ADDR<<2)+pc+4);
206      break;
207   
208      case 0x08: // ADD
209      // todo, short / long immediate formats
210      print("%s %s , %s , %s (%08x)", basic[opcode], regnames[ARC_REGOP_DEST], regnames[ARC_REGOP_OP1], regnames[ARC_REGOP_OP2], op &~ 0xfffffe00);
211      break;
212
213
214      default:
215      print("%s (%08x)", basic[opcode], op &~ 0xf8000000);
216      break;
217   }
218
219
220
221   return 4 | DASMFLAG_SUPPORTED;
222}
trunk/src/emu/cpu/arcompact/arcompact.c
r0r242232
1/*********************************\
2
3 ARCompact Core
4
5 The following procesors use the ARCompact instruction set
6
7  - ARCtangent-A5
8  - ARC 600
9  - ARC 700
10
11 (this is a skeleton core)
12
13 ARCompact is a 32-bit CPU that freely mixes 32-bit and 16-bit instructions
14 various user customizations could be made as with the ARC A4 based processors
15 these include custom instructions and registers.
16
17\*********************************/
18
19#include "emu.h"
20#include "debugger.h"
21#include "arcompact.h"
22
23
24const device_type ARCA5 = &device_creator<arcompact_device>;
25
26
27arcompact_device::arcompact_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
28   : cpu_device(mconfig, ARCA5, "ARCtangent-A5", tag, owner, clock, "arca5", __FILE__)
29   , m_program_config("program", ENDIANNESS_LITTLE, 32, 32, 0) // some docs describe these as 'middle endian'?!
30{
31}
32
33
34offs_t arcompact_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
35{
36   extern CPU_DISASSEMBLE( arcompact );
37   return CPU_DISASSEMBLE_NAME(arcompact)(this, buffer, pc, oprom, opram, options);
38}
39
40
41/*****************************************************************************/
42
43/*****************************************************************************/
44
45void arcompact_device::unimplemented_opcode(UINT16 op)
46{
47   fatalerror("ARCOMPACT: unknown opcode %04x at %04x\n", op, m_pc << 2);
48}
49
50/*****************************************************************************/
51
52UINT32 arcompact_device::READ32(UINT32 address)
53{
54   return m_program->read_dword(address << 2);
55}
56
57void arcompact_device::WRITE32(UINT32 address, UINT32 data)
58{
59   m_program->write_dword(address << 2, data);
60}
61
62UINT16 arcompact_device::READ16(UINT32 address)
63{
64   return m_program->read_word(address << 1);
65}
66
67void arcompact_device::WRITE16(UINT32 address, UINT16 data)
68{
69   m_program->write_word(address << 1, data);
70}
71
72
73/*****************************************************************************/
74
75void arcompact_device::device_start()
76{
77   m_pc = 0;
78
79   m_debugger_temp = 0;
80
81   m_program = &space(AS_PROGRAM);
82
83   state_add( 0,  "PC", m_debugger_temp).callimport().callexport().formatstr("%08X");
84   state_add(STATE_GENPC, "GENPC", m_debugger_temp).callexport().noshow();
85
86   m_icountptr = &m_icount;
87}
88
89void arcompact_device::state_export(const device_state_entry &entry)
90{
91   switch (entry.index())
92   {
93      case 0:
94         m_debugger_temp = m_pc << 1;
95         break;
96
97      case STATE_GENPC:
98         m_debugger_temp = m_pc << 1;
99         break;
100   }
101}
102
103void arcompact_device::state_import(const device_state_entry &entry)
104{
105   switch (entry.index())
106   {
107      case 0:
108         m_pc = (m_debugger_temp & 0xfffffffe) >> 1;
109         break;
110   }
111}
112
113void arcompact_device::device_reset()
114{
115   m_pc = 0x00000000;
116}
117
118/*****************************************************************************/
119
120void arcompact_device::execute_set_input(int irqline, int state)
121{
122
123}
124
125
126void arcompact_device::execute_run()
127{
128   //UINT32 lres;
129   //lres = 0;
130
131   while (m_icount > 0)
132   {
133      debugger_instruction_hook(this, m_pc<<2);
134
135      //UINT32 op = READ32(m_pc);
136
137
138      m_pc++;
139
140      m_icount--;
141   }
142
143}
trunk/src/emu/cpu/arcompact/arcompact.h
r0r242232
1/*********************************\
2
3 ARCompact Core
4
5\*********************************/
6
7#pragma once
8
9#ifndef __ARCOMPACT_H__
10#define __ARCOMPACT_H__
11
12class arcompact_device : public cpu_device
13{
14public:
15   // construction/destruction
16   arcompact_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
17
18protected:
19   // device-level overrides
20   virtual void device_start();
21   virtual void device_reset();
22
23   // device_execute_interface overrides
24   virtual UINT32 execute_min_cycles() const { return 5; }
25   virtual UINT32 execute_max_cycles() const { return 5; }
26   virtual UINT32 execute_input_lines() const { return 0; }
27   virtual void execute_run();
28   virtual void execute_set_input(int inputnum, int state);
29
30   // device_memory_interface overrides
31   virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : NULL; }
32
33   // device_state_interface overrides
34   virtual void state_import(const device_state_entry &entry);
35   virtual void state_export(const device_state_entry &entry);
36
37   // device_disasm_interface overrides
38   virtual UINT32 disasm_min_opcode_bytes() const { return 2; }
39   virtual UINT32 disasm_max_opcode_bytes() const { return 4; }
40   virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
41
42private:
43   address_space_config m_program_config;
44
45   UINT32 m_pc;
46
47   address_space *m_program;
48   int m_icount;
49
50   UINT32 m_debugger_temp;
51
52   void unimplemented_opcode(UINT16 op);
53   inline UINT32 READ32(UINT32 address);
54   inline void WRITE32(UINT32 address, UINT32 data);
55   inline UINT16 READ16(UINT32 address);
56   inline void WRITE16(UINT32 address, UINT16 data);
57
58
59};
60
61
62extern const device_type ARCA5;
63
64
65#endif /* __ARCOMPACT_H__ */
trunk/src/emu/cpu/arcompact/arcompactdasm.c
r0r242232
1/*********************************\
2
3 ARCompact disassembler
4
5\*********************************/
6
7#include "emu.h"
8#include <stdarg.h>
9
10static char *output;
11
12static void ATTR_PRINTF(1,2) print(const char *fmt, ...)
13{
14   va_list vl;
15
16   va_start(vl, fmt);
17   vsprintf(output, fmt, vl);
18   va_end(vl);
19}
20
21/*****************************************************************************/
22
23
24
25/*****************************************************************************/
26
27
28static const char *basic[0x20] =
29{
30   /* opcode below are 32-bit mode */
31   /* 00 */ "Bcc",
32   /* 01 */ "BLcc/BRcc",
33   /* 02 */ "LD r+o",
34   /* 03 */ "ST r+o",
35   /* 04 */ "op a,b,c (basecase)", // basecase ops
36   /* 05 */ "op a,b,c (05 ARC ext)", // ARC processor specific extensions
37   /* 06 */ "op a,b,c (06 ARC ext)",
38   /* 07 */ "op a,b,c (07 User ext)", // User speciifc extensions
39   /* 08 */ "op a,b,c (08 User ext)",
40   /* 09 */ "op a,b,c (09 Market ext)", // Market specific extensions
41   /* 0a */ "op a,b,c (0a Market ext)",
42   /* 0b */ "op a,b,c (0b Market ext)",
43   /* opcodes below are 16-bit mode */
44   /* 0c */ "Load/Add reg-reg",
45   /* 0d */ "Add/Sub/Shft imm",
46   /* 0e */ "Mov/Cmp/Add",
47   /* 0f */ "op_S b,b,c", // single ops
48   /* 10 */ "LD_S",
49   /* 11 */ "LDB_S",
50   /* 12 */ "LDW_S",
51   /* 13 */ "LSW_S.X",
52   /* 14 */ "ST_S",
53   /* 15 */ "STB_S",
54   /* 16 */ "STW_S",
55   /* 17 */ "Shift/Sub/Bit",
56   /* 18 */ "Stack Instr",
57   /* 19 */ "GP Instr",
58   /* 1a */ "PCL Instr",
59   /* 1b */ "MOV_S",
60   /* 1c */ "ADD_S/CMP_S",
61   /* 1d */ "BRcc_S",
62   /* 1e */ "Bcc_S",
63   /* 1f */ "BL_S"
64};
65
66// condition codes (basic ones are the same as arc
67static const char *conditions[0x20] =
68{
69   /* 00 */ "AL", // (aka RA         - Always)
70   /* 01 */ "EQ", // (aka Z          - Zero
71   /* 02 */ "NE", // (aka NZ         - Non-Zero)
72   /* 03 */ "PL", // (aka P          - Positive)
73   /* 04 */ "MI", // (aka N          - Negative)
74   /* 05 */ "CS", // (aka C,  LO     - Carry set / Lower than) (unsigned)
75   /* 06 */ "CC", // (aka CC, NC, HS - Carry Clear / Higher or Same) (unsigned)
76   /* 07 */ "VS", // (aka V          - Overflow set)
77   /* 08 */ "VC", // (aka NV         - Overflow clear)
78   /* 09 */ "GT", // (               - Greater than) (signed)
79   /* 0a */ "GE", // (               - Greater than or Equal) (signed)
80   /* 0b */ "LT", // (               - Less than) (signed)
81   /* 0c */ "LE", // (               - Less than or Equal) (signed)
82   /* 0d */ "HI", // (               - Higher than) (unsigned)
83   /* 0e */ "LS", // (               - Lower or Same) (unsigned)
84   /* 0f */ "PNZ",// (               - Positive non-0 value)
85   /* 10 */ "0x10 Reserved", // possible CPU implementation specifics
86   /* 11 */ "0x11 Reserved",
87   /* 12 */ "0x12 Reserved",
88   /* 13 */ "0x13 Reserved",
89   /* 14 */ "0x14 Reserved",
90   /* 15 */ "0x15 Reserved",
91   /* 16 */ "0x16 Reserved",
92   /* 17 */ "0x17 Reserved",
93   /* 18 */ "0x18 Reserved",
94   /* 19 */ "0x19 Reserved",
95   /* 1a */ "0x1a Reserved",
96   /* 1b */ "0x1b Reserved",
97   /* 1c */ "0x1c Reserved",
98   /* 1d */ "0x1d Reserved",
99   /* 1e */ "0x1e Reserved",
100   /* 1f */ "0x1f Reserved"
101};
102
103static const char *table01_01_0x[0x10] =
104{
105   /* 00 */ "BREQ",
106   /* 01 */ "BRNE",
107   /* 02 */ "BRLT",
108   /* 03 */ "BRGE",
109   /* 04 */ "BRLO",
110   /* 05 */ "BRHS",
111   /* 06 */ "<reserved>",
112   /* 07 */ "<reserved>",
113   /* 08 */ "<reserved>",
114   /* 09 */ "<reserved>",
115   /* 0a */ "<reserved>",
116   /* 0b */ "<reserved>",
117   /* 0c */ "<reserved>",
118   /* 0d */ "<reserved>",
119   /* 0e */ "<BBIT0>",
120   /* 0f */ "<BBIT1>"
121};
122
123static const char *table18[0x8] =
124{
125   /* 00 */ "LD_S (SP)",
126   /* 01 */ "LDB_S (SP)",
127   /* 02 */ "ST_S (SP)",
128   /* 03 */ "STB_S (SP)",
129   /* 04 */ "ADD_S (SP)",
130   /* 05 */ "ADD_S/SUB_S (SP)",
131   /* 06 */ "POP_S (SP)",
132   /* 07 */ "PUSH_S (SP)",
133
134};
135
136static const char *table0f[0x20] =
137{
138   /* 00 */ "SOPs", // Sub Operation (another table..) ( table0f_00 )
139   /* 01 */ "0x01 <illegal>",
140   /* 02 */ "SUB_S",
141   /* 03 */ "0x03 <illegal>",
142   /* 04 */ "AND_S",
143   /* 05 */ "OR_S",
144   /* 06 */ "BIC_S",
145   /* 07 */ "XOR_S",
146   /* 08 */ "0x08 <illegal>",
147   /* 09 */ "0x09 <illegal>",
148   /* 0a */ "0x0a <illegal>",
149   /* 0b */ "TST_S",
150   /* 0c */ "MUL64_S",
151   /* 0d */ "SEXB_S",
152   /* 0e */ "SEXW_S",
153   /* 0f */ "EXTB_S",
154   /* 10 */ "EXTW_S",
155   /* 11 */ "ABS_S",
156   /* 12 */ "NOT_S",
157   /* 13 */ "NEG_S",
158   /* 14 */ "ADD1_S",
159   /* 15 */ "ADD2_S>",
160   /* 16 */ "ADD3_S",
161   /* 17 */ "0x17 <illegal>",
162   /* 18 */ "ASL_S (multiple)",
163   /* 19 */ "LSR_S (multiple)",
164   /* 1a */ "ASR_S (multiple)",
165   /* 1b */ "ASL_S (single)",
166   /* 1c */ "LSR_S (single)",
167   /* 1d */ "ASR_S (single)",
168   /* 1e */ "TRAP (not a5?)",
169   /* 1f */ "BRK_S" // 0x7fff only?
170};
171
172static const char *table0f_00[0x8] =
173{
174   /* 00 */ "J_S",
175   /* 01 */ "J_S.D",
176   /* 02 */ "JL_S",
177   /* 03 */ "JL_S.D",
178   /* 04 */ "0x04 <illegal>",
179   /* 05 */ "0x05 <illegal>",
180   /* 06 */ "SUB_S.NE",
181   /* 07 */ "ZOPs", // Sub Operations (yet another table..) ( table0f_00_07 )
182};
183
184static const char *table0f_00_07[0x8] =
185{
186   /* 00 */ "NOP_S",
187   /* 01 */ "UNIMP_S", // unimplemented (not a5?)
188   /* 02 */ "0x02 <illegal>",
189   /* 03 */ "0x03 <illegal>",
190   /* 04 */ "JEQ_S [BLINK]",
191   /* 05 */ "JNE_S [BLINK]",
192   /* 06 */ "J_S [BLINK]",
193   /* 07 */ "J_S.D [BLINK]",
194};
195
196#define ARCOMPACT_OPERATION ((op & 0xf800) >> 11)
197
198CPU_DISASSEMBLE(arcompact)
199{
200   int size = 2;
201
202   UINT32 op = oprom[2] | (oprom[3] << 8);
203   output = buffer;
204
205   UINT8 instruction = ARCOMPACT_OPERATION;
206
207   if (instruction < 0x0c)
208   {
209      size = 4;
210      op <<= 16;
211      op |= oprom[0] | (oprom[1] << 8);
212
213      switch (instruction)
214      {
215         case 0x00:
216            if (op & 0x00010000)
217            { // Branch Unconditionally Far
218              // 00000 ssssssssss 1  SSSSSSSSSS N R TTTT
219               INT32 address =   (op & 0x07fe0000) >> 17;
220               address |=        ((op & 0x0000ffc0) >> 6) << 10;
221               address |=        ((op & 0x0000000f) >> 0) << 20;
222               if (address & 0x800000) address = -(address&0x7fffff);   
223
224               print("B %08x (%08x)",  pc + (address *2) + 2, op & ~0xffffffcf );
225            }
226            else
227            { // Branch Conditionally
228              // 00000 ssssssssss 0 SSSSSSSSSS N QQQQQ
229               INT32 address =   (op & 0x07fe0000) >> 17;
230               address |=        ((op & 0x0000ffc0) >> 6) << 10;
231               if (address & 0x800000) address = -(address&0x7fffff);   
232
233               UINT8 condition = op & 0x0000001f;
234
235               print("B(%s) %08x (%08x)", conditions[condition], pc + (address *2) + 2, op & ~0xffffffdf );
236
237            }
238
239            break;
240
241         case 0x01:
242            if (op & 0x00010000)
243            {
244               if (op & 0x00000010)
245               { // Branch on Compare / Bit Test - Register-Immediate
246                  // 00001 bbb sssssss 1 S BBB UUUUUU N 1 iiii
247                  UINT8 subinstr = op & 0x0000000f;
248                  INT32 address =    (op & 0x00fe0000) >> 17;
249                  address |=        ((op & 0x00008000) >> 15) << 7;
250                  if (address & 0x80) address = -(address&0x7f);   
251
252                 
253                  print("%s (reg-imm) %08x (%08x)", table01_01_0x[subinstr], pc + (address *2) + 4, op & ~0xf8fe800f);
254
255
256               }
257               else
258               {
259                  // Branch on Compare / Bit Test - Register-Register
260                  // 00001 bbb sssssss 1 S BBB CCCCCC N 0 iiii
261                  UINT8 subinstr = op & 0x0000000f;
262                  INT32 address =    (op & 0x00fe0000) >> 17;
263                  address |=        ((op & 0x00008000) >> 15) << 7;
264                  if (address & 0x80) address = -(address&0x7f);   
265
266                  print("%s (reg-reg) %08x (%08x)", table01_01_0x[subinstr], pc + (address *2) + 4, op & ~0xf8fe800f);
267
268               }
269
270            }
271            else
272            {
273               if (op & 0x00020000)
274               { // Branch and Link Unconditionally Far
275                 // 00001 sssssssss 10  SSSSSSSSSS N R TTTT
276                  INT32 address =   (op & 0x07fc0000) >> 17;
277                  address |=        ((op & 0x0000ffc0) >> 6) << 10;
278                  address |=        ((op & 0x0000000f) >> 0) << 20;
279                  if (address & 0x800000) address = -(address&0x7fffff);   
280
281                  print("BL %08x (%08x)",  pc + (address *2) + 2, op & ~0xffffffcf );
282               }
283               else
284               { // Branch and Link Conditionally
285                 // 00001 sssssssss 00 SSSSSSSSSS N QQQQQ
286                  INT32 address =   (op & 0x07fc0000) >> 17;
287                  address |=        ((op & 0x0000ffc0) >> 6) << 10;
288                  if (address & 0x800000) address = -(address&0x7fffff);   
289
290                  UINT8 condition = op & 0x0000001f;
291
292                  print("BL(%s) %08x (%08x)", conditions[condition], pc + (address *2) + 2, op & ~0xffffffdf );
293
294               }
295
296            }
297            break;
298
299         default:
300            print("%s (%08x)", basic[instruction], op & ~0xf8000000 );
301            break;
302
303      }
304
305     
306   }
307   else
308   {   
309      size = 2;
310
311      switch (instruction)
312      {
313         case 0x0f:
314         {
315            // General Register Instructions (16-bit)
316            // 01111 bbb ccc iiiii
317            UINT8 subinstr = (op & 0x01f) >> 0;
318            //print("%s (%04x)", table0f[subinstr], op & ~0xf81f);
319
320#if 1         
321            switch (subinstr)
322            {
323   
324               default:
325                  print("%s (%04x)", table0f[subinstr], op & ~0xf81f);
326                  break;
327
328               case 0x00:
329               {
330                  // General Operations w/ Register
331                  // 01111 bbb iii 00000
332                  UINT8 subinstr2 = (op & 0x00e0) >> 5;
333
334                  switch (subinstr2)
335                  {
336                     default:
337                        print("%s (%04x)", table0f_00[subinstr2], op & ~0xf8ff);
338                        break;
339
340                     case 0x7:
341                     {
342                        // General Operations w/o Register
343                        // 01111 iii 111 00000
344                        UINT8 subinstr3 = (op & 0x0700) >> 8;
345
346                        print("%s (%04x)", table0f_00_07[subinstr3], op & ~0xffff);
347
348                        break;
349                     }
350                  }
351               }
352            }
353#endif           
354         
355            break;
356
357         }
358
359
360         case 0x18:
361         {
362            // Stack Pointer Based Instructions (16-bit)
363            // 11000 bbb iii uuuuu
364            UINT8 subinstr = (op & 0x00e0) >> 5;
365            print("%s (%04x)", table18[subinstr], op & ~0xf8e0);
366            break;
367
368         }
369
370         default:
371            print("%s (%04x)", basic[instruction], op & ~0xf800);
372            break;
373      }
374   }
375
376
377   return size | DASMFLAG_SUPPORTED;
378}
trunk/src/emu/cpu/cpu.mak
r242231r242232
7979
8080$(CPUOBJ)/8x300/8x300.o:    $(CPUSRC)/8x300/8x300.c \
8181                     $(CPUSRC)/8x300/8x300.h
82#-------------------------------------------------
83# ARCangent A4
84#@src/emu/cpu/arc/arc.h,CPUS += ARC
85#-------------------------------------------------
8286
87ifneq ($(filter ARC,$(CPUS)),)
88OBJDIRS += $(CPUOBJ)/arc
89CPUOBJS += $(CPUOBJ)/arc/arc.o
90DASMOBJS += $(CPUOBJ)/arc/arcdasm.o
91endif
92
93$(CPUOBJ)/arc/arc.o:  $(CPUSRC)/arc/arc.c \
94         $(CPUSRC)/arc/arc.h
95
8396#-------------------------------------------------
97# ARcompact (ARCtangent-A5, ARC 600, ARC 700)
98#@src/emu/cpu/arc/arc.h,CPUS += ARCOMPACT
99#-------------------------------------------------
100
101ifneq ($(filter ARCOMPACT,$(CPUS)),)
102OBJDIRS += $(CPUOBJ)/arcompact
103CPUOBJS += $(CPUOBJ)/arcompact/arcompact.o
104DASMOBJS += $(CPUOBJ)/arcompact/arcompactdasm.o
105endif
106
107$(CPUOBJ)/arcompact/arcompact.o:  $(CPUSRC)/arcompact/arcompact.c \
108         $(CPUSRC)/arcompact/arcompact.h
109
110#-------------------------------------------------
84111# Acorn ARM series
85112#
86113#@src/emu/cpu/arm/arm.h,CPUS += ARM
trunk/src/emu/cpu/i86/i86.c
r242231r242232
178178         }
179179      }
180180
181      debugger_instruction_hook( this, pc() );
181      if (!m_seg_prefix)
182      {
183         debugger_instruction_hook( this, pc() );
184      }
182185
183186      UINT8 op = fetch_op();
184187
trunk/src/emu/cpu/pps4/pps4.c
r242231r242232
11// license:BSD-3-Clause
2// copyright-holders:Miodrag Milanovic
2// copyright-holders:Juergen Buchmueller <pullmoll@t-online.de>
3
34/*****************************************************************************
45 *
56 *   pps4.c
r242231r242232
2627 *
2728 *   Note: External clock should be divided by 18 (not implemented).
2829 *
30 *   Pinouts:
31 *              10660                               11660
32 *
33 *      +--------\  /--------+              +--------\  /--------+
34 *  1  [| DIB-3   ++  DIA-3  |]  42     1  [| DIO-4       DIO-3  |]  42
35 *  2 [-| DIA-2       DIB-4  |-] 41     2 [-| DIA-4       DIO-2  |-] 41
36 *  3  [| DIB-2       DIA-4  |]  40     3  [| DIA-3       DIO-1  |]  40
37 *  4 [-| DIA-1       NC     |-] 39     4 [-| DIA-2       Vdd    |-] 39
38 *  5  [| DIB-1       A/B-1  |]  38     5  [| DIA-1       A/B-1  |]  38
39 *  6 [-| Vdd         A/B-2  |-] 37     6 [-| I/O-5       A/B-2  |-] 37
40 *  7  [| I/D-5       A/B-3  |]  36     7  [| I/O-6       A/B-3  |]  36
41 *  8 [-| I/D-6       A/B-4  |-] 35     8 [-| I/O-7       A/B-4  |-] 35
42 *  9  [| I/D-7       A/B-5  |]  34     9  [| I/O-8       A/B-5  |]  34
43 * 10 [-| I/D-8       A/B-6  |-] 33    10 [-| I/O-1       A/B-6  |-] 33
44 * 11  [| I/D-1       A/B-7  |]  32    11  [| I/O-4       A/B-7  |]  32
45 * 12 [-| I/D-4       A/B-8  |-] 31    12 [-| I/O-2       A/B-8  |-] 31
46 * 13  [| I/D-2       A/B-9  |]  30    13  [| I/O-3       A/B-9  |]  30
47 * 14 [-| I/D-3       A/B-10 |-] 29    14 [-| W/IO        A/B-10 |-] 29
48 * 15  [| W/IO        A/B-11 |]  28    15  [| CLK ~B      A/B-11 |]  28
49 * 16 [-| CLK ~B      A/B-12 |-] 27    16 [-| CLK A       A/B-12 |-] 27
50 * 17  [| CLK A       NC     |]  26    17  [| VCLK        DO-4   |]  26
51 * 18 [-| PO          DO-3   |-] 25    18 [-| Xtal1       DO-3   |-] 25
52 * 19  [| SPO         DO-4   |]  24    19  [| Xtal2       DO-2   |]  24
53 * 20 [-| DO-2        NC     |-] 23    20 [-| Vss         DO-1   |-] 23
54 * 21  [| DO-1        Vss    |]  22    21  [| SPO         TC1-14 |]  22
55 *      +--------------------+              +--------------------+
56 *
2957 *****************************************************************************/
3058#include "emu.h"
3159#include "debugger.h"
3260#include "pps4.h"
3361
34#define VERBOSE 0
3562
36#define LOG(x) do { if (VERBOSE) logerror x; } while (0)
63#define VERBOSE 0       //!< set to 1 to log certain instruction conditions
3764
65#if VERBOSE
66#define LOG(x) logerror x
67#else
68#define LOG(x)
69#endif
3870
3971const device_type PPS4 = &device_creator<pps4_device>;
4072
41
4273pps4_device::pps4_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
43   : cpu_device(mconfig, PPS4, "PPS4", tag, owner, clock, "pps4", __FILE__ )
44   , m_program_config("program", ENDIANNESS_LITTLE, 8, 12)
45   , m_data_config("data", ENDIANNESS_LITTLE, 8, 12)  // 4bit RAM
46   , m_io_config("io", ENDIANNESS_LITTLE, 8, 8)  // 4bit IO
74    : cpu_device(mconfig, PPS4, "PPS4", tag, owner, clock, "pps4", __FILE__ )
75    , m_program_config("program", ENDIANNESS_LITTLE, 8, 12)
76    , m_data_config("data", ENDIANNESS_LITTLE, 8, 12)  // 4bit RAM
77    , m_io_config("io", ENDIANNESS_LITTLE, 8, 8)  // 4bit IO
4778{
4879}
4980
81/**
82 * @brief pps4_device::M Return the memory at address B
83 * @return ROM/RAM(B)
84 */
85UINT8 pps4_device::M()
86{
87    UINT8 ret = m_data->read_byte(m_B & ~m_SAG);
88    m_SAG = 0;
89    return ret;
90}
5091
92
93/**
94 * @brief pps4_device::W Write to the memory address at B
95 * @return ROM/RAM(B)
96 */
97void pps4_device::W(UINT8 data)
98{
99    m_data->write_byte(m_B & ~m_SAG, data);
100    m_SAG = 0;
101}
102
51103offs_t pps4_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
52104{
53   extern CPU_DISASSEMBLE( pps4 );
54   return CPU_DISASSEMBLE_NAME(pps4)(this, buffer, pc, oprom, opram, options);
105    extern CPU_DISASSEMBLE( pps4 );
106    return CPU_DISASSEMBLE_NAME(pps4)(this, buffer, pc, oprom, opram, options);
55107}
56108
57
109/**
110 * @brief pps4_device::ROP Read the next opcode (instruction)
111 * The previous opcode mask (upper four bits) is set from the
112 * previous instruction. The new opcode is fetched and the
113 * program counter is incremented. The icount is decremented.
114 * @return m_I the next opcode
115 */
58116inline UINT8 pps4_device::ROP()
59117{
60   UINT8 retVal = m_direct->read_decrypted_byte(m_P.w.l);
61   m_P.w.l = (m_P.w.l + 1) & 0x0fff;
62   return retVal;
118    m_Ip = m_I & 0xf0;      // set previous opcode mask
119    m_I = m_direct->read_decrypted_byte(m_P & 0xFFF);
120    m_P = (m_P + 1) & 0xFFF;
121    m_icount -= 1;
122    return m_I;
63123}
64124
125/**
126 * @brief pps4_device::ARG Read the next argument (instruction 2)
127 * The byte at program counter is read from the unencrypted
128 * direct space. The program count is incremented and the
129 * icount is decremented.
130 * @return m_I2 the next argument
131 */
65132inline UINT8 pps4_device::ARG()
66133{
67   UINT8 retVal = m_direct->read_raw_byte(m_P.w.l);
68   m_P.w.l = (m_P.w.l + 1) & 0x0fff;
69   return retVal;
134    m_I2 = m_direct->read_raw_byte(m_P & 0xFFF);
135    m_P = (m_P + 1) & 0xFFF;
136    m_icount -= 1;
137    return m_I2;
70138}
71139
72inline void pps4_device::DO_SKIP()
140/**
141 * @brief Note3
142 *
143 * Instructions ADI, LD, EX, EXD, LDI, LB and LBL have a numeric
144 * value coded as part of the instruction in the immediate field.
145 * This numeric value must be in complementary form on the bus.
146 * All of these immediate fields which are inverted are shown
147 * in brackets.
148 * For example: ADI 1, as written by the programmer who wishes
149 * to add one to the value in the accumulator, is converted to
150 * 0x6E = 01001 [1110]; the bracketed binary value is the value
151 * as seen on the data bus.
152 * If the programmer is using the Rockwell Assembler he does not
153 * have to manually determine the proper inverted value as the
154 * assembler does this for him.
155 *
156 * [And we do in MAME as well :-]
157 */
158
159/**
160 * @brief pps4_device::iAD Add
161 * OPCODE     cycles  mnemonic
162 * -----------------------------
163 * 0000 1011  1 cyc   AD
164 *
165 * Symbolic equation
166 * -----------------------------
167 * C, A <- A + M
168 *
169 * The result of the binary addition of contents of accumulator
170 * and 4-bit contents of RAM currently addressed by B register,
171 * replaces the contents of the accumulator. The resulting
172 * carry-out is loaded into C flip-flop.
173 */
174void pps4_device::iAD()
73175{
74   m_P.w.l = (m_P.w.l + 1) & 0x0fff;
176    m_A = m_A + M();
177    m_C = (m_A >> 4) & 1;
178    m_A = m_A & 15;
75179}
76180
77void pps4_device::execute_one(int opcode)
181/**
182 * @brief pps4_device::iADC Add with carry-in
183 * OPCODE     cycles  mnemonic
184 * -----------------------------
185 * 0000 1010  1 cyc   ADC
186 *
187 * Symbolic equation
188 * -----------------------------
189 * C, A <- A + M + C
190 *
191 * Same as AD except the C flip-flop serves as a carry-in
192 * to the adder.
193 */
194void pps4_device::iADC()
78195{
79   m_icount -= 1;
80   switch (opcode)
81   {
82      // Arithmetic instructions
83      case 0x0b:  // AD
84               break;
85      case 0x0a:  // ADC
86               break;
87      case 0x09:  // ADSK
88               break;
89      case 0x08:  // ADCSK
90               break;
91      case 0x60:  case 0x61:  case 0x62:  case 0x63:
92      case 0x64:  case 0x66:  case 0x67:  case 0x68:
93      case 0x69:  case 0x6a:  case 0x6b:  case 0x6c:
94      case 0x6d:  case 0x6e:
95               // ADI
96               break;
97      case 0x65:  //DC
98               m_A = (m_A + 10) & 0x0f;
99               break;
100      // Logical instructions
101      case 0x0d:  // AND
102               break;
103      case 0x0f:  // OR
104               break;
105      case 0x0c:  // EOR
106               break;
107      case 0x0e:  // COMP
108               m_A ^= 0x0f;
109               break;
110      // Data transfer instructions
111      case 0x20:  // SC
112               m_C = 1;
113               break;
114      case 0x24:  //RC
115               m_C = 0;
116               break;
117      case 0x22:  // SF1
118               m_FF1 = 1;
119               break;
120      case 0x26:  // RF1
121               m_FF1 = 0;
122               break;
123      case 0x21:  // SF2
124               m_FF2 = 1;
125               break;
126      case 0x25:  // RF2
127               m_FF2 = 0;
128               break;
129      case 0x30:  case 0x31:  case 0x32:  case 0x33:
130      case 0x34:  case 0x35:  case 0x36:  case 0x37:
131               // LD
132               break;
133      case 0x38:  case 0x39:  case 0x3a:  case 0x3b:
134      case 0x3c:  case 0x3d:  case 0x3e:  case 0x3f:
135               // EX
136               break;
137      case 0x28:  case 0x29:  case 0x2a:  case 0x2b:
138      case 0x2c:  case 0x2d:  case 0x2e:  case 0x2f:
139               // EXD
140               break;
141      case 0x70:  case 0x71:  case 0x72:  case 0x73:
142      case 0x74:  case 0x75:  case 0x76:  case 0x77:
143      case 0x78:  case 0x79:  case 0x7a:  case 0x7b:
144      case 0x7c:  case 0x7d:  case 0x7e:  case 0x7f:
145               // LDI
146               m_A = opcode & 0x0f;
147               break;
148      case 0x12:  // LAX
149               m_A = m_X;
150               break;
151      case 0x1b:  // LXA
152               m_X = m_A;
153               break;
154      case 0x11:  // LABL
155               m_A = m_B.w.l & 0x00f;
156               break;
157      case 0x10:  // LBMX
158               m_B.w.l &= 0xf0f;
159               m_B.w.l |= (m_X << 4);
160               break;
161      case 0x04:  // LBUA
162               break;
163      case 0x19:  // XABL
164               {
165                  UINT8 tmp = m_B.w.l & 0x00f;
166                  m_B.w.l &= 0xff0;
167                  m_B.w.l |= m_A;
168                  m_A = tmp;
169               }
170               break;
171      case 0x18:  // XBMX
172               {
173                  UINT8 tmp = (m_B.w.l & 0x0f0) >> 4;
174                  m_B.w.l &= 0xf0f;
175                  m_B.w.l |= (m_X << 4);
176                  m_X = tmp;
177               }
178               break;
179      case 0x1a:  // XAX
180               {
181                  UINT8 tmp = m_A;
182                  m_A = m_X;
183                  m_X = tmp;
184               }
185               break;
186      case 0x06:  // XS
187               {
188                  PAIR tmp = m_SA;
189                  m_SA = m_SB;
190                  m_SB = tmp;
191               }
192               break;
193      case 0x6f:  // CYS
194               break;
195      case 0xc0:  case 0xc1:  case 0xc2:  case 0xc3:
196      case 0xc4:  case 0xc5:  case 0xc6:  case 0xc7:
197      case 0xc8:  case 0xc9:  case 0xca:  case 0xcb:
198      case 0xcc:  case 0xcd:  case 0xce:  case 0xcf:
199               // LB
200               {
201                  //UINT8 tmp = ARG();
202                  m_icount -= 1;
203               }
204               break;
205      case 0x00:  // LBL
206               {
207                  UINT8 tmp = ARG();
208                  m_icount -= 1;
209                  m_B.w.l = tmp;
210               }
211               break;
212      case 0x17:  // INCB
213               if ((m_B.w.l & 0x0f) == 0x0f) {
214                  m_B.w.l &= 0xff0;
215                  DO_SKIP();
216               } else {
217                  m_B.w.l += 1;
218               }
219               break;
220      case 0x1f:  // DECB
221               if ((m_B.w.l & 0x0f) == 0x00) {
222                  m_B.w.l |= 0x00f;
223                  DO_SKIP();
224               } else {
225                  m_B.w.l -= 1;
226               }
227               break;
228      // Control transfer instructions
229      case 0x80:  case 0x81:  case 0x82:  case 0x83:
230      case 0x84:  case 0x85:  case 0x86:  case 0x87:
231      case 0x88:  case 0x89:  case 0x8a:  case 0x8b:
232      case 0x8c:  case 0x8d:  case 0x8e:  case 0x8f:
233      case 0x90:  case 0x91:  case 0x92:  case 0x93:
234      case 0x94:  case 0x95:  case 0x96:  case 0x97:
235      case 0x98:  case 0x99:  case 0x9a:  case 0x9b:
236      case 0x9c:  case 0x9d:  case 0x9e:  case 0x9f:
237      case 0xa0:  case 0xa1:  case 0xa2:  case 0xa3:
238      case 0xa4:  case 0xa5:  case 0xa6:  case 0xa7:
239      case 0xa8:  case 0xa9:  case 0xaa:  case 0xab:
240      case 0xac:  case 0xad:  case 0xae:  case 0xaf:
241      case 0xb0:  case 0xb1:  case 0xb2:  case 0xb3:
242      case 0xb4:  case 0xb5:  case 0xb6:  case 0xb7:
243      case 0xb8:  case 0xb9:  case 0xba:  case 0xbb:
244      case 0xbc:  case 0xbd:  case 0xbe:  case 0xbf:
245               // T
246               m_P.w.l = (m_P.w.l & 0xfc0) | (opcode & 0x3f);
247               break;
248      case 0xd0:  case 0xd1:  case 0xd2:  case 0xd3:
249      case 0xd4:  case 0xd5:  case 0xd6:  case 0xd7:
250      case 0xd8:  case 0xd9:  case 0xda:  case 0xdb:
251      case 0xdc:  case 0xdd:  case 0xde:  case 0xdf:
252      case 0xe0:  case 0xe1:  case 0xe2:  case 0xe3:
253      case 0xe4:  case 0xe5:  case 0xe6:  case 0xe7:
254      case 0xe8:  case 0xe9:  case 0xea:  case 0xeb:
255      case 0xec:  case 0xed:  case 0xee:  case 0xef:
256      case 0xf0:  case 0xf1:  case 0xf2:  case 0xf3:
257      case 0xf4:  case 0xf5:  case 0xf6:  case 0xf7:
258      case 0xf8:  case 0xf9:  case 0xfa:  case 0xfb:
259      case 0xfc:  case 0xfd:  case 0xfe:  case 0xff:
260               // TM
261               break;
262      case 0x50:  case 0x51:  case 0x52:  case 0x53:
263      case 0x54:  case 0x55:  case 0x56:  case 0x57:
264      case 0x58:  case 0x59:  case 0x5a:  case 0x5b:
265      case 0x5c:  case 0x5d:  case 0x5e:  case 0x5f:
266               // TL
267               {
268                  //UINT8 tmp = ARG();
269                  m_icount -= 1;
270               }
271               break;
272      case 0x01:  case 0x02:  case 0x03:
273               // TML
274               {
275                  //UINT8 tmp = ARG();
276                  m_icount -= 1;
277               }
278               break;
279      case 0x15:  // SKC
280               break;
281      case 0x1e:  // SKZ
282               break;
283      case 0x40:  case 0x41:  case 0x42:  case 0x43:
284      case 0x44:  case 0x45:  case 0x46:  case 0x47:
285      case 0x48:  case 0x49:  case 0x4a:  case 0x4b:
286      case 0x4c:  case 0x4d:  case 0x4e:  case 0x4f:
287               // SKBI
288               break;
289      case 0x16:  // SKF1
290               break;
291      case 0x14:  // SKF2
292               break;
293      case 0x05:  // RTN
294               break;
295      case 0x07:  // RTNSK
296               break;
297      // Input/Output instructions
298      case 0x1c:  // IOL
299               {
300                  //UINT8 tmp = ARG();
301                  m_icount -= 1;
302               }
303               break;
304      case 0x27:  // DIA
305               break;
306      case 0x23:  // DIB
307               break;
308      case 0x1d:  // DOA
309               break;
310      // Special instructions
311      case 0x13:  // SAG
312               break;
313   }
196    m_A = m_A + M() + m_C;
197    m_C = m_A >> 4;
198    m_A = m_A & 15;
314199}
315200
201/**
202 * @brief pps4_device::iADSK Add and skip if carry-out
203 * OPCODE     cycles  mnemonic
204 * -----------------------------
205 * 0000 1001  1 cyc   ADSK
206 *
207 * Symbolic equation
208 * -----------------------------
209 * C, A <- A + M
210 * Skip if C = 1
211 *
212 * Same as AD except the next ROM word will be
213 * skipped (ignored) if a carry-out is generated.
214 */
215void pps4_device::iADSK()
216{
217    m_A = m_A + M();
218    m_C = m_A >> 4;
219    m_Skip = m_C;
220    m_A = m_A & 15;
221}
316222
223/**
224 * @brief pps4_device::iADCSK Add with carry-in and skip if carry-out
225 * OPCODE     cycles  mnemonic
226 * -----------------------------
227 * 0000 1000  1 cyc   ADCSK
228 *
229 * Symbolic equation
230 * -----------------------------
231 * C, A <- A + M + C
232 * Skip if C = 1
233 *
234 * Same as ADC except the next ROM word will be
235 * skipped (ignored) if a carry-out is generated.
236 */
237void pps4_device::iADCSK()
238{
239    m_A = m_A + M() + m_C;
240    m_C = m_A >> 4;
241    m_Skip = m_C;
242    m_A = m_A & 15;
243}
244
245/**
246 * @brief pps4_device::iADI Add immediate
247 * OPCODE     cycles  mnemonic
248 * -----------------------------
249 * 0110 xxxx  1 cyc   ADI x
250 *
251 * Symbolic equation
252 * -----------------------------
253 * A <- A + [I(4:1)]
254 *
255 * The result of the binary addition of contents of
256 * accumulator and 4-bit immediate field of instruction
257 * word replaces the contents of accumulator.
258 * The next ROM word will be skipped (ignored) if a
259 * carry-out is generated.
260 * __ The instruction does not use or change the C flip-flop. __
261 * The immediate field I(4:1) of this instruction may not
262 * be equal to binary 0 (CYS) or 0101 (DC)
263 *
264 * See %Note3
265 */
266void pps4_device::iADI()
267{
268    const UINT8 imm = ~m_I & 15;
269    m_A = m_A + imm;
270    m_Skip = (m_A >> 4) & 1;
271    m_A = m_A & 15;
272}
273
274/**
275 * @brief pps4_device::iDC Decimal correction
276 * OPCODE     cycles  mnemonic
277 * -----------------------------
278 * 0110 0101  1 cyc   DC
279 *
280 * Symbolic equation
281 * -----------------------------
282 * A <- A + 1010
283 *
284 * Decimal correction of accumulator.
285 * Binary 1010 is added to the contents of the accumulator.
286 * Result is stored in accumulator. Instruction does not
287 * use or change carry flip-flop or skip.
288 */
289void pps4_device::iDC()
290{
291    m_A = m_A + 10;
292}
293
294/**
295 * @brief pps4_device::iAND Logical AND
296 * OPCODE     cycles  mnemonic
297 * -----------------------------
298 * 0000 1101  1 cyc   AND
299 *
300 * Symbolic equation
301 * -----------------------------
302 * A <- A & M
303 *
304 * The result of logical AND of accumulator and
305 * 4-bit contents of RAM currently addressed by
306 * B register replaces contents of accumulator.
307 */
308void pps4_device::iAND()
309{
310    m_A = m_A & M();
311}
312
313/**
314 * @brief pps4_device::iOR Logical OR
315 * OPCODE     cycles  mnemonic
316 * -----------------------------
317 * 0000 1111  1 cyc   OR
318 *
319 * Symbolic equation
320 * -----------------------------
321 * A <- A | M
322 *
323 * The result of logical OR of accumulator and
324 * 4-bit contents of RAM currently addressed by
325 * B register replaces contents of accumulator.
326 */
327void pps4_device::iOR()
328{
329    m_A = m_A | M();
330}
331
332/**
333 * @brief pps4_device::iEOR Logical exclusive-OR
334 * OPCODE     cycles  mnemonic
335 * -----------------------------
336 * 0000 1100  1 cyc   EOR
337 *
338 * Symbolic equation
339 * -----------------------------
340 * A <- A ^ M
341 *
342 * The result of logical exclusive-OR of
343 * accumulator and 4-bit contents of RAM
344 * currently addressed by B register
345 * replaces contents of accumulator.
346 */
347void pps4_device::iEOR()
348{
349    m_A = m_A ^ M();
350}
351
352/**
353 * @brief pps4_device::iCOMP Complement
354 * OPCODE     cycles  mnemonic
355 * -----------------------------
356 * 0000 1110  1 cyc   COMP
357 *
358 * Symbolic equation
359 * -----------------------------
360 * A <- ~A
361 *
362 * Each bit of the accumulator is logically
363 * complemented and placed in accumulator.
364 */
365void pps4_device::iCOMP()
366{
367    m_A = m_A ^ 15;
368}
369
370/**
371 * @brief pps4_device::iSC Set carry flip-flop
372 * OPCODE     cycles  mnemonic
373 * -----------------------------
374 * 0010 0000  1 cyc   SC
375 *
376 * Symbolic equation
377 * -----------------------------
378 * C <- 1
379 *
380 * The C flip-flop is set to 1.
381 */
382void pps4_device::iSC()
383{
384    m_C = 1;
385}
386
387/**
388 * @brief pps4_device::iRC Reset carry flip-flop
389 * OPCODE     cycles  mnemonic
390 * -----------------------------
391 * 0010 0100  1 cyc   RC
392 *
393 * Symbolic equation
394 * -----------------------------
395 * C <- 0
396 *
397 * The C flip-flop is set to 0.
398 */
399void pps4_device::iRC()
400{
401    m_C = 0;
402}
403
404/**
405 * @brief pps4_device::iSF1 Set flip-flop FF1
406 * OPCODE     cycles  mnemonic
407 * -----------------------------
408 * 0010 0010  1 cyc   SF1
409 *
410 * Symbolic equation
411 * -----------------------------
412 * FF1 <- 1
413 *
414 * The Flip-flop FF1 is set to 1.
415 */
416void pps4_device::iSF1()
417{
418    m_FF1 = 1;
419}
420
421/**
422 * @brief pps4_device::iRF1 Reset flip-flop FF1
423 * OPCODE     cycles  mnemonic
424 * -----------------------------
425 * 0010 0110  1 cyc   RF1
426 *
427 * Symbolic equation
428 * -----------------------------
429 * FF1 <- 0
430 *
431 * The Flip-flop FF1 is set to 0.
432 */
433void pps4_device::iRF1()
434{
435    m_FF1 = 0;
436}
437
438/**
439 * @brief pps4_device::iSF2 Set flip-flop FF2
440 * OPCODE     cycles  mnemonic
441 * -----------------------------
442 * 0010 0001  1 cyc   SF2
443 *
444 * Symbolic equation
445 * -----------------------------
446 * FF2 <- 1
447 *
448 * The Flip-flop FF2 is set to 1.
449 */
450void pps4_device::iSF2()
451{
452    m_FF2 = 1;
453}
454
455/**
456 * @brief pps4_device::iRF2 Reset flip-flop FF2
457 * OPCODE     cycles  mnemonic
458 * -----------------------------
459 * 0010 0101  1 cyc   RF2
460 *
461 * Symbolic equation
462 * -----------------------------
463 * FF2 <- 0
464 *
465 * The flip-flop FF2 is set to 0.
466 */
467void pps4_device::iRF2()
468{
469    m_FF2 = 0;
470}
471
472/**
473 * @brief pps4_device::iLD Load accumulator from memory
474 * OPCODE     cycles  mnemonic
475 * -----------------------------
476 * 0011 0xxx  1 cyc   LD x
477 *
478 * Symbolic equation
479 * -----------------------------
480 * A <- M
481 * B(7:5) <- B(7:5) ^ [I(3:1)]
482 *
483 * The 4-bit contents of RAM currently addressed
484 * by B register are placed in the accumulator.
485 * The RAM address in the B register is then
486 * modified by the result of an exclusive-OR of
487 * the 3-b it immediate field I(3:1) and B(7:5)
488 *
489 * See %Note3
490 */
491void pps4_device::iLD()
492{
493    const UINT16 i3c = ~m_I & 7;
494    m_A = M();
495    m_B = m_B ^ (i3c << 4);
496}
497
498/**
499 * @brief pps4_device::iEX Exchange accumulator and memory
500 * OPCODE     cycles  mnemonic
501 * -----------------------------
502 * 0011 1xxx  1 cyc   EX x
503 *
504 * Symbolic equation
505 * -----------------------------
506 * A <-> M
507 * B(7:5) <- B(7:5) ^ [I(3:1)]
508 *
509 * The same as LD except the contents of accumulator
510 * are also placed in currently addressed RAM location.
511 *
512 * See %Note3
513 */
514void pps4_device::iEX()
515{
516    const UINT16 i3c = ~m_I & 7;
517    const UINT8 mem = M();
518    W(m_A);
519    m_A = mem;
520    m_B = m_B ^ (i3c << 4);
521}
522
523/**
524 * @brief pps4_device::iEXD Exchange accumulator and memory and decrement BL
525 * OPCODE     cycles  mnemonic
526 * -----------------------------
527 * 0010 1xxx  1 cyc   EXD x
528 *
529 * Symbolic equation
530 * -----------------------------
531 * A <-> M
532 * B(7:5) <- B(7:5) ^ [I(3:1)]
533 * BL <- BL - 1
534 * Skip on BL = 1111b
535 *
536 * The same as EX except RAM address in B register
537 * is further modified by decrementing BL by 1.
538 * If the new contents of BL is 1111, the next
539 * ROM word will be ignored.
540 *
541 * See %Note3
542 */
543void pps4_device::iEXD()
544{
545    const UINT8 i3c = ~m_I & 7;
546    const UINT8 mem = M();
547    UINT8 bl = m_B & 15;
548    W(m_A);
549    m_A = mem;
550    m_B = m_B ^ (i3c << 4);
551    // if decrement BL wraps to 1111b
552    if (0 == bl) {
553        bl = 15;
554        m_Skip = 1;
555    } else {
556        bl = bl - 1;
557    }
558    m_B = (m_B & ~15) | bl;
559}
560
561/**
562 * @brief pps4_device::iLDI Load accumualtor immediate
563 * OPCODE     cycles  mnemonic
564 * -----------------------------
565 * 0111 xxxx  1 cyc   LDI x
566 *
567 * Symbolic equation
568 * -----------------------------
569 * A <- [I(4:1)]
570 *
571 * The 4-bit contents, immediate field I(4:1),
572 * of the instruction are placed in the accumulator.
573 *
574 * Note: Only the first occurence of an LDI in a consecutive
575 * string of LDIs will be executed. The program will ignore
576 * remaining LDIs and execute next valid instruction.
577 *
578 * See %Note3
579 */
580void pps4_device::iLDI()
581{
582    // previous LDI instruction?
583    if (0x70 == m_Ip) {
584        LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I));
585        return;
586    }
587    m_A = ~m_I & 15;
588}
589
590/**
591 * @brief pps4_device::iLAX
592 * OPCODE     cycles  mnemonic
593 * -----------------------------
594 * 0001 0010  1 cyc   LAX
595 *
596 * Symbolic equation
597 * -----------------------------
598 * A <- X
599 *
600 * The 4-bit contents of the X register are
601 * placed in the accumulator.
602 */
603void pps4_device::iLAX()
604{
605    m_A = m_X;
606}
607
608/**
609 * @brief pps4_device::iLXA
610 * OPCODE     cycles  mnemonic
611 * -----------------------------
612 * 0001 1011  1 cyc   LXA
613 *
614 * Symbolic equation
615 * -----------------------------
616 * X <- A
617 *
618 * The contents of the accumulator are
619 * tansferred to the X register.
620 */
621void pps4_device::iLXA()
622{
623    m_X = m_A;
624}
625
626/**
627 * @brief pps4_device::iLABL
628 * OPCODE     cycles  mnemonic
629 * -----------------------------
630 * 0001 0001  1 cyc   LABL
631 *
632 * Symbolic equation
633 * -----------------------------
634 * A <- BL
635 *
636 * The contents of BL register are
637 * tansferred to the accumulator.
638 */
639void pps4_device::iLABL()
640{
641    m_A = m_B & 15;
642}
643
644/**
645 * @brief pps4_device::iLBMX
646 * OPCODE     cycles  mnemonic
647 * -----------------------------
648 * 0001 0000  1 cyc   LBMX
649 *
650 * Symbolic equation
651 * -----------------------------
652 * BM <- X
653 *
654 * The contents of X register are
655 * tansferred to BM register.
656 */
657void pps4_device::iLBMX()
658{
659    m_B = (m_B & ~(15 << 4)) | (m_X << 4);
660}
661
662/**
663 * @brief pps4_device::iLBUA
664 * OPCODE     cycles  mnemonic
665 * -----------------------------
666 * 0000 0100  1 cyc   LBUA
667 *
668 * Symbolic equation
669 * -----------------------------
670 * BU <- A
671 * A <- M
672 *
673 * The contents of accumulator are tansferred to
674 * BU register. Also, the contents of the currently
675 * addressed RAM are transferred to accumulator.
676 */
677void pps4_device::iLBUA()
678{
679    m_B = (m_B & ~(15 << 8)) | (m_A << 8);
680    m_A = M();
681}
682
683/**
684 * @brief pps4_device::iXABL
685 * OPCODE     cycles  mnemonic
686 * -----------------------------
687 * 0001 1001  1 cyc   XABL
688 *
689 * Symbolic equation
690 * -----------------------------
691 * A <-> BL
692 *
693 * The contents of accumulator and BL register
694 * are exchanged.
695 */
696void pps4_device::iXABL()
697{
698    // swap A and BL
699    UINT8 bl = m_B & 15;
700    m_B = (m_B & ~15) | m_A;
701    m_A = bl;
702}
703
704/**
705 * @brief pps4_device::iXMBX
706 * OPCODE     cycles  mnemonic
707 * -----------------------------
708 * 0001 1000  1 cyc   XMBX
709 *
710 * Symbolic equation
711 * -----------------------------
712 * X <-> BM
713 *
714 * The contents of accumulator and BL register
715 * are exchanged.
716 */
717void pps4_device::iXBMX()
718{
719    // swap X and BM
720    const UINT8 bm = (m_B >> 4) & 15;
721    m_B = (m_B & ~(15 << 4)) | (m_X << 4);
722    m_X = bm;
723}
724
725/**
726 * @brief pps4_device::iXAX
727 * OPCODE     cycles  mnemonic
728 * -----------------------------
729 * 0001 1010  1 cyc   XAX
730 *
731 * Symbolic equation
732 * -----------------------------
733 * A <-> X
734 *
735 * The contents of accumulator and X register
736 * are exchanged.
737 */
738void pps4_device::iXAX()
739{
740    // swap A and X
741    m_A ^= m_X;
742    m_X ^= m_A;
743    m_A ^= m_X;
744}
745
746/**
747 * @brief pps4_device::iXS
748 * OPCODE     cycles  mnemonic
749 * -----------------------------
750 * 0000 0110  1 cyc   XS
751 *
752 * Symbolic equation
753 * -----------------------------
754 * SA <-> SB
755 *
756 * The 12-bit contents of SA and SB register
757 * are exchanged.
758 */
759void pps4_device::iXS()
760{
761    // swap SA and SB
762    m_SA ^= m_SB;
763    m_SB ^= m_SA;
764    m_SA ^= m_SB;
765}
766
767/**
768 * @brief pps4_device::iCYS
769 * OPCODE     cycles  mnemonic
770 * -----------------------------
771 * 0110 1111  1 cyc    CYS
772 *
773 * Symbolic equation
774 * -----------------------------
775 * A <- SA(4:1)
776 * SA(4:1) <- SA(8:5)
777 * SA(8:5) <- SA(12:9)
778 * SA(12:9) <- A
779 *
780 * A 4-bit right shift of the SA register takes place
781 * with the four bits which are shifted off the end
782 * of SA being transferred into the accumulator.
783 * The contents of the accumulator are placed in the
784 * left end of the SA register
785 *
786 */
787void pps4_device::iCYS()
788{
789    const UINT16 sa = (m_SA >> 4) | (m_A << 8);
790    m_A = m_SA & 15;
791    m_SA = sa;
792}
793
794/**
795 * @brief pps4_device::iLB
796 * OPCODE     cycles  mnemonic
797 * -----------------------------
798 * 1100 xxxx  2 cyc    LB x
799 *
800 * Symbolic equation
801 * -----------------------------
802 * SB <- SA, SA <- P
803 * P(12:5) <- 0000 1100
804 * P(4:1) <- I(4:1)
805 *
806 * BU <- 0000
807 * B(8:1) <- [I2(8:1)]
808 * P <- SA, SA <-> SB
809 *
810 * Sixteen consecutive locations on ROM page 3 (I2) contain
811 * data which can be loaded into the eight least significant
812 * bits of the B register by use of any LB instruction.
813 * The four most significant bits of B register will be loaded
814 * with zeros. The contents of the SB register will be destroyed.
815 * This instruction takes two cycles to execute but occupies
816 * only one ROM word. (Automatic return)
817 *
818 * Only the first occurence of an LB or LBL instruction in a
819 * consecutive string of LB or LBL will be executed. The
820 * program will ignore the remaining LB or LBL and execute
821 * the next valid instruction. Within subroutines the LB
822 * instruction must be used with caution because the contents
823 * of SB have been modified.
824 *
825 * See %Note3 and %Note4
826 */
827void pps4_device::iLB()
828{
829    // previous LB or LBL instruction?
830    if (0xc0 == m_Ip|| 0x00 == m_Ip) {
831        LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I));
832        return;
833    }
834    m_SB = m_SA;
835    m_SA = (m_P + 1) & 0xFFF;
836    m_P = (3 << 6) | (m_I & 15);
837    m_B = ~ARG() & 255;
838    m_P = m_SA;
839    // swap SA and SB
840    m_SA ^= m_SB;
841    m_SB ^= m_SA;
842    m_SA ^= m_SB;
843}
844
845/**
846 * @brief pps4_device::iLBL
847 * OPCODE     cycles  mnemonic
848 * -----------------------------
849 * 0000 0000  2 cyc    LBL
850 *
851 * Symbolic equation
852 * -----------------------------
853 * BU <- 0000
854 * B(8:1) <- [I2(8:1)]
855 *
856 * This instruction occupies two ROM words, the second of
857 * which will be loaded into the eight least significant
858 * bits of the B register. The four most significant bits
859 * of B (BU) will be loaded with zeroes.
860 *
861 * Only the first occurence of an LB or LBL instruction in a
862 * consecutive string of LB or LBL will be executed. The
863 * program will ignore the remaining LB or LBL and execute
864 * the next valid instruction.
865 *
866 * See %Note3
867 */
868void pps4_device::iLBL()
869{
870    const UINT8 i8 = ~ARG() & 255;
871    // previous LB or LBL instruction?
872    if (0xc0 == m_Ip || 0x00 == m_Ip) {
873        LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I));
874        return;
875    }
876    m_B = i8;
877}
878
879/**
880 * @brief pps4_device::INCB
881 * OPCODE     cycles  mnemonic
882 * -----------------------------
883 * 0001 0111  1 cyc    INCB
884 *
885 * Symbolic equation
886 * -----------------------------
887 * BL <- BL + 1
888 * Skip on BL = 0000
889 *
890 * BL register (least significant four bits of B register)
891 * is incremented by 1. If the new contents of BL is 0000b,
892 * then the next ROM word will be ignored.
893 */
894void pps4_device::iINCB()
895{
896    UINT8 bl = m_B & 15;
897    bl = (bl + 1) & 15;
898    if (0 == bl) {
899        LOG(("%s: skip BL=%x\n", __FUNCTION__, bl));
900        m_Skip = 1;
901    }
902    m_B = (m_B & ~15) | bl;
903}
904
905/**
906 * @brief pps4_device::iDECB
907 * OPCODE     cycles  mnemonic
908 * -----------------------------
909 * 0001 1111  1 cyc    DECB
910 *
911 * Symbolic equation
912 * -----------------------------
913 * BL <- BL - 1
914 * Skip on BL = 1111
915 *
916 * BL register is decremented by 1. If the new
917 * contents of BL is 1111b, then the next ROM
918 * word will be ignored.
919 */
920void pps4_device::iDECB()
921{
922    UINT8 bl = m_B & 15;
923    bl = (bl - 1) & 15;
924    if (15 == bl) {
925        LOG(("%s: skip BL=%x\n", __FUNCTION__, bl));
926        m_Skip = 1;
927    }
928    m_B = (m_B & ~15) | bl;
929}
930
931/**
932 * @brief pps4_device::iT Transfer
933 * OPCODE     cycles  mnemonic
934 * -----------------------------
935 * 10xx xxxx  1 cyc    T *xx
936 *
937 * Symbolic equation
938 * -----------------------------
939 * P(6:1) <- I(6:1)
940 *
941 * An unconditional transfer to a ROM word on the current
942 * page takes place. The least significant 6-bits of P
943 * register P(6:1) are replaced by six bit immediate
944 * field I(6:1)
945 */
946void pps4_device::iT()
947{
948    const UINT16 p = (m_P & ~63) | (m_I & 63);
949    LOG(("%s: P=%03x I=%02x -> P=%03x\n", __FUNCTION__, m_P, m_I, p));
950    m_P = p;
951}
952
953/**
954 * @brief pps4_device::iTM Transfer and mark indirect
955 * OPCODE     cycles  mnemonic
956 * -----------------------------
957 * 11xx xxxx  2 cyc    TM x
958 * yyyy yyyy  from page 3
959 *
960 * Symbolic equation
961 * -----------------------------
962 * SB <- SA, SA <- P
963 * P(12:7) <- 000011
964 * P(6:1) <- I1(6:1)
965 *
966 * P(12:9) <- 0001
967 * P(8:1) <- I2(8:1)
968 *
969 * 48 consecutive locations on ROM page 3 contains pointer data
970 * which indentify subroutine entry addresses. These subroutine
971 * entry addresses are limited to pages 4 through 7. This TM
972 * instruction will save the address of the next ROM word in
973 * the SA register after loading the original contents of SA
974 * into SB. A transfer then occurs to one of the subroutine
975 * entry addresses. This instruction occupies one ROM word
976 * but takes two cycles for execution.
977 */
978void pps4_device::iTM()
979{
980    m_SB = m_SA;
981    m_SA = m_P;
982    m_P = (3 << 6) | (m_I & 63);
983    m_I2 = ARG();
984    m_P = (1 << 8) | m_I2;
985}
986
987/**
988 * @brief pps4_device::iTL Transfer long
989 * OPCODE     cycles  mnemonic
990 * -----------------------------
991 * 0101 xxxx  2 cyc    TL xyy
992 * yyyy yyyy
993 *
994 * Symbolic equation
995 * -----------------------------
996 * P(12:9) <- I1(4:1)
997 * P(8:1) <- I2(8:1)
998 *
999 * The instruction executes a transfer to any ROM word on any
1000 * page. It occupies two ROM words an requires two cycles for
1001 * execution. The first byte loads P(12:9) with field I1(4:1)
1002 * and then the second byte I2(8:1) is placed in P(8:1).
1003 */
1004void pps4_device::iTL()
1005{
1006    m_I2 = ARG();
1007    m_P = ((m_I & 15) << 8) | m_I2;
1008}
1009
1010/**
1011 * @brief pps4_device::iTML Transfer and mark long
1012 * OPCODE     cycles  mnemonic
1013 * -----------------------------
1014 * 0101 xxxx  2 cyc    TML xyy
1015 * yyyy yyyy
1016 *
1017 * Symbolic equation
1018 * -----------------------------
1019 * SB <- SA, SA <- P
1020 * P(12:9) <- I1(4:1)
1021 * P(8:1) <- I2(8:1)
1022 *
1023 * Note I1(2:1) != 00
1024 *
1025 * This instruction executes a transfer and mark to any
1026 * location on ROM pages 4 through 15. It occupies two
1027 * ROM words and requires two cycle times for execution.
1028 */
1029void pps4_device::iTML()
1030{
1031    m_I2 = ARG();
1032    m_SB = m_SA;
1033    m_SA = m_P;
1034    m_P = ((m_I & 15) << 8) | m_I2;
1035}
1036
1037/**
1038 * @brief pps4_device::iSKC Skip on carry flip-flop
1039 * OPCODE     cycles  mnemonic
1040 * -----------------------------
1041 * 0001 0101  1 cyc    SKC
1042 *
1043 * Symbolic equation
1044 * -----------------------------
1045 * Skip if C = 1
1046 *
1047 * The next ROM word will be ignored if C flip-flop is 1.
1048 */
1049void pps4_device::iSKC()
1050{
1051    m_Skip = m_C;
1052}
1053
1054/**
1055 * @brief pps4_device::iSKC Skip on carry flip-flop
1056 * OPCODE     cycles  mnemonic
1057 * -----------------------------
1058 * 0001 1110  1 cyc    SKZ
1059 *
1060 * Symbolic equation
1061 * -----------------------------
1062 * Skip if A = 0
1063 *
1064 * The next ROM word will be ignored if C flip-flop is 1.
1065 */
1066void pps4_device::iSKZ()
1067{
1068    m_Skip = (0 == m_A) ? 1 : 0;
1069}
1070
1071/**
1072 * @brief pps4_device::iSKBI Skip if BL equal to immediate
1073 * OPCODE     cycles  mnemonic
1074 * -----------------------------
1075 * 0100 xxxx  1 cyc    SKBI x
1076 *
1077 * Symbolic equation
1078 * -----------------------------
1079 * Skip if BL = I(4:1)
1080 *
1081 * The next ROM word will be ignored if the least significant
1082 * four bits of B register (BL) is equal to the 4-bit immediate
1083 * field I(4:1) of instruction.
1084 */
1085void pps4_device::iSKBI()
1086{
1087    const UINT8 i4 = m_I & 15;
1088    const UINT8 bl = m_B & 15;
1089    m_Skip = bl == i4 ? 1 : 0;
1090}
1091
1092/**
1093 * @brief pps4_device::iSKF1 Skip if FF1 equals 1
1094 * OPCODE     cycles  mnemonic
1095 * -----------------------------
1096 * 0001 0110  1 cyc    SKF1
1097 *
1098 * Symbolic equation
1099 * -----------------------------
1100 * Skip if FF1 = 1
1101 */
1102void pps4_device::iSKF1()
1103{
1104    m_Skip = m_FF1;
1105}
1106
1107/**
1108 * @brief pps4_device::iSKF2 Skip if FF2 equals 1
1109 * OPCODE     cycles  mnemonic
1110 * -----------------------------
1111 * 0001 0100  1 cyc    SKF2
1112 *
1113 * Symbolic equation
1114 * -----------------------------
1115 * Skip if FF2 = 1
1116 */
1117void pps4_device::iSKF2()
1118{
1119    m_Skip = m_FF2;
1120}
1121
1122/**
1123 * @brief pps4_device::iRTN Return
1124 * OPCODE     cycles  mnemonic
1125 * -----------------------------
1126 * 0000 0101  1 cyc    RTN
1127 *
1128 * Symbolic equation
1129 * -----------------------------
1130 * P <- SA, SA <-> SB
1131 *
1132 * This instruction executes a return from subroutine
1133 * by loading contents of SA register into P register
1134 * and interchanges the SB and SA registers.
1135 */
1136void pps4_device::iRTN()
1137{
1138    m_P = m_SA & 0xFFF;
1139    // swap SA and SB
1140    m_SA ^= m_SB;
1141    m_SB ^= m_SA;
1142    m_SA ^= m_SB;
1143}
1144
1145/**
1146 * @brief pps4_device::iRTN Return
1147 * OPCODE     cycles  mnemonic
1148 * -----------------------------
1149 * 0000 0111  1 cyc    RTNSK
1150 *
1151 * Symbolic equation
1152 * -----------------------------
1153 * P <- SA, SA <-> SB
1154 * P <- P + 1
1155 *
1156 * Same as RTN except the first ROM word encountered
1157 * after the return from subroutine is skipped.
1158 */
1159void pps4_device::iRTNSK()
1160{
1161    m_P = m_SA & 0xFFF;
1162    // swap SA and SB
1163    m_SA ^= m_SB;
1164    m_SB ^= m_SA;
1165    m_SA ^= m_SB;
1166    m_Skip = 1; // next opcode is ignored
1167}
1168
1169/**
1170 * @brief pps4_device::IOL
1171 * OPCODE     cycles  mnemonic
1172 * -----------------------------
1173 * 0001 1100  2 cyc    IOL yy
1174 * yyyy yyyy
1175 *
1176 * Symbolic equation
1177 * -----------------------------
1178 * ~A -> Data Bus
1179 * A <- ~Data Bus
1180 * I2 -> I/O device
1181 *
1182 * This instruction occupies two ROM words and requires two
1183 * cycles for execution. The first ROM word is received by
1184 * the CPU and sets up the I/O enable signal. The second
1185 * ROM word is then received by the I/O devices and decoded
1186 * for address and command. The contents of the accumulator
1187 * inverted are placed on the data lines for acceptance by
1188 * the I/O. At the same time, input data received by the I/O
1189 * device is transferred to the accumulator inverted.
1190 */
1191void pps4_device::iIOL()
1192{
1193    const UINT8 ac = ~m_A & 15;
1194    m_I2 = ARG();
1195    m_io->write_byte(m_I2, ac);
1196    LOG(("%s: port:%02x <- %x\n", __FUNCTION__, m_I2, ac));
1197    m_A = ~m_io->read_byte(m_I2) & 15;
1198    LOG(("%s: port:%02x -> %x\n", __FUNCTION__, m_I2, m_A));
1199}
1200
1201/**
1202 * @brief pps4_device::iDIA Discrete input group A
1203 * OPCODE     cycles  mnemonic
1204 * -----------------------------
1205 * 0010 0111  1 cyc    DIA
1206 *
1207 * Symbolic equation
1208 * -----------------------------
1209 * A <- DIA
1210 *
1211 * Data at the inputs to discrete group A is
1212 * transferred to the accumulator.
1213 */
1214void pps4_device::iDIA()
1215{
1216    m_A = m_io->read_byte(PPS4_PORT_A) & 15;
1217}
1218
1219/**
1220 * @brief pps4_device::iDIB Discrete input group B
1221 * OPCODE     cycles  mnemonic
1222 * -----------------------------
1223 * 0010 0011  1 cyc    DIB
1224 *
1225 * Symbolic equation
1226 * -----------------------------
1227 * A <- DIB
1228 *
1229 * Data at the inputs to discrete group B is
1230 * transferred to the accumulator.
1231 */
1232void pps4_device::iDIB()
1233{
1234    m_A = m_io->read_byte(PPS4_PORT_B) & 15;
1235}
1236
1237/**
1238 * @brief pps4_device::iDOA Discrete output
1239 * OPCODE     cycles  mnemonic
1240 * -----------------------------
1241 * 0001 1101  1 cyc    DOA
1242 *
1243 * Symbolic equation
1244 * -----------------------------
1245 * DOA <- A
1246 *
1247 * The contents of the accumulator are transferred
1248 * to the discrete output register.
1249 */
1250void pps4_device::iDOA()
1251{
1252    m_io->write_byte(PPS4_PORT_A, m_A);
1253}
1254
1255/**
1256 * @brief pps4_device::iSAG Special address generation
1257 * OPCODE     cycles  mnemonic
1258 * -----------------------------
1259 * 0010 1101  1 cyc    SAG
1260 *
1261 * Symbolic equation
1262 * -----------------------------
1263 * A/B Bus (12:5) <- 0000 0000
1264 * A/B Bus (4:1) <- BL(4:1)
1265 * Contents of B remains unchanged
1266 *
1267 * The instruction causes the eight most significant bits
1268 * of the RAM address output to be zeroed during the next
1269 * cycle only. Note that this instruction does not alter
1270 * the contents of the B register.
1271 */
1272void pps4_device::iSAG()
1273{
1274    // mask bits 12:5 on next memory access
1275    m_SAG = 0xff0;
1276}
1277
3171278/***************************************************************************
3181279    COMMON EXECUTION
3191280***************************************************************************/
1281void pps4_device::execute_one()
1282{
1283    m_I = ROP();
1284    if (m_Skip) {
1285        m_Skip = 0;
1286        LOG(("%s: skip op:%02x\n", __FUNCTION__, m_I));
1287        return;
1288    }
1289    switch (m_I) {
1290    case 0x00:
1291        iLBL();
1292        break;
1293    case 0x01:
1294        iTML();
1295        break;
1296    case 0x02:
1297        iTML();
1298        break;
1299    case 0x03:
1300        iTML();
1301        break;
1302    case 0x04:
1303        iLBUA();
1304        break;
1305    case 0x05:
1306        iRTN();
1307        break;
1308    case 0x06:
1309        iXS();
1310        break;
1311    case 0x07:
1312        iRTNSK();
1313        break;
1314    case 0x08:
1315        iADCSK();
1316        break;
1317    case 0x09:
1318        iADSK();
1319        break;
1320    case 0x0a:
1321        iADC();
1322        break;
1323    case 0x0b:
1324        iAD();
1325        break;
1326    case 0x0c:
1327        iEOR();
1328        break;
1329    case 0x0d:
1330        iAND();
1331        break;
1332    case 0x0e:
1333        iCOMP();
1334        break;
1335    case 0x0f:
1336        iOR();
1337        break;
1338
1339    case 0x10:
1340        iLBMX();
1341        break;
1342    case 0x11:
1343        iLABL();
1344        break;
1345    case 0x12:
1346        iLAX();
1347        break;
1348    case 0x13:
1349        iSAG();
1350        break;
1351    case 0x14:
1352        iSKF2();
1353        break;
1354    case 0x15:
1355        iSKC();
1356        break;
1357    case 0x16:
1358        iSKF1();
1359        break;
1360    case 0x17:
1361        iINCB();
1362        break;
1363    case 0x18:
1364        iXBMX();
1365        break;
1366    case 0x19:
1367        iXABL();
1368        break;
1369    case 0x1a:
1370        iXAX();
1371        break;
1372    case 0x1b:
1373        iLXA();
1374        break;
1375    case 0x1c:
1376        iIOL();
1377        break;
1378    case 0x1d:
1379        iDOA();
1380        break;
1381    case 0x1e:
1382        iSKZ();
1383        break;
1384    case 0x1f:
1385        iDECB();
1386        break;
1387
1388    case 0x20:
1389        iSC();
1390        break;
1391    case 0x21:
1392        iSF2();
1393        break;
1394    case 0x22:
1395        iSF1();
1396        break;
1397    case 0x23:
1398        iDIB();
1399        break;
1400    case 0x24:
1401        iRC();
1402        break;
1403    case 0x25:
1404        iRF2();
1405        break;
1406    case 0x26:
1407        iRF1();
1408        break;
1409    case 0x27:
1410        iDIA();
1411        break;
1412
1413    case 0x28: case 0x29: case 0x2a: case 0x2b:
1414    case 0x2c: case 0x2d: case 0x2e: case 0x2f:
1415        iEXD();
1416        break;
1417
1418    case 0x30: case 0x31: case 0x32: case 0x33:
1419    case 0x34: case 0x35: case 0x36: case 0x37:
1420        iLD();
1421        break;
1422
1423    case 0x38: case 0x39: case 0x3a: case 0x3b:
1424    case 0x3c: case 0x3d: case 0x3e: case 0x3f:
1425        iEX();
1426        break;
1427
1428    case 0x40: case 0x41: case 0x42: case 0x43:
1429    case 0x44: case 0x45: case 0x46: case 0x47:
1430    case 0x48: case 0x49: case 0x4a: case 0x4b:
1431    case 0x4c: case 0x4d: case 0x4e: case 0x4f:
1432        iSKBI();
1433        break;
1434
1435    case 0x50: case 0x51: case 0x52: case 0x53:
1436    case 0x54: case 0x55: case 0x56: case 0x57:
1437    case 0x58: case 0x59: case 0x5a: case 0x5b:
1438    case 0x5c: case 0x5d: case 0x5e: case 0x5f:
1439        iTL();
1440        break;
1441
1442    case 0x65:
1443        iDC();
1444        break;
1445
1446    case 0x60: case 0x61: case 0x62: case 0x63:
1447    case 0x64:            case 0x66: case 0x67:
1448    case 0x68: case 0x69: case 0x6a: case 0x6b:
1449    case 0x6c: case 0x6d: case 0x6e:
1450        iADI();
1451        break;
1452
1453    case 0x6f:
1454        iCYS();
1455        break;
1456
1457    case 0x70: case 0x71: case 0x72: case 0x73:
1458    case 0x74: case 0x75: case 0x76: case 0x77:
1459    case 0x78: case 0x79: case 0x7a: case 0x7b:
1460    case 0x7c: case 0x7d: case 0x7e: case 0x7f:
1461        iLDI();
1462        break;
1463
1464    case 0x80: case 0x81: case 0x82: case 0x83:
1465    case 0x84: case 0x85: case 0x86: case 0x87:
1466    case 0x88: case 0x89: case 0x8a: case 0x8b:
1467    case 0x8c: case 0x8d: case 0x8e: case 0x8f:
1468    case 0x90: case 0x91: case 0x92: case 0x93:
1469    case 0x94: case 0x95: case 0x96: case 0x97:
1470    case 0x98: case 0x99: case 0x9a: case 0x9b:
1471    case 0x9c: case 0x9d: case 0x9e: case 0x9f:
1472    case 0xa0: case 0xa1: case 0xa2: case 0xa3:
1473    case 0xa4: case 0xa5: case 0xa6: case 0xa7:
1474    case 0xa8: case 0xa9: case 0xaa: case 0xab:
1475    case 0xac: case 0xad: case 0xae: case 0xaf:
1476    case 0xb0: case 0xb1: case 0xb2: case 0xb3:
1477    case 0xb4: case 0xb5: case 0xb6: case 0xb7:
1478    case 0xb8: case 0xb9: case 0xba: case 0xbb:
1479    case 0xbc: case 0xbd: case 0xbe: case 0xbf:
1480        iT();
1481        break;
1482
1483
1484    case 0xc0: case 0xc1: case 0xc2: case 0xc3:
1485    case 0xc4: case 0xc5: case 0xc6: case 0xc7:
1486    case 0xc8: case 0xc9: case 0xca: case 0xcb:
1487    case 0xcc: case 0xcd: case 0xce: case 0xcf:
1488        iLB();
1489        break;
1490
1491    default:
1492        iTM();
1493    }
1494}
1495
3201496void pps4_device::execute_run()
3211497{
322   do
323   {
324      debugger_instruction_hook(this, m_P.d);
325      execute_one(ROP());
1498    do
1499    {
1500        debugger_instruction_hook(this, m_P);
1501        execute_one();
3261502
327   } while (m_icount > 0);
1503    } while (m_icount > 0);
3281504}
3291505
3301506/***************************************************************************
r242231r242232
3331509
3341510void pps4_device::device_start()
3351511{
336   m_program = &space(AS_PROGRAM);
337   m_direct = &m_program->direct();
338   m_data = &space(AS_DATA);
339   m_io = &space(AS_IO);
1512    m_program = &space(AS_PROGRAM);
1513    m_direct = &m_program->direct();
1514    m_data = &space(AS_DATA);
1515    m_io = &space(AS_IO);
3401516
341   save_item(NAME(m_A));
342   save_item(NAME(m_X));
343   save_item(NAME(m_P));
344   save_item(NAME(m_SA));
345   save_item(NAME(m_SB));
346   save_item(NAME(m_B));
347   save_item(NAME(m_C));
348   save_item(NAME(m_FF1));
349   save_item(NAME(m_FF2));
1517    save_item(NAME(m_A));
1518    save_item(NAME(m_X));
1519    save_item(NAME(m_P));
1520    save_item(NAME(m_SA));
1521    save_item(NAME(m_SB));
1522    save_item(NAME(m_Skip));
1523    save_item(NAME(m_SAG));
1524    save_item(NAME(m_B));
1525    save_item(NAME(m_C));
1526    save_item(NAME(m_FF1));
1527    save_item(NAME(m_FF2));
1528    save_item(NAME(m_I));
1529    save_item(NAME(m_I2));
1530    save_item(NAME(m_Ip));
3501531
351   state_add( PPS4_PC, "PC", m_P.d ).mask(0xfff).formatstr("%03X");
352   state_add( PPS4_A,  "A",  m_A ).formatstr("%02X");  // TODO: size?
353   state_add( PPS4_X,  "X",  m_X ).formatstr("%02X");  // TODO: size?
354   state_add( PPS4_SA, "SA", m_SA.d ).formatstr("%04X");  // TODO: size?
355   state_add( PPS4_SB, "SB", m_SB.d ).formatstr("%04X");  // TODO: size?
356   state_add( PPS4_B,  "B",  m_B.d ).formatstr("%04X"); // TODO: size?
357   state_add( STATE_GENPC, "GENPC", m_P.d ).noshow();
358   state_add( STATE_GENFLAGS, "GENFLAGS", m_C ).formatstr("%3s").noshow();
1532    state_add( PPS4_PC, "PC", m_P ).mask(0xFFF).formatstr("%03X");
1533    state_add( PPS4_A,  "A",  m_A ).formatstr("%01X");
1534    state_add( PPS4_X,  "X",  m_X ).formatstr("%01X");
1535    state_add( PPS4_SA, "SA", m_SA ).formatstr("%03X");
1536    state_add( PPS4_SB, "SB", m_SB ).formatstr("%03X");
1537    state_add( PPS4_Skip,  "Skip",  m_Skip ).formatstr("%01X");
1538    state_add( PPS4_SAG,  "SAG",  m_SAG ).formatstr("%03X");
1539    state_add( PPS4_B,  "B",  m_B ).formatstr("%03X");
1540    state_add( PPS4_I2,  "I",  m_I ).formatstr("%02X").noshow();
1541    state_add( PPS4_I2,  "I2",  m_I2 ).formatstr("%02X").noshow();
1542    state_add( PPS4_Ip,  "Ip",  m_Ip ).formatstr("%02X").noshow();
1543    state_add( STATE_GENPC, "GENPC", m_P ).noshow();
1544    state_add( STATE_GENFLAGS, "GENFLAGS", m_C).formatstr("%3s").noshow();
3591545
360   m_icountptr = &m_icount;
1546    m_icountptr = &m_icount;
3611547}
3621548
3631549void pps4_device::state_string_export(const device_state_entry &entry, astring &string)
3641550{
365   switch (entry.index())
366   {
367      case STATE_GENFLAGS:
368         string.printf("%c%c%c",
369            m_C ? 'C':'.',
370            m_FF1 ? '1':'.',
371            m_FF2 ? '2':'.');
372         break;
373   }
1551    switch (entry.index())
1552    {
1553        case STATE_GENFLAGS:
1554            string.printf("%c%c%c",
1555                m_C ? 'C':'.',
1556                m_FF1 ? '1':'.',
1557                m_FF2 ? '2':'.');
1558            break;
1559    }
3741560}
3751561
3761562/***************************************************************************
r242231r242232
3791565
3801566void pps4_device::device_reset()
3811567{
382   m_A = m_X = 0;
383   m_C = m_FF1 = m_FF2 = 0;
384
385   m_P.d = 0;
386   m_SA.d = 0;
387   m_SB.d = 0;
388   m_B.d = 0;
1568    m_A = 0;        // Accumulator A(4:1)
1569    m_X = 0;        // X register X(4:1)
1570    m_P = 0;        // program counter P(12:1)
1571    m_SA = 0;       // Shift register SA(12:1)
1572    m_SB = 0;       // Shift register SB(12:1)
1573    m_SAG = 0;      // Special address generation mask
1574    m_B = 0;        // B address register B(12:1) (BL, BM and BU)
1575    m_C = 0;        // Carry flip-flop
1576    m_FF1 = 0;      // Flip-flop 1
1577    m_FF2 = 0;      // Flip-flop 2
1578    m_I = 0;        // Most recent instruction I(8:1)
1579    m_I2 = 0;       // Most recent parameter I2(8:1)
1580    m_Ip = 0;       // Previous instruction I(8:1)
3891581}
trunk/src/emu/cpu/pps4/pps4.h
r242231r242232
11// license:BSD-3-Clause
2// copyright-holders:Miodrag Milanovic
2// copyright-holders:Juergen Buchmueller <pullmoll@t-online.de>
33#ifndef __PPS4_H__
44#define __PPS4_H__
55
r242231r242232
99***************************************************************************/
1010enum
1111{
12   PPS4_PC,
13   PPS4_A,PPS4_X,PPS4_SA,PPS4_SB,PPS4_B,
14   PPS4_GENPC = STATE_GENPC,
15   PPS4_GENSP = STATE_GENSP,
16   PPS4_GENPCBASE = STATE_GENPCBASE
12    PPS4_PC,
13    PPS4_A,
14    PPS4_X,
15    PPS4_SA,
16    PPS4_SB,
17    PPS4_B,
18    PPS4_Skip,
19    PPS4_SAG,
20    PPS4_I2,
21    PPS4_Ip,
22    PPS4_GENPC = STATE_GENPC,
23    PPS4_GENSP = STATE_GENSP,
24    PPS4_GENPCBASE = STATE_GENPCBASE,
25    PPS4_PORT_A = 256,
26    PPS4_PORT_B = 257
1727};
1828
1929/***************************************************************************
r242231r242232
2636
2737extern const device_type PPS4;
2838
29
3039class pps4_device : public cpu_device
3140{
3241public:
33   // construction/destruction
34   pps4_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
42    // construction/destruction
43    pps4_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
3544
3645protected:
37   // device-level overrides
38   virtual void device_start();
39   virtual void device_reset();
46    // device-level overrides
47    virtual void device_start();
48    virtual void device_reset();
4049
41   // device_execute_interface overrides
42   virtual UINT32 execute_min_cycles() const { return 1; }
43   virtual UINT32 execute_max_cycles() const { return 2; }
44   virtual UINT32 execute_input_lines() const { return 0; }
45   virtual UINT32 execute_default_irq_vector() const { return 0; }
46   virtual void execute_run();
50    // device_execute_interface overrides
51    virtual UINT32 execute_min_cycles() const { return 1; }
52    virtual UINT32 execute_max_cycles() const { return 3; }
53    virtual UINT32 execute_input_lines() const { return 0; }
54    virtual UINT32 execute_default_irq_vector() const { return 0; }
55    virtual void execute_run();
4756
48   // device_memory_interface overrides
49   virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const
50   {
51      return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : ( (spacenum == AS_DATA) ? &m_data_config : NULL ) );
52   }
57    // device_memory_interface overrides
58    virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const
59    {
60        return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : ( (spacenum == AS_DATA) ? &m_data_config : NULL ) );
61    }
5362
54   // device_state_interface overrides
55   void state_string_export(const device_state_entry &entry, astring &string);
63    // device_state_interface overrides
64    void state_string_export(const device_state_entry &entry, astring &string);
5665
57   // device_disasm_interface overrides
58   virtual UINT32 disasm_min_opcode_bytes() const { return 1; }
59   virtual UINT32 disasm_max_opcode_bytes() const { return 2; }
60   virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
66    // device_disasm_interface overrides
67    virtual UINT32 disasm_min_opcode_bytes() const { return 1; }
68    virtual UINT32 disasm_max_opcode_bytes() const { return 2; }
69    virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
6170
6271private:
63   address_space_config m_program_config;
64   address_space_config m_data_config;
65   address_space_config m_io_config;
72    address_space_config m_program_config;
73    address_space_config m_data_config;
74    address_space_config m_io_config;
6675
67   UINT8   m_A; // Accumulator
68   UINT8   m_X;
76    address_space *m_program;
77    direct_read_data *m_direct;
78    address_space *m_data;
79    address_space *m_io;
80    int     m_icount;
6981
70   PAIR    m_P;
71   PAIR    m_SA;
72   PAIR    m_SB;
73   PAIR    m_B; // BU + BM + BL
82    UINT8   m_A;        //!< Accumulator A(4:1)
83    UINT8   m_X;        //!< X register X(4:1)
84    UINT16  m_P;        //!< program counter P(12:1)
85    UINT16  m_SA;       //!< Shift register SA(12:1)
86    UINT16  m_SB;       //!< Shift register SB(12:1)
87    UINT8   m_Skip;     //!< Skip next instruction
88    UINT16  m_SAG;      //!< Special address generation mask
89    UINT16  m_B;        //!< B register B(12:1) (BL, BM and BH)
90    UINT8   m_C;        //!< Carry flip-flop
91    UINT8   m_FF1;      //!< Flip-flop 1
92    UINT8   m_FF2;      //!< Flip-flop 2
93    UINT8   m_I;        //!< Most recent instruction I(8:1)
94    UINT8   m_I2;       //!< Most recent parameter I2(8:1)
95    UINT8   m_Ip;       //!< Previous instruction I(8:1)
7496
75   UINT8   m_C; // Carry flag
76   UINT8   m_FF1; // Flip-flop 1
77   UINT8   m_FF2; // Flip-flop 2
97    //! return the contents of B register (made of BU, BM and BL)
98    inline UINT16 B() const;
7899
79   address_space *m_program;
80   direct_read_data *m_direct;
81   address_space *m_data;
82   address_space *m_io;
100    //! return memory at address B(12:1)
101    inline UINT8 M();
83102
84   int                 m_icount;
103    //! write to memory at address B(12:1)
104    inline void W(UINT8 data);
85105
86   inline UINT8 ROP();
87   inline UINT8 ARG();
88   inline void DO_SKIP();
89   void execute_one(int opcode);
106    //! return the next opcode (also in m_I)
107    inline UINT8 ROP();
90108
109    //! return the next argument (also in m_I2)
110    inline UINT8 ARG();
111
112    void iAD();          //!< Add
113    void iADC();         //!< Add with carry-in
114    void iADSK();        //!< Add and skip on carry-out
115    void iADCSK();       //!< Add with carry-in and skip on carry-out
116    void iADI();         //!< Add immediate
117    void iDC();          //!< Decimal correction
118    void iAND();         //!< Logical AND
119    void iOR();          //!< Logical OR
120    void iEOR();         //!< Logical Exclusive-OR
121    void iCOMP();        //!< Complement
122    void iSC();          //!< Set Carry flip-flop
123    void iRC();          //!< Reset Carry flip-flop
124    void iSF1();         //!< Set FF1
125    void iRF1();         //!< Reset FF1
126    void iSF2();         //!< Set FF2
127    void iRF2();         //!< Reset FF2
128    void iLD();          //!< Load accumulator from memory
129    void iEX();          //!< Exchange accumulator and memory
130    void iEXD();         //!< Exchange accumulator and memory and decrement BL
131    void iLDI();         //!< Load accumulator immediate
132    void iLAX();         //!< Load accumulator from X register
133    void iLXA();         //!< Load X register from accumulator
134    void iLABL();        //!< Load accumulator with BL
135    void iLBMX();        //!< Load BM with X
136    void iLBUA();        //!< Load BU with A
137    void iXABL();        //!< Exchange accumulator and BL
138    void iXBMX();        //!< Exchange BM and X registers
139    void iXAX();         //!< Exchange accumulator and X
140    void iXS();          //!< Eychange SA and SB registers
141    void iCYS();         //!< Cycle SA register and accumulaor
142    void iLB();          //!< Load B indirect
143    void iLBL();         //!< Load B long
144    void iINCB();        //!< Increment BL
145    void iDECB();        //!< Decrement BL
146    void iT();           //!< Transfer
147    void iTM();          //!< Transfer and mark indirect
148    void iTL();          //!< Transfer long
149    void iTML();         //!< Transfer and mark long
150    void iSKC();         //!< Skip on carry flip-flop
151    void iSKZ();         //!< Skip on accumulator zero
152    void iSKBI();        //!< Skip if BL equal to immediate
153    void iSKF1();        //!< Skip if FF1 equals 1
154    void iSKF2();        //!< Skip if FF2 equals 1
155    void iRTN();         //!< Return
156    void iRTNSK();       //!< Return and skip
157    void iIOL();         //!< Input/Output long
158    void iDIA();         //!< Discrete input group A
159    void iDIB();         //!< Discrete input group B
160    void iDOA();         //!< Discrete output group A
161    void iSAG();         //!< Special address generation
162
163    void execute_one(); //!< execute one instruction
91164};
92165
93
94#endif
166#endif  // __PPS4_H__
trunk/src/emu/cpu/pps4/pps4dasm.c
r242231r242232
11// license:BSD-3-Clause
2// copyright-holders:Miodrag Milanovic
2// copyright-holders:Juergen Buchmueller <pullmoll@t-online.de>
33/*****************************************************************************
44 *
55 *   pps4dasm.c
66 *
77 *   Rockwell PPS-4 CPU Disassembly
88 *
9 *
10 * TODO: double verify all opcodes with t_Ixx flags
11 *
912 *****************************************************************************/
10
1113#include "emu.h"
1214
1315#define OP(A)   oprom[(A) - PC]
1416#define ARG(A)  opram[(A) - PC]
1517
18typedef enum pps4_token_e {
19    t_AD,       t_ADC,      t_ADSK,     t_ADCSK,    t_ADI,
20    t_DC,       t_AND,      t_OR,       t_EOR,      t_COMP,
21    t_SC,       t_RC,       t_SF1,      t_RF1,      t_SF2,
22    t_RF2,      t_LD,       t_EX,       t_EXD,      t_LDI,
23    t_LAX,      t_LXA,      t_LABL,     t_LBMX,     t_LBUA,
24    t_XABL,     t_XBMX,     t_XAX,      t_XS,       t_CYS,
25    t_LB,       t_LBL,      t_INCB,     t_DECB,     t_T,
26    t_TM,       t_TL,       t_TML,      t_SKC,      t_SKZ,
27    t_SKBI,     t_SKF1,     t_SKF2,     t_RTN,      t_RTNSK,
28    t_IOL,      t_DIA,      t_DIB,      t_DOA,      t_SAG,
29    t_COUNT,
30    t_MASK = (1 << 6) - 1,
31    t_I3c  = 1 <<  6,   /* immediate 3 bit constant, complemented */
32    t_I4   = 1 <<  7,   /* immediate 4 bit constant */
33    t_I4c  = 1 <<  8,   /* immediate 4 bit constant, complemented */
34    t_I4p  = 1 <<  9,   /* immediate 4 bit offset into page 3 */
35    t_I6p  = 1 << 10,   /* immediate 6 bit constant; address in current page */
36    t_I8   = 1 << 11,   /* immediate 8 bit constant (I/O port number) */
37    t_I8c  = 1 << 12,   /* immediate 8 bit constant inverted */
38    t_OVER = 1 << 13,   /* Debugger step over (CALL) */
39    t_OUT  = 1 << 14    /* Debugger step out (RETURN) */
40}   pps4_token_e;
41
42static const char *token_str[t_COUNT] = {
43    "ad",           /* add */
44    "adc",          /* add with carry-in */
45    "adsk",         /* add and skip on carry-out */
46    "adcsk",        /* add with carry-in and skip on carry-out */
47    "adi",          /* add immediate */
48    "dc",           /* decimal correction */
49    "and",          /* logical and */
50    "or",           /* logical or */
51    "eor",          /* logical exclusive-orf */
52    "comp",         /* complement */
53    "sc",           /* set C flip-flop */
54    "rc",           /* reset C flip-flop */
55    "sf1",          /* set FF1 flip-flop */
56    "rf1",          /* reset FF1 flip-flop */
57    "sf2",          /* set FF2 flip-flop */
58    "rf2",          /* reset FF2 flip-flop */
59    "ld",           /* load accumulator from memory */
60    "ex",           /* exchange accumulator and memory */
61    "exd",          /* exchange accumulator and memory and decrement BL */
62    "ldi",          /* load accumulator immediate */
63    "lax",          /* load accumulator from X register */
64    "lxa",          /* load X register from accumulator */
65    "labl",         /* load accumulator with BL */
66    "lbmx",         /* load BM with X */
67    "lbua",         /* load BU with A */
68    "xabl",         /* exchange accumulator and BL */
69    "xbmx",         /* exchange BM and X */
70    "xax",          /* exchange accumulator and X */
71    "xs",           /* exchange SA and SB */
72    "cys",          /* cycle SA register and accumulator */
73    "lb",           /* load B indirect */
74    "lbl",          /* load B long */
75    "incb",         /* increment BL */
76    "decb",         /* decrement BL */
77    "t",            /* transfer */
78    "tm",           /* transfer and mark indirect */
79    "tl",           /* transfer long */
80    "tml",          /* transfer and mark long */
81    "skc",          /* skip on C flip-flop equals 1 */
82    "skz",          /* skip on accumulator zero */
83    "skbi",         /* skip on BL equal to immediate */
84    "skf1",         /* skip on FF1 flip-flop equals 1 */
85    "skf2",         /* skip on FF2 flip-flop equals 1 */
86    "rtn",          /* return */
87    "rtnsk",        /* return and skip */
88    "iol",          /* input/output long */
89    "dia",          /* discrete input group A */
90    "dib",          /* discrete input group B */
91    "doa",          /* discrete output */
92    "sag"           /* special address generation */
93};
94
95static const UINT16 table[] = {
96/* 00 */ t_LBL | t_I8c,
97/* 01 */ t_TML | t_I4 | t_I8,
98/* 02 */ t_TML | t_I4 | t_I8,
99/* 03 */ t_TML | t_I4 | t_I8,
100/* 04 */ t_LBUA,
101/* 05 */ t_RTN | t_OUT,
102/* 06 */ t_XS,
103/* 07 */ t_RTNSK | t_OUT,
104/* 08 */ t_ADCSK,
105/* 09 */ t_ADSK,
106/* 0a */ t_ADC,
107/* 0b */ t_AD,
108/* 0c */ t_EOR,
109/* 0d */ t_AND,
110/* 0e */ t_COMP,
111/* 0f */ t_OR,
112
113/* 10 */ t_LBMX,
114/* 11 */ t_LABL,
115/* 12 */ t_LAX,
116/* 13 */ t_SAG,
117/* 14 */ t_SKF2,
118/* 15 */ t_SKC,
119/* 16 */ t_SKF1,
120/* 17 */ t_INCB,
121/* 18 */ t_XBMX,
122/* 19 */ t_XABL,
123/* 1a */ t_XAX,
124/* 1b */ t_LXA,
125/* 1c */ t_IOL | t_I8,
126/* 1d */ t_DOA,
127/* 1e */ t_SKZ,
128/* 1f */ t_DECB,
129
130/* 20 */ t_SC,
131/* 21 */ t_SF2,
132/* 22 */ t_SF1,
133/* 23 */ t_DIB,
134/* 24 */ t_RC,
135/* 25 */ t_RF2,
136/* 26 */ t_RF1,
137/* 27 */ t_DIA,
138/* 28 */ t_EXD | t_I3c,
139/* 29 */ t_EXD | t_I3c,
140/* 2a */ t_EXD | t_I3c,
141/* 2b */ t_EXD | t_I3c,
142/* 2c */ t_EXD | t_I3c,
143/* 2d */ t_EXD | t_I3c,
144/* 2e */ t_EXD | t_I3c,
145/* 2f */ t_EXD | t_I3c,
146
147/* 30 */ t_LD | t_I3c,
148/* 31 */ t_LD | t_I3c,
149/* 32 */ t_LD | t_I3c,
150/* 33 */ t_LD | t_I3c,
151/* 34 */ t_LD | t_I3c,
152/* 35 */ t_LD | t_I3c,
153/* 36 */ t_LD | t_I3c,
154/* 37 */ t_LD | t_I3c,
155/* 38 */ t_EX | t_I3c,
156/* 39 */ t_EX | t_I3c,
157/* 3a */ t_EX | t_I3c,
158/* 3b */ t_EX | t_I3c,
159/* 3c */ t_EX | t_I3c,
160/* 3d */ t_EX | t_I3c,
161/* 3e */ t_EX | t_I3c,
162/* 3f */ t_EX | t_I3c,
163
164/* 40 */ t_SKBI | t_I4,
165/* 41 */ t_SKBI | t_I4,
166/* 42 */ t_SKBI | t_I4,
167/* 43 */ t_SKBI | t_I4,
168/* 44 */ t_SKBI | t_I4,
169/* 45 */ t_SKBI | t_I4,
170/* 46 */ t_SKBI | t_I4,
171/* 47 */ t_SKBI | t_I4,
172/* 48 */ t_SKBI | t_I4,
173/* 49 */ t_SKBI | t_I4,
174/* 4a */ t_SKBI | t_I4,
175/* 4b */ t_SKBI | t_I4,
176/* 4c */ t_SKBI | t_I4,
177/* 4d */ t_SKBI | t_I4,
178/* 4e */ t_SKBI | t_I4,
179/* 4f */ t_SKBI | t_I4,
180
181/* 50 */ t_TL | t_I4 | t_I8 | t_OVER,
182/* 51 */ t_TL | t_I4 | t_I8 | t_OVER,
183/* 52 */ t_TL | t_I4 | t_I8 | t_OVER,
184/* 53 */ t_TL | t_I4 | t_I8 | t_OVER,
185/* 54 */ t_TL | t_I4 | t_I8 | t_OVER,
186/* 55 */ t_TL | t_I4 | t_I8 | t_OVER,
187/* 56 */ t_TL | t_I4 | t_I8 | t_OVER,
188/* 57 */ t_TL | t_I4 | t_I8 | t_OVER,
189/* 58 */ t_TL | t_I4 | t_I8 | t_OVER,
190/* 59 */ t_TL | t_I4 | t_I8 | t_OVER,
191/* 5a */ t_TL | t_I4 | t_I8 | t_OVER,
192/* 5b */ t_TL | t_I4 | t_I8 | t_OVER,
193/* 5c */ t_TL | t_I4 | t_I8 | t_OVER,
194/* 5d */ t_TL | t_I4 | t_I8 | t_OVER,
195/* 5e */ t_TL | t_I4 | t_I8 | t_OVER,
196/* 5f */ t_TL | t_I4 | t_I8 | t_OVER,
197
198/* 60 */ t_ADI | t_I4c,
199/* 61 */ t_ADI | t_I4c,
200/* 62 */ t_ADI | t_I4c,
201/* 63 */ t_ADI | t_I4c,
202/* 64 */ t_ADI | t_I4c,
203/* 65 */ t_DC,
204/* 66 */ t_ADI | t_I4c,
205/* 67 */ t_ADI | t_I4c,
206/* 68 */ t_ADI | t_I4c,
207/* 69 */ t_ADI | t_I4c,
208/* 6a */ t_ADI | t_I4c,
209/* 6b */ t_ADI | t_I4c,
210/* 6c */ t_ADI | t_I4c,
211/* 6d */ t_ADI | t_I4c,
212/* 6e */ t_ADI | t_I4c,
213/* 6f */ t_CYS,
214
215/* 70 */ t_LDI | t_I4c,
216/* 71 */ t_LDI | t_I4c,
217/* 72 */ t_LDI | t_I4c,
218/* 73 */ t_LDI | t_I4c,
219/* 74 */ t_LDI | t_I4c,
220/* 75 */ t_LDI | t_I4c,
221/* 76 */ t_LDI | t_I4c,
222/* 77 */ t_LDI | t_I4c,
223/* 78 */ t_LDI | t_I4c,
224/* 79 */ t_LDI | t_I4c,
225/* 7a */ t_LDI | t_I4c,
226/* 7b */ t_LDI | t_I4c,
227/* 7c */ t_LDI | t_I4c,
228/* 7d */ t_LDI | t_I4c,
229/* 7e */ t_LDI | t_I4c,
230/* 7f */ t_LDI | t_I4c,
231
232/* 80 */ t_T | t_I6p,
233/* 81 */ t_T | t_I6p,
234/* 82 */ t_T | t_I6p,
235/* 83 */ t_T | t_I6p,
236/* 84 */ t_T | t_I6p,
237/* 85 */ t_T | t_I6p,
238/* 86 */ t_T | t_I6p,
239/* 87 */ t_T | t_I6p,
240/* 88 */ t_T | t_I6p,
241/* 89 */ t_T | t_I6p,
242/* 8a */ t_T | t_I6p,
243/* 8b */ t_T | t_I6p,
244/* 8c */ t_T | t_I6p,
245/* 8d */ t_T | t_I6p,
246/* 8e */ t_T | t_I6p,
247/* 8f */ t_T | t_I6p,
248
249/* 90 */ t_T | t_I6p,
250/* 91 */ t_T | t_I6p,
251/* 92 */ t_T | t_I6p,
252/* 93 */ t_T | t_I6p,
253/* 94 */ t_T | t_I6p,
254/* 95 */ t_T | t_I6p,
255/* 96 */ t_T | t_I6p,
256/* 97 */ t_T | t_I6p,
257/* 98 */ t_T | t_I6p,
258/* 99 */ t_T | t_I6p,
259/* 9a */ t_T | t_I6p,
260/* 9b */ t_T | t_I6p,
261/* 9c */ t_T | t_I6p,
262/* 9d */ t_T | t_I6p,
263/* 9e */ t_T | t_I6p,
264/* 9f */ t_T | t_I6p,
265
266/* a0 */ t_T | t_I6p,
267/* a1 */ t_T | t_I6p,
268/* a2 */ t_T | t_I6p,
269/* a3 */ t_T | t_I6p,
270/* a4 */ t_T | t_I6p,
271/* a5 */ t_T | t_I6p,
272/* a6 */ t_T | t_I6p,
273/* a7 */ t_T | t_I6p,
274/* a8 */ t_T | t_I6p,
275/* a9 */ t_T | t_I6p,
276/* aa */ t_T | t_I6p,
277/* ab */ t_T | t_I6p,
278/* ac */ t_T | t_I6p,
279/* ad */ t_T | t_I6p,
280/* ae */ t_T | t_I6p,
281/* af */ t_T | t_I6p,
282
283/* b0 */ t_T | t_I6p,
284/* b1 */ t_T | t_I6p,
285/* b2 */ t_T | t_I6p,
286/* b3 */ t_T | t_I6p,
287/* b4 */ t_T | t_I6p,
288/* b5 */ t_T | t_I6p,
289/* b6 */ t_T | t_I6p,
290/* b7 */ t_T | t_I6p,
291/* b8 */ t_T | t_I6p,
292/* b9 */ t_T | t_I6p,
293/* ba */ t_T | t_I6p,
294/* bb */ t_T | t_I6p,
295/* bc */ t_T | t_I6p,
296/* bd */ t_T | t_I6p,
297/* be */ t_T | t_I6p,
298/* bf */ t_T | t_I6p,
299
300/* c0 */ t_LB | t_I4p,
301/* c1 */ t_LB | t_I4p,
302/* c2 */ t_LB | t_I4p,
303/* c3 */ t_LB | t_I4p,
304/* c4 */ t_LB | t_I4p,
305/* c5 */ t_LB | t_I4p,
306/* c6 */ t_LB | t_I4p,
307/* c7 */ t_LB | t_I4p,
308/* c8 */ t_LB | t_I4p,
309/* c9 */ t_LB | t_I4p,
310/* ca */ t_LB | t_I4p,
311/* cb */ t_LB | t_I4p,
312/* cc */ t_LB | t_I4p,
313/* cd */ t_LB | t_I4p,
314/* ce */ t_LB | t_I4p,
315/* cf */ t_LB | t_I4p,
316
317/* d0 */ t_TM | t_I6p | t_OVER,
318/* d1 */ t_TM | t_I6p | t_OVER,
319/* d2 */ t_TM | t_I6p | t_OVER,
320/* d3 */ t_TM | t_I6p | t_OVER,
321/* d4 */ t_TM | t_I6p | t_OVER,
322/* d5 */ t_TM | t_I6p | t_OVER,
323/* d6 */ t_TM | t_I6p | t_OVER,
324/* d7 */ t_TM | t_I6p | t_OVER,
325/* d8 */ t_TM | t_I6p | t_OVER,
326/* d9 */ t_TM | t_I6p | t_OVER,
327/* da */ t_TM | t_I6p | t_OVER,
328/* db */ t_TM | t_I6p | t_OVER,
329/* dc */ t_TM | t_I6p | t_OVER,
330/* dd */ t_TM | t_I6p | t_OVER,
331/* de */ t_TM | t_I6p | t_OVER,
332/* df */ t_TM | t_I6p | t_OVER,
333
334/* e0 */ t_TM | t_I6p | t_OVER,
335/* e1 */ t_TM | t_I6p | t_OVER,
336/* e2 */ t_TM | t_I6p | t_OVER,
337/* e3 */ t_TM | t_I6p | t_OVER,
338/* e4 */ t_TM | t_I6p | t_OVER,
339/* e5 */ t_TM | t_I6p | t_OVER,
340/* e6 */ t_TM | t_I6p | t_OVER,
341/* e7 */ t_TM | t_I6p | t_OVER,
342/* e8 */ t_TM | t_I6p | t_OVER,
343/* e9 */ t_TM | t_I6p | t_OVER,
344/* ea */ t_TM | t_I6p | t_OVER,
345/* eb */ t_TM | t_I6p | t_OVER,
346/* ec */ t_TM | t_I6p | t_OVER,
347/* ed */ t_TM | t_I6p | t_OVER,
348/* ee */ t_TM | t_I6p | t_OVER,
349/* ef */ t_TM | t_I6p | t_OVER,
350
351/* f0 */ t_TM | t_I6p | t_OVER,
352/* f1 */ t_TM | t_I6p | t_OVER,
353/* f2 */ t_TM | t_I6p | t_OVER,
354/* f3 */ t_TM | t_I6p | t_OVER,
355/* f4 */ t_TM | t_I6p | t_OVER,
356/* f5 */ t_TM | t_I6p | t_OVER,
357/* f6 */ t_TM | t_I6p | t_OVER,
358/* f7 */ t_TM | t_I6p | t_OVER,
359/* f8 */ t_TM | t_I6p | t_OVER,
360/* f9 */ t_TM | t_I6p | t_OVER,
361/* fa */ t_TM | t_I6p | t_OVER,
362/* fb */ t_TM | t_I6p | t_OVER,
363/* fc */ t_TM | t_I6p | t_OVER,
364/* fd */ t_TM | t_I6p | t_OVER,
365/* fe */ t_TM | t_I6p | t_OVER,
366/* ff */ t_TM | t_I6p | t_OVER
367};
368
16369CPU_DISASSEMBLE( pps4 )
17370{
18   UINT32 flags = 0;
19   unsigned PC = pc;
20   UINT8 op;
21   switch (op = OP(pc++))
22   {
23      // Arithmetic instructions
24      case 0x0b:  sprintf (buffer,"ad");  break;
25      case 0x0a:  sprintf (buffer,"adc"); break;
26      case 0x09:  sprintf (buffer,"adsk");    break;
27      case 0x08:  sprintf (buffer,"adcsk");   break;
28      case 0x60:  case 0x61:  case 0x62:  case 0x63:
29      case 0x64:  case 0x66:  case 0x67:  case 0x68:
30      case 0x69:  case 0x6a:  case 0x6b:  case 0x6c:
31      case 0x6d:  case 0x6e:
32               sprintf (buffer,"adi %01x",(op & 0x0f));    break;
33      case 0x65:  sprintf (buffer,"dc");  break;
34      // Logical instructions
35      case 0x0d:  sprintf (buffer,"and"); break;
36      case 0x0f:  sprintf (buffer,"or");  break;
37      case 0x0c:  sprintf (buffer,"eor"); break;
38      case 0x0e:  sprintf (buffer,"comp");    break;
39      // Data transfer instructions
40      case 0x20:  sprintf (buffer,"sc");  break;
41      case 0x24:  sprintf (buffer,"rc");  break;
42      case 0x22:  sprintf (buffer,"sf1"); break;
43      case 0x26:  sprintf (buffer,"rf1"); break;
44      case 0x21:  sprintf (buffer,"sf2"); break;
45      case 0x25:  sprintf (buffer,"rf2"); break;
46      case 0x30:  case 0x31:  case 0x32:  case 0x33:
47      case 0x34:  case 0x35:  case 0x36:  case 0x37:
48               sprintf (buffer,"ld %01x",(op & 0x07)); break;
49      case 0x38:  case 0x39:  case 0x3a:  case 0x3b:
50      case 0x3c:  case 0x3d:  case 0x3e:  case 0x3f:
51               sprintf (buffer,"ex %01x",(op & 0x07)); break;
52      case 0x28:  case 0x29:  case 0x2a:  case 0x2b:
53      case 0x2c:  case 0x2d:  case 0x2e:  case 0x2f:
54               sprintf (buffer,"exd %01x",(op & 0x07));    break;
55      case 0x70:  case 0x71:  case 0x72:  case 0x73:
56      case 0x74:  case 0x75:  case 0x76:  case 0x77:
57               sprintf (buffer,"ldi %01x",(op & 0x0f));    break;
58      case 0x12:  sprintf (buffer,"lax"); break;
59      case 0x1b:  sprintf (buffer,"lxa"); break;
60      case 0x11:  sprintf (buffer,"labl");    break;
61      case 0x10:  sprintf (buffer,"lbmx");    break;
62      case 0x04:  sprintf (buffer,"lbua");    break;
63      case 0x19:  sprintf (buffer,"xabl");    break;
64      case 0x18:  sprintf (buffer,"xbmx");    break;
65      case 0x1a:  sprintf (buffer,"xax"); break;
66      case 0x06:  sprintf (buffer,"xs");  break;
67      case 0x6f:  sprintf (buffer,"cys"); break;
68      case 0xc0:  case 0xc1:  case 0xc2:  case 0xc3:
69      case 0xc4:  case 0xc5:  case 0xc6:  case 0xc7:
70      case 0xc8:  case 0xc9:  case 0xca:  case 0xcb:
71      case 0xcc:  case 0xcd:  case 0xce:  case 0xcf:
72               sprintf (buffer,"lb %02x",ARG(pc)); pc++;   break;
73      case 0x00:  sprintf (buffer,"lbl %02x",ARG(pc)); pc++;  break;
74      case 0x17:  sprintf (buffer,"incb");    break;
75      case 0x1f:  sprintf (buffer,"decb");    break;
76      // Control transfer instructions
77      case 0x80:  case 0x81:  case 0x82:  case 0x83:
78      case 0x84:  case 0x85:  case 0x86:  case 0x87:
79      case 0x88:  case 0x89:  case 0x8a:  case 0x8b:
80      case 0x8c:  case 0x8d:  case 0x8e:  case 0x8f:
81      case 0x90:  case 0x91:  case 0x92:  case 0x93:
82      case 0x94:  case 0x95:  case 0x96:  case 0x97:
83      case 0x98:  case 0x99:  case 0x9a:  case 0x9b:
84      case 0x9c:  case 0x9d:  case 0x9e:  case 0x9f:
85      case 0xa0:  case 0xa1:  case 0xa2:  case 0xa3:
86      case 0xa4:  case 0xa5:  case 0xa6:  case 0xa7:
87      case 0xa8:  case 0xa9:  case 0xaa:  case 0xab:
88      case 0xac:  case 0xad:  case 0xae:  case 0xaf:
89      case 0xb0:  case 0xb1:  case 0xb2:  case 0xb3:
90      case 0xb4:  case 0xb5:  case 0xb6:  case 0xb7:
91      case 0xb8:  case 0xb9:  case 0xba:  case 0xbb:
92      case 0xbc:  case 0xbd:  case 0xbe:  case 0xbf:
93               sprintf (buffer,"t %02x",(op & 0x3f));  break;
94      case 0xd0:  case 0xd1:  case 0xd2:  case 0xd3:
95      case 0xd4:  case 0xd5:  case 0xd6:  case 0xd7:
96      case 0xd8:  case 0xd9:  case 0xda:  case 0xdb:
97      case 0xdc:  case 0xdd:  case 0xde:  case 0xdf:
98      case 0xe0:  case 0xe1:  case 0xe2:  case 0xe3:
99      case 0xe4:  case 0xe5:  case 0xe6:  case 0xe7:
100      case 0xe8:  case 0xe9:  case 0xea:  case 0xeb:
101      case 0xec:  case 0xed:  case 0xee:  case 0xef:
102      case 0xf0:  case 0xf1:  case 0xf2:  case 0xf3:
103      case 0xf4:  case 0xf5:  case 0xf6:  case 0xf7:
104      case 0xf8:  case 0xf9:  case 0xfa:  case 0xfb:
105      case 0xfc:  case 0xfd:  case 0xfe:  case 0xff:
106               sprintf (buffer,"tm %02x %02x",(op & 0x3f),ARG(pc)); pc++;  break;
107      case 0x50:  case 0x51:  case 0x52:  case 0x53:
108      case 0x54:  case 0x55:  case 0x56:  case 0x57:
109      case 0x58:  case 0x59:  case 0x5a:  case 0x5b:
110      case 0x5c:  case 0x5d:  case 0x5e:  case 0x5f:
111               sprintf (buffer,"tl %01x %02x",(op & 0x0f),ARG(pc)); pc++;  break;
112      case 0x01:  case 0x02:  case 0x03:
113               sprintf (buffer,"tml %02x",ARG(pc)); pc++;  break;
114      case 0x15:  sprintf (buffer,"skc"); break;
115      case 0x1e:  sprintf (buffer,"skz"); break;
116      case 0x40:  case 0x41:  case 0x42:  case 0x43:
117      case 0x44:  case 0x45:  case 0x46:  case 0x47:
118      case 0x48:  case 0x49:  case 0x4a:  case 0x4b:
119      case 0x4c:  case 0x4d:  case 0x4e:  case 0x4f:
120               sprintf (buffer,"skbi %01x",(op & 0x0f));   break;
121      case 0x16:  sprintf (buffer,"skf1");    break;
122      case 0x14:  sprintf (buffer,"skf2");    break;
123      case 0x05:  sprintf (buffer,"rtn"); break;
124      case 0x07:  sprintf (buffer,"rtnsk");   break;
125      // Input/Output instructions
126      case 0x1c:  sprintf (buffer,"iol %02x",ARG(pc)); pc++;  break;
127      case 0x27:  sprintf (buffer,"dia"); break;
128      case 0x23:  sprintf (buffer,"dib"); break;
129      case 0x1d:  sprintf (buffer,"doa"); break;
130      // Special instructions
131      case 0x13:  sprintf (buffer,"sag"); break;
132   }
371    UINT32 flags = 0;
372    unsigned PC = pc;
373    UINT8 op = OP(pc++);
374    UINT32 tok = table[op];
375    char *dst = 0;
133376
134   return (pc - PC) | flags | DASMFLAG_SUPPORTED;
377    if (0 == (tok & t_MASK))
378        sprintf(buffer, "%s", token_str[tok & t_MASK]);
379    else
380        dst = buffer + sprintf(buffer, "%-7s", token_str[tok & t_MASK]);
381
382    if (tok & t_I3c) {
383        // 3 bit immediate, complemented
384        UINT8 i = ~op & 7;
385        if (0 != i)  // only print if non-zero
386            dst += sprintf(dst, "%x", i);
387    }
388
389    if (tok & t_I4) {
390        // 4 bit immediate
391        UINT8 i = op & 15;
392        dst += sprintf(dst, "%x", i);
393    }
394
395    if (tok & t_I4c) {
396        // 4 bit immediate, complemented
397        UINT8 i = ~op & 15;
398        dst += sprintf(dst, "%x", i);
399    }
400
401    if (tok & t_I4p) {
402        // 4 bit immediate offset into page 3
403        UINT8 i = op & 15;
404        dst += sprintf(dst, "[%x]", 0x0c0 | i);
405    }
406
407    if (tok & t_I6p) {
408        // 6 bit immediate offset into current page
409        UINT8 i = op & 63;
410        dst += sprintf(dst, "%x", (PC & ~63) | i);
411    }
412
413    if (tok & t_I8) {
414        // 8 bit immediate I/O port address
415        UINT8 arg = ARG(pc++);
416        dst += sprintf(dst, "%02x", arg);
417    }
418
419    if (tok & t_I8c) {
420        // 8 bit immediate offset into page
421        UINT16 arg = ~ARG(pc++) & 255;
422        dst += sprintf(dst, "%03x", arg);
423    }
424
425    if (tok & t_OVER)  // TL or TML
426            flags |= DASMFLAG_STEP_OVER;
427
428    if (tok & t_OUT)   // RTN or RTNSK
429            flags |= DASMFLAG_STEP_OUT;
430
431    return (pc - PC) | flags | DASMFLAG_SUPPORTED;
135432}
trunk/src/emu/cpu/tms0980/tms0980.c
r242231r242232
1// license:BSD-3-Clause
2// copyright-holders:Wilbert Pol, hap
13/*
24
5  TMS0980/TMS1000-family MCU cores
36
4TMS0980/TMS1000-family CPU cores
5
6The tms0980 and tms1000-family cpu cores are very similar. The tms0980 has a
7slightly bigger addressable area and uses 9bit instructions where the tms1000
7The TMS0980 and TMS1000-family MCU cores are very similar. The TMS0980 has a
8slightly bigger addressable area and uses 9bit instructions where the TMS1000
89family uses 8bit instruction. The instruction set themselves are very similar
9though. The table below shows the differences between the different models.
10though.
1011
11Mode     | ROM       | RAM      | R pins | O pins | K pins | ids
12---------+-----------+----------+--------+--------+--------|----------
13tms0970  | 1024 *  8 |  64 *  4 |        |        |        | tms0972
14tms0920* |  511?*  9 |  40 *  5 |        |        |        | tmc0921
15tms0980  | 2048 *  9 |  64 *  9 |        |        |        | tmc0981
16tms1000  | 1024 *  8 |  64 *  4 |     11 |      8 |      4 | tms1001
17tms1040* | 1024 *  8 |  64 *  4 |        |        |        | tms1043
18tms1070  | 1024 *  8 |  64 *  4 |     11 |      8 |      4 | tms1071
19tms1100  | 2048 *  8 | 128 *  4 |     11 |      8 |      4 | tms1111/tms1115
20tms1170* | 2048 *  8 | 128 *  4 |        |        |        | tmc1172
21tms1200  | 1024 *  8 |  64 *  4 |     13 |      8 |      4 | tms1215
22tms1270  | 1024 *  8 |  64 *  4 |     13 |     10 |      4 | tms1278
23tms1300  | 2048 *  8 | 128 *  4 |     16 |      8 |      4 | tms1309
24tms1370* | 2048 *  8 | 128 *  4 |        |        |        | za0543
25tms1400* | 4096 *  8 | 128 *  4 |        |        |        |
26tms1470* | 4096 *  8 | 128 *  4 |        |        |        | tms1470
27tms1500* | 2048 * 13 |  64 * 20 |        |        |        | tmc1501
28tms1600* | 4096 *  8 | 128 *  4 |        |        |        |
29tms1670* | 4096 *  8 | 128 *  4 |        |        |        |
30tms1700* |  512 *  8 |  32 *  4 |        |        |        |
31tms1980* | 2048 *  9 |  64 *  9 |        |        |        | tmc1982
32tms1990* | 1024 *  8 |  64 *  4 |        |        |        | tmc1991
33tp0310*  |  511?*  9 |  40 *  5 |        |        |        | tp0311
34tp0320*  | 2048 *  9 |  64 * 13 |        |        |        | tp0321
35tp0455*  |           |          |        |        |        | cd4501
36tp0456*  |           |          |        |        |        | cd4555
37tp0458*  |           |          |        |        |        | cd4812
38tp0485*  |           |          |        |        |        | cd2901
39tp0530*  |           |          |        |        |        | cd5402
40
41* = not supported yet
42
43The TMS1000 core has been tested with some example code, the other models
44have not been tested lacking rom dumps.
45
4612Each instruction takes 12 cycles to execute in 2 phases: a fetch phase and an
4713execution phase. The execution phase takes place at the same time as the fetch
4814phase of the next instruction. So, during execution there are both fetch and
r242231r242232
8248    - Execute:
8349        1. Execute BRANCH/CALL/RETN part #1
8450
51*/
8552
86The CPU cores contains a set of fixed instructions and a set of
53#include "tms0980.h"
54#include "debugger.h"
55
56/*
57
58The MCU cores contains a set of fixed instructions and a set of
8759instructions created using microinstructions. A subset of the
8860instruction set could be defined from the microinstructions by
89TI customers. Currently we only support the standard instruction
90set as defined by TI.
61TI customers.
9162
92The microinstructions are:
9315TN  - 15 to -ALU
94ATN   - ACC to -ALU
95AUTA  - ALU to ACC
96AUTY  - ALU to Y
97C8    - CARRY8 to STATUS
98CIN   - Carry In to ALU
99CKM   - CKB to MEM
100CKN   - CKB to -ALU
101CKP   - CKB to +ALU
102CME   - Conditional Memory Enable
103DMTP  - DAM to +ALU
104MTN   - MEM to -ALU
105MTP   - MEM to +ALU
106NATN  - ~ACC to -ALU
107NDMTP - ~DAM to +ALU
108NE    - COMP to STATUS
109SSE   - Special Status Enable
110SSS   - Special Status Sample
111STO   - ACC to MEM
112YTP   - Y to +ALU
113
11463cycle #0: 15TN, ATN, CIN, CKN, CKP, DMTP, MTN, MTP, NATN, NDMTP, YTP
11564cycle #2: C8(?), CKM, NE(?), STO
11665cycle #3,#4: AUTA, AUTY
r242231r242232
11968
12069*/
12170
122#include "emu.h"
123#include "debugger.h"
124#include "tms0980.h"
71/* Microinstructions */
72#define M_15TN              0x00000001 /* 15 to -ALU */
73#define M_ATN               0x00000002 /* ACC to -ALU */
74#define M_AUTA              0x00000004 /* ALU to ACC */
75#define M_AUTY              0x00000008 /* ALU to Y */
76#define M_C8                0x00000010 /* CARRY8 to STATUS */
77#define M_CIN               0x00000020 /* Carry In to ALU */
78#define M_CKM               0x00000040 /* CKB to MEM */
79#define M_CKN               0x00000080 /* CKB to -ALU */
80#define M_CKP               0x00000100 /* CKB to +ALU */
81#define M_CME               0x00000200 /* Conditional Memory Enable */
82#define M_DMTP              0x00000400 /* DAM to +ALU */
83#define M_MTN               0x00000800 /* MEM to -ALU */
84#define M_MTP               0x00001000 /* MEM to +ALU */
85#define M_NATN              0x00002000 /* ~ACC to -ALU */
86#define M_NDMTP             0x00004000 /* ~DAM to +ALU */
87#define M_NE                0x00008000 /* COMP to STATUS */
88#define M_SSE               0x00010000 /* Special Status Enable */
89#define M_SSS               0x00020000 /* Special Status Sample */
90#define M_STO               0x00040000 /* ACC to MEM */
91#define M_STSL              0x00080000 /* STATUS to Status Latch */
92#define M_YTP               0x00100000 /* Y to +ALU */
12593
126
127
128const device_type TMS0980 = &device_creator<tms0980_cpu_device>;
129const device_type TMS1000 = &device_creator<tms1000_cpu_device>;
130const device_type TMS0970 = &device_creator<tms0970_cpu_device>;
131const device_type TMS1070 = &device_creator<tms1070_cpu_device>;
132const device_type TMS1200 = &device_creator<tms1200_cpu_device>;
133const device_type TMS1270 = &device_creator<tms1270_cpu_device>;
134const device_type TMS1100 = &device_creator<tms1100_cpu_device>;
135const device_type TMS1300 = &device_creator<tms1300_cpu_device>;
136
137
138#define MICRO_MASK          0x80000000
139#define FIXED_INSTRUCTION   0x00000000
140
141
142/* Standard/fixed intructions */
143#define F_ILL               0x00000000
94/* Standard/fixed instructions - these are documented more in their specific handlers below */
14495#define F_BR                0x00000001
14596#define F_CALL              0x00000002
14697#define F_CLO               0x00000004
r242231r242232
160111#define F_SEAC              0x00010000
161112#define F_SETR              0x00020000
162113#define F_TDO               0x00040000
114#define F_XDA               0x00080000
163115
164116
165/* Microinstructions */
166#define M_15TN              0x00000001
167#define M_ATN               0x00000002
168#define M_AUTA              0x00000004
169#define M_AUTY              0x00000008
170#define M_C8                0x00000010
171#define M_CIN               0x00000020
172#define M_CKM               0x00000040
173#define M_CKN               0x00000080
174#define M_CKP               0x00000100
175#define M_CME               0x00000200
176#define M_DMTP              0x00000400
177#define M_MTN               0x00000800
178#define M_MTP               0x00001000
179#define M_NATN              0x00002000
180#define M_NDMTP             0x00004000
181#define M_NE                0x00008000
182#define M_SSE               0x00010000
183#define M_SSS               0x00020000
184#define M_STO               0x00040000
185#define M_STSL              0x00080000
186#define M_YTP               0x00100000
117// supported types:
118// note: dice information assumes the orientation is pictured with RAM at the bottom-left
187119
120// TMS1000
121// - 64x4bit RAM array at the bottom-left
122// - 1024x8bit ROM array at the bottom-right
123//   * FYI, the row-selector to the left of it is laid out as:
124//     3,4,11,12,19,20,27,28,35,36,43,44,51,52,59,60,0,7,8,15,16,23,24,31,32,39,40,47,48,55,56,63,
125//     2,5,10,13,18,21,26,29,34,37,42,45,50,53,58,61,1,6,9,14,17,22,25,30,33,38,41,46,49,54,57,62
126// - 30-term microinstructions PLA(mpla) at the top half, to the right of the midline, supporting 16 microinstructions
127// - 20-term output PLA(opla) at the top-left
128// - the ALU is between the opla and mpla
129const device_type TMS1000 = &device_creator<tms1000_cpu_device>; // 28-pin DIP, 11 R pins
130const device_type TMS1200 = &device_creator<tms1200_cpu_device>; // 40-pin DIP, 13 R pins
131const device_type TMS1070 = &device_creator<tms1070_cpu_device>; // same as tms1000, just supports higher voltage
132// TMS1270 has 10 O pins, how does that work?
188133
189/* instructions built from microinstructions */
190#define I_AC1AC     ( MICRO_MASK | M_CKP | M_ATN | M_CIN | M_C8 | M_AUTA )
191#define I_A6AAC     I_ACACC
192#define I_A8AAC     I_ACACC
193#define I_A10AAC    I_ACACC
194#define I_ACACC     ( MICRO_MASK | M_CKP | M_ATN | M_C8 | M_AUTA )
195#define I_ACNAA     ( MICRO_MASK | M_CKP | M_NATN | M_AUTA )
196#define I_ALEC      ( MICRO_MASK | M_CKP | M_NATN | M_CIN | M_C8 )
197#define I_ALEM      ( MICRO_MASK | M_MTP | M_NATN | M_CIN | M_C8 )
198#define I_AMAAC     ( MICRO_MASK | M_MTP | M_ATN | M_C8 | M_AUTA )
199#define I_CCLA      ( MICRO_MASK | M_AUTA | M_SSS )
200#define I_CLA       ( MICRO_MASK | M_AUTA )
201#define I_CPAIZ     ( MICRO_MASK | M_NATN | M_CIN | M_C8 | M_AUTA )
202#define I_CTMDYN    ( MICRO_MASK | M_YTP | M_15TN | M_C8 | M_AUTY | M_CME )
203#define I_DAN       ( MICRO_MASK | M_CKP | M_ATN | M_CIN | M_C8 | M_AUTA )
204#define I_DMAN      ( MICRO_MASK | M_MTP | M_15TN | M_C8 | M_AUTA )
205#define I_DMEA      ( MICRO_MASK | M_MTP | M_DMTP | M_SSS | M_AUTA )
206#define I_NDMEA     ( MICRO_MASK | M_MTN | M_NDMTP | M_SSS | M_AUTA )
207#define I_DNAA      ( MICRO_MASK | M_DMTP | M_NATN | M_SSS | M_AUTA )
208#define I_DYN       ( MICRO_MASK | M_YTP | M_15TN | M_C8 | M_AUTY )
209#define I_IA        ( MICRO_MASK | M_ATN | M_CIN | M_AUTA )
210#define I_IMAC      ( MICRO_MASK | M_MTP | M_CIN | M_C8 | M_AUTA )
211#define I_IYC       ( MICRO_MASK | M_YTP | M_CIN | M_C8 | M_AUTY )
212#define I_KNEZ      ( MICRO_MASK | M_CKP | M_NE )
213#define I_MNEA      ( MICRO_MASK | M_MTP | M_ATN | M_NE )
214#define I_MNEZ      ( MICRO_MASK | M_MTP | M_NE )
215#define I_SAMAN     ( MICRO_MASK | M_MTP | M_NATN | M_CIN | M_C8 | M_AUTA )
216#define I_SETR      ( MICRO_MASK | M_YTP | M_15TN | M_AUTY | M_C8 )
217#define I_TAM       ( MICRO_MASK | M_STO )
218#define I_TAMACS    ( MICRO_MASK | M_STO | M_ATN | M_CKP | M_AUTA | M_SSE )
219#define I_TAMDYN    ( MICRO_MASK | M_STO | M_YTP | M_15TN | M_AUTY | M_C8 )
220#define I_TAMIY     ( MICRO_MASK | M_STO | M_YTP | M_CIN | M_AUTY )
221#define I_TAMIYC    ( MICRO_MASK | M_STO | M_YTP | M_CIN | M_C8 | M_AUTY )
222#define I_TAMZA     ( MICRO_MASK | M_STO | M_AUTA )
223#define I_TAY       ( MICRO_MASK | M_ATN | M_AUTY )
224#define I_TBIT      ( MICRO_MASK | M_CKP | M_CKN | M_MTP | M_NE )
225#define I_TCY       ( MICRO_MASK | M_CKP | M_AUTY )
226#define I_TCMIY     ( MICRO_MASK | M_CKM | M_YTP | M_CIN | M_AUTY )
227#define I_TKA       ( MICRO_MASK | M_CKP | M_AUTA )
228#define I_TKM       ( MICRO_MASK | M_CKM )
229#define I_TMA       ( MICRO_MASK | M_MTP | M_AUTA )
230#define I_TMY       ( MICRO_MASK | M_MTP | M_AUTY )
231#define I_TYA       ( MICRO_MASK | M_YTP | M_AUTA )
232#define I_XDA       ( MICRO_MASK | M_DMTP | M_AUTA | M_STO )
233#define I_XMA       ( MICRO_MASK | M_MTP | M_STO | M_AUTA )
234#define I_YMCY      ( MICRO_MASK | M_CIN | M_YTP | M_CKN | M_AUTY )
235#define I_YNEA      ( MICRO_MASK | M_YTP | M_ATN | M_NE )
236#define I_YNEC      ( MICRO_MASK | M_YTP | M_CKN | M_NE )
134// TMS1100 is nearly the same as TMS1000, some different opcodes, and with double the RAM and ROM
135const device_type TMS1100 = &device_creator<tms1100_cpu_device>; // 28-pin DIP, 11 R pins
136const device_type TMS1300 = &device_creator<tms1300_cpu_device>; // 40-pin DIP, 16 R pins
237137
138// TMS0980
139// - 64x9bit RAM array at the bottom-left (set up as 144x4)
140// - 2048x9bit ROM array at the bottom-left
141// - main instructions PLA at the top half, to the right of the midline
142// - 64-term microinstructions PLA between the RAM and ROM, supporting 20 microinstructions
143// - 16-term output PLA and segment PLA above the RAM
144const device_type TMS0980 = &device_creator<tms0980_cpu_device>; // 28-pin DIP, 9 R pins
238145
239static const UINT8 tms0980_c2_value[4] = { 0, 2, 1, 3 };
240static const UINT8 tms0980_c3_value[8] = { 0, 4, 2, 6, 1, 5, 3, 7 };
241static const UINT8 tms0980_c4_value[16] = { 0x0, 0x8, 0x4, 0xC, 0x2, 0xA, 0x6, 0xE, 0x1, 0x9, 0x5, 0xD, 0x3, 0xB, 0x7, 0xF };
242static const UINT8 tms0980_bit_value[4] = { 1, 4, 2, 8 };
243static const UINT8 tms0980_nbit_value[4] = { 0xE, 0xB, 0xD, 0x7 };
146// TMS0970 is a stripped-down version of the TMS0980, itself acting more like a TMS1000
147// - 64x4bit RAM array at the bottom-left
148// - 1024x8bit ROM array at the bottom-right
149// - main instructions PLA at the top half, to the right of the midline
150// - 32-term microinstructions PLA between the RAM and ROM, supporting 15 microinstructions
151// - 16-term output PLA and segment PLA above the RAM
152const device_type TMS0970 = &device_creator<tms0970_cpu_device>; // 28-pin DIP, 11 R pins
244153
245154
246static const UINT32 tms0980_decode[512] =
155static ADDRESS_MAP_START(program_11bit_9, AS_PROGRAM, 16, tms1xxx_cpu_device)
156   AM_RANGE(0x000, 0xfff) AM_ROM
157ADDRESS_MAP_END
158
159static ADDRESS_MAP_START(program_10bit_8, AS_PROGRAM, 8, tms1xxx_cpu_device)
160   AM_RANGE(0x000, 0x3ff) AM_ROM
161ADDRESS_MAP_END
162
163static ADDRESS_MAP_START(program_11bit_8, AS_PROGRAM, 8, tms1xxx_cpu_device)
164   AM_RANGE(0x000, 0x7ff) AM_ROM
165ADDRESS_MAP_END
166
167
168static ADDRESS_MAP_START(data_64x4, AS_DATA, 8, tms1xxx_cpu_device)
169   AM_RANGE(0x00, 0x3f) AM_RAM
170ADDRESS_MAP_END
171
172static ADDRESS_MAP_START(data_128x4, AS_DATA, 8, tms1xxx_cpu_device)
173   AM_RANGE(0x00, 0x7f) AM_RAM
174ADDRESS_MAP_END
175
176static ADDRESS_MAP_START(data_64x9_as4, AS_DATA, 8, tms1xxx_cpu_device)
177   AM_RANGE(0x00, 0x7f) AM_RAM
178   AM_RANGE(0x80, 0x8f) AM_RAM AM_MIRROR(0x70) // DAM
179ADDRESS_MAP_END
180
181
182tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
183   : tms1xxx_cpu_device(mconfig, TMS1000, "TMS1000", tag, owner, clock, 8, 11, 4, 6, 8, 2, 10, ADDRESS_MAP_NAME(program_10bit_8), 6, ADDRESS_MAP_NAME(data_64x4), "tms1000", __FILE__)
247184{
248   /* 0x000 */
249   F_COMX, I_ALEM, I_YNEA, I_XMA, I_DYN, I_IYC, I_CLA, I_DMAN,
250   I_TKA, I_MNEA, I_TKM, F_ILL, F_ILL, F_SETR, I_KNEZ, F_ILL,
251   I_DMEA, I_DNAA, I_CCLA, I_NDMEA, F_ILL, I_AMAAC, F_ILL, F_ILL,
252   I_CTMDYN, I_XDA, F_ILL, F_ILL, F_ILL, F_ILL, F_ILL, F_ILL,
253   I_TBIT, I_TBIT, I_TBIT, I_TBIT, F_ILL, F_ILL, F_ILL, F_ILL,
254   I_TAY, I_TMA, I_TMY, I_TYA, I_TAMDYN, I_TAMIYC, I_TAMZA, I_TAM,
255   I_SAMAN, I_CPAIZ, I_IMAC, I_MNEZ, F_ILL, F_ILL, F_ILL, F_ILL,
256   I_TCY, I_YNEC, I_TCMIY, I_ACACC, I_ACNAA, I_TAMACS, I_ALEC, I_YMCY,
257   /* 0x040 */
258   I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY,
259   I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY,
260   I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC,
261   I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC,
262   I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY,
263   I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY,
264   I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC,
265   I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC,
266   /* 0x080 */
267   F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP,
268   F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP,
269   F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX,
270   F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX,
271   F_SBIT, F_SBIT, F_SBIT, F_SBIT, F_RBIT, F_RBIT, F_RBIT, F_RBIT,
272   F_ILL, F_ILL, F_ILL, F_ILL, F_ILL, F_ILL, F_ILL, F_ILL,
273   F_TDO, F_SAL, F_COMX8, F_SBL, F_REAC, F_SEAC, F_OFF, F_ILL,
274   F_ILL, F_ILL, F_ILL, F_ILL, F_ILL, F_ILL, F_ILL, F_RETN,
275   /* 0x0c0 */
276   I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA,
277   I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA,
278   I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS,
279   I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS,
280   I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC,
281   I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC,
282   I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY,
283   I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY,
284   /* 0x100 */
285   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
286   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
287   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
288   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
289   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
290   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
291   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
292   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
293   /* 0x140 */
294   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
295   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
296   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
297   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
298   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
299   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
300   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
301   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
302   /* 0x180 */
303   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
304   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
305   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
306   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
307   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
308   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
309   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
310   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
311   /* 0x1c0 */
312   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
313   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
314   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
315   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
316   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
317   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
318   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
319   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL
320};
185}
321186
187tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT8 o_pins, UINT8 r_pins, UINT8 k_pins, UINT8 pc_bits, UINT8 byte_bits, UINT8 x_bits, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source)
188   : tms1xxx_cpu_device(mconfig, type, name, tag, owner, clock, o_pins, r_pins, k_pins, pc_bits, byte_bits, x_bits, prgwidth, program, datawidth, data, shortname, source)
189{
190}
322191
323static const UINT32 tms1000_default_decode[256] =
192tms1070_cpu_device::tms1070_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
193   : tms1000_cpu_device(mconfig, TMS1070, "TMS1070", tag, owner, clock, 8, 11, 4, 6, 8, 2, 10, ADDRESS_MAP_NAME(program_10bit_8), 6, ADDRESS_MAP_NAME(data_64x4), "tms1070", __FILE__)
324194{
325   /* 0x00 */
326   F_COMX, I_A8AAC, I_YNEA, I_TAM, I_TAMZA, I_A10AAC, I_A6AAC, I_DAN,
327   I_TKA, I_KNEZ, F_TDO, F_CLO, F_RSTR, F_SETR, I_IA, F_RETN,
328   F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP,
329   F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP,
330   /* 0x20 */
331   I_TAMIY, I_TMA, I_TMY, I_TYA, I_TAY, I_AMAAC, I_MNEZ, I_SAMAN,
332   I_IMAC, I_ALEM, I_DMAN, I_IYC, I_DYN, I_CPAIZ, I_XMA, I_CLA,
333   F_SBIT, F_SBIT, F_SBIT, F_SBIT, F_RBIT, F_RBIT, F_RBIT, F_RBIT,
334   I_TBIT, I_TBIT, I_TBIT, I_TBIT, F_LDX, F_LDX, F_LDX, F_LDX,
335   /* 0x40 */
336   I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY,
337   I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY,
338   I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC,
339   I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC,
340   /* 0x60 */
341   I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY,
342   I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY,
343   I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC,
344   I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC,
345   /* 0x80 */
346   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
347   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
348   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
349   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
350   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
351   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
352   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
353   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
354   /* 0xC0 */
355   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
356   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
357   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
358   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
359   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
360   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
361   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
362   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
363};
195}
364196
197tms1200_cpu_device::tms1200_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
198   : tms1000_cpu_device(mconfig, TMS1200, "TMS1200", tag, owner, clock, 8, 13, 4, 6, 8, 2, 10, ADDRESS_MAP_NAME(program_10bit_8), 6, ADDRESS_MAP_NAME(data_64x4), "tms1200", __FILE__)
199{
200}
365201
366static const UINT32 tms1100_default_decode[256] =
202
203tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
204   : tms1000_cpu_device(mconfig, TMS1100, "TMS1100", tag, owner, clock, 8, 11, 4, 6, 8, 3, 11, ADDRESS_MAP_NAME(program_11bit_8), 7, ADDRESS_MAP_NAME(data_128x4), "tms1100", __FILE__)
367205{
368   /* 0x00 */
369   I_MNEA, I_ALEM, I_YNEA, I_XMA, I_DYN, I_IYC, I_AMAAC, I_DMAN,
370   I_TKA, F_COMX, F_TDO, F_COMC, F_RSTR, F_SETR, I_KNEZ, F_RETN,
371   F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP,
372   F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP,
373   /* 0x20 */
374   I_TAY, I_TMA, I_TMY, I_TYA, I_TAMDYN, I_TAMIYC, I_TAMZA, I_TAM,
375   F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX,
376   F_SBIT, F_SBIT, F_SBIT, F_SBIT, F_RBIT, F_RBIT, F_RBIT, F_RBIT,
377   I_TBIT, I_TBIT, I_TBIT, I_TBIT, I_SAMAN, I_CPAIZ, I_IMAC, I_MNEZ,
378   /* 0x40 */
379   I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY,
380   I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY,
381   I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC,
382   I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC,
383   /* 0x60 */
384   I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY,
385   I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY,
386   I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC,
387   I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_CLA,
388   /* 0x80 */
389   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
390   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
391   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
392   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
393   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
394   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
395   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
396   F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
397   /* 0xC0 */
398   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
399   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
400   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
401   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
402   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
403   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
404   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
405   F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
406};
206}
407207
208tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT8 o_pins, UINT8 r_pins, UINT8 k_pins, UINT8 pc_bits, UINT8 byte_bits, UINT8 x_bits, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source)
209   : tms1000_cpu_device(mconfig, type, name, tag, owner, clock, o_pins, r_pins, k_pins, pc_bits, byte_bits, x_bits, prgwidth, program, datawidth, data, shortname, source)
210{
211}
408212
409static ADDRESS_MAP_START(program_11bit_9, AS_PROGRAM, 16, tms1xxx_cpu_device)
410   AM_RANGE( 0x000, 0xfff ) AM_ROM
411ADDRESS_MAP_END
213tms1300_cpu_device::tms1300_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
214   : tms1100_cpu_device(mconfig, TMS1300, "TMS1200", tag, owner, clock, 8, 16, 4, 6, 8, 3, 11, ADDRESS_MAP_NAME(program_11bit_8), 7, ADDRESS_MAP_NAME(data_128x4), "tms1300", __FILE__)
215{
216}
412217
413218
414static ADDRESS_MAP_START(program_10bit_8, AS_PROGRAM, 8, tms1xxx_cpu_device)
415   AM_RANGE( 0x000, 0x3ff ) AM_ROM
416ADDRESS_MAP_END
219tms0970_cpu_device::tms0970_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
220   : tms1000_cpu_device(mconfig, TMS0970, "TMS0970", tag, owner, clock, 8, 11, 4, 6, 8, 2, 10, ADDRESS_MAP_NAME(program_10bit_8), 6, ADDRESS_MAP_NAME(data_64x4), "tms0970", __FILE__)
221{
222}
417223
224tms0970_cpu_device::tms0970_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT8 o_pins, UINT8 r_pins, UINT8 k_pins, UINT8 pc_bits, UINT8 byte_bits, UINT8 x_bits, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source)
225   : tms1000_cpu_device(mconfig, type, name, tag, owner, clock, o_pins, r_pins, k_pins, pc_bits, byte_bits, x_bits, prgwidth, program, datawidth, data, shortname, source)
226{
227}
418228
419static ADDRESS_MAP_START(program_11bit_8, AS_PROGRAM, 8, tms1xxx_cpu_device)
420   AM_RANGE( 0x000, 0x7ff ) AM_ROM
421ADDRESS_MAP_END
422229
230tms0980_cpu_device::tms0980_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
231   : tms0970_cpu_device(mconfig, TMS0980, "TMS0980", tag, owner, clock, 8, 9, 5, 7, 9, 4, 12, ADDRESS_MAP_NAME(program_11bit_9), 8, ADDRESS_MAP_NAME(data_64x9_as4), "tms0980", __FILE__)
232{
233}
423234
424static ADDRESS_MAP_START(data_64x4, AS_DATA, 8, tms1xxx_cpu_device)
425   AM_RANGE( 0x00, 0x3f ) AM_RAM
426ADDRESS_MAP_END
427235
428236
429static ADDRESS_MAP_START(data_128x4, AS_DATA, 8, tms1xxx_cpu_device)
430   AM_RANGE( 0x00, 0x7f ) AM_RAM
431ADDRESS_MAP_END
237static MACHINE_CONFIG_FRAGMENT(tms1000)
238   
239   // microinstructions PLA, output PLA
240   MCFG_PLA_ADD("mpla", 8, 16, 30)
241   MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
242   MCFG_PLA_ADD("opla", 5, 8, 20)
243   MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
244MACHINE_CONFIG_END
432245
246machine_config_constructor tms1000_cpu_device::device_mconfig_additions() const
247{
248   return MACHINE_CONFIG_NAME(tms1000);
249}
433250
434static ADDRESS_MAP_START(data_64x9_as4, AS_DATA, 8, tms1xxx_cpu_device)
435   AM_RANGE( 0x00, 0x8f ) AM_RAM
436   AM_RANGE( 0x90, 0xff ) AM_NOP
437ADDRESS_MAP_END
438251
252static MACHINE_CONFIG_FRAGMENT(tms0970)
439253
254   // main opcodes PLA, microinstructions PLA, output PLA, segment PLA
255   MCFG_PLA_ADD("ipla", 8, 15, 18)
256   MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
257   MCFG_PLA_ADD("mpla", 5, 15, 32)
258   MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
259   MCFG_PLA_ADD("opla", 4, 8, 16)
260   MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
261   MCFG_PLA_ADD("spla", 3, 8, 8)
262   MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
263MACHINE_CONFIG_END
264
265machine_config_constructor tms0970_cpu_device::device_mconfig_additions() const
266{
267   return MACHINE_CONFIG_NAME(tms0970);
268}
269
270
271static MACHINE_CONFIG_FRAGMENT(tms0980)
272
273   // main opcodes PLA, microinstructions PLA, output PLA, segment PLA
274   MCFG_PLA_ADD("ipla", 9, 22, 24)
275   MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
276   MCFG_PLA_ADD("mpla", 6, 20, 64)
277   MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
278   MCFG_PLA_ADD("opla", 4, 8, 16)
279   MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
280   MCFG_PLA_ADD("spla", 3, 8, 8)
281   MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
282MACHINE_CONFIG_END
283
284machine_config_constructor tms0980_cpu_device::device_mconfig_additions() const
285{
286   return MACHINE_CONFIG_NAME(tms0980);
287}
288
289
290
291offs_t tms1000_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
292{
293   extern CPU_DISASSEMBLE(tms1000);
294   return CPU_DISASSEMBLE_NAME(tms1000)(this, buffer, pc, oprom, opram, options);
295}
296
297offs_t tms1100_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
298{
299   extern CPU_DISASSEMBLE(tms1100);
300   return CPU_DISASSEMBLE_NAME(tms1100)(this, buffer, pc, oprom, opram, options);
301}
302
303offs_t tms0980_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
304{
305   extern CPU_DISASSEMBLE(tms0980);
306   return CPU_DISASSEMBLE_NAME(tms0980)(this, buffer, pc, oprom, opram, options);
307}
308
309void tms1xxx_cpu_device::state_string_export(const device_state_entry &entry, astring &string)
310{
311   switch (entry.index())
312   {
313      case STATE_GENPC:
314         string.printf("%03X", m_rom_address << ((m_byte_bits > 8) ? 1 : 0));
315         break;
316   }
317}
318
319
320
321//-------------------------------------------------
322//  device_start - device-specific startup
323//-------------------------------------------------
324
325enum
326{
327   TMS0980_PC=1, TMS0980_SR, TMS0980_PA, TMS0980_PB,
328   TMS0980_A, TMS0980_X, TMS0980_Y, TMS0980_STATUS
329};
330
440331void tms1xxx_cpu_device::device_start()
441332{
442   m_program = &space( AS_PROGRAM );
443   m_data = &space( AS_DATA );
333   m_program = &space(AS_PROGRAM);
334   m_data = &space(AS_DATA);
444335
445   m_read_k.resolve_safe(0xff);
336   m_read_k.resolve_safe(0);
446337   m_write_o.resolve_safe();
447338   m_write_r.resolve_safe();
339   m_power_off.resolve_safe();
448340
449   save_item( NAME(m_prev_pc) );
450   save_item( NAME(m_prev_pa) );
451   save_item( NAME(m_pc) );
452   save_item( NAME(m_pa) );
453   save_item( NAME(m_sr) );
454   save_item( NAME(m_pb) );
455   save_item( NAME(m_a) );
456   save_item( NAME(m_x) );
457   save_item( NAME(m_y) );
458   save_item( NAME(m_dam) );
459   save_item( NAME(m_ca) );
460   save_item( NAME(m_cb) );
461   save_item( NAME(m_cs) );
462   save_item( NAME(m_r) );
463   save_item( NAME(m_o) );
464   save_item( NAME(m_cki_bus) );
465   save_item( NAME(m_p) );
466   save_item( NAME(m_n) );
467   save_item( NAME(m_adder_result) );
468   save_item( NAME(m_carry_in) );
469   save_item( NAME(m_status) );
470   save_item( NAME(m_status_latch) );
471   save_item( NAME(m_special_status) );
472   save_item( NAME(m_call_latch) );
473   save_item( NAME(m_add_latch) );
474   save_item( NAME(m_branch_latch) );
475   save_item( NAME(m_subcycle) );
476   save_item( NAME(m_ram_address) );
477   save_item( NAME(m_ram_data) );
478   save_item( NAME(m_rom_address) );
479   save_item( NAME(m_opcode) );
480   save_item( NAME(m_decode) );
341   m_o_mask = (1 << m_o_pins) - 1;
342   m_r_mask = (1 << m_r_pins) - 1;
343   m_k_mask = (1 << m_k_pins) - 1;
344   m_pc_mask = (1 << m_pc_bits) - 1;
345   m_x_mask = (1 << m_x_bits) - 1;
346   
347   // zerofill
348   m_pc = 0;
349   m_sr = 0;
350   m_pa = 0;
351   m_pb = 0;
352   m_a = 0;
353   m_x = 0;
354   m_y = 0;
355   m_ca = 0;
356   m_cb = 0;
357   m_cs = 0;
358   m_r = 0;
359   m_o = 0;
360   m_cki_bus = 0;
361   m_c4 = 0;
362   m_p = 0;
363   m_n = 0;
364   m_adder_out = 0;
365   m_carry_in = 0;
366   m_carry_out = 0;
367   m_status = 0;
368   m_status_latch = 0;
369   m_eac = 0;
370   m_clatch = 0;
371   m_add = 0;
372   m_bl = 0;
481373
482   // Register state for debugger
483   state_add( TMS0980_PC,     "PC",     m_pc     ).callimport().callexport().formatstr("%02X");
484   state_add( TMS0980_SR,     "SR",     m_sr     ).callimport().callexport().formatstr("%01X");
485   state_add( TMS0980_PA,     "PA",     m_pa     ).callimport().callexport().formatstr("%01X");
486   state_add( TMS0980_PB,     "PB",     m_pb     ).callimport().callexport().formatstr("%01X");
487   state_add( TMS0980_A,      "A",      m_a      ).callimport().callexport().formatstr("%01X");
488   state_add( TMS0980_X,      "X",      m_x      ).callimport().callexport().formatstr("%01X");
489   state_add( TMS0980_Y,      "Y",      m_y      ).callimport().callexport().formatstr("%01X");
490   state_add( TMS0980_STATUS, "STATUS", m_status ).callimport().callexport().formatstr("%01X");
374   m_ram_in = 0;
375   m_dam_in = 0;
376   m_ram_out = 0;
377   m_ram_address = 0;
378   m_rom_address = 0;
379   m_opcode = 0;
380   m_fixed = 0;
381   m_micro = 0;
382   m_subcycle = 0;
491383
492   state_add(STATE_GENPC, "curpc", m_pc).callimport().callexport().formatstr("%8s").noshow();
493   state_add(STATE_GENFLAGS, "GENFLAGS", m_sr).callimport().callexport().formatstr("%8s").noshow();
384   // register for savestates
385   save_item(NAME(m_pc));
386   save_item(NAME(m_sr));
387   save_item(NAME(m_pa));
388   save_item(NAME(m_pb));
389   save_item(NAME(m_a));
390   save_item(NAME(m_x));
391   save_item(NAME(m_y));
392   save_item(NAME(m_ca));
393   save_item(NAME(m_cb));
394   save_item(NAME(m_cs));
395   save_item(NAME(m_r));
396   save_item(NAME(m_o));
397   save_item(NAME(m_cki_bus));
398   save_item(NAME(m_c4));
399   save_item(NAME(m_p));
400   save_item(NAME(m_n));
401   save_item(NAME(m_adder_out));
402   save_item(NAME(m_carry_in));
403   save_item(NAME(m_carry_out));
404   save_item(NAME(m_status));
405   save_item(NAME(m_status_latch));
406   save_item(NAME(m_eac));
407   save_item(NAME(m_clatch));
408   save_item(NAME(m_add));
409   save_item(NAME(m_bl));
494410
411   save_item(NAME(m_ram_in));
412   save_item(NAME(m_dam_in));
413   save_item(NAME(m_ram_out));
414   save_item(NAME(m_ram_address));
415   save_item(NAME(m_rom_address));
416   save_item(NAME(m_opcode));
417   save_item(NAME(m_fixed));
418   save_item(NAME(m_micro));
419   save_item(NAME(m_subcycle));
420
421   // register state for debugger
422   state_add(TMS0980_PC,     "PC",     m_pc    ).formatstr("%02X");
423   state_add(TMS0980_SR,     "SR",     m_sr    ).formatstr("%01X");
424   state_add(TMS0980_PA,     "PA",     m_pa    ).formatstr("%01X");
425   state_add(TMS0980_PB,     "PB",     m_pb    ).formatstr("%01X");
426   state_add(TMS0980_A,      "A",      m_a     ).formatstr("%01X");
427   state_add(TMS0980_X,      "X",      m_x     ).formatstr("%01X");
428   state_add(TMS0980_Y,      "Y",      m_y     ).formatstr("%01X");
429   state_add(TMS0980_STATUS, "STATUS", m_status).formatstr("%01X");
430
431   state_add(STATE_GENPC, "curpc", m_rom_address).formatstr("%03X").noshow();
432   state_add(STATE_GENFLAGS, "GENFLAGS", m_sr).formatstr("%8s").noshow();
433
495434   m_icountptr = &m_icount;
496435}
497436
498437
438
439//-------------------------------------------------
440//  device_reset - device-specific reset
441//-------------------------------------------------
442
499443void tms1xxx_cpu_device::device_reset()
500444{
501   m_pa = 0xF;
502   m_pb = 0xF;
445   m_pa = 0xf;
446   m_pb = 0xf;
503447   m_pc = 0;
504   m_dam = 0;
505448   m_ca = 0;
506449   m_cb = 0;
507450   m_cs = 0;
451
452   m_eac = 0;
453   m_bl = 0;
454   m_add = 0;
455
456   m_opcode = 0;
457   m_micro = 0;
458   m_fixed = 0;
459
508460   m_subcycle = 0;
509   m_status = 1;
510   m_status_latch = 0;
511   m_call_latch = 0;
512   m_add_latch = 0;
513   m_branch_latch = 0;
461
462   // clear outputs
514463   m_r = 0;
515   m_o = 0;
516   m_ram_address = 0;
517   m_decode = F_ILL;
518   m_opcode = 0;
464   m_write_r(0, m_r & m_r_mask, 0xffff);
465   write_o_output(0);
466   m_write_r(0, m_r & m_r_mask, 0xffff);
519467}
520468
521469
522/*
523The program counter is implemented using PRNG logic and gets incremented as follows:
470void tms1000_cpu_device::device_reset()
471{
472   // common reset
473   tms1xxx_cpu_device::device_reset();
474   
475   // pre-decode instructionset
476   m_fixed_decode.resize_and_clear(0x100);
477   m_micro_decode.resize_and_clear(0x100);
478   
479   for (int op = 0; op < 0x100; op++)
480   {
481      //                                              _____              _____  ______  _____  ______  _____  _____  _____  _____
482      const UINT32 md[16] = { M_STSL, M_AUTY, M_AUTA, M_CIN, M_C8, M_NE, M_CKN, M_15TN, M_MTN, M_NATN, M_ATN, M_MTP, M_YTP, M_CKP, M_CKM, M_STO };
483      UINT16 mask = m_mpla->read(op);
484      mask ^= 0x3fc8; // invert active-negative
485     
486      for (int bit = 0; bit < 16; bit++)
487         if (mask & (1 << bit))
488            m_micro_decode[op] |= md[bit];
489   }
524490
52500, 01, 03, 07, 0F, 1F, 3F, 3E,
5263D, 3B, 37, 2F, 1E, 3C, 39, 33
52727, 0E, 1D, 3A, 35, 2B, 16, 2C,
52818, 30, 21, 02, 05, 0B, 17, 2E,
5291C, 38, 31, 23, 06, 0D, 1B, 36,
5302D, 1A, 34, 29, 12, 24, 08, 11,
53122, 04, 09, 13, 26, 0C, 19, 32,
53225, 0A, 15, 2A, 14, 28, 10, 20
491   // the fixed instruction set is not programmable
492   m_fixed_decode[0x00] = F_COMX;
493   m_fixed_decode[0x0a] = F_TDO;
494   m_fixed_decode[0x0b] = F_CLO;
495   m_fixed_decode[0x0c] = F_RSTR;
496   m_fixed_decode[0x0d] = F_SETR;
497   m_fixed_decode[0x0f] = F_RETN;
498   
499   for (int i = 0x10; i < 0x20; i++) m_fixed_decode[i] = F_LDP;
500   for (int i = 0x30; i < 0x34; i++) m_fixed_decode[i] = F_SBIT;
501   for (int i = 0x34; i < 0x38; i++) m_fixed_decode[i] = F_RBIT;
502   for (int i = 0x3c; i < 0x40; i++) m_fixed_decode[i] = F_LDX;
533503
534There is also a strange address (AD) to location (LOC) mapping performed by the
535tms1000 family.
504   for (int i = 0x80; i < 0xc0; i++) m_fixed_decode[i] = F_BR;
505   for (int i = 0xc0; i < 0x100; i++) m_fixed_decode[i] = F_CALL;
506}
536507
537From tms1000 family pdf:
538AD          LOC
539000 000000  003 000011
540001 000001  004 000100
541003 000011  00C 001100
542007 000111  01C 011100
54300F 001111  03C 111100
54401F 011111  03F 111111
54503F 111111  03E 111110
54603E 111110  039 111001
54703D 111101  036 110110
54803B 111011  02E 101110
549037 110111  01E 011110
55002F 101111  03D 111101
55101E 011110  038 111000
55203C 111100  031 110001
553039 111001  026 100110
554033 110011  00E 001110
555027 100111  01D 011101
55600E 001110  03B 111011
55701D 011101  037 110111
55803A 111010  029 101001
559035 110101  016 010110
56002B 101011  02D 101101
561016 010110  018 011000
56202C 101100  032 110010
563018 011000  020 100000
564030 110000  001 000001
565021 100001  005 000101
566002 000010  00B 001011
567005 000101  014 010100
56800B 001011  02C 101100
569017 010111  01F 011111
57002E 101110  03A 111010
57101C 011100  030 110000
572038 111000  021 100001
573031 110001  006 000110
574023 100011  00D 001101
575006 000110  01B 011011
57600D 001101  034 110100
57701B 011011  02F 101111
578036 110110  019 011001
57902D 101101  035 110101
58001A 011010  028 101000
581034 110100  011 010001
582029 101001  025 100101
583012 010010  008 001000
584024 100100  012 010010
585008 001000  023 100011
586011 010001  007 000111
587022 100010  00A 001010
588004 000100  013 010011
589009 001001  024 100100
590013 010011  00F 001111
591026 100110  01A 011010
59200C 001100  033 110011
593019 011001  027 100111
594032 110010  009 001001
595025 100101  015 010101
59600A 001010  02B 101011
597015 010101  017 010111
59802A 101010  02A 101010
599014 010100  010 010000
600028 101000  022 100010
601010 010000  000 000000
602020 100000  002 000010
603
604The following formula seems to be used to decode a program counter
605into a rom address:
606location{5:2} = pc{3:0}
607location{1:0} =  ( pc{5:4} == 00 && pc{0} == 0 ) => 11
608                 ( pc{5:4} == 00 && pc{0} == 1 ) => 00
609                 ( pc{5:4} == 01 && pc{0} == 0 ) => 00
610                 ( pc{5:4} == 01 && pc{0} == 1 ) => 11
611                 ( pc{5:4} == 10 && pc{0} == 0 ) => 10
612                 ( pc{5:4} == 10 && pc{0} == 1 ) => 01
613                 ( pc{5:4} == 11 && pc{0} == 0 ) => 01
614                 ( pc{5:4} == 11 && pc{0} == 1 ) => 10
615
616*/
617static const UINT8 tms1000_next_pc[64] =
508void tms1100_cpu_device::device_reset()
618509{
619   0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F,
620   0x20, 0x22, 0x24, 0x26, 0x28, 0x2A, 0x2C, 0x2E, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3A, 0x3C, 0x3F,
621   0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E,
622   0x21, 0x23, 0x25, 0x27, 0x29, 0x2B, 0x2D, 0x2F, 0x31, 0x33, 0x35, 0x37, 0x39, 0x3B, 0x3D, 0x3E,
623};
510   tms1000_cpu_device::device_reset();
511   
512   // small differences in 00-3f area
513   m_fixed_decode[0x00] = 0;
514   m_fixed_decode[0x09] = F_COMX8; // !
515   m_fixed_decode[0x0b] = F_COMC;
624516
625/* emulator for the program counter increment on the tms0980/tmc0980 mcu;
626 see patent 4064554 figure 19 (on page 13) for an explanation of feedback:
517   for (int i = 0x28; i < 0x30; i++) m_fixed_decode[i] = F_LDX;
518   for (int i = 0x3c; i < 0x40; i++) m_fixed_decode[i] = 0;
519}
627520
628  nand324 = NAND of PC0 through pc4, i.e. output is true if ((pc&0x1f) != 0x1f)
629  nand323 = NAND of pc5, pc6 and nand324
630      i.e. output is true, if ((pc&0x1f)==0x1f) || pc5 is 0 || pc 6 is 0
631  or321 = OR of pc5 and pc6, i.e. output is true if ((pc&0x60) != 0)
632  nand322 = NAND of pc0 through pc5 plus /pc6,
633      i.e. output is true if (pc != 0x3f)
634  nand325 = nand of nand323, or321 and nand322
635      This one is complex:
636      / or321 means if pc&0x60 is zero, output MUST be true
637      \ nand323 means if (pc&0x60=0x60) && (pc&0x1f != 0x1f), output MUST be true
638      nand322 means if pc = 0x3f, output MUST be true
639      hence, nand325 is if pc = 0x7f, false. if pc = 0x3f, true. if pc&0x60 is zero OR pc&0x60 is 0x60, true. otherwise, false.
640521
641      tms0980_next_pc below implements an identical function to this in a somewhat more elegant way.
642*/
643void tms1xxx_cpu_device::next_pc()
522void tms0970_cpu_device::device_reset()
644523{
645   if ( m_byte_size > 8 )
524   // common reset
525   tms1xxx_cpu_device::device_reset();
526
527   // pre-decode instructionset
528   m_fixed_decode.resize_and_clear(0x100);
529   m_micro_decode.resize_and_clear(0x100);
530
531   for (int op = 0; op < 0x100; op++)
646532   {
647      UINT8   xorval = ( m_pc & 0x3F ) == 0x3F ? 1 : 0;
648      UINT8   new_bit = ( ( m_pc ^ ( m_pc << 1 ) ) & 0x40 ) ? xorval : 1 - xorval;
533      // upper half of the opcodes is always branch/call
534      if (op & 0x80)
535         m_fixed_decode[op] = (op & 0x40) ? F_CALL: F_BR;
536     
537      // 5 output bits select a microinstruction index
538      UINT32 imask = m_ipla->read(op);
539      UINT8 msel = imask & 0x1f;
540     
541      // but if (from bottom to top) term 1 is active and output bit 5 is 0, R2,R4-R7 directly select a microinstruction index
542      if (imask & 0x40 && (imask & 0x20) == 0)
543         msel = (op & 0xf) | (op >> 1 & 0x10);
544     
545      msel = BITSWAP8(msel,7,6,5,0,1,2,3,4); // lines are reversed
546      UINT32 mmask = m_mpla->read(msel);
547      mmask ^= 0x09fe; // invert active-negative
548     
549      //                             _____  _____  _____  _____  ______  _____  ______  _____              _____
550      const UINT32 md[15] = { M_CKM, M_CKP, M_YTP, M_MTP, M_ATN, M_NATN, M_MTN, M_15TN, M_CKN, M_NE, M_C8, M_CIN, M_AUTA, M_AUTY, M_STO };
649551
650      m_pc = ((m_pc << 1) | new_bit) & ((1 << m_pc_size) - 1);
552      for (int bit = 0; bit < 15; bit++)
553         if (mmask & (1 << bit))
554            m_micro_decode[op] |= md[bit];
555     
556      // the other ipla terms each select a fixed instruction
557      const UINT32 id[8] = { F_LDP, F_TDO, F_COMX, F_LDX, F_SBIT, F_RBIT, F_SETR, F_RETN };
558     
559      for (int bit = 0; bit < 8; bit++)
560         if (imask & (0x80 << bit))
561            m_fixed_decode[op] |= id[bit];
651562   }
652   else
653   {
654      m_pc = tms1000_next_pc[ m_pc & 0x3f ];
655   }
656563}
657564
658565
659static const UINT8 tms1000_pc_decode[64] =
566UINT32 tms0980_cpu_device::decode_micro(UINT8 sel)
660567{
661   0x03, 0x04, 0x0B, 0x0C, 0x13, 0x14, 0x1B, 0x1C,
662   0x23, 0x24, 0x2B, 0x2C, 0x33, 0x34, 0x3B, 0x3C,
663   0x00, 0x07, 0x08, 0x0F, 0x10, 0x17, 0x18, 0x1F,
664   0x20, 0x27, 0x28, 0x2F, 0x30, 0x37, 0x38, 0x3F,
665   0x02, 0x05, 0x0A, 0x0D, 0x12, 0x15, 0x1A, 0x1D,
666   0x22, 0x25, 0x2A, 0x2D, 0x32, 0x35, 0x3A, 0x3D,
667   0x01, 0x06, 0x09, 0x0E, 0x11, 0x16, 0x19, 0x1E,
668   0x21, 0x26, 0x29, 0x2E, 0x31, 0x36, 0x39, 0x3E
669};
568   UINT32 decode = 0;
569   
570   sel = BITSWAP8(sel,7,6,0,1,2,3,4,5); // lines are reversed
571   UINT32 mask = m_mpla->read(sel);
572   mask ^= 0x43fc3; // invert active-negative
670573
574   //                      _______  ______                                _____  _____  _____  _____  ______  _____  ______  _____                            _____
575   const UINT32 md[20] = { M_NDMTP, M_DMTP, M_AUTY, M_AUTA, M_CKM, M_SSE, M_CKP, M_YTP, M_MTP, M_ATN, M_NATN, M_MTN, M_15TN, M_CKN, M_NE, M_C8, M_SSS, M_CME, M_CIN, M_STO };
576   
577   for (int bit = 0; bit < 20; bit++)
578      if (mask & (1 << bit))
579         decode |= md[bit];
580   
581   return decode;
582}
671583
672void tms1xxx_cpu_device::set_cki_bus()
584void tms0980_cpu_device::device_reset()
673585{
674   switch( m_opcode & 0x1F8 )
586   // common reset
587   tms1xxx_cpu_device::device_reset();
588   
589   // pre-decode instructionset
590   m_fixed_decode.resize_and_clear(0x200);
591   m_micro_decode.resize_and_clear(0x200);
592
593   for (int op = 0; op < 0x200; op++)
675594   {
676   case 0x008:
677      m_cki_bus = m_read_k( 0, 0xff );
678      break;
679   case 0x020: case 0x028:
680      m_cki_bus = 0;
681      break;
682   case 0x030: case 0x038:
683      m_cki_bus = tms0980_nbit_value[ m_opcode & 0x03 ];
684      break;
685   case 0x000:
686   case 0x040: case 0x048:
687   case 0x050: case 0x058:
688   case 0x060: case 0x068:
689   case 0x070: case 0x078:
690   case 0x080: case 0x088:
691   case 0x090: case 0x098:
692   case 0x0c0: case 0x0c8:
693   case 0x0d0: case 0x0d8:
694   case 0x0e0: case 0x0e8:
695   case 0x0f0: case 0x0f8:
696      m_cki_bus = tms0980_c4_value[ m_opcode & 0x0F ];
697      break;
698   default:
699      m_cki_bus = 0x0F;
700      break;
595      // upper half of the opcodes is always branch/call
596      if (op & 0x100)
597         m_fixed_decode[op] = (op & 0x80) ? F_CALL: F_BR;
598     
599      UINT32 imask = m_ipla->read(op);
600
601      // 6 output bits select a microinstruction index
602      m_micro_decode[op] = decode_micro(imask & 0x3f);
603     
604      // the other ipla terms each select a fixed instruction
605      const UINT32 id[15] = { F_LDP, F_SBL, F_OFF, F_RBIT, F_SAL, F_XDA, F_REAC, F_SETR, F_RETN, F_SBIT, F_TDO, F_COMX8, F_COMX, F_LDX, F_SEAC };
606     
607      for (int bit = 0; bit < 15; bit++)
608         if (imask & (0x80 << bit))
609            m_fixed_decode[op] |= id[bit];
701610   }
611   
612   // like on TMS0970, one of the terms directly select a microinstruction index (via R4-R8),
613   // but it can't be pre-determined when it's active
614   m_micro_direct.resize_and_clear(0x40);
615
616   for (int op = 0; op < 0x40; op++)
617      m_micro_direct[op] = decode_micro(op);
702618}
703619
704620
705void tms1xxx_cpu_device::execute_run()
621
622
623
624void tms1xxx_cpu_device::next_pc()
706625{
707   do
708   {
709      m_icount--;
710      switch( m_subcycle )
711      {
712      case 0:
713         /* fetch: rom address 0 */
714         /* execute: read ram, alu input, execute br/call, k input valid */
715         set_cki_bus();
716         m_ram_data = m_data->read_byte( m_ram_address );
717         m_status = 1;
718         m_p = 0;
719         m_n = 0;
720         m_carry_in = 0;
721         break;
722      case 1:
723         /* fetch: rom address 1 */
724         m_rom_address = ( m_ca << ( m_pc_size + 4 ) ) | ( m_pa << m_pc_size ) | m_pc;
725         /* execute: k input valid */
726         if ( m_decode & MICRO_MASK )
727         {
728            /* Check N inputs */
729            if ( m_decode & ( M_15TN | M_ATN | M_CKN | M_MTN | M_NATN ) )
730            {
731               m_n = 0;
732               if ( m_decode & M_15TN )
733               {
734                  m_n |= 0x0F;
735               }
736               if ( m_decode & M_ATN )
737               {
738                  m_n |= m_a;
739               }
740               if ( m_decode & M_CKN )
741               {
742                  m_n |= m_cki_bus;
743               }
744               if ( m_decode & M_MTN )
745               {
746                  m_n |= m_ram_data;
747               }
748               if ( m_decode & M_NATN )
749               {
750                  m_n |= ( ( ~m_a ) & 0x0F );
751               }
752            }
626   // The program counter is a LFSR. To put it simply, the feedback bit is a XOR of the two highest bits,
627   // but it makes an exception when all low bits are set (eg. in TMS1000 case, when PC is 0x1f or 0x3f).
628   int high = 1 << (m_pc_bits - 1);
629   int fb = (m_pc << 1 & high) == (m_pc & high);
753630
631   if (m_pc == (m_pc_mask >> 1))
632      fb = 1;
633   else if (m_pc == m_pc_mask)
634      fb = 0;
635   
636   m_pc = (m_pc << 1 | fb) & m_pc_mask;
637}
754638
755            /* Check P inputs */
756            if ( m_decode & ( M_CKP | M_DMTP | M_MTP | M_NDMTP | M_YTP ) )
757            {
758               m_p = 0;
759               if ( m_decode & M_CKP )
760               {
761                  m_p |= m_cki_bus;
762               }
763               if ( m_decode & M_DMTP )
764               {
765                  m_p |= m_dam;
766               }
767               if ( m_decode & M_MTP )
768               {
769                  m_p |= m_ram_data;
770               }
771               if ( m_decode & M_NDMTP )
772               {
773                  m_p |= ( ( ~m_dam ) & 0x0F );
774               }
775               if ( m_decode & M_YTP )
776               {
777                  m_p |= m_y;
778               }
779            }
639void tms1xxx_cpu_device::read_opcode()
640{
641   debugger_instruction_hook(this, m_rom_address);
642   m_opcode = m_program->read_byte(m_rom_address);
643   m_c4 = BITSWAP8(m_opcode,7,6,5,4,0,1,2,3) & 0xf; // opcode operand is bitswapped for most opcodes
780644
781            /* Carry In input */
782            if ( m_decode & M_CIN )
783            {
784               m_carry_in = 1;
785            }
786         }
645   m_fixed = m_fixed_decode[m_opcode];
646   m_micro = m_micro_decode[m_opcode];
647
648   next_pc();
649}
650
651void tms0980_cpu_device::read_opcode()
652{
653   debugger_instruction_hook(this, m_rom_address << 1);
654   m_opcode = m_program->read_word(m_rom_address << 1) & 0x1ff;
655   m_c4 = BITSWAP8(m_opcode,7,6,5,4,0,1,2,3) & 0xf; // opcode operand is bitswapped for most opcodes
656   
657   m_fixed = m_fixed_decode[m_opcode];
658   
659   // if ipla term 0 is active, R4-R8 directly select a microinstruction index when R0 or R0^BL is 0
660   int r0 = m_opcode >> 8 & 1;
661   if (m_ipla->read(m_opcode) & 0x40 && !((r0 & m_bl) ^ r0))
662      m_micro = m_micro_direct[m_opcode & 0x3f];
663   else
664      m_micro = m_micro_decode[m_opcode];
665
666   next_pc();
667}
668
669
670void tms1xxx_cpu_device::write_o_output(UINT8 data)
671{
672   // a hardcoded table is supported if the output pla is unknown
673   m_o = (c_output_pla == NULL) ? m_opla->read(data) : c_output_pla[data];
674   
675   if ((m_o & 0xff00) == 0xff00)
676      logerror("unknown output pla mapping for index %02X\n", data);
677   
678   m_write_o(0, m_o & m_o_mask, 0xffff);
679}
680
681void tms0970_cpu_device::write_o_output(UINT8 data)
682{
683   m_o = m_spla->read(data);
684   m_write_o(0, m_o & m_o_mask, 0xffff);
685}
686
687UINT8 tms1xxx_cpu_device::read_k_input()
688{
689   // K1,2,4,8,3 (KC test pin is not emulated)
690   UINT8 k = m_read_k(0, 0xff) & m_k_mask;
691   UINT8 k3 = (k & 0x10) ? 3: 0; // the K3 line that is on some chips, is simply K1|K2
692   return (k & 0xf) | k3;
693}
694
695
696void tms1xxx_cpu_device::set_cki_bus()
697{
698   switch (m_opcode & 0xf8)
699   {
700      // 00001XXX: K-inputs
701      case 0x08:
702         m_cki_bus = read_k_input();
787703         break;
788      case 2:
789         /* fetch: nothing */
790         /* execute: write ram */
791         /* perform adder logic */
792         m_adder_result = m_p + m_n + m_carry_in;
793         if ( m_decode & MICRO_MASK )
794         {
795            if ( m_decode & M_NE )
796            {
797               if ( m_n == m_p )
798               {
799                  m_status = 0;
800               }
801            }
802            if ( m_decode & M_C8 )
803            {
804               m_status = m_adder_result >> 4;
805            }
806            if ( m_decode & M_STO )
807            {
808               m_data->write_byte( m_ram_address, m_a );
809            }
810            if ( m_decode & M_CKM )
811            {
812               m_data->write_byte( m_ram_address, m_cki_bus );
813            }
814         }
815         else
816         {
817            if ( m_decode & F_SBIT )
818            {
819               m_data->write_byte( m_ram_address, m_ram_data | tms0980_bit_value[ m_opcode & 0x03 ] );
820            }
821            if ( m_decode & F_RBIT )
822            {
823               m_data->write_byte( m_ram_address, m_ram_data & tms0980_nbit_value[ m_opcode & 0x03 ] );
824            }
825            if ( m_decode & F_SETR )
826            {
827               m_r = m_r | ( 1 << m_y );
828               m_write_r( 0, m_r & m_r_mask, 0xffff );
829            }
830            if ( m_decode & F_RSTR )
831            {
832               m_r = m_r & ( ~( 1 << m_y ) );
833               m_write_r( 0, m_r & m_r_mask, 0xffff );
834            }
835            if ( m_decode & F_TDO )
836            {
837               /* Calculate O-outputs based on status latch, A, and the output PLA configuration */
838               m_o = c_output_pla[ ( m_status_latch << 4 ) | m_a ];
839               if ( ( c_output_pla[ ( m_status_latch << 4 ) | m_a ] & 0xFF00 ) == 0xFF00 )
840               {
841                  logerror("unknown output pla mapping for status latch = %d and a = %X\n", m_status_latch, m_a);
842               }
843704
844               m_write_o( 0, m_o & m_o_mask, 0xffff );
845            }
846            if ( m_decode & F_CLO )
847            {
848               m_o = 0;
849               m_write_o( 0, m_o & m_o_mask, 0xffff );
850            }
851            if ( m_decode & F_LDX )
852            {
853               switch( m_x_bits )
854               {
855                  case 2:
856                     m_x = tms0980_c2_value[ m_opcode & 0x03 ];
857                     break;
858                  case 3:
859                     m_x = tms0980_c3_value[ m_opcode & 0x07 ];
860                     break;
861                  case 4:
862                     m_x = tms0980_c4_value[ m_opcode & 0x0f ];
863                     break;
864               }
865            }
866            if ( m_decode & F_COMX )
867            {
868               switch ( m_x_bits )
869               {
870                  case 2:
871                     m_x = m_x ^ 0x03;
872                     break;
873                  case 3:
874                     m_x = m_x ^ 0x07;
875                     break;
876                  case 4:
877                     m_x = m_x ^ 0x0f;
878                     break;
879               }
880            }
881            if ( m_decode & F_COMC )
882            {
883               m_cb = m_cb ^ 0x01;
884            }
885            if ( m_decode & F_LDP )
886            {
887               m_pb = tms0980_c4_value[ m_opcode & 0x0F ];
888            }
889            if ( m_decode & F_REAC )
890            {
891               m_special_status = 0;
892            }
893            if ( m_decode & F_SEAC )
894            {
895               m_special_status = 1;
896            }
897            if ( m_decode == F_SAL )
898            {
899               m_add_latch = 1;
900            }
901            if ( m_decode == F_SBL )
902            {
903               m_branch_latch = 1;
904            }
905         }
705      // 0011XXXX: select bit
706      case 0x30: case 0x38:
707         m_cki_bus = 1 << (m_c4 >> 2) ^ 0xf;
906708         break;
907      case 3:
908         /* fetch: fetch, update pc, ram address */
909         /* execute: register store */
709     
710      // 01XXXXXX: constant
711      case 0x00: // R2,3,4 are NANDed with eachother, and then ORed with R1, making 00000XXX valid too
712      case 0x40: case 0x48: case 0x50: case 0x58: case 0x60: case 0x68: case 0x70: case 0x78:
713         m_cki_bus = m_c4;
910714         break;
911      case 4:
912         /* execute: register store */
913         if ( m_decode & MICRO_MASK )
914         {
915            if ( m_decode & M_AUTA )
916            {
917               m_a = m_adder_result & 0x0F;
918            }
919            if ( m_decode & M_AUTY )
920            {
921               m_y = m_adder_result & 0x0F;
922            }
923            if ( m_decode & M_STSL )
924            {
925               m_status_latch = m_status;
926            }
927         }
928         /* fetch: fetch, update pc, ram address */
929         if ( m_byte_size > 8 )
930         {
931            debugger_instruction_hook( this, m_rom_address << 1 );
932            m_opcode = m_program->read_word( m_rom_address << 1 ) & 0x1FF;
933         }
934         else
935         {
936            debugger_instruction_hook( this, m_rom_address );
937            m_opcode = m_program->read_byte( m_rom_address );
938         }
939         next_pc();
940715
941         /* ram address */
942         m_ram_address = ( m_x << 4 ) | m_y;
716      default:
717         m_cki_bus = 0;
943718         break;
944      case 5:
945         /* fetch: instruction decode */
946         m_decode = m_decode_table[ m_opcode ];
947         /* execute: execute br/call */
948         if ( m_status )
949         {
950            if ( m_decode == F_BR )
951            {
952               m_ca = m_cb;
953               if ( m_call_latch == 0 )
954               {
955                  m_pa = m_pb;
956               }
957               m_pc = m_opcode & ( ( 1 << m_pc_size ) - 1 );
958            }
959            if ( m_decode == F_CALL )
960            {
961               UINT8 t = m_pa;
962               if ( m_call_latch == 0 )
963               {
964                  m_sr = m_pc;
965                  m_call_latch = 1;
966                  m_pa = m_pb;
967                  m_cs = m_ca;
968               }
969               m_ca = m_cb;
970               m_pb = t;
971               m_pc = m_opcode & ( ( 1 << m_pc_size ) - 1 );
972            }
973         }
974         if ( m_decode == F_RETN )
975         {
976            if ( m_call_latch == 1 )
977            {
978               m_pc = m_sr;
979               m_call_latch = 0;
980               m_ca = m_cs;
981            }
982            m_add_latch = 0;
983            m_pa = m_pb;
984         } else {
985            m_branch_latch = 0;
986         }
987         break;
988      }
989      m_subcycle = ( m_subcycle + 1 ) % 6;
990   } while( m_icount > 0 );
719   }
991720}
992721
993
994void tms0980_cpu_device::state_string_export(const device_state_entry &entry, astring &string)
722void tms0980_cpu_device::set_cki_bus()
995723{
996   switch( entry.index() )
724   switch (m_opcode & 0x1f8)
997725   {
998      case STATE_GENPC:
999         string.printf( "%03X", ( ( m_pa << 7 ) | m_pc ) << 1 );
726      // 000001XXX: K-inputs
727      case 0x008:
728         m_cki_bus = read_k_input();
1000729         break;
730
731      // 0X0100XXX: select bit
732      case 0x020: case 0x0a0:
733         m_cki_bus = 1 << (m_c4 >> 2) ^ 0xf;
734         break;
735     
736      // 0X1XXXXXX: constant
737      case 0x040: case 0x048: case 0x050: case 0x058: case 0x060: case 0x068: case 0x070: case 0x078:
738      case 0x0c0: case 0x0c8: case 0x0d0: case 0x0d8: case 0x0e0: case 0x0e8: case 0x0f0: case 0x0f8:
739         m_cki_bus = m_c4;
740         break;
741
742      default:
743         m_cki_bus = 0;
744         break;
1001745   }
1002746}
1003747
1004748
1005void tms1000_cpu_device::state_string_export(const device_state_entry &entry, astring &string)
749// fixed opcode set
750
751// TMS1000/common:
752
753void tms1xxx_cpu_device::op_sbit()
1006754{
1007   switch( entry.index() )
1008   {
1009      case STATE_GENPC:
1010         string.printf( "%03X", ( m_pa << 6 ) | tms1000_pc_decode[ m_pc ] );
1011         break;
1012   }
755   // SBIT: set memory bit
756   if (m_ram_out == -1)
757      m_ram_out = m_ram_in;
758   m_ram_out |= (m_cki_bus ^ 0xf);
1013759}
1014760
761void tms1xxx_cpu_device::op_rbit()
762{
763   // RBIT: reset memory bit
764   if (m_ram_out == -1)
765      m_ram_out = m_ram_in;
766   m_ram_out &= m_cki_bus;
767}
1015768
1016void tms1100_cpu_device::state_string_export(const device_state_entry &entry, astring &string)
769void tms1xxx_cpu_device::op_setr()
1017770{
1018   switch( entry.index() )
1019   {
1020      case STATE_GENPC:
1021         string.printf( "%03X", ( m_ca << 10 ) | ( m_pa << 6 ) | m_pc );
1022         break;
1023   }
771   // SETR: set one R-output line
772   m_r = m_r | (1 << m_y);
773   m_write_r(0, m_r & m_r_mask, 0xffff);
1024774}
1025775
776void tms1xxx_cpu_device::op_rstr()
777{
778   // RSTR: reset one R-output line
779   m_r = m_r & ~(1 << m_y);
780   m_write_r(0, m_r & m_r_mask, 0xffff);
781}
1026782
1027tms0980_cpu_device::tms0980_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1028   : tms1xxx_cpu_device( mconfig, TMS0980, "TMS0980", tag, owner, clock, tms0980_decode, 0x00ff, 0x07ff, 7, 9, 4
1029                  , 12, ADDRESS_MAP_NAME( program_11bit_9 ), 8, ADDRESS_MAP_NAME( data_64x9_as4 ), "tms0980", __FILE__)
783void tms1xxx_cpu_device::op_tdo()
1030784{
785   // TDO: transfer accumulator and status latch to O-output
786   write_o_output(m_status_latch << 4 | m_a);
1031787}
1032788
789void tms1xxx_cpu_device::op_clo()
790{
791   // CLO: clear O-output
792   write_o_output(0);
793}
1033794
1034offs_t tms0980_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
795void tms1xxx_cpu_device::op_ldx()
1035796{
1036   extern CPU_DISASSEMBLE( tms0980 );
1037   return CPU_DISASSEMBLE_NAME(tms0980)(this, buffer, pc, oprom, opram, options);
797   // LDX: load X register with (x_bits) constant
798   m_x = m_c4 >> (4-m_x_bits);
1038799}
1039800
801void tms1xxx_cpu_device::op_comx()
802{
803   // COMX: complement X register
804   m_x ^= m_x_mask;
805}
1040806
1041tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1042   : tms1xxx_cpu_device( mconfig, TMS1000, "TMS1000", tag, owner, clock, tms1000_default_decode, 0x00ff, 0x07ff, 6, 8, 2
1043                  , 10, ADDRESS_MAP_NAME( program_10bit_8 ), 6, ADDRESS_MAP_NAME( data_64x4 ), "tms1000", __FILE__)
807void tms1xxx_cpu_device::op_comx8()
1044808{
809   // COMX8: complement MSB of X register
810   // note: on TMS1100, the mnemonic is simply called "COMX"
811   m_x ^= 1 << (m_x_bits-1);
1045812}
1046813
814void tms1xxx_cpu_device::op_ldp()
815{
816   // LDP: load page buffer with constant
817   m_pb = m_c4;
818}
1047819
1048tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, device_type type, const char*name, const char *tag, device_t *owner, UINT32 clock, UINT16 o_mask, UINT16 r_mask, const char *shortname, const char *source)
1049   : tms1xxx_cpu_device( mconfig, type, name, tag, owner, clock, tms1000_default_decode, o_mask, r_mask, 6, 8, 2
1050                  , 10, ADDRESS_MAP_NAME( program_10bit_8 ), 6, ADDRESS_MAP_NAME( data_64x4 ), shortname, source )
820
821// TMS1100-specific
822
823void tms1100_cpu_device::op_setr()
1051824{
825   // SETR: same, but X register MSB must be clear
826   if (~m_x & (1 << (m_x_bits-1)))
827      tms1xxx_cpu_device::op_setr();
1052828}
1053829
830void tms1100_cpu_device::op_rstr()
831{
832   // RSTR: same, but X register MSB must be clear
833   if (~m_x & (1 << (m_x_bits-1)))
834      tms1xxx_cpu_device::op_rstr();
835}
1054836
1055offs_t tms1000_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
837void tms1xxx_cpu_device::op_comc()
1056838{
1057   extern CPU_DISASSEMBLE( tms1000 );
1058   return CPU_DISASSEMBLE_NAME(tms1000)(this, buffer, pc, oprom, opram, options);
839   // COMC: complement chapter buffer
840   m_cb ^= 1;
1059841}
1060842
1061843
1062tms0970_cpu_device::tms0970_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1063   : tms1000_cpu_device( mconfig, TMS0970, "TMS0970", tag, owner, clock, 0x00ff, 0x07ff, "tms0970", __FILE__)
844// TMS09x0-specific
845void tms0970_cpu_device::op_setr()
1064846{
847   // SETR: set output register
848   // DDIG line is a coincidence between the selected output pla row(s) and segment pla row(s)
849   int ddig = (m_opla->read(m_a) & m_o) ? 0 : 1;
850   m_r = (m_r & ~(1 << m_y)) | (ddig << m_y);
1065851}
1066852
1067tms1070_cpu_device::tms1070_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1068   : tms1000_cpu_device( mconfig, TMS1070, "TMS1070", tag, owner, clock, 0x00ff, 0x07ff, "tms1070", __FILE__)
853void tms0970_cpu_device::op_tdo()
1069854{
855   // TDO: transfer digits to output
856   write_o_output(m_a & 0x7);
857   m_write_r(0, m_r & m_r_mask, 0xffff);
1070858}
1071859
1072860
1073tms1200_cpu_device::tms1200_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1074   : tms1000_cpu_device( mconfig, TMS1200, "TMS1200", tag, owner, clock, 0x00ff, 0x1fff, "tms1200", __FILE__)
861// TMS0980-specific
862void tms0980_cpu_device::op_comx()
1075863{
864   // COMX: complement X register, but not the MSB
865   m_x ^= (m_x_mask >> 1);
1076866}
1077867
868void tms1xxx_cpu_device::op_xda()
869{
870   // XDA: exchange DAM and A
871   // note: setting A to DAM is done with DMTP and AUTA during this instruction
872   m_ram_address |= (0x10 << (m_x_bits-1));
873}
1078874
1079tms1270_cpu_device::tms1270_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1080   : tms1000_cpu_device( mconfig, TMS1270, "TMS1270", tag, owner, clock, 0x03ff, 0x1fff, "tms1270", __FILE__)
875void tms1xxx_cpu_device::op_off()
1081876{
877   // OFF: request power off
878   logerror("%s: power-off request\n", tag());
879   m_power_off(1);
1082880}
1083881
882void tms1xxx_cpu_device::op_seac()
883{
884   // SEAC: set end around carry
885   m_eac = 1;
886}
1084887
1085tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1086   : tms1xxx_cpu_device( mconfig, TMS1100, "TMS1100", tag, owner, clock, tms1100_default_decode, 0x00ff, 0x07ff, 6, 8, 3
1087                  , 11, ADDRESS_MAP_NAME( program_11bit_8 ), 7, ADDRESS_MAP_NAME( data_128x4 ), "tms1100", __FILE__ )
888void tms1xxx_cpu_device::op_reac()
1088889{
890   // REAC: reset end around carry
891   m_eac = 0;
1089892}
1090893
894void tms1xxx_cpu_device::op_sal()
895{
896   // SAL: set add latch (reset is done with RETN)
897   m_add = 1;
898}
1091899
1092tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, device_type type, const char*name, const char *tag, device_t *owner, UINT32 clock, UINT16 o_mask, UINT16 r_mask, const char *shortname, const char *source)
1093   : tms1xxx_cpu_device( mconfig, type, name, tag, owner, clock, tms1100_default_decode, o_mask, r_mask, 6, 8, 3
1094                  , 11, ADDRESS_MAP_NAME( program_11bit_8 ), 7, ADDRESS_MAP_NAME( data_128x4 ), shortname, source )
900void tms1xxx_cpu_device::op_sbl()
1095901{
902   // SBL: set branch latch (reset is done with RETN)
903   m_bl = 1;
1096904}
1097905
1098906
1099offs_t tms1100_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
907void tms1xxx_cpu_device::execute_fixed_opcode()
1100908{
1101   extern CPU_DISASSEMBLE( tms1100 );
1102   return CPU_DISASSEMBLE_NAME(tms1100)(this, buffer, pc, oprom, opram, options);
909   switch (m_fixed)
910   {
911      case F_SBIT: op_sbit(); break;
912      case F_RBIT: op_rbit(); break;
913      case F_SETR: op_setr(); break;
914      case F_RSTR: op_rstr(); break;
915      case F_TDO:  op_tdo();  break;
916      case F_CLO:  op_clo();  break;
917      case F_LDX:  op_ldx();  break;
918      case F_COMX: op_comx(); break;
919      case F_COMX8:op_comx8();break;
920      case F_LDP:  op_ldp();  break;
921      case F_COMC: op_comc(); break;
922      case F_OFF:  op_off();  break;
923      case F_SEAC: op_seac(); break;
924      case F_REAC: op_reac(); break;
925      case F_SAL:  op_sal();  break;
926      case F_SBL:  op_sbl();  break;
927      case F_XDA:  op_xda();  break;
928     
929      default:
930         // BR, CALL, RETN are handled in execute_run
931         if (m_fixed & ~(F_BR | F_CALL | F_RETN))
932            fatalerror("%s unsupported fixed opcode %03X %04X!\n", tag(), m_opcode, m_fixed);
933         break;
934   }
1103935}
1104936
1105937
1106tms1300_cpu_device::tms1300_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1107   : tms1100_cpu_device( mconfig, TMS1300, "TMS1300", tag, owner, clock, 0x00ff, 0xffff, "tms1300", __FILE__ )
938
939void tms1xxx_cpu_device::execute_run()
1108940{
941   do
942   {
943      m_icount--;
944      switch (m_subcycle)
945      {
946      case 0:
947         // fetch: rom address 1/2
948
949         // execute: br/call 2/2
950         // note: add(latch) and bl(branch latch) are specific to 0980 series,
951         // c(chapter) bits are specific to 1100 series
952         if (m_status)
953         {
954            UINT8 new_pc = m_opcode & m_pc_mask;
955           
956            // BR: conditional branch
957            if (m_fixed & F_BR)
958            {
959               if (m_clatch == 0)
960                  m_pa = m_pb;
961               m_ca = m_cb;
962               m_pc = new_pc;
963            }
964           
965            // CALL: conditional call
966            if (m_fixed & F_CALL)
967            {
968               UINT8 prev_pa = m_pa;
969               if (m_clatch == 0)
970               {
971                  m_sr = m_pc;
972                  m_clatch = 1;
973                  m_pa = m_pb;
974                  m_cs = m_ca;
975               }
976               m_ca = m_cb;
977               m_pb = prev_pa;
978               m_pc = new_pc;
979            }
980         }
981
982         // RETN: return from subroutine
983         if (m_fixed & F_RETN)
984         {
985            if (m_clatch == 1)
986            {
987               m_pc = m_sr;
988               m_clatch = 0;
989               m_ca = m_cs;
990            }
991            m_add = 0;
992            m_bl = 0;
993            m_pa = m_pb;
994         }
995
996         // execute: k input valid, read ram, clear alu inputs
997         set_cki_bus();
998         m_ram_in = m_data->read_byte(m_ram_address) & 0xf;
999         m_dam_in = m_data->read_byte(m_ram_address | (0x10 << (m_x_bits-1))) & 0xf;
1000         m_ram_out = -1;
1001         m_status = 1;
1002         m_p = 0;
1003         m_n = 0;
1004         m_carry_in = 0;
1005
1006         break;
1007
1008      case 1:
1009         // fetch: rom address 2/2
1010         m_rom_address = (m_ca << (m_pc_bits+4)) | (m_pa << m_pc_bits) | m_pc;
1011         
1012         // execute: update alu inputs
1013         // N inputs
1014         if (m_micro & M_15TN)  m_n |= 0xf;
1015         if (m_micro & M_ATN)   m_n |= m_a;
1016         if (m_micro & M_NATN)  m_n |= (~m_a & 0xf);
1017         if (m_micro & M_CKN)   m_n |= m_cki_bus;
1018         if (m_micro & M_MTN)   m_n |= m_ram_in;
1019
1020         // P inputs
1021         if (m_micro & M_CKP)   m_p |= m_cki_bus;
1022         if (m_micro & M_MTP)   m_p |= m_ram_in;
1023         if (m_micro & M_YTP)   m_p |= m_y;
1024         if (m_micro & M_DMTP)  m_p |= m_dam_in;
1025         if (m_micro & M_NDMTP) m_p |= (~m_dam_in & 0xf);
1026
1027         // carry input
1028         if (m_micro & M_CIN)   m_carry_in |= 1;
1029         if (m_micro & M_SSS)   m_carry_in |= m_eac;
1030
1031         break;
1032
1033      case 2:
1034      {
1035         // fetch: nothing
1036
1037         // execute: perform alu logic
1038         // note: officially, only 1 alu operation is allowed per opcode
1039         m_adder_out = m_p + m_n + m_carry_in;
1040         int carry_out = m_adder_out >> 4 & 1;
1041
1042         if (m_micro & M_C8) m_status &= carry_out;
1043         if (m_micro & M_NE) m_status &= (m_n != m_p); // COMP
1044
1045         if (m_micro & M_CKM) m_ram_out = m_cki_bus;
1046
1047         // special status circuit
1048         if (m_micro & M_SSE)
1049         {
1050            m_eac = m_carry_out;
1051            if (m_add)
1052               m_eac |= carry_out;
1053         }
1054         m_carry_out = carry_out;
1055
1056         if (m_micro & M_STO || (m_micro & M_CME && m_eac == m_add))
1057            m_ram_out = m_a;
1058
1059         // handle the fixed opcodes here
1060         execute_fixed_opcode();
1061
1062         // execute: write ram
1063         if (m_ram_out != -1)
1064            m_data->write_byte(m_ram_address, m_ram_out);
1065
1066         break;
1067      }
1068
1069      case 3:
1070         // fetch: update pc, ram address 1/2
1071         // execute: register store 1/2
1072         break;
1073
1074      case 4:
1075         // execute: register store 2/2
1076         if (m_micro & M_AUTA) m_a = m_adder_out & 0xf;
1077         if (m_micro & M_AUTY) m_y = m_adder_out & 0xf;
1078         if (m_micro & M_STSL) m_status_latch = m_status;
1079
1080         // fetch: update pc, ram address 2/2
1081         read_opcode();
1082         m_ram_address = m_x << 4 | m_y;
1083         break;
1084
1085      case 5:
1086         // fetch: instruction decode (handled above, before next_pc)
1087         // execute: br/call 1/2
1088         break;
1089      }
1090      m_subcycle = (m_subcycle + 1) % 6;
1091   } while (m_icount > 0);
11091092}
trunk/src/emu/cpu/tms0980/tms0980.h
r242231r242232
1// license:BSD-3-Clause
2// copyright-holders:Wilbert Pol, hap
3/*
4
5  TMS0980/TMS1000-family MCU cores
6
7*/
18#ifndef _TMS0980_H_
29#define _TMS0980_H_
310
11#include "emu.h"
12#include "machine/pla.h"
413
5/* Registers */
6enum {
7   TMS0980_PC=1, TMS0980_SR, TMS0980_PA, TMS0980_PB,
8   TMS0980_A, TMS0980_X, TMS0980_Y, TMS0980_STATUS
9};
1014
11
1215#define MCFG_TMS1XXX_OUTPUT_PLA(_pla) \
1316   tms1xxx_cpu_device::set_output_pla(*device, _pla);
1417
15#define MCFG_TMS1XXX_READ_K(_devcb) \
16   tms1xxx_cpu_device::set_read_k(*device, DEVCB_##_devcb);
18#define MCFG_TMS1XXX_READ_K_CB(_devcb) \
19   tms1xxx_cpu_device::set_read_k_callback(*device, DEVCB_##_devcb);
1720
18#define MCFG_TMS1XXX_WRITE_O(_devcb) \
19   tms1xxx_cpu_device::set_write_o(*device, DEVCB_##_devcb);
21#define MCFG_TMS1XXX_WRITE_O_CB(_devcb) \
22   tms1xxx_cpu_device::set_write_o_callback(*device, DEVCB_##_devcb);
2023
21#define MCFG_TMS1XXX_WRITE_R(_devcb) \
22   tms1xxx_cpu_device::set_write_r(*device, DEVCB_##_devcb);
24#define MCFG_TMS1XXX_WRITE_R_CB(_devcb) \
25   tms1xxx_cpu_device::set_write_r_callback(*device, DEVCB_##_devcb);
2326
27#define MCFG_TMS1XXX_POWER_OFF_CB(_devcb) \
28   tms1xxx_cpu_device::set_power_off_callback(*device, DEVCB_##_devcb);
2429
30
2531class tms1xxx_cpu_device : public cpu_device
2632{
2733public:
2834   // construction/destruction
29   tms1xxx_cpu_device( const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock
30                  , const UINT32* decode_table, UINT16 o_mask, UINT16 r_mask, UINT8 pc_size, UINT8 byte_size, UINT8 x_bits
31                  , int program_addrbus_width, address_map_constructor program, int data_addrbus_width, address_map_constructor data, const char *shortname, const char *source)
32      : cpu_device( mconfig, type, name, tag, owner, clock, shortname, source)
33      , m_program_config("program", ENDIANNESS_BIG, byte_size > 8 ? 16 : 8, program_addrbus_width, 0, program )
34      , m_data_config("data", ENDIANNESS_BIG, 8, data_addrbus_width, 0, data )
35      , m_pc(0)
36      , m_pa(0)
37      , m_sr(0)
38      , m_pb(0)
39      , m_a(0)
40      , m_x(0)
41      , m_y(0)
42      , m_status(0)
43      , m_o_mask( o_mask )
44      , m_r_mask( r_mask )
45      , m_pc_size( pc_size )
46      , m_byte_size( byte_size )
47      , m_x_bits( x_bits )
48      , m_decode_table( decode_table )
49      , c_output_pla( NULL )
50      , m_read_k( *this )
51      , m_write_o( *this )
52      , m_write_r( *this )
35   tms1xxx_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock
36                  , UINT8 o_pins, UINT8 r_pins, UINT8 k_pins, UINT8 pc_bits, UINT8 byte_bits, UINT8 x_bits
37                  , int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source)
38      : cpu_device(mconfig, type, name, tag, owner, clock, shortname, source)
39      , m_program_config("program", ENDIANNESS_BIG, byte_bits > 8 ? 16 : 8, prgwidth, 0, program)
40      , m_data_config("data", ENDIANNESS_BIG, 8, datawidth, 0, data)
41      , m_mpla(*this, "mpla")
42      , m_ipla(*this, "ipla")
43      , m_opla(*this, "opla")
44      , m_spla(*this, "spla")
45      , m_o_pins(o_pins)
46      , m_r_pins(r_pins)
47      , m_k_pins(k_pins)
48      , m_pc_bits(pc_bits)
49      , m_byte_bits(byte_bits)
50      , m_x_bits(x_bits)
51      , c_output_pla(NULL)
52      , m_read_k(*this)
53      , m_write_o(*this)
54      , m_write_r(*this)
55      , m_power_off(*this)
5356   { }
5457
5558   // static configuration helpers
56   template<class _Object> static devcb_base &set_read_k(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_read_k.set_callback(object); }
57   template<class _Object> static devcb_base &set_write_o(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_write_o.set_callback(object); }
58   template<class _Object> static devcb_base &set_write_r(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_write_r.set_callback(object); }
59   template<class _Object> static devcb_base &set_read_k_callback(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_read_k.set_callback(object); }
60   template<class _Object> static devcb_base &set_write_o_callback(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_write_o.set_callback(object); }
61   template<class _Object> static devcb_base &set_write_r_callback(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_write_r.set_callback(object); }
62   template<class _Object> static devcb_base &set_power_off_callback(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_power_off.set_callback(object); }
5963   static void set_output_pla(device_t &device, const UINT16 *output_pla) { downcast<tms1xxx_cpu_device &>(device).c_output_pla = output_pla; }
6064
6165protected:
r242231r242232
6569
6670   // device_execute_interface overrides
6771   virtual UINT32 execute_min_cycles() const { return 1; }
68   virtual UINT32 execute_max_cycles() const { return 6; }
72   virtual UINT32 execute_max_cycles() const { return 1; }
6973   virtual UINT32 execute_input_lines() const { return 1; }
7074   virtual void execute_run();
7175
7276   // device_memory_interface overrides
73   virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_DATA ) ? &m_data_config : NULL ); }
77   virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return(spacenum == AS_PROGRAM) ? &m_program_config :((spacenum == AS_DATA) ? &m_data_config : NULL); }
7478
7579   // device_disasm_interface overrides
7680   virtual UINT32 disasm_min_opcode_bytes() const { return 1; }
7781   virtual UINT32 disasm_max_opcode_bytes() const { return 1; }
7882
83   void state_string_export(const device_state_entry &entry, astring &string);
84
7985   void next_pc();
80   void set_cki_bus();
86   void execute_fixed_opcode();
87   
88   virtual void write_o_output(UINT8 data);
89   virtual UINT8 read_k_input();
90   virtual void set_cki_bus();
91   virtual void read_opcode();
8192
93   virtual void op_sbit();
94   virtual void op_rbit();
95   virtual void op_setr();
96   virtual void op_rstr();
97   virtual void op_tdo();
98   virtual void op_clo();
99   virtual void op_ldx();
100   virtual void op_comx();
101   virtual void op_comx8();
102   virtual void op_ldp();
103
104   virtual void op_comc();
105   virtual void op_xda();
106   virtual void op_off();
107   virtual void op_seac();
108   virtual void op_reac();
109   virtual void op_sal();
110   virtual void op_sbl();
111
82112   address_space_config m_program_config;
83113   address_space_config m_data_config;
84114
85   UINT8   m_prev_pc;      /* previous program counter */
86   UINT8   m_prev_pa;      /* previous page address register */
87   UINT8   m_pc;           /* program counter is a 7 bit register on tms0980, 6 bit register on tms1000/1070/1200/1270/1100/1300 */
88   UINT8   m_pa;           /* page address register is a 4 bit register */
89   UINT8   m_sr;           /* subroutine return register is a 7 bit register */
90   UINT8   m_pb;           /* page buffer register is a 4 bit register */
91   UINT8   m_a;            /* Accumulator is a 4 bit register (?) */
92   UINT8   m_x;            /* X-register is a 2, 3, or 4 bit register */
93   UINT8   m_y;            /* Y-register is a 4 bit register */
94   UINT8   m_dam;          /* DAM register is a 4 bit register */
95   UINT8   m_ca;           /* Chapter address bit */
96   UINT8   m_cb;           /* Chapter buffer bit */
97   UINT8   m_cs;           /* Chapter subroutine bit */
115   optional_device<pla_device> m_mpla;
116   optional_device<pla_device> m_ipla;
117   optional_device<pla_device> m_opla;
118   optional_device<pla_device> m_spla;
119
120   UINT8   m_pc;        // 6 or 7-bit program counter
121   UINT8   m_sr;        // 6 or 7-bit subroutine return register
122   UINT8   m_pa;        // 4-bit page address register
123   UINT8   m_pb;        // 4-bit page buffer register
124   UINT8   m_a;         // 4-bit accumulator
125   UINT8   m_x;         // 2,3,or 4-bit RAM X register
126   UINT8   m_y;         // 4-bit RAM Y register
127   UINT8   m_ca;        // chapter address bit
128   UINT8   m_cb;        // chapter buffer bit
129   UINT8   m_cs;        // chapter subroutine bit
98130   UINT16  m_r;
99   UINT8   m_o;
100   UINT8   m_cki_bus;      /* CKI bus */
101   UINT8   m_p;            /* adder p-input */
102   UINT8   m_n;            /* adder n-input */
103   UINT8   m_adder_result; /* adder result */
104   UINT8   m_carry_in;     /* carry in */
131   UINT16  m_o;
132   UINT8   m_cki_bus;
133   UINT8   m_c4;
134   UINT8   m_p;         // 4-bit adder p(lus)-input
135   UINT8   m_n;         // 4-bit adder n(egative)-input
136   UINT8   m_adder_out; // adder result
137   UINT8   m_carry_in;  // adder carry-in bit
138   UINT8   m_carry_out; // adder carry-out bit
105139   UINT8   m_status;
106140   UINT8   m_status_latch;
107   UINT8   m_special_status;
108   UINT8   m_call_latch;
109   UINT8   m_add_latch;
110   UINT8   m_branch_latch;
111   int     m_subcycle;
141   UINT8   m_eac;       // end around carry bit
142   UINT8   m_clatch;    // call latch bit
143   UINT8   m_add;       // add latch bit
144   UINT8   m_bl;        // branch latch bit
145
146   UINT8   m_ram_in;
147   UINT8   m_dam_in;
148   int     m_ram_out; // signed!
112149   UINT8   m_ram_address;
113   UINT16  m_ram_data;
114150   UINT16  m_rom_address;
115151   UINT16  m_opcode;
116   UINT32  m_decode;
152   UINT32  m_fixed;
153   UINT32  m_micro;
154   int     m_subcycle;
117155   int     m_icount;
118   UINT16  m_o_mask;       /* mask to determine the number of O outputs */
119   UINT16  m_r_mask;       /* mask to determine the number of R outputs */
120   UINT8   m_pc_size;      /* how bits in the PC register */
121   UINT8   m_byte_size;    /* 8 or 9 bit bytes */
122   UINT8   m_x_bits;       /* determine the number of bits in the X register */
123   const UINT32 *m_decode_table;
156
157   UINT8   m_o_pins;    // how many O pins
158   UINT8   m_r_pins;    // how many R pins
159   UINT8   m_k_pins;    // how many K pins
160   UINT8   m_pc_bits;   // how many program counter bits
161   UINT8   m_byte_bits; // how many bits per 'byte'
162   UINT8   m_x_bits;    // how many X register bits
163
124164   address_space *m_program;
125165   address_space *m_data;
126166
r242231r242232
128168   devcb_read8 m_read_k;
129169   devcb_write16 m_write_o;
130170   devcb_write16 m_write_r;
171   devcb_write_line m_power_off;
172   
173   UINT32 m_o_mask;
174   UINT32 m_r_mask;
175   UINT32 m_k_mask;
176   UINT32 m_pc_mask;
177   UINT32 m_x_mask;
131178
179   // lookup tables
180   dynamic_array<UINT32> m_fixed_decode;
181   dynamic_array<UINT32> m_micro_decode;
182   dynamic_array<UINT32> m_micro_direct;
132183};
133184
134185
135class tms0980_cpu_device : public tms1xxx_cpu_device
136{
137public:
138   tms0980_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
139186
140protected:
141   // device_state_interface overrides
142   void state_string_export(const device_state_entry &entry, astring &string);
143
144   // device_disasm_interface overrides
145   virtual UINT32 disasm_min_opcode_bytes() const { return 2; }
146   virtual UINT32 disasm_max_opcode_bytes() const { return 2; }
147   virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
148};
149
150
151187class tms1000_cpu_device : public tms1xxx_cpu_device
152188{
153189public:
154190   tms1000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
155   tms1000_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT16 o_mask, UINT16 r_mask, const char *shortname, const char *source);
191   tms1000_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT8 o_pins, UINT8 r_pins, UINT8 k_pins, UINT8 pc_bits, UINT8 byte_bits, UINT8 x_bits, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source);
156192
157193protected:
158   // device_state_interface overrides
159   void state_string_export(const device_state_entry &entry, astring &string);
194   // overrides
195   virtual void device_reset();
196   virtual machine_config_constructor device_mconfig_additions() const;
160197
198
161199   virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
162200};
163201
164
165class tms0970_cpu_device : public tms1000_cpu_device
166{
167public:
168   tms0970_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
169};
170
171
172202class tms1070_cpu_device : public tms1000_cpu_device
173203{
174204public:
r242231r242232
183213};
184214
185215
186class tms1270_cpu_device : public tms1000_cpu_device
216class tms1100_cpu_device : public tms1000_cpu_device
187217{
188218public:
189   tms1270_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
219   tms1100_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
220   tms1100_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT8 o_pins, UINT8 r_pins, UINT8 k_pins, UINT8 pc_bits, UINT8 byte_bits, UINT8 x_bits, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source);
221
222protected:
223   // overrides
224   virtual void device_reset();
225
226   virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
227   
228   virtual void op_setr();
229   virtual void op_rstr();
190230};
191231
232class tms1300_cpu_device : public tms1100_cpu_device
233{
234public:
235   tms1300_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
236};
192237
193class tms1100_cpu_device : public tms1xxx_cpu_device
238
239class tms0970_cpu_device : public tms1000_cpu_device
194240{
195241public:
196   tms1100_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
197   tms1100_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT16 o_mask, UINT16 r_mask, const char *shortname, const char *source);
242   tms0970_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
243   tms0970_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT8 o_pins, UINT8 r_pins, UINT8 k_pins, UINT8 pc_bits, UINT8 byte_bits, UINT8 x_bits, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source);
198244
199245protected:
200   // device_state_interface overrides
201   void state_string_export(const device_state_entry &entry, astring &string);
246   // overrides
247   virtual void device_reset();
248   virtual machine_config_constructor device_mconfig_additions() const;
202249
203   virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
250   virtual void write_o_output(UINT8 data);
251   
252   virtual void op_setr();
253   virtual void op_tdo();
204254};
205255
206256
207class tms1300_cpu_device : public tms1100_cpu_device
257class tms0980_cpu_device : public tms0970_cpu_device
208258{
209259public:
210   tms1300_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
260   tms0980_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
261
262protected:
263   // overrides
264   virtual void device_reset();
265
266   virtual machine_config_constructor device_mconfig_additions() const;
267
268   virtual UINT32 disasm_min_opcode_bytes() const { return 2; }
269   virtual UINT32 disasm_max_opcode_bytes() const { return 2; }
270   virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
271   
272   virtual void set_cki_bus();
273   virtual void read_opcode();
274   
275   virtual void op_comx();
276private:
277   UINT32 decode_micro(UINT8 sel);
211278};
212279
213280
214/* 9-bit family */
215extern const device_type TMS0980;
216281
217/* 8-bit family */
218282extern const device_type TMS1000;
219extern const device_type TMS0970;
220283extern const device_type TMS1070;
221284extern const device_type TMS1200;
222extern const device_type TMS1270;
223285extern const device_type TMS1100;
224286extern const device_type TMS1300;
287extern const device_type TMS0970;
288extern const device_type TMS0980;
225289
226290
227291#endif /* _TMS0980_H_ */
trunk/src/emu/emupal.c
r242231r242232
927927   return rgb_t(r, g, b);
928928}
929929
930rgb_t raw_to_rgb_converter::xRGBRRRRGGGGBBBB_decoder(UINT32 raw)
930rgb_t raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit0_decoder(UINT32 raw)
931931{
932932   UINT8 r = pal5bit(((raw >> 7) & 0x1e) | ((raw >> 14) & 0x01));
933933   UINT8 g = pal5bit(((raw >> 3) & 0x1e) | ((raw >> 13) & 0x01));
934934   UINT8 b = pal5bit(((raw << 1) & 0x1e) | ((raw >> 12) & 0x01));
935935   return rgb_t(r, g, b);
936936}
937
938rgb_t raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit4_decoder(UINT32 raw)
939{
940   UINT8 r = pal5bit(((raw >> 8) & 0x0f) | ((raw >> 10) & 0x10));
941   UINT8 g = pal5bit(((raw >> 4) & 0x0f) | ((raw >> 9)  & 0x10));
942   UINT8 b = pal5bit(((raw >> 0) & 0x0f) | ((raw >> 8)  & 0x10));
943   return rgb_t(r, g, b);
944}
trunk/src/emu/emupal.h
r242231r242232
143143#define PALETTE_FORMAT_RRRRRGGGGGBBBBBx raw_to_rgb_converter(2, &raw_to_rgb_converter::standard_rgb_decoder<5,5,5, 11,6,1>)
144144#define PALETTE_FORMAT_GGGGGRRRRRBBBBBx raw_to_rgb_converter(2, &raw_to_rgb_converter::standard_rgb_decoder<5,5,5, 6,11,1>)
145145#define PALETTE_FORMAT_RRRRGGGGBBBBRGBx raw_to_rgb_converter(2, &raw_to_rgb_converter::RRRRGGGGBBBBRGBx_decoder)
146#define PALETTE_FORMAT_xRGBRRRRGGGGBBBB raw_to_rgb_converter(2, &raw_to_rgb_converter::xRGBRRRRGGGGBBBB_decoder)
146#define PALETTE_FORMAT_xRGBRRRRGGGGBBBB_bit0 raw_to_rgb_converter(2, &raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit0_decoder)
147#define PALETTE_FORMAT_xRGBRRRRGGGGBBBB_bit4 raw_to_rgb_converter(2, &raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit4_decoder)
147148
148149// standard 5-6-5 formats
149150#define PALETTE_FORMAT_RRRRRGGGGGGBBBBB raw_to_rgb_converter(2, &raw_to_rgb_converter::standard_rgb_decoder<5,6,5, 11,5,0>)
r242231r242232
307308   static rgb_t BBGGRRII_decoder(UINT32 raw);
308309   static rgb_t IRRRRRGGGGGBBBBB_decoder(UINT32 raw);
309310   static rgb_t RRRRGGGGBBBBRGBx_decoder(UINT32 raw);  // bits 3/2/1 are LSb
310   static rgb_t xRGBRRRRGGGGBBBB_decoder(UINT32 raw);  // bits 14/13/12 are LSb
311   static rgb_t xRGBRRRRGGGGBBBB_bit0_decoder(UINT32 raw);  // bits 14/13/12 are LSb
312   static rgb_t xRGBRRRRGGGGBBBB_bit4_decoder(UINT32 raw);  // bits 14/13/12 are MSb
311313
312314private:
313315   // internal data
trunk/src/emu/luaengine.c
r242231r242232
207207}
208208
209209//-------------------------------------------------
210//  emu_romname - returns rom base name
211//-------------------------------------------------
212
213int lua_engine::l_emu_romname(lua_State *L)
214{
215   lua_pushstring(L, luaThis->machine().basename());
216   return 1;
217}
218
219//-------------------------------------------------
220//  emu_pause/emu_unpause - pause/unpause game
221//-------------------------------------------------
222
223int lua_engine::l_emu_pause(lua_State *L)
224{
225   luaThis->machine().pause();
226   return 0;
227}
228
229int lua_engine::l_emu_unpause(lua_State *L)
230{
231   luaThis->machine().resume();
232   return 0;
233}
234
235//-------------------------------------------------
210236//  emu_keypost - post keys to natural keyboard
211237//-------------------------------------------------
212238
r242231r242232
496522   luabridge::getGlobalNamespace (m_lua_state)
497523      .beginNamespace ("emu")
498524         .addCFunction ("gamename",    l_emu_gamename )
525         .addCFunction ("romname",     l_emu_romname )
499526         .addCFunction ("keypost",     l_emu_keypost )
500527         .addCFunction ("hook_output", l_emu_hook_output )
501528         .addCFunction ("time",        l_emu_time )
r242231r242232
503530         .addCFunction ("after",       l_emu_after )
504531         .addCFunction ("exit",        l_emu_exit )
505532         .addCFunction ("start",       l_emu_start )
533         .addCFunction ("pause",       l_emu_pause )
534         .addCFunction ("unpause",     l_emu_unpause )
506535         .beginClass <machine_manager> ("manager")
507536            .addFunction ("machine", &machine_manager::machine)
508537            .addFunction ("options", &machine_manager::options)
trunk/src/emu/luaengine.h
r242231r242232
7979   static int l_emu_wait(lua_State *L);
8080   static int l_emu_time(lua_State *L);
8181   static int l_emu_gamename(lua_State *L);
82   static int l_emu_romname(lua_State *L);
8283   static int l_emu_keypost(lua_State *L);
8384   static int l_emu_hook_output(lua_State *L);
8485   static int l_emu_exit(lua_State *L);
8586   static int l_emu_start(lua_State *L);
87   static int l_emu_pause(lua_State *L);
88   static int l_emu_unpause(lua_State *L);
8689
8790   void resume(void *L, INT32 param);
8891   void report_errors(int status);
trunk/src/emu/rendlay.c
r242231r242232
677677   else if (strcmp(compnode.name, "led7seg") == 0)
678678      m_type = CTYPE_LED7SEG;
679679
680   // led8seg nodes
681   else if (strcmp(compnode.name, "led8seg") == 0)
682      m_type = CTYPE_LED8SEG;
683
680684   // led14seg nodes
681685   else if (strcmp(compnode.name, "led14seg") == 0)
682686      m_type = CTYPE_LED14SEG;
r242231r242232
749753         draw_led7seg(dest, bounds, state);
750754         break;
751755
756      case CTYPE_LED8SEG:
757         draw_led8seg(dest, bounds, state);
758         break;
759
752760      case CTYPE_LED14SEG:
753761         draw_led14seg(dest, bounds, state);
754762         break;
r242231r242232
13991407}
14001408
14011409
1410//------------------------------------------------------
1411//  draw_led8seg - draw a 8-segment fluorescent (Futaba)
1412//------------------------------------------------------
1413
1414void layout_element::component::draw_led8seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern)
1415{
1416   const rgb_t onpen = rgb_t(0xff,0xff,0xff,0xff);
1417   const rgb_t offpen = rgb_t(0xff,0x20,0x20,0x20);
1418   const rgb_t backpen = rgb_t(0xff,0x00,0x00,0x00);
1419
1420   // sizes for computation
1421   int bmwidth = 250;
1422   int bmheight = 400;
1423   int segwidth = 40;
1424   int skewwidth = 40;
1425
1426   // allocate a temporary bitmap for drawing
1427   bitmap_argb32 tempbitmap(bmwidth + skewwidth, bmheight);
1428   tempbitmap.fill(backpen);
1429
1430   // top bar
1431   draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, 0 + segwidth/2, segwidth, (pattern & (1 << 0)) ? onpen : offpen);
1432
1433   // top-right bar
1434   draw_segment_vertical(tempbitmap, 0 + 2*segwidth/3, bmheight/2 - segwidth/3, bmwidth - segwidth/2, segwidth, (pattern & (1 << 1)) ? onpen : offpen);
1435
1436   // bottom-right bar
1437   draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, bmwidth - segwidth/2, segwidth, (pattern & (1 << 2)) ? onpen : offpen);
1438
1439   // bottom bar
1440   draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, bmheight - segwidth/2, segwidth, (pattern & (1 << 3)) ? onpen : offpen);
1441
1442   // bottom-left bar
1443   draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 0 + segwidth/2, segwidth, (pattern & (1 << 4)) ? onpen : offpen);
1444
1445   // top-left bar
1446   draw_segment_vertical(tempbitmap, 0 + 2*segwidth/3, bmheight/2 - segwidth/3, 0 + segwidth/2, segwidth, (pattern & (1 << 5)) ? onpen : offpen);
1447
1448   // horizontal bars
1449   draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3, 2*bmwidth/3 - 2*segwidth/3, bmheight/2, segwidth, (pattern & (1 << 6)) ? onpen : offpen);
1450   draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3 + bmwidth/2, bmwidth - 2*segwidth/3, bmheight/2, segwidth, (pattern & (1 << 6)) ? onpen : offpen);
1451
1452   // vertical bars
1453   draw_segment_vertical(tempbitmap, 0 + segwidth/3 - 8, bmheight/2 - segwidth/3 + 2, 2*bmwidth/3 - segwidth/2 - 4, segwidth + 8, backpen);
1454   draw_segment_vertical(tempbitmap, 0 + segwidth/3, bmheight/2 - segwidth/3, 2*bmwidth/3 - segwidth/2 - 4, segwidth, (pattern & (1 << 7)) ? onpen : offpen);
1455
1456   draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3 - 2, bmheight - 2*segwidth/3 + 4, 2*bmwidth/3 - segwidth/2 - 4, segwidth + 8, backpen);
1457   draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 2*bmwidth/3 - segwidth/2 - 4, segwidth, (pattern & (1 << 7)) ? onpen : offpen);
1458
1459   // apply skew
1460   apply_skew(tempbitmap, 40);
1461
1462   // resample to the target size
1463   render_resample_argb_bitmap_hq(dest, tempbitmap, m_color);
1464}
1465
14021466//-------------------------------------------------
14031467//  draw_led14seg - draw a 14-segment LCD
14041468//-------------------------------------------------
trunk/src/emu/rendlay.h
r242231r242232
8787         CTYPE_DISK,
8888         CTYPE_TEXT,
8989         CTYPE_LED7SEG,
90         CTYPE_LED8SEG,
9091         CTYPE_LED14SEG,
9192         CTYPE_LED16SEG,
9293         CTYPE_LED14SEGSC,
r242231r242232
109110      void load_bitmap();
110111      void load_reel_bitmap(int number);
111112      void draw_led7seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern);
113      void draw_led8seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern);
112114      void draw_led14seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern);
113115      void draw_led14segsc(bitmap_argb32 &dest, const rectangle &bounds, int pattern);
114116      void draw_led16seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern);
trunk/src/emu/video/poly.h
r242231r242232
3535#ifndef __POLYNEW_H__
3636#define __POLYNEW_H__
3737
38#include <limits.h>
3839
3940//**************************************************************************
4041//  DEBUGGING
r242231r242232
226227   inline INT32 round_coordinate(_BaseType value)
227228   {
228229      INT32 result = poly_floor(value);
230
231      if ((value > 0) && (result < 0))
232         return INT_MAX-1;
229233      return result + (value - _BaseType(result) > _BaseType(0.5));
230234   }
231235
trunk/src/lib/formats/flopimg.c
r242231r242232
14661466         break;
14671467
14681468      case TRACK_ID_VICTOR_GCR5:
1469         gcr5_w(buffer, offset, 10, 1 + track + (head * 0x80));
1469         gcr5_w(buffer, offset, 10, track + (head * 0x80));
14701470         break;
14711471
14721472      case HEAD_ID:
trunk/src/lib/formats/victor9k_dsk.c
r242231r242232
3939    Interleave factor 3
4040    cell 2.13 usec
4141
42
43   Boot Disc Label Format
44   Track 0 Sector 0
45
46   Byte
47   Offset         Name                Description
48
49   0              System disc ID      literally, ff,00h for a system
50                                      disc
51
52   2              Load address        paragraph   to   load   booted
53                                      program at. If zero then  boot
54                                      loads in high memory.
55
56   4              Length              paragraph count to load.
57
58   6              Entry offset        I.P.  value  for  transfer  of
59                                      control.
60
61   8              Entry segment       C.S.  value  for  transfer  of
62                                      control.
63
64   10             I.D.                disc identifier.
65
66   18             Part number         system identifier  - displayed
67                                      by early versions of boot.
68
69   26             Sector size         byte count for sectors.
70
71   28             Data start          first   data  sector  on  disc
72                                      (absolute sectors).
73
74   30             Boot start          first   absolute   sector   of
75                                      program  for boot to  load  at
76                                      'load  address'  for  'length'
77                                      paragraphs.
78
79   32             Flags               indicators:
80                                           bit  meaning
81                                          15-12 interleave    factor
82                                                (0-15)
83                                            0   0=single sided
84                                                1=double sided
85
86   34             Disc type           00 = CP/M
87                                      01 = MS-DOS
88
89   35             Reserved
90
91   38             Speed table         information  for speed control
92                                      proc.
93
94   56             Zone table          high track for each zone.
95
96   71             Sector/track        sectors  per  track  for  each
97                                      zone.
4298*/
4399
44100#include "emu.h"
r242231r242232
84140   return 0;
85141}
86142
143void victor9k_format::log_boot_sector(UINT8 *data)
144{
145   // System disc ID
146   logerror("System disc: %s\n", ((data[0] == 0xff) && (data[1] == 0x00)) ? "yes" : "no");
147
148   // Load address
149   logerror("Load address: %04x\n", (data[1] << 8) | data[2]);
150
151   // Length
152   logerror("Length: %04x\n", (data[3] << 8) | data[4]);
153
154   // Entry offset
155   logerror("Entry offset: %04x\n", (data[5] << 8) | data[6]);
156
157   // Entry segment
158   logerror("Entry segment: %04x\n", (data[7] << 8) | data[8]);
159
160   // I.D.
161   //logerror("I.D.: %s\n", data[10]);
162
163   // Part number
164   //logerror("Part number: %s\n", data[18]);
165
166   // Sector size
167   logerror("Sector size: %04x\n", (data[25] << 8) | data[26]);
168
169   // Data start
170   logerror("Data start: %04x\n", (data[27] << 8) | data[28]);
171
172   // Boot start
173   logerror("Boot start: %04x\n", (data[29] << 8) | data[30]);
174
175   // Flags
176   logerror("%s sided\n", BIT(data[33], 0) ? "Double" : "Single");
177   logerror("Interleave factor: %u\n", data[32] >> 4);
178
179   // Disc type
180   switch (data[34]) {
181   case 0x00: logerror("Disc type: CP/M\n"); break;
182   case 0x01: logerror("Disc type: MS-DOS\n"); break;
183   default: logerror("Disc type: unknown\n"); break;
184   }
185
186   // Speed table
187   logerror("Speed table:  ");
188   for (int i = 38; i < 56; i++) {
189      logerror("%02x ", data[i]);
190   }
191   logerror("\n");
192
193   // Zone table
194   logerror("Zone table:            ");
195   for (int i = 56; i < 71; i++) {
196      logerror("%02x ", data[i]);
197   }
198   logerror("\n");
199
200   // Sector/track
201   logerror("Sector/track:          ");
202   for (int i = 71; i < 86; i++) {
203      logerror("%02x ", data[i]);
204   }
205   logerror("\n");
206}
207
87208floppy_image_format_t::desc_e* victor9k_format::get_sector_desc(const format &f, int &current_size, int sector_count)
88209{
89210   static floppy_image_format_t::desc_e desc[] = {
r242231r242232
141262
142263   io_generic_read(io, img, 0, size);
143264
265   log_boot_sector(img);
266
144267   int track_offset = 0;
145268
146269   for (int head = 0; head < f.head_count; head++) {
r242231r242232
207330      18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
208331      17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
209332      16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
210      15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
211      14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
333      15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
334      14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
212335      13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
213336      12, 12, 12, 12, 12, 12, 12, 12, 12
214337   },
r242231r242232
231354      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
232355      2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
233356      3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
234      4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
235      5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
357      4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
358      5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
236359      6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
237360      7, 7, 7, 7, 7, 7, 7, 7, 7
238361   },
trunk/src/lib/formats/victor9k_dsk.h
r242231r242232
3333
3434   int find_size(io_generic *io, UINT32 form_factor);
3535   virtual int identify(io_generic *io, UINT32 form_factor);
36   void log_boot_sector(UINT8 *data);
3637   floppy_image_format_t::desc_e* get_sector_desc(const format &f, int &current_size, int sector_count);
3738   void build_sector_description(const format &f, UINT8 *sectdata, offs_t sect_offs, desc_s *sectors, int sector_count) const;
3839   virtual bool load(io_generic *io, UINT32 form_factor, floppy_image *image);
trunk/src/lib/lib.mak
r242231r242232
389389
390390$(LIBOBJ)/libflac/%.o: $(LIBSRC)/libflac/libFLAC/%.c | $(OSPREBUILD)
391391   @echo Compiling $<...
392   $(CC) $(CDEFS) $(CONLYFLAGS) $(CCOMFLAGS) $(FLACOPTS) -I$(LIBSRC)/libflac/include -c $< -o $@
392   $(CC) $(CDEFS) $(CONLYFLAGS) $(CCOMFLAGS) $(FLACOPTS) -I$(LIBSRC)/libflac/include -I$(LIBSRC)/libflac/libFLAC/include -c $< -o $@
393393
394394
395395
trunk/src/lib/libflac/libFLAC/include/private/all.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PRIVATE__ALL_H
33#define FLAC__PRIVATE__ALL_H
34
35#include "bitmath.h"
36#include "bitreader.h"
37#include "bitwriter.h"
38#include "cpu.h"
39#include "crc.h"
40#include "fixed.h"
41#include "float.h"
42#include "format.h"
43#include "lpc.h"
44#include "md5.h"
45#include "memory.h"
46#include "metadata.h"
47#include "stream_encoder_framing.h"
48
49#endif
trunk/src/lib/libflac/libFLAC/include/private/bitmath.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2001,2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PRIVATE__BITMATH_H
33#define FLAC__PRIVATE__BITMATH_H
34
35#include "FLAC/ordinals.h"
36
37unsigned FLAC__bitmath_ilog2(FLAC__uint32 v);
38unsigned FLAC__bitmath_ilog2_wide(FLAC__uint64 v);
39unsigned FLAC__bitmath_silog2(int v);
40unsigned FLAC__bitmath_silog2_wide(FLAC__int64 v);
41
42#endif
trunk/src/lib/libflac/libFLAC/include/private/bitreader.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PRIVATE__BITREADER_H
33#define FLAC__PRIVATE__BITREADER_H
34
35#include <stdio.h> /* for FILE */
36#include "FLAC/ordinals.h"
37#include "cpu.h"
38
39/*
40 * opaque structure definition
41 */
42struct FLAC__BitReader;
43typedef struct FLAC__BitReader FLAC__BitReader;
44
45typedef FLAC__bool (*FLAC__BitReaderReadCallback)(FLAC__byte buffer[], size_t *bytes, void *client_data);
46
47/*
48 * construction, deletion, initialization, etc functions
49 */
50FLAC__BitReader *FLAC__bitreader_new(void);
51void FLAC__bitreader_delete(FLAC__BitReader *br);
52FLAC__bool FLAC__bitreader_init(FLAC__BitReader *br, FLAC__CPUInfo cpu, FLAC__BitReaderReadCallback rcb, void *cd);
53void FLAC__bitreader_free(FLAC__BitReader *br); /* does not 'free(br)' */
54FLAC__bool FLAC__bitreader_clear(FLAC__BitReader *br);
55void FLAC__bitreader_dump(const FLAC__BitReader *br, FILE *out);
56
57/*
58 * CRC functions
59 */
60void FLAC__bitreader_reset_read_crc16(FLAC__BitReader *br, FLAC__uint16 seed);
61FLAC__uint16 FLAC__bitreader_get_read_crc16(FLAC__BitReader *br);
62
63/*
64 * info functions
65 */
66FLAC__bool FLAC__bitreader_is_consumed_byte_aligned(const FLAC__BitReader *br);
67unsigned FLAC__bitreader_bits_left_for_byte_alignment(const FLAC__BitReader *br);
68unsigned FLAC__bitreader_get_input_bits_unconsumed(const FLAC__BitReader *br);
69
70/*
71 * read functions
72 */
73
74FLAC__bool FLAC__bitreader_read_raw_uint32(FLAC__BitReader *br, FLAC__uint32 *val, unsigned bits);
75FLAC__bool FLAC__bitreader_read_raw_int32(FLAC__BitReader *br, FLAC__int32 *val, unsigned bits);
76FLAC__bool FLAC__bitreader_read_raw_uint64(FLAC__BitReader *br, FLAC__uint64 *val, unsigned bits);
77FLAC__bool FLAC__bitreader_read_uint32_little_endian(FLAC__BitReader *br, FLAC__uint32 *val); /*only for bits=32*/
78FLAC__bool FLAC__bitreader_skip_bits_no_crc(FLAC__BitReader *br, unsigned bits); /* WATCHOUT: does not CRC the skipped data! */ /*@@@@ add to unit tests */
79FLAC__bool FLAC__bitreader_skip_byte_block_aligned_no_crc(FLAC__BitReader *br, unsigned nvals); /* WATCHOUT: does not CRC the read data! */
80FLAC__bool FLAC__bitreader_read_byte_block_aligned_no_crc(FLAC__BitReader *br, FLAC__byte *val, unsigned nvals); /* WATCHOUT: does not CRC the read data! */
81FLAC__bool FLAC__bitreader_read_unary_unsigned(FLAC__BitReader *br, unsigned *val);
82FLAC__bool FLAC__bitreader_read_rice_signed(FLAC__BitReader *br, int *val, unsigned parameter);
83FLAC__bool FLAC__bitreader_read_rice_signed_block(FLAC__BitReader *br, int vals[], unsigned nvals, unsigned parameter);
84#ifndef FLAC__NO_ASM
85#  ifdef FLAC__CPU_IA32
86#    ifdef FLAC__HAS_NASM
87FLAC__bool FLAC__bitreader_read_rice_signed_block_asm_ia32_bswap(FLAC__BitReader *br, int vals[], unsigned nvals, unsigned parameter);
88#    endif
89#  endif
90#endif
91#if 0 /* UNUSED */
92FLAC__bool FLAC__bitreader_read_golomb_signed(FLAC__BitReader *br, int *val, unsigned parameter);
93FLAC__bool FLAC__bitreader_read_golomb_unsigned(FLAC__BitReader *br, unsigned *val, unsigned parameter);
94#endif
95FLAC__bool FLAC__bitreader_read_utf8_uint32(FLAC__BitReader *br, FLAC__uint32 *val, FLAC__byte *raw, unsigned *rawlen);
96FLAC__bool FLAC__bitreader_read_utf8_uint64(FLAC__BitReader *br, FLAC__uint64 *val, FLAC__byte *raw, unsigned *rawlen);
97
98FLAC__bool bitreader_read_from_client_(FLAC__BitReader *br);
99#endif
trunk/src/lib/libflac/libFLAC/include/private/bitwriter.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PRIVATE__BITWRITER_H
33#define FLAC__PRIVATE__BITWRITER_H
34
35#include <stdio.h> /* for FILE */
36#include "FLAC/ordinals.h"
37
38/*
39 * opaque structure definition
40 */
41struct FLAC__BitWriter;
42typedef struct FLAC__BitWriter FLAC__BitWriter;
43
44/*
45 * construction, deletion, initialization, etc functions
46 */
47FLAC__BitWriter *FLAC__bitwriter_new(void);
48void FLAC__bitwriter_delete(FLAC__BitWriter *bw);
49FLAC__bool FLAC__bitwriter_init(FLAC__BitWriter *bw);
50void FLAC__bitwriter_free(FLAC__BitWriter *bw); /* does not 'free(buffer)' */
51void FLAC__bitwriter_clear(FLAC__BitWriter *bw);
52void FLAC__bitwriter_dump(const FLAC__BitWriter *bw, FILE *out);
53
54/*
55 * CRC functions
56 *
57 * non-const *bw because they have to cal FLAC__bitwriter_get_buffer()
58 */
59FLAC__bool FLAC__bitwriter_get_write_crc16(FLAC__BitWriter *bw, FLAC__uint16 *crc);
60FLAC__bool FLAC__bitwriter_get_write_crc8(FLAC__BitWriter *bw, FLAC__byte *crc);
61
62/*
63 * info functions
64 */
65FLAC__bool FLAC__bitwriter_is_byte_aligned(const FLAC__BitWriter *bw);
66unsigned FLAC__bitwriter_get_input_bits_unconsumed(const FLAC__BitWriter *bw); /* can be called anytime, returns total # of bits unconsumed */
67
68/*
69 * direct buffer access
70 *
71 * there may be no calls on the bitwriter between get and release.
72 * the bitwriter continues to own the returned buffer.
73 * before get, bitwriter MUST be byte aligned: check with FLAC__bitwriter_is_byte_aligned()
74 */
75FLAC__bool FLAC__bitwriter_get_buffer(FLAC__BitWriter *bw, const FLAC__byte **buffer, size_t *bytes);
76void FLAC__bitwriter_release_buffer(FLAC__BitWriter *bw);
77
78/*
79 * write functions
80 */
81FLAC__bool FLAC__bitwriter_write_zeroes(FLAC__BitWriter *bw, unsigned bits);
82FLAC__bool FLAC__bitwriter_write_raw_uint32(FLAC__BitWriter *bw, FLAC__uint32 val, unsigned bits);
83FLAC__bool FLAC__bitwriter_write_raw_int32(FLAC__BitWriter *bw, FLAC__int32 val, unsigned bits);
84FLAC__bool FLAC__bitwriter_write_raw_uint64(FLAC__BitWriter *bw, FLAC__uint64 val, unsigned bits);
85FLAC__bool FLAC__bitwriter_write_raw_uint32_little_endian(FLAC__BitWriter *bw, FLAC__uint32 val); /*only for bits=32*/
86FLAC__bool FLAC__bitwriter_write_byte_block(FLAC__BitWriter *bw, const FLAC__byte vals[], unsigned nvals);
87FLAC__bool FLAC__bitwriter_write_unary_unsigned(FLAC__BitWriter *bw, unsigned val);
88unsigned FLAC__bitwriter_rice_bits(FLAC__int32 val, unsigned parameter);
89#if 0 /* UNUSED */
90unsigned FLAC__bitwriter_golomb_bits_signed(int val, unsigned parameter);
91unsigned FLAC__bitwriter_golomb_bits_unsigned(unsigned val, unsigned parameter);
92#endif
93FLAC__bool FLAC__bitwriter_write_rice_signed(FLAC__BitWriter *bw, FLAC__int32 val, unsigned parameter);
94FLAC__bool FLAC__bitwriter_write_rice_signed_block(FLAC__BitWriter *bw, const FLAC__int32 *vals, unsigned nvals, unsigned parameter);
95#if 0 /* UNUSED */
96FLAC__bool FLAC__bitwriter_write_golomb_signed(FLAC__BitWriter *bw, int val, unsigned parameter);
97FLAC__bool FLAC__bitwriter_write_golomb_unsigned(FLAC__BitWriter *bw, unsigned val, unsigned parameter);
98#endif
99FLAC__bool FLAC__bitwriter_write_utf8_uint32(FLAC__BitWriter *bw, FLAC__uint32 val);
100FLAC__bool FLAC__bitwriter_write_utf8_uint64(FLAC__BitWriter *bw, FLAC__uint64 val);
101FLAC__bool FLAC__bitwriter_zero_pad_to_byte_boundary(FLAC__BitWriter *bw);
102
103#endif
trunk/src/lib/libflac/libFLAC/include/private/cpu.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2001,2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PRIVATE__CPU_H
33#define FLAC__PRIVATE__CPU_H
34
35#include "FLAC/ordinals.h"
36
37#ifdef HAVE_CONFIG_H
38#include <config.h>
39#endif
40
41typedef enum {
42   FLAC__CPUINFO_TYPE_IA32,
43   FLAC__CPUINFO_TYPE_PPC,
44   FLAC__CPUINFO_TYPE_UNKNOWN
45} FLAC__CPUInfo_Type;
46
47typedef struct {
48   FLAC__bool cpuid;
49   FLAC__bool bswap;
50   FLAC__bool cmov;
51   FLAC__bool mmx;
52   FLAC__bool fxsr;
53   FLAC__bool sse;
54   FLAC__bool sse2;
55   FLAC__bool sse3;
56   FLAC__bool ssse3;
57   FLAC__bool _3dnow;
58   FLAC__bool ext3dnow;
59   FLAC__bool extmmx;
60} FLAC__CPUInfo_IA32;
61
62typedef struct {
63   FLAC__bool altivec;
64   FLAC__bool ppc64;
65} FLAC__CPUInfo_PPC;
66
67typedef struct {
68   FLAC__bool use_asm;
69   FLAC__CPUInfo_Type type;
70   union {
71      FLAC__CPUInfo_IA32 ia32;
72      FLAC__CPUInfo_PPC ppc;
73   } data;
74} FLAC__CPUInfo;
75
76void FLAC__cpu_info(FLAC__CPUInfo *info);
77
78#ifndef FLAC__NO_ASM
79#ifdef FLAC__CPU_IA32
80#ifdef FLAC__HAS_NASM
81FLAC__uint32 FLAC__cpu_have_cpuid_asm_ia32(void);
82void         FLAC__cpu_info_asm_ia32(FLAC__uint32 *flags_edx, FLAC__uint32 *flags_ecx);
83FLAC__uint32 FLAC__cpu_info_extended_amd_asm_ia32(void);
84#endif
85#endif
86#endif
87
88#endif
trunk/src/lib/libflac/libFLAC/include/private/crc.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PRIVATE__CRC_H
33#define FLAC__PRIVATE__CRC_H
34
35#include "FLAC/ordinals.h"
36
37/* 8 bit CRC generator, MSB shifted first
38** polynomial = x^8 + x^2 + x^1 + x^0
39** init = 0
40*/
41extern FLAC__byte const FLAC__crc8_table[256];
42#define FLAC__CRC8_UPDATE(data, crc) (crc) = FLAC__crc8_table[(crc) ^ (data)];
43void FLAC__crc8_update(const FLAC__byte data, FLAC__uint8 *crc);
44void FLAC__crc8_update_block(const FLAC__byte *data, unsigned len, FLAC__uint8 *crc);
45FLAC__uint8 FLAC__crc8(const FLAC__byte *data, unsigned len);
46
47/* 16 bit CRC generator, MSB shifted first
48** polynomial = x^16 + x^15 + x^2 + x^0
49** init = 0
50*/
51extern unsigned FLAC__crc16_table[256];
52
53#define FLAC__CRC16_UPDATE(data, crc) (((((crc)<<8) & 0xffff) ^ FLAC__crc16_table[((crc)>>8) ^ (data)]))
54/* this alternate may be faster on some systems/compilers */
55#if 0
56#define FLAC__CRC16_UPDATE(data, crc) ((((crc)<<8) ^ FLAC__crc16_table[((crc)>>8) ^ (data)]) & 0xffff)
57#endif
58
59unsigned FLAC__crc16(const FLAC__byte *data, unsigned len);
60
61#endif
trunk/src/lib/libflac/libFLAC/include/private/fixed.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PRIVATE__FIXED_H
33#define FLAC__PRIVATE__FIXED_H
34
35#ifdef HAVE_CONFIG_H
36#include <config.h>
37#endif
38
39#include "private/float.h"
40#include "FLAC/format.h"
41
42/*
43 *  FLAC__fixed_compute_best_predictor()
44 *  --------------------------------------------------------------------
45 *  Compute the best fixed predictor and the expected bits-per-sample
46 *  of the residual signal for each order.  The _wide() version uses
47 *  64-bit integers which is statistically necessary when bits-per-
48 *  sample + log2(blocksize) > 30
49 *
50 *  IN data[0,data_len-1]
51 *  IN data_len
52 *  OUT residual_bits_per_sample[0,FLAC__MAX_FIXED_ORDER]
53 */
54#ifndef FLAC__INTEGER_ONLY_LIBRARY
55unsigned FLAC__fixed_compute_best_predictor(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]);
56# ifndef FLAC__NO_ASM
57#  ifdef FLAC__CPU_IA32
58#   ifdef FLAC__HAS_NASM
59unsigned FLAC__fixed_compute_best_predictor_asm_ia32_mmx_cmov(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]);
60#   endif
61#  endif
62# endif
63unsigned FLAC__fixed_compute_best_predictor_wide(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]);
64#else
65unsigned FLAC__fixed_compute_best_predictor(const FLAC__int32 data[], unsigned data_len, FLAC__fixedpoint residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]);
66unsigned FLAC__fixed_compute_best_predictor_wide(const FLAC__int32 data[], unsigned data_len, FLAC__fixedpoint residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]);
67#endif
68
69/*
70 *  FLAC__fixed_compute_residual()
71 *  --------------------------------------------------------------------
72 *  Compute the residual signal obtained from sutracting the predicted
73 *  signal from the original.
74 *
75 *  IN data[-order,data_len-1]        original signal (NOTE THE INDICES!)
76 *  IN data_len                       length of original signal
77 *  IN order <= FLAC__MAX_FIXED_ORDER fixed-predictor order
78 *  OUT residual[0,data_len-1]        residual signal
79 */
80void FLAC__fixed_compute_residual(const FLAC__int32 data[], unsigned data_len, unsigned order, FLAC__int32 residual[]);
81
82/*
83 *  FLAC__fixed_restore_signal()
84 *  --------------------------------------------------------------------
85 *  Restore the original signal by summing the residual and the
86 *  predictor.
87 *
88 *  IN residual[0,data_len-1]         residual signal
89 *  IN data_len                       length of original signal
90 *  IN order <= FLAC__MAX_FIXED_ORDER fixed-predictor order
91 *  *** IMPORTANT: the caller must pass in the historical samples:
92 *  IN  data[-order,-1]               previously-reconstructed historical samples
93 *  OUT data[0,data_len-1]            original signal
94 */
95void FLAC__fixed_restore_signal(const FLAC__int32 residual[], unsigned data_len, unsigned order, FLAC__int32 data[]);
96
97#endif
trunk/src/lib/libflac/libFLAC/include/private/float.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PRIVATE__FLOAT_H
33#define FLAC__PRIVATE__FLOAT_H
34
35#ifdef HAVE_CONFIG_H
36#include <config.h>
37#endif
38
39#include "FLAC/ordinals.h"
40
41/*
42 * These typedefs make it easier to ensure that integer versions of
43 * the library really only contain integer operations.  All the code
44 * in libFLAC should use FLAC__float and FLAC__double in place of
45 * float and double, and be protected by checks of the macro
46 * FLAC__INTEGER_ONLY_LIBRARY.
47 *
48 * FLAC__real is the basic floating point type used in LPC analysis.
49 */
50#ifndef FLAC__INTEGER_ONLY_LIBRARY
51typedef double FLAC__double;
52typedef float FLAC__float;
53/*
54 * WATCHOUT: changing FLAC__real will change the signatures of many
55 * functions that have assembly language equivalents and break them.
56 */
57typedef float FLAC__real;
58#else
59/*
60 * The convention for FLAC__fixedpoint is to use the upper 16 bits
61 * for the integer part and lower 16 bits for the fractional part.
62 */
63typedef FLAC__int32 FLAC__fixedpoint;
64extern const FLAC__fixedpoint FLAC__FP_ZERO;
65extern const FLAC__fixedpoint FLAC__FP_ONE_HALF;
66extern const FLAC__fixedpoint FLAC__FP_ONE;
67extern const FLAC__fixedpoint FLAC__FP_LN2;
68extern const FLAC__fixedpoint FLAC__FP_E;
69
70#define FLAC__fixedpoint_trunc(x) ((x)>>16)
71
72#define FLAC__fixedpoint_mul(x, y) ( (FLAC__fixedpoint) ( ((FLAC__int64)(x)*(FLAC__int64)(y)) >> 16 ) )
73
74#define FLAC__fixedpoint_div(x, y) ( (FLAC__fixedpoint) ( ( ((FLAC__int64)(x)<<32) / (FLAC__int64)(y) ) >> 16 ) )
75
76/*
77 *  FLAC__fixedpoint_log2()
78 *  --------------------------------------------------------------------
79 *  Returns the base-2 logarithm of the fixed-point number 'x' using an
80 *  algorithm by Knuth for x >= 1.0
81 *
82 *  'fracbits' is the number of fractional bits of 'x'.  'fracbits' must
83 *  be < 32 and evenly divisible by 4 (0 is OK but not very precise).
84 *
85 *  'precision' roughly limits the number of iterations that are done;
86 *  use (unsigned)(-1) for maximum precision.
87 *
88 *  If 'x' is less than one -- that is, x < (1<<fracbits) -- then this
89 *  function will punt and return 0.
90 *
91 *  The return value will also have 'fracbits' fractional bits.
92 */
93FLAC__uint32 FLAC__fixedpoint_log2(FLAC__uint32 x, unsigned fracbits, unsigned precision);
94
95#endif
96
97#endif
trunk/src/lib/libflac/libFLAC/include/private/format.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PRIVATE__FORMAT_H
33#define FLAC__PRIVATE__FORMAT_H
34
35#include "FLAC/format.h"
36
37unsigned FLAC__format_get_max_rice_partition_order(unsigned blocksize, unsigned predictor_order);
38unsigned FLAC__format_get_max_rice_partition_order_from_blocksize(unsigned blocksize);
39unsigned FLAC__format_get_max_rice_partition_order_from_blocksize_limited_max_and_predictor_order(unsigned limit, unsigned blocksize, unsigned predictor_order);
40void FLAC__format_entropy_coding_method_partitioned_rice_contents_init(FLAC__EntropyCodingMethod_PartitionedRiceContents *object);
41void FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(FLAC__EntropyCodingMethod_PartitionedRiceContents *object);
42FLAC__bool FLAC__format_entropy_coding_method_partitioned_rice_contents_ensure_size(FLAC__EntropyCodingMethod_PartitionedRiceContents *object, unsigned max_partition_order);
43
44#endif
trunk/src/lib/libflac/libFLAC/include/private/lpc.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PRIVATE__LPC_H
33#define FLAC__PRIVATE__LPC_H
34
35#ifdef HAVE_CONFIG_H
36#include <config.h>
37#endif
38
39#include "private/float.h"
40#include "FLAC/format.h"
41
42#ifndef FLAC__INTEGER_ONLY_LIBRARY
43
44/*
45 *  FLAC__lpc_window_data()
46 *  --------------------------------------------------------------------
47 *  Applies the given window to the data.
48 *  OPT: asm implementation
49 *
50 *  IN in[0,data_len-1]
51 *  IN window[0,data_len-1]
52 *  OUT out[0,lag-1]
53 *  IN data_len
54 */
55void FLAC__lpc_window_data(const FLAC__int32 in[], const FLAC__real window[], FLAC__real out[], unsigned data_len);
56
57/*
58 *  FLAC__lpc_compute_autocorrelation()
59 *  --------------------------------------------------------------------
60 *  Compute the autocorrelation for lags between 0 and lag-1.
61 *  Assumes data[] outside of [0,data_len-1] == 0.
62 *  Asserts that lag > 0.
63 *
64 *  IN data[0,data_len-1]
65 *  IN data_len
66 *  IN 0 < lag <= data_len
67 *  OUT autoc[0,lag-1]
68 */
69void FLAC__lpc_compute_autocorrelation(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
70#ifndef FLAC__NO_ASM
71#  ifdef FLAC__CPU_IA32
72#    ifdef FLAC__HAS_NASM
73void FLAC__lpc_compute_autocorrelation_asm_ia32(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
74void FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_4(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
75void FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_8(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
76void FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_12(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
77void FLAC__lpc_compute_autocorrelation_asm_ia32_3dnow(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
78#    endif
79#  endif
80#endif
81
82/*
83 *  FLAC__lpc_compute_lp_coefficients()
84 *  --------------------------------------------------------------------
85 *  Computes LP coefficients for orders 1..max_order.
86 *  Do not call if autoc[0] == 0.0.  This means the signal is zero
87 *  and there is no point in calculating a predictor.
88 *
89 *  IN autoc[0,max_order]                      autocorrelation values
90 *  IN 0 < max_order <= FLAC__MAX_LPC_ORDER    max LP order to compute
91 *  OUT lp_coeff[0,max_order-1][0,max_order-1] LP coefficients for each order
92 *  *** IMPORTANT:
93 *  *** lp_coeff[0,max_order-1][max_order,FLAC__MAX_LPC_ORDER-1] are untouched
94 *  OUT error[0,max_order-1]                   error for each order (more
95 *                                             specifically, the variance of
96 *                                             the error signal times # of
97 *                                             samples in the signal)
98 *
99 *  Example: if max_order is 9, the LP coefficients for order 9 will be
100 *           in lp_coeff[8][0,8], the LP coefficients for order 8 will be
101 *           in lp_coeff[7][0,7], etc.
102 */
103void FLAC__lpc_compute_lp_coefficients(const FLAC__real autoc[], unsigned *max_order, FLAC__real lp_coeff[][FLAC__MAX_LPC_ORDER], FLAC__double error[]);
104
105/*
106 *  FLAC__lpc_quantize_coefficients()
107 *  --------------------------------------------------------------------
108 *  Quantizes the LP coefficients.  NOTE: precision + bits_per_sample
109 *  must be less than 32 (sizeof(FLAC__int32)*8).
110 *
111 *  IN lp_coeff[0,order-1]    LP coefficients
112 *  IN order                  LP order
113 *  IN FLAC__MIN_QLP_COEFF_PRECISION < precision
114 *                            desired precision (in bits, including sign
115 *                            bit) of largest coefficient
116 *  OUT qlp_coeff[0,order-1]  quantized coefficients
117 *  OUT shift                 # of bits to shift right to get approximated
118 *                            LP coefficients.  NOTE: could be negative.
119 *  RETURN 0 => quantization OK
120 *         1 => coefficients require too much shifting for *shift to
121 *              fit in the LPC subframe header.  'shift' is unset.
122 *         2 => coefficients are all zero, which is bad.  'shift' is
123 *              unset.
124 */
125int FLAC__lpc_quantize_coefficients(const FLAC__real lp_coeff[], unsigned order, unsigned precision, FLAC__int32 qlp_coeff[], int *shift);
126
127/*
128 *  FLAC__lpc_compute_residual_from_qlp_coefficients()
129 *  --------------------------------------------------------------------
130 *  Compute the residual signal obtained from sutracting the predicted
131 *  signal from the original.
132 *
133 *  IN data[-order,data_len-1] original signal (NOTE THE INDICES!)
134 *  IN data_len                length of original signal
135 *  IN qlp_coeff[0,order-1]    quantized LP coefficients
136 *  IN order > 0               LP order
137 *  IN lp_quantization         quantization of LP coefficients in bits
138 *  OUT residual[0,data_len-1] residual signal
139 */
140void FLAC__lpc_compute_residual_from_qlp_coefficients(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
141void FLAC__lpc_compute_residual_from_qlp_coefficients_wide(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
142#ifndef FLAC__NO_ASM
143#  ifdef FLAC__CPU_IA32
144#    ifdef FLAC__HAS_NASM
145void FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
146void FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32_mmx(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
147#    endif
148#  endif
149#endif
150
151#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */
152
153/*
154 *  FLAC__lpc_restore_signal()
155 *  --------------------------------------------------------------------
156 *  Restore the original signal by summing the residual and the
157 *  predictor.
158 *
159 *  IN residual[0,data_len-1]  residual signal
160 *  IN data_len                length of original signal
161 *  IN qlp_coeff[0,order-1]    quantized LP coefficients
162 *  IN order > 0               LP order
163 *  IN lp_quantization         quantization of LP coefficients in bits
164 *  *** IMPORTANT: the caller must pass in the historical samples:
165 *  IN  data[-order,-1]        previously-reconstructed historical samples
166 *  OUT data[0,data_len-1]     original signal
167 */
168void FLAC__lpc_restore_signal(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
169void FLAC__lpc_restore_signal_wide(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
170#ifndef FLAC__NO_ASM
171#  ifdef FLAC__CPU_IA32
172#    ifdef FLAC__HAS_NASM
173void FLAC__lpc_restore_signal_asm_ia32(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
174void FLAC__lpc_restore_signal_asm_ia32_mmx(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
175#    endif /* FLAC__HAS_NASM */
176#  elif defined FLAC__CPU_PPC
177void FLAC__lpc_restore_signal_asm_ppc_altivec_16(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
178void FLAC__lpc_restore_signal_asm_ppc_altivec_16_order8(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
179#  endif/* FLAC__CPU_IA32 || FLAC__CPU_PPC */
180#endif /* FLAC__NO_ASM */
181
182#ifndef FLAC__INTEGER_ONLY_LIBRARY
183
184/*
185 *  FLAC__lpc_compute_expected_bits_per_residual_sample()
186 *  --------------------------------------------------------------------
187 *  Compute the expected number of bits per residual signal sample
188 *  based on the LP error (which is related to the residual variance).
189 *
190 *  IN lpc_error >= 0.0   error returned from calculating LP coefficients
191 *  IN total_samples > 0  # of samples in residual signal
192 *  RETURN                expected bits per sample
193 */
194FLAC__double FLAC__lpc_compute_expected_bits_per_residual_sample(FLAC__double lpc_error, unsigned total_samples);
195FLAC__double FLAC__lpc_compute_expected_bits_per_residual_sample_with_error_scale(FLAC__double lpc_error, FLAC__double error_scale);
196
197/*
198 *  FLAC__lpc_compute_best_order()
199 *  --------------------------------------------------------------------
200 *  Compute the best order from the array of signal errors returned
201 *  during coefficient computation.
202 *
203 *  IN lpc_error[0,max_order-1] >= 0.0  error returned from calculating LP coefficients
204 *  IN max_order > 0                    max LP order
205 *  IN total_samples > 0                # of samples in residual signal
206 *  IN overhead_bits_per_order          # of bits overhead for each increased LP order
207 *                                      (includes warmup sample size and quantized LP coefficient)
208 *  RETURN [1,max_order]                best order
209 */
210unsigned FLAC__lpc_compute_best_order(const FLAC__double lpc_error[], unsigned max_order, unsigned total_samples, unsigned overhead_bits_per_order);
211
212#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */
213
214#endif
trunk/src/lib/libflac/libFLAC/include/private/md5.h
r0r242232
1#ifndef FLAC__PRIVATE__MD5_H
2#define FLAC__PRIVATE__MD5_H
3
4/*
5 * This is the header file for the MD5 message-digest algorithm.
6 * The algorithm is due to Ron Rivest.  This code was
7 * written by Colin Plumb in 1993, no copyright is claimed.
8 * This code is in the public domain; do with it what you wish.
9 *
10 * Equivalent code is available from RSA Data Security, Inc.
11 * This code has been tested against that, and is equivalent,
12 * except that you don't need to include two pages of legalese
13 * with every copy.
14 *
15 * To compute the message digest of a chunk of bytes, declare an
16 * MD5Context structure, pass it to MD5Init, call MD5Update as
17 * needed on buffers full of bytes, and then call MD5Final, which
18 * will fill a supplied 16-byte array with the digest.
19 *
20 * Changed so as no longer to depend on Colin Plumb's `usual.h'
21 * header definitions; now uses stuff from dpkg's config.h
22 *  - Ian Jackson <ijackson@nyx.cs.du.edu>.
23 * Still in the public domain.
24 *
25 * Josh Coalson: made some changes to integrate with libFLAC.
26 * Still in the public domain, with no warranty.
27 */
28
29#include "FLAC/ordinals.h"
30
31typedef struct {
32   FLAC__uint32 in[16];
33   FLAC__uint32 buf[4];
34   FLAC__uint32 bytes[2];
35   FLAC__byte *internal_buf;
36   size_t capacity;
37} FLAC__MD5Context;
38
39void FLAC__MD5Init(FLAC__MD5Context *context);
40void FLAC__MD5Final(FLAC__byte digest[16], FLAC__MD5Context *context);
41
42FLAC__bool FLAC__MD5Accumulate(FLAC__MD5Context *ctx, const FLAC__int32 * const signal[], unsigned channels, unsigned samples, unsigned bytes_per_sample);
43
44#endif
trunk/src/lib/libflac/libFLAC/include/private/memory.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2001,2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PRIVATE__MEMORY_H
33#define FLAC__PRIVATE__MEMORY_H
34
35#ifdef HAVE_CONFIG_H
36#include <config.h>
37#endif
38
39#include <stdlib.h> /* for size_t */
40
41#include "private/float.h"
42#include "FLAC/ordinals.h" /* for FLAC__bool */
43
44/* Returns the unaligned address returned by malloc.
45 * Use free() on this address to deallocate.
46 */
47void *FLAC__memory_alloc_aligned(size_t bytes, void **aligned_address);
48FLAC__bool FLAC__memory_alloc_aligned_int32_array(size_t elements, FLAC__int32 **unaligned_pointer, FLAC__int32 **aligned_pointer);
49FLAC__bool FLAC__memory_alloc_aligned_uint32_array(size_t elements, FLAC__uint32 **unaligned_pointer, FLAC__uint32 **aligned_pointer);
50FLAC__bool FLAC__memory_alloc_aligned_uint64_array(size_t elements, FLAC__uint64 **unaligned_pointer, FLAC__uint64 **aligned_pointer);
51FLAC__bool FLAC__memory_alloc_aligned_unsigned_array(size_t elements, unsigned **unaligned_pointer, unsigned **aligned_pointer);
52#ifndef FLAC__INTEGER_ONLY_LIBRARY
53FLAC__bool FLAC__memory_alloc_aligned_real_array(size_t elements, FLAC__real **unaligned_pointer, FLAC__real **aligned_pointer);
54#endif
55
56#endif
trunk/src/lib/libflac/libFLAC/include/private/metadata.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PRIVATE__METADATA_H
33#define FLAC__PRIVATE__METADATA_H
34
35#include "FLAC/metadata.h"
36
37/* WATCHOUT: all malloc()ed data in the block is free()ed; this may not
38 * be a consistent state (e.g. PICTURE) or equivalent to the initial
39 * state after FLAC__metadata_object_new()
40 */
41void FLAC__metadata_object_delete_data(FLAC__StreamMetadata *object);
42
43void FLAC__metadata_object_cuesheet_track_delete_data(FLAC__StreamMetadata_CueSheet_Track *object);
44
45#endif
trunk/src/lib/libflac/libFLAC/include/private/stream_encoder_framing.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PRIVATE__STREAM_ENCODER_FRAMING_H
33#define FLAC__PRIVATE__STREAM_ENCODER_FRAMING_H
34
35#include "FLAC/format.h"
36#include "bitwriter.h"
37
38FLAC__bool FLAC__add_metadata_block(const FLAC__StreamMetadata *metadata, FLAC__BitWriter *bw);
39FLAC__bool FLAC__frame_add_header(const FLAC__FrameHeader *header, FLAC__BitWriter *bw);
40FLAC__bool FLAC__subframe_add_constant(const FLAC__Subframe_Constant *subframe, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw);
41FLAC__bool FLAC__subframe_add_fixed(const FLAC__Subframe_Fixed *subframe, unsigned residual_samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw);
42FLAC__bool FLAC__subframe_add_lpc(const FLAC__Subframe_LPC *subframe, unsigned residual_samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw);
43FLAC__bool FLAC__subframe_add_verbatim(const FLAC__Subframe_Verbatim *subframe, unsigned samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw);
44
45#endif
trunk/src/lib/libflac/libFLAC/include/private/window.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PRIVATE__WINDOW_H
33#define FLAC__PRIVATE__WINDOW_H
34
35#ifdef HAVE_CONFIG_H
36#include <config.h>
37#endif
38
39#include "private/float.h"
40#include "FLAC/format.h"
41
42#ifndef FLAC__INTEGER_ONLY_LIBRARY
43
44/*
45 *  FLAC__window_*()
46 *  --------------------------------------------------------------------
47 *  Calculates window coefficients according to different apodization
48 *  functions.
49 *
50 *  OUT window[0,L-1]
51 *  IN L (number of points in window)
52 */
53void FLAC__window_bartlett(FLAC__real *window, const FLAC__int32 L);
54void FLAC__window_bartlett_hann(FLAC__real *window, const FLAC__int32 L);
55void FLAC__window_blackman(FLAC__real *window, const FLAC__int32 L);
56void FLAC__window_blackman_harris_4term_92db_sidelobe(FLAC__real *window, const FLAC__int32 L);
57void FLAC__window_connes(FLAC__real *window, const FLAC__int32 L);
58void FLAC__window_flattop(FLAC__real *window, const FLAC__int32 L);
59void FLAC__window_gauss(FLAC__real *window, const FLAC__int32 L, const FLAC__real stddev); /* 0.0 < stddev <= 0.5 */
60void FLAC__window_hamming(FLAC__real *window, const FLAC__int32 L);
61void FLAC__window_hann(FLAC__real *window, const FLAC__int32 L);
62void FLAC__window_kaiser_bessel(FLAC__real *window, const FLAC__int32 L);
63void FLAC__window_nuttall(FLAC__real *window, const FLAC__int32 L);
64void FLAC__window_rectangle(FLAC__real *window, const FLAC__int32 L);
65void FLAC__window_triangle(FLAC__real *window, const FLAC__int32 L);
66void FLAC__window_tukey(FLAC__real *window, const FLAC__int32 L, const FLAC__real p);
67void FLAC__window_welch(FLAC__real *window, const FLAC__int32 L);
68
69#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */
70
71#endif
trunk/src/lib/libflac/libFLAC/include/protected/all.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2001,2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PROTECTED__ALL_H
33#define FLAC__PROTECTED__ALL_H
34
35#include "stream_decoder.h"
36#include "stream_encoder.h"
37
38#endif
trunk/src/lib/libflac/libFLAC/include/protected/stream_decoder.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PROTECTED__STREAM_DECODER_H
33#define FLAC__PROTECTED__STREAM_DECODER_H
34
35#include "FLAC/stream_decoder.h"
36#if FLAC__HAS_OGG
37#include "private/ogg_decoder_aspect.h"
38#endif
39
40typedef struct FLAC__StreamDecoderProtected {
41   FLAC__StreamDecoderState state;
42   unsigned channels;
43   FLAC__ChannelAssignment channel_assignment;
44   unsigned bits_per_sample;
45   unsigned sample_rate; /* in Hz */
46   unsigned blocksize; /* in samples (per channel) */
47   FLAC__bool md5_checking; /* if true, generate MD5 signature of decoded data and compare against signature in the STREAMINFO metadata block */
48#if FLAC__HAS_OGG
49   FLAC__OggDecoderAspect ogg_decoder_aspect;
50#endif
51} FLAC__StreamDecoderProtected;
52
53/*
54 * return the number of input bytes consumed
55 */
56unsigned FLAC__stream_decoder_get_input_bytes_unconsumed(const FLAC__StreamDecoder *decoder);
57
58#endif
trunk/src/lib/libflac/libFLAC/include/protected/stream_encoder.h
r0r242232
1/* libFLAC - Free Lossless Audio Codec library
2 * Copyright (C) 2001,2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of the Xiph.org Foundation nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef FLAC__PROTECTED__STREAM_ENCODER_H
33#define FLAC__PROTECTED__STREAM_ENCODER_H
34
35#include "FLAC/stream_encoder.h"
36#if FLAC__HAS_OGG
37#include "private/ogg_encoder_aspect.h"
38#endif
39
40#ifndef FLAC__INTEGER_ONLY_LIBRARY
41
42#include "private/float.h"
43
44#define FLAC__MAX_APODIZATION_FUNCTIONS 32
45
46typedef enum {
47   FLAC__APODIZATION_BARTLETT,
48   FLAC__APODIZATION_BARTLETT_HANN,
49   FLAC__APODIZATION_BLACKMAN,
50   FLAC__APODIZATION_BLACKMAN_HARRIS_4TERM_92DB_SIDELOBE,
51   FLAC__APODIZATION_CONNES,
52   FLAC__APODIZATION_FLATTOP,
53   FLAC__APODIZATION_GAUSS,
54   FLAC__APODIZATION_HAMMING,
55   FLAC__APODIZATION_HANN,
56   FLAC__APODIZATION_KAISER_BESSEL,
57   FLAC__APODIZATION_NUTTALL,
58   FLAC__APODIZATION_RECTANGLE,
59   FLAC__APODIZATION_TRIANGLE,
60   FLAC__APODIZATION_TUKEY,
61   FLAC__APODIZATION_WELCH
62} FLAC__ApodizationFunction;
63
64typedef struct {
65   FLAC__ApodizationFunction type;
66   union {
67      struct {
68         FLAC__real stddev;
69      } gauss;
70      struct {
71         FLAC__real p;
72      } tukey;
73   } parameters;
74} FLAC__ApodizationSpecification;
75
76#endif // #ifndef FLAC__INTEGER_ONLY_LIBRARY
77
78typedef struct FLAC__StreamEncoderProtected {
79   FLAC__StreamEncoderState state;
80   FLAC__bool verify;
81   FLAC__bool streamable_subset;
82   FLAC__bool do_md5;
83   FLAC__bool do_mid_side_stereo;
84   FLAC__bool loose_mid_side_stereo;
85   unsigned channels;
86   unsigned bits_per_sample;
87   unsigned sample_rate;
88   unsigned blocksize;
89#ifndef FLAC__INTEGER_ONLY_LIBRARY
90   unsigned num_apodizations;
91   FLAC__ApodizationSpecification apodizations[FLAC__MAX_APODIZATION_FUNCTIONS];
92#endif
93   unsigned max_lpc_order;
94   unsigned qlp_coeff_precision;
95   FLAC__bool do_qlp_coeff_prec_search;
96   FLAC__bool do_exhaustive_model_search;
97   FLAC__bool do_escape_coding;
98   unsigned min_residual_partition_order;
99   unsigned max_residual_partition_order;
100   unsigned rice_parameter_search_dist;
101   FLAC__uint64 total_samples_estimate;
102   FLAC__StreamMetadata **metadata;
103   unsigned num_metadata_blocks;
104   FLAC__uint64 streaminfo_offset, seektable_offset, audio_offset;
105#if FLAC__HAS_OGG
106   FLAC__OggEncoderAspect ogg_encoder_aspect;
107#endif
108} FLAC__StreamEncoderProtected;
109
110#endif
trunk/src/mame/audio/dcs.c
r242231r242232
184184#define SET_INPUT_FULL()            (m_latch_control &= ~LCTRL_INPUT_EMPTY)
185185
186186
187/* These are the some of the control register, we dont use them all */
187/* These are some of the control registers. We don't use them all */
188188enum
189189{
190190   IDMA_CONTROL_REG = 0,   /* 3fe0 */
trunk/src/mame/audio/gottlieb.c
r242231r242232
10301030         m_nmi_state = 1;
10311031         nmi_state_update();
10321032
1033         // set a timer to turn it off again on hte next SOUND_CLOCK/16
1033         // set a timer to turn it off again on the next SOUND_CLOCK/16
10341034         timer_set(attotime::from_hz(SOUND2_CLOCK/16), TID_NMI_CLEAR);
10351035
10361036         // adjust the NMI timer for the next time
trunk/src/mame/drivers/40love.c
r242231r242232
2828Vintage                  : 1984
2929Game serial/model number : M4300006B ?
3030
31I dont have the wiring harness for this board, so dont know if it works.
31I don't have the wiring harness for this board, so don't know if it works.
3232One GFX ROM is bad though.
3333See A30-26.u23\A30-26.txt for details about the bad ROM.
3434To summarise:
trunk/src/mame/drivers/alpha68k.c
r242231r242232
20982098
20992099   MCFG_GFXDECODE_ADD("gfxdecode", "palette", alpha68k_II)
21002100   MCFG_PALETTE_ADD("palette", 2048)
2101   MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB)
2101   MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0)
21022102
21032103   MCFG_VIDEO_START_OVERRIDE(alpha68k_state,alpha68k)
21042104
r242231r242232
21512151
21522152   MCFG_GFXDECODE_ADD("gfxdecode", "palette", alpha68k_II)
21532153   MCFG_PALETTE_ADD("palette", 2048)
2154   MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB)
2154   MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0)
21552155
21562156   MCFG_VIDEO_START_OVERRIDE(alpha68k_state,alpha68k)
21572157
r242231r242232
21972197
21982198   MCFG_GFXDECODE_ADD("gfxdecode", "palette", alpha68k_V)
21992199   MCFG_PALETTE_ADD("palette", 4096)
2200   MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB)
2200   MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0)
22012201
22022202   MCFG_VIDEO_START_OVERRIDE(alpha68k_state,alpha68k)
22032203
r242231r242232
22432243
22442244   MCFG_GFXDECODE_ADD("gfxdecode", "palette", alpha68k_V)
22452245   MCFG_PALETTE_ADD("palette", 4096)
2246   MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB)
2246   MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0)
22472247
22482248   MCFG_VIDEO_START_OVERRIDE(alpha68k_state,alpha68k)
22492249
trunk/src/mame/drivers/atvtrack.c
r242231r242232
4141Notes:
4242      SH4       - Hitachi HD6417750S SH4 CPU (BGA)
4343      K4S643232 - Samsung K4S643232E-TC70 64M x 32-bit SDRAM (TSSOP86)
44      GFX       - Unknown BGA graphics chip (heatsinked)
44      GFX       - NEC PowerVR Neon 250
4545      FLASH.IC* - Samsung K9F2808U0B 128MBit (16M + 512k Spare x 8-bit) FlashROM (TSOP48)
4646      EPF10K50  - Altera Flex EPF10K50EQC240-3 FPGA (QFP240)
4747      EPC1PC8   - Altera EPC1PC8 FPGA Configuration Device (DIP8)
r242231r242232
5656
5757*/
5858
59/*
60
61notes from DEMUL team
62
63Smashing Drive needs a working SH4 MMU emulation, ATV Track does not.
64
65Audio - is a simple buffered DAC.
66frequency is 32kHz
67data written by CPU to buffer have such meaning:
68offs 0 - s16 bass channel 0
69offs 2 - s16 bass channel 1
70offs 4 - s16 left channel
71offs 6 - s16 right channel
72and so on
73
74buffer is 2x32bytes
75then it becomes (I suppose half) empty - SH4 IRL5 IRQ generated
76
77
78"control registers" (Smashing Drive)
790 - read - various statuses, returning -1 is OK
80write - enable slave CPU, gpu, etc most of bits is unclear
814 - r/w - communication port (for cabinet linking), returning 0 is OK
82also there some bits on SH4 PDTRA port, I'll hook it later by myself
83
84about clocks - SH4s is clocked at 33000000*6
85but unlike to DC/AW/Naomi SH4 'peripheral clock' (at which works TMU timers and other internal stuff) is 1/6 from CPU clock, not 1/4
86
87*/
88
5989#include "emu.h"
6090#include "cpu/sh4/sh4.h"
6191#include "debugger.h"
r242231r242232
71101      m_maincpu(*this, "maincpu"),
72102      m_subcpu(*this, "subcpu") { }
73103
74   DECLARE_READ64_MEMBER(area1_r);
75   DECLARE_WRITE64_MEMBER(area1_w);
104   DECLARE_READ64_MEMBER(control_r);
105   DECLARE_WRITE64_MEMBER(control_w);
76106   DECLARE_READ64_MEMBER(area2_r);
77107   DECLARE_WRITE64_MEMBER(area2_w);
78108   DECLARE_READ64_MEMBER(area3_r);
r242231r242232
94124
95125   required_device<sh4_device> m_maincpu;
96126   required_device<sh4_device> m_subcpu;
127protected:
128   bool m_slaverun;
97129};
98130
131
132class smashdrv_state : public atvtrack_state
133{
134public:
135   smashdrv_state(const machine_config &mconfig, device_type type, const char *tag)
136      : atvtrack_state(mconfig, type, tag) { }
137
138   virtual void machine_start();
139   virtual void machine_reset();
140};
141
99142void atvtrack_state::logbinary(UINT32 data,int high=31,int low=0)
100143{
101144   UINT32 s;
r242231r242232
126169   return 0;
127170}
128171
129READ64_MEMBER(atvtrack_state::area1_r)
172READ64_MEMBER(atvtrack_state::control_r)
130173{
131174   UINT32 addr;
132175
r242231r242232
139182   return -1;
140183}
141184
142WRITE64_MEMBER(atvtrack_state::area1_w)
185WRITE64_MEMBER(atvtrack_state::control_w)
143186{
144187   UINT32 addr, dat; //, old;
145188
r242231r242232
148191//  old = m_area1_data[addr];
149192   m_area1_data[addr] = dat;
150193   if (addr == (0x00020000-0x00020000)/4) {
151      if (data & 4) {
194      if ((data & 4) && m_slaverun)
152195         m_subcpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
153      }
196      else
197         m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
154198   }
155199   logerror("Write %08x at %08x ",dat, 0x20000+addr*4+0);
156200   logbinary(dat);
r242231r242232
299343#endif
300344
301345   if (offset == SH4_IOPORT_16/8) {
346      if ((data & 0xf000) == 0x7000) {
347         if (data & 0x0100)
348            m_slaverun = true;
349      }
302350      logerror("SH4 16bit i/o port write ");
303351      logbinary((UINT32)data,15,0);
304352      logerror("\n");
r242231r242232
358406   m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
359407}
360408
409
410void smashdrv_state::machine_start()
411{
412
413}
414
415void smashdrv_state::machine_reset()
416{
417   m_slaverun = false;
418   m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
419}
420
421// ATV Track
422
361423static ADDRESS_MAP_START( atvtrack_main_map, AS_PROGRAM, 64, atvtrack_state )
362424   AM_RANGE(0x00000000, 0x000003ff) AM_RAM AM_SHARE("sharedmem")
363   AM_RANGE(0x00020000, 0x00020007) AM_READWRITE(area1_r, area1_w)
425   AM_RANGE(0x00020000, 0x00020007) AM_READWRITE(control_r, control_w) // control registers
426//   AM_RANGE(0x00020040, 0x0002007f) // audio DAC buffer
364427   AM_RANGE(0x14000000, 0x14000007) AM_READWRITE(area2_r, area2_w) // data
365428   AM_RANGE(0x14100000, 0x14100007) AM_READWRITE(area3_r, area3_w) // command
366429   AM_RANGE(0x14200000, 0x14200007) AM_READWRITE(area4_r, area4_w) // address
367   AM_RANGE(0x0c000000, 0x0cffffff) AM_RAM
430   AM_RANGE(0x0c000000, 0x0c7fffff) AM_RAM
368431ADDRESS_MAP_END
369432
370433static ADDRESS_MAP_START( atvtrack_main_port, AS_IO, 64, atvtrack_state )
371434   AM_RANGE(0x00, 0x1f) AM_READWRITE(ioport_r, ioport_w)
372435ADDRESS_MAP_END
373436
437// Smashing Drive
438
439static ADDRESS_MAP_START( smashdrv_main_map, AS_PROGRAM, 64, smashdrv_state )
440   AM_RANGE(0x00000000, 0x03ffffff) AM_ROM
441   AM_RANGE(0x0c000000, 0x0c7fffff) AM_RAM
442   AM_RANGE(0x10000000, 0x100003ff) AM_RAM AM_SHARE("sharedmem")
443   AM_RANGE(0x10000400, 0x10000407) AM_READWRITE(control_r, control_w) // control registers
444
445// 0x10000400 - 0x1000043F control registers
446// 0x10000440 - 0x1000047F Audio DAC buffer
447   AM_RANGE(0x14000000, 0x143fffff) AM_ROM AM_REGION("data", 0)
448ADDRESS_MAP_END
449
450static ADDRESS_MAP_START( smashdrv_main_port, AS_IO, 64, smashdrv_state )
451   AM_RANGE(0x00, 0x1f) AM_READWRITE(ioport_r, ioport_w)
452ADDRESS_MAP_END
453
454// Sub CPU (same for both games)
455
374456static ADDRESS_MAP_START( atvtrack_sub_map, AS_PROGRAM, 64, atvtrack_state )
375457   AM_RANGE(0x00000000, 0x000003ff) AM_RAM AM_SHARE("sharedmem")
376458   AM_RANGE(0x0c000000, 0x0cffffff) AM_RAM
459// 0x14000000 - 0x1400xxxx GPU registers
460   AM_RANGE(0x18000000, 0x19ffffff) AM_RAM
461// 0x18000000 - 0x19FFFFFF GPU RAM (32MB)
377462ADDRESS_MAP_END
378463
379464static ADDRESS_MAP_START( atvtrack_sub_port, AS_IO, 64, atvtrack_state )
r242231r242232
427512   MCFG_SCREEN_UPDATE_DRIVER(atvtrack_state, screen_update_atvtrack)
428513
429514   MCFG_PALETTE_ADD("palette", 0x1000)
515MACHINE_CONFIG_END
430516
517static MACHINE_CONFIG_DERIVED_CLASS( smashdrv, atvtrack, smashdrv_state )
518   MCFG_CPU_MODIFY("maincpu")
519   MCFG_CPU_PROGRAM_MAP(smashdrv_main_map)
520   MCFG_CPU_IO_MAP(smashdrv_main_port)
521
431522MACHINE_CONFIG_END
432523
524
433525ROM_START( atvtrack )
434526   ROM_REGION( 0x4200000, "maincpu", ROMREGION_ERASEFF) // NAND roms, contain additional data hence the sizes
435527   ROM_LOAD32_BYTE("15.bin", 0x0000000, 0x1080000, CRC(84eaede7) SHA1(6e6230165c3bb35e49c660dfd0d07c132ed89e6a) )
r242231r242232
489581*/
490582
491583ROM_START( smashdrv )
584   ROM_REGION64_LE( 0x0400000, "data", ROMREGION_ERASEFF)
585   ROM_LOAD("prg.ic23", 0x0000000, 0x0400000, CRC(5cc6d3ac) SHA1(0c8426774212d891796b59c95b8c70f64db5b67a) )
586
492587   ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASEFF)
493   ROM_LOAD("prg.ic23", 0x0000000, 0x0400000, CRC(5cc6d3ac) SHA1(0c8426774212d891796b59c95b8c70f64db5b67a) )
494   ROM_LOAD("sdra.ic15", 0x1000000, 0x1000000, CRC(cf702287) SHA1(84cd83c339831deff15fe5fcc353e0b596667500) )
495   ROM_LOAD("sdrb.ic14", 0x2000000, 0x1000000, CRC(39b76f0e) SHA1(529943b6075925e5f72c6e966796e04b2c33686c) )
496   ROM_LOAD("sdrc.ic20", 0x3000000, 0x1000000, CRC(c9021dd7) SHA1(1d08aab433614810af858a0fc5d7f03c7b782237) )
588   ROM_LOAD32_WORD("sdra.ic15",   0x00000000,   0x01000000, CRC(cf702287) SHA1(84cd83c339831deff15fe5fcc353e0b596667500) )
589   ROM_LOAD32_WORD("sdrb.ic14",   0x00000002,   0x01000000, CRC(39b76f0e) SHA1(529943b6075925e5f72c6e966796e04b2c33686c) )
590   ROM_LOAD32_WORD("sdrc.ic20",   0x02000000,   0x01000000, CRC(c9021dd7) SHA1(1d08aab433614810af858a0fc5d7f03c7b782237) )
591   // ic21 unpopulated
497592ROM_END
498593
499594GAME( 2002, atvtrack,  0,          atvtrack,    atvtrack, driver_device,    0, ROT0, "Gaelco", "ATV Track (set 1)", GAME_NOT_WORKING | GAME_NO_SOUND )
500595GAME( 2002, atvtracka, atvtrack,   atvtrack,    atvtrack, driver_device,    0, ROT0, "Gaelco", "ATV Track (set 2)", GAME_NOT_WORKING | GAME_NO_SOUND )
501596
502// not the same HW, but has dual SH4 at least
503GAME( 2000, smashdrv, 0,           atvtrack,    atvtrack, driver_device,    0, ROT0, "Gaelco", "Smashing Drive", GAME_NOT_WORKING | GAME_NO_SOUND )
597// almost identical PCB, FlashROM mapping and master registers addresses different
598GAME( 2000, smashdrv, 0,           smashdrv,    atvtrack, driver_device,    0, ROT0, "Gaelco", "Smashing Drive", GAME_NOT_WORKING | GAME_NO_SOUND )
trunk/src/mame/drivers/bagman.c
r242231r242232
281281
282282   PORT_MODIFY("P2") // only seems to have 2 coin slots
283283   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
284   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
284   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // this must be ACTIVE_HIGH or the game fails after you complete a level, protection?
285285
286286   PORT_MODIFY("DSW") // dipswitches are a bit messy on this set
287287   PORT_DIPNAME( 0x04, 0x00, DEF_STR( Coinage ) )          PORT_DIPLOCATION("SW1:3")
trunk/src/mame/drivers/bfm_sc4h.c
r242231r242232
584584   else
585585   {
586586      // generating certain interrupts expects the bit 0x8000 to be set here
587      // but it's set ot dedicated i/o, not general purpose, source?
587      // but it's set to dedicated i/o, not general purpose, source?
588588      return 0x8040;
589589   }
590590}
trunk/src/mame/drivers/bionicc.c
r242231r242232
366366   MCFG_SCREEN_PALETTE("palette")
367367
368368   MCFG_GFXDECODE_ADD("gfxdecode", "palette", bionicc)
369
370   MCFG_DEVICE_ADD("spritegen", TIGEROAD_SPRITE, 0)
371
369372   MCFG_PALETTE_ADD("palette", 1024)
370373
371
372374   MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")
373375
374376   MCFG_SPEAKER_STANDARD_MONO("mono")
trunk/src/mame/drivers/bottom9.c
r242231r242232
367367   ROM_LOAD32_BYTE( "891e09d", 0x40002, 0x10000, CRC(4e1335e6) SHA1(b892ab40a41978a89658ea2e7aabe9b073430b5d) )
368368   ROM_LOAD32_BYTE( "891e09b", 0x40003, 0x10000, CRC(b6f914fb) SHA1(e95f3e899c2ead15ef8a529dbc67e8f4a0f88bdd) )
369369
370   ROM_REGION( 0x100000, "k051960", 0 ) /* graphics ( dont dispose as the program can read them, 0 ) */
370   ROM_REGION( 0x100000, "k051960", 0 ) /* graphics ( don't dispose as the program can read them, 0 ) */
371371   ROM_LOAD32_BYTE( "891e06e", 0x00000, 0x10000, CRC(0b04db1c) SHA1(0beae7bb8da49379915c0253ce03091eb71a58b5) )    /* sprites */
372372   ROM_LOAD32_BYTE( "891e06a", 0x00001, 0x10000, CRC(5ee37327) SHA1(f63ddaf63af06ea5421b0361315940582ef57922) )
373373   ROM_LOAD32_BYTE( "891e05e", 0x00002, 0x10000, CRC(b356e729) SHA1(2cda591415b0f139fdb1f80c349d432bb0579d8e) )
r242231r242232
424424   ROM_LOAD32_BYTE( "891e09d", 0x40002, 0x10000, CRC(4e1335e6) SHA1(b892ab40a41978a89658ea2e7aabe9b073430b5d) )
425425   ROM_LOAD32_BYTE( "891e09b", 0x40003, 0x10000, CRC(b6f914fb) SHA1(e95f3e899c2ead15ef8a529dbc67e8f4a0f88bdd) )
426426
427   ROM_REGION( 0x100000, "k051960", 0 ) /* graphics ( dont dispose as the program can read them, 0 ) */
427   ROM_REGION( 0x100000, "k051960", 0 ) /* graphics ( don't dispose as the program can read them, 0 ) */
428428   ROM_LOAD32_BYTE( "891e06e", 0x00000, 0x10000, CRC(0b04db1c) SHA1(0beae7bb8da49379915c0253ce03091eb71a58b5) )    /* sprites */
429429   ROM_LOAD32_BYTE( "891e06a", 0x00001, 0x10000, CRC(5ee37327) SHA1(f63ddaf63af06ea5421b0361315940582ef57922) )
430430   ROM_LOAD32_BYTE( "891e05e", 0x80002, 0x10000, CRC(b356e729) SHA1(2cda591415b0f139fdb1f80c349d432bb0579d8e) )
trunk/src/mame/drivers/champbas.c
r242231r242232
320320   AM_RANGE(0xa002, 0xa002) AM_WRITE(champbas_gfxbank_w)
321321   AM_RANGE(0xa003, 0xa003) AM_WRITE(champbas_flipscreen_w)
322322   AM_RANGE(0xa006, 0xa006) AM_WRITE(champbas_mcu_halt_w)
323   AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* This is also MCU control, but i dont need it */
323   AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* This is also MCU control, but I don't need it */
324324
325325   AM_RANGE(0xa040, 0xa06f) AM_WRITEONLY AM_SHARE("spriteram") /* Sprite pos */
326326   AM_RANGE(0xa080, 0xa080) AM_WRITE(soundlatch_byte_w)
trunk/src/mame/drivers/chihiro.c
r242231r242232
370370#include "debug/debugcmd.h"
371371#include "debug/debugcpu.h"
372372#include "osdcore.h"
373#include "includes/chihiro.h"
373374
374375#define LOG_PCI
375376//#define LOG_OHCI
376//#define LOG_NV2A
377377//#define LOG_BASEBOARD
378378
379class nv2a_renderer; // forw. dec.
380struct nvidia_object_data
381{
382   nv2a_renderer *data;
383};
384
385379class chihiro_state : public driver_device
386380{
387381public:
r242231r242232
391385      debug_irq_active(false),
392386      m_maincpu(*this, "maincpu") { }
393387
394   DECLARE_READ32_MEMBER( geforce_r );
395   DECLARE_WRITE32_MEMBER( geforce_w );
396   DECLARE_READ32_MEMBER( usbctrl_r );
397   DECLARE_WRITE32_MEMBER( usbctrl_w );
398   DECLARE_READ32_MEMBER( smbus_r );
399   DECLARE_WRITE32_MEMBER( smbus_w );
400   DECLARE_READ32_MEMBER( mediaboard_r );
401   DECLARE_WRITE32_MEMBER( mediaboard_w );
402   DECLARE_READ32_MEMBER( audio_apu_r );
403   DECLARE_WRITE32_MEMBER( audio_apu_w );
404   DECLARE_READ32_MEMBER( audio_ac93_r );
405   DECLARE_WRITE32_MEMBER( audio_ac93_w );
406   DECLARE_READ32_MEMBER( dummy_r );
407   DECLARE_WRITE32_MEMBER( dummy_w );
388   DECLARE_READ32_MEMBER(geforce_r);
389   DECLARE_WRITE32_MEMBER(geforce_w);
390   DECLARE_READ32_MEMBER(usbctrl_r);
391   DECLARE_WRITE32_MEMBER(usbctrl_w);
392   DECLARE_READ32_MEMBER(smbus_r);
393   DECLARE_WRITE32_MEMBER(smbus_w);
394   DECLARE_READ32_MEMBER(mediaboard_r);
395   DECLARE_WRITE32_MEMBER(mediaboard_w);
396   DECLARE_READ32_MEMBER(audio_apu_r);
397   DECLARE_WRITE32_MEMBER(audio_apu_w);
398   DECLARE_READ32_MEMBER(audio_ac93_r);
399   DECLARE_WRITE32_MEMBER(audio_ac93_w);
400   DECLARE_READ32_MEMBER(dummy_r);
401   DECLARE_WRITE32_MEMBER(dummy_w);
408402
409   void smbus_register_device(int address,int (*handler)(chihiro_state &chs,int command,int rw,int data));
410   int smbus_pic16lc(int command,int rw,int data);
411   int smbus_cx25871(int command,int rw,int data);
412   int smbus_eeprom(int command,int rw,int data);
413   void baseboard_ide_event(int type,UINT8 *read,UINT8 *write);
403   void smbus_register_device(int address, int(*handler)(chihiro_state &chs, int command, int rw, int data));
404   int smbus_pic16lc(int command, int rw, int data);
405   int smbus_cx25871(int command, int rw, int data);
406   int smbus_eeprom(int command, int rw, int data);
407   void baseboard_ide_event(int type, UINT8 *read, UINT8 *write);
414408   UINT8 *baseboard_ide_dimmboard(UINT32 lba);
415   void dword_write_le(UINT8 *addr,UINT32 d);
416   void word_write_le(UINT8 *addr,UINT16 d);
417   void debug_generate_irq(int irq,bool active);
409   void dword_write_le(UINT8 *addr, UINT32 d);
410   void word_write_le(UINT8 *addr, UINT16 d);
411   void debug_generate_irq(int irq, bool active);
418412
419413   void vblank_callback(screen_device &screen, bool state);
420414   UINT32 screen_update_callback(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
r242231r242232
440434      int data;
441435      int command;
442436      int rw;
443      int (*devices[128])(chihiro_state &chs,int command,int rw,int data);
444      UINT32 words[256/4];
437      int(*devices[128])(chihiro_state &chs, int command, int rw, int data);
438      UINT32 words[256 / 4];
445439   } smbusst;
446440   struct apu_state {
447      UINT32 memory[0x60000/4];
441      UINT32 memory[0x60000 / 4];
448442      UINT32 gpdsp_sgaddress; // global processor scatter-gather
449443      UINT32 gpdsp_sgblocks;
450444      UINT32 gpdsp_address;
r242231r242232
465459      address_space *space;
466460   } apust;
467461   struct ac97_state {
468      UINT32 mixer_regs[0x80/4];
469      UINT32 controller_regs[0x38/4];
462      UINT32 mixer_regs[0x80 / 4];
463      UINT32 controller_regs[0x38 / 4];
470464   } ac97st;
471465   UINT8 pic16lc_buffer[0xff];
472466   nv2a_renderer *nvidia_nv2a;
r242231r242232
478472   required_device<cpu_device> m_maincpu;
479473};
480474
481/*
482 * geforce 3d (NV2A) vertex program disassembler
483 */
484class vertex_program_disassembler {
485   static const char *srctypes[];
486   static const char *scaops[];
487   static const int scapar2[];
488   static const char *vecops[];
489   static const int vecpar2[];
490   static const char *vecouts[];
491   static const char compchar[];
492   int o[6];
493   int state;
494
495   struct sourcefields
496   {
497      int Sign;
498      int SwizzleX;
499      int SwizzleY;
500      int SwizzleZ;
501      int SwizzleW;
502      int TempIndex;
503      int ParameterType;
504   };
505
506   struct fields
507   {
508      int ScaOperation;
509      int VecOperation;
510      int SourceConstantIndex;
511      int InputIndex;
512      sourcefields src[3];
513      int VecTempWriteMask;
514      int VecTempIndex;
515      int ScaTempWriteMask;
516      int OutputWriteMask;
517      int OutputSelect;
518      int OutputIndex;
519      int MultiplexerControl;
520      int Usea0x;
521      int EndOfProgram;
522   };
523   fields f;
524
525   void decodefields(unsigned int *dwords, int offset, fields &decoded);
526   int disassemble_mask(int mask, char *s);
527   int disassemble_swizzle(sourcefields f, char *s);
528   int disassemble_source(sourcefields f, fields fi, char *s);
529   int disassemble_output(fields f, char *s);
530   int output_types(fields f, int *o);
531public:
532   vertex_program_disassembler() { state = 0; }
533   int disassemble(unsigned int *instruction, char *line);
534};
535
536const char *vertex_program_disassembler::srctypes[] = { "??", "Rn", "Vn", "Cn" };
537const char *vertex_program_disassembler::scaops[] = { "NOP", "IMV", "RCP", "RCC", "RSQ", "EXP", "LOG", "LIT", "???", "???", "???", "???", "???", "???", "???", "???", "???" };
538const int vertex_program_disassembler::scapar2[] = { 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
539const char *vertex_program_disassembler::vecops[] = { "NOP", "MOV", "MUL", "ADD", "MAD", "DP3", "DPH", "DP4", "DST", "MIN", "MAX", "SLT", "SGE", "ARL", "???", "???", "???" };
540const int vertex_program_disassembler::vecpar2[] = { 0, 4, 6, 5, 7, 6, 6, 6, 6, 6, 6, 6, 6, 4, 0, 0, 0 };
541const char *vertex_program_disassembler::vecouts[] = { "oPos", "???", "???", "oD0", "oD1", "oFog", "oPts", "oB0", "oB1", "oT0", "oT1", "oT2", "oT3" };
542const char vertex_program_disassembler::compchar[] = { 'x', 'y', 'z', 'w' };
543
544/*
545Each vertex program instruction is a 128 bit word made of the fields:
546d         f
547w   b     i
548o   i     e
549r   t     l
550d   s     d
551+-+-----+-------
552|0|31-0 |not used
553+-+-----+-------
554| |31-29|not used
555| +-----+-------
556| |28-25|scalar operation
557| +-----+-------
558| |24-21|vectorial operation
559| +-----+-------
560| |20-13|index for source constant C[]
561| +-----+-------
562| |12-9 |input vector index
563| +-----+-------
564|1|  8  |parameter A:sign
565| +-----+-------
566| | 7-6 |parameter A:swizzle x
567| +-----+-------
568| | 5-4 |parameter A:swizzle y
569| +-----+-------
570| | 3-2 |parameter A:swizzle z
571| +-----+-------
572| | 1-0 |parameter A:swizzle w
573|-+-----+-------
574| |31-28|parameter A:parameter Rn index
575| +-----+-------
576| |27-26|parameter A:input type 1:Rn 2:Vn 3:C[n]
577| +-----+-------
578| | 25  |parameter B:sign
579| +-----+-------
580| |24-23|parameter B:swizzle x
581| +-----+-------
582| |22-21|parameter B:swizzle y
583| +-----+-------
584| |20-19|parameter B:swizzle z
585| +-----+-------
586|2|18-17|parameter B:swizzle w
587| +-----+-------
588| |16-13|parameter B:parameter Rn index
589| +-----+-------
590| |12-11|parameter B:input type 1:Rn 2:Vn 3:C[n]
591| +-----+-------
592| | 10  |parameter C:sign
593| +-----+-------
594| | 9-8 |parameter C:swizzle x
595| +-----+-------
596| | 7-6 |parameter C:swizzle y
597| +-----+-------
598| | 5-4 |parameter C:swizzle z
599| +-----+-------
600| | 3-2 |parameter C:swizzle w
601| +-----+-------
602| | 1-0 |
603|-+     |parameter C:parameter Rn index
604| |31-30|
605| +-----+-------
606| |29-28|parameter C:input type 1:Rn 2:Vn 3:C[n]
607| +-----+-------
608| |27-24|output Rn mask from vectorial operation
609| +-----+-------
610| |23-20|output Rn index from vectorial operation
611| +-----+-------
612| |19-16|output Rn mask from scalar operation
613| +-----+-------
614|3|15-12|output vector write mask
615| +-----+-------
616| | 11  |1:output is output vector 0:output is constant C[]
617| +-----+-------
618| |10-3 |output vector/constant index
619| +-----+-------
620| |  2  |0:output Rn from vectorial operation 1:output Rn from scalar operation
621| +-----+-------
622| |  1  |1:add a0x to index for source constant C[]
623| +-----+-------
624| |  0  |1:end of program
625+-+-----+-------
626Each vertex program instruction can generate up to three destination values using up to three source values.
627The first possible destination is to Rn from a vectorial operation.
628The second possible destination is to a vertex shader output or C[n] from a vectorial or scalar operation.
629The third possible destination is to Rn from a scalar operation.
630*/
631void vertex_program_disassembler::decodefields(unsigned int *dwords, int offset, fields &decoded)
632{
633   unsigned int srcbits[3];
634   int a;
635
636   srcbits[0] = ((dwords[1 + offset] & 0x1ff) << 6) | (dwords[2 + offset] >> 26);
637   srcbits[1] = (dwords[2 + offset] >> 11) & 0x7fff;
638   srcbits[2] = ((dwords[2 + offset] & 0x7ff) << 4) | (dwords[3 + offset] >> 28);
639   decoded.ScaOperation = (int)(dwords[1 + offset] >> 25) & 0xf;
640   decoded.VecOperation = (int)(dwords[1 + offset] >> 21) & 0xf;
641   decoded.SourceConstantIndex = (int)(dwords[1 + offset] >> 13) & 0xff;
642   decoded.InputIndex = (int)(dwords[1 + offset] >> 9) & 0xf;
643   for (a = 0; a < 3; a++)
644   {
645      decoded.src[a].Sign = (int)(srcbits[a] >> 14) & 1;
646      decoded.src[a].SwizzleX = (int)(srcbits[a] >> 12) & 3;
647      decoded.src[a].SwizzleY = (int)(srcbits[a] >> 10) & 3;
648      decoded.src[a].SwizzleZ = (int)(srcbits[a] >> 8) & 3;
649      decoded.src[a].SwizzleW = (int)(srcbits[a] >> 6) & 3;
650      decoded.src[a].TempIndex = (int)(srcbits[a] >> 2) & 0xf;
651      decoded.src[a].ParameterType = (int)(srcbits[a] >> 0) & 3;
652   }
653
654   decoded.VecTempWriteMask = (int)(dwords[3 + offset] >> 24) & 0xf;
655   decoded.VecTempIndex = (int)(dwords[3 + offset] >> 20) & 0xf;
656   decoded.ScaTempWriteMask = (int)(dwords[3 + offset] >> 16) & 0xf;
657   decoded.OutputWriteMask = (int)(dwords[3 + offset] >> 12) & 0xf;
658   decoded.OutputSelect = (int)(dwords[3 + offset] >> 11) & 0x1;
659   decoded.OutputIndex = (int)(dwords[3 + offset] >> 3) & 0xff;
660   decoded.MultiplexerControl = (int)(dwords[3 + offset] >> 2) & 0x1;
661   decoded.Usea0x = (int)(dwords[3 + offset] >> 1) & 0x1;
662   decoded.EndOfProgram = (int)(dwords[3 + offset] >> 0) & 0x1;
663}
664
665int vertex_program_disassembler::disassemble_mask(int mask, char *s)
666{
667   int l;
668
669   *s = 0;
670   if (mask == 15)
671      return 0;
672   s[0] = '.';
673   l = 1;
674   if ((mask & 8) != 0) {
675      s[l] = 'x';
676      l++;
677   }
678   if ((mask & 4) != 0){
679      s[l] = 'y';
680      l++;
681   }
682   if ((mask & 2) != 0){
683      s[l] = 'z';
684      l++;
685   }
686   if ((mask & 1) != 0){
687      s[l] = 'w';
688      l++;
689   }
690   s[l] = 0;
691   return l;
692}
693
694int vertex_program_disassembler::disassemble_swizzle(sourcefields f, char *s)
695{
696   int t, l;
697
698   t = 4;
699   if (f.SwizzleW == 3)
700   {
701      t = t - 1;
702      if (f.SwizzleZ == 2)
703      {
704         t = t - 1;
705         if (f.SwizzleY == 1)
706         {
707            t = t - 1;
708            if (f.SwizzleX == 0)
709            {
710               t = t - 1;
711            }
712         }
713      }
714   }
715   *s = 0;
716   if (t == 0)
717      return 0;
718   s[0] = '.';
719   l = 1;
720   if (t > 0)
721   {
722      s[l] = compchar[f.SwizzleX];
723      l++;
724   }
725   if (t > 1)
726   {
727      s[l] = compchar[f.SwizzleY];
728      l++;
729   }
730   if (t > 2)
731   {
732      s[l] = compchar[f.SwizzleZ];
733      l++;
734   }
735   if (t > 3)
736   {
737      s[l] = compchar[f.SwizzleW];
738      l++;
739   }
740   s[l] = 0;
741   return l;
742}
743
744int vertex_program_disassembler::disassemble_source(sourcefields f, fields fi, char *s)
745{
746   int l;
747
748   if (f.ParameterType == 0) {
749      strcpy(s, ",???");
750      return 4;
751   }
752   l = 0;
753   if (f.Sign != 0) {
754      s[l] = '-';
755      l++;
756   }
757   if (f.ParameterType == 1) {
758      s[l] = 'r';
759      l = l + 1 + sprintf(s + l + 1, "%d", f.TempIndex);
760   }
761   else if (f.ParameterType == 2){
762      s[l] = 'v';
763      l = l + 1 + sprintf(s + l + 1, "%d", fi.InputIndex);
764   }
765   else
766   {
767      if (fi.Usea0x != 0)
768      {
769         if (fi.SourceConstantIndex >= 96) {
770            strcpy(s + l, "c[");
771            l = l + 2;
772            l = l + sprintf(s + l, "%d", fi.SourceConstantIndex - 96);
773            strcpy(s + l, "+a0.x]");
774            l = l + 6;
775         }
776         else {
777            strcpy(s + l, "c[a0.x");
778            l = l + 6;
779            l = l + sprintf(s + l, "%d", fi.SourceConstantIndex - 96);
780            s[l] = ']';
781            l++;
782         }
783      }
784      else {
785         strcpy(s + l, "c[");
786         l = l + 2;
787         l = l + sprintf(s + l, "%d", fi.SourceConstantIndex - 96);
788         s[l] = ']';
789         l++;
790      }
791   }
792   l = l + disassemble_swizzle(f, s + l);
793   s[l] = 0;
794   return l;
795}
796
797int vertex_program_disassembler::disassemble_output(fields f, char *s)
798{
799   int l;
800
801   if (f.OutputSelect == 1) {
802      strcpy(s, vecouts[f.OutputIndex]);
803      return strlen(s);
804   }
805   else {
806      strcpy(s, "c[");
807      l = 2;
808      l = l + sprintf(s + l, "%d", f.OutputIndex - 96);
809      s[l] = ']';
810      l++;
811   }
812   s[l] = 0;
813   return l;
814}
815
816int vertex_program_disassembler::output_types(fields f, int *o)
817{
818   o[0] = o[1] = o[2] = o[3] = o[4] = o[5] = 0;
819   if ((f.VecOperation > 0) && (f.VecTempWriteMask != 0))
820      o[0] = 1;
821   if ((f.VecOperation > 0) && (f.OutputWriteMask != 0) && (f.MultiplexerControl == 0))
822      o[1] = 1;
823   if ((f.ScaOperation > 0) && (f.OutputWriteMask != 0) && (f.MultiplexerControl == 1))
824      o[2] = 1;
825   if ((f.ScaOperation > 0) && (f.ScaTempWriteMask != 0))
826      o[3] = 1;
827   if (f.VecOperation == 13)
828      o[4] = 1;
829   if (f.EndOfProgram == 1)
830      o[5] = 1;
831   return o[0] + o[1] + o[2] + o[3] + o[4] + o[5];
832}
833
834int vertex_program_disassembler::disassemble(unsigned int *instruction, char *line)
835{
836   int b, p;
837   char *c;
838
839   if (state == 0) {
840      decodefields(instruction, 0, f);
841      output_types(f, o);
842      state = 1;
843   }
844   if (o[0] != 0)
845   {
846      o[0] = 0;
847      c = line;
848      strcpy(c, vecops[f.VecOperation]);
849      c = c + strlen(c);
850      strcpy(c, " r");
851      c = c + 2;
852      c = c + sprintf(c, "%d", f.VecTempIndex);
853      c = c + disassemble_mask(f.VecTempWriteMask, c);
854      b = 0;
855      for (p = 4; p != 0; p = p >> 1)
856      {
857         if ((vecpar2[f.VecOperation] & p) != 0) {
858            c[0] = ',';
859            c++;
860            c = c + disassemble_source(f.src[b], f, c);
861         }
862         b++;
863      }
864      *c = 0;
865      return 1;
866   }
867   if (o[1] != 0)
868   {
869      o[1] = 0;
870      c = line;
871      strcpy(c, vecops[f.VecOperation]);
872      c = c + strlen(c);
873      *c = ' ';
874      c++;
875      c = c + disassemble_output(f, c);
876      c = c + disassemble_mask(f.OutputWriteMask, c);
877      b = 0;
878      for (p = 4; p != 0; p = p >> 1)
879      {
880         if ((vecpar2[f.VecOperation] & p) != 0) {
881            *c = ',';
882            c++;
883            c = c + disassemble_source(f.src[b], f, c);
884         }
885         b++;
886      }
887      *c = 0;
888      return 1;
889   }
890   if (o[2] != 0)
891   {
892      o[2] = 0;
893      c = line;
894      strcpy(c, scaops[f.ScaOperation]);
895      c = c + strlen(c);
896      *c = ' ';
897      c++;
898      c = c + disassemble_output(f, c);
899      c = c + disassemble_mask(f.OutputWriteMask, c);
900      b = 0;
901      for (p = 4; p != 0; p = p >> 1)
902      {
903         if ((scapar2[f.ScaOperation] & p) != 0) {
904            *c = ',';
905            c++;
906            c = c + disassemble_source(f.src[b], f, c);
907         }
908         b++;
909      }
910      *c = 0;
911      return 1;
912   }
913   if (o[3] != 0)
914   {
915      if (f.VecOperation > 0)
916         b = 1;
917      else
918         b = f.VecTempIndex;
919      o[3] = 0;
920      c = line;
921      strcpy(c, scaops[f.ScaOperation]);
922      c = c + strlen(c);
923      strcpy(c, " r");
924      c = c + 2;
925      c = c + sprintf(c, "%d", b);
926      c = c + disassemble_mask(f.ScaTempWriteMask, c);
927      b = 0;
928      for (p = 4; p != 0; p = p >> 1)
929      {
930         if ((scapar2[f.ScaOperation] & p) != 0) {
931            *c = ',';
932            c++;
933            c = c + disassemble_source(f.src[b], f, c);
934         }
935         b++;
936      }
937      *c = 0;
938      return 1;
939   }
940   if (o[4] != 0)
941   {
942      o[4] = 0;
943      c = line;
944      c = c + sprintf(c, "MOV a0.x,");
945      c = c + disassemble_source(f.src[0], f, c);
946      *c = 0;
947      return 1;
948   }
949   if (o[5] != 0)
950   {
951      o[5] = 0;
952      strcpy(line, "END");
953      return 1;
954   }
955   state = 0;
956   return 0;
957}
958
959/*
960 * geforce 3d (NV2A) accellerator
961 */
962/* very simplified view
963there is a set of context objects
964
965context objects are stored in RAMIN
966each context object is identified by an handle stored in RAMHT
967
968each context object can be assigned to a channel
969to assign you give to the channel an handle for the object
970
971offset in ramht=(((((handle >> 11) xor handle) >> 11) xor handle) & 0x7ff)*8
972offset in ramht contains the handle itself
973offset in ramht+4 contains in the lower 16 bits the offset in RAMIN divided by 16
974
975objects have methods used to do drawing
976most methods set parameters, others actually draw
977*/
978class nv2a_renderer : public poly_manager<float, nvidia_object_data, 12, 8192>
979{
980public:
981   nv2a_renderer(running_machine &machine) : poly_manager<float, nvidia_object_data, 12, 8192>(machine)
982   {
983      memset(channel,0,sizeof(channel));
984      memset(pfifo,0,sizeof(pfifo));
985      memset(pcrtc,0,sizeof(pcrtc));
986      memset(pmc,0,sizeof(pmc));
987      memset(ramin,0,sizeof(ramin));
988      computedilated();
989      fb.allocate(640,480);
990      objectdata=&(object_data_alloc());
991      objectdata->data=this;
992      combiner.used=0;
993      combiner.lock=osd_lock_alloc();
994      enabled_vertex_attributes=0;
995      indexesleft_count = 0;
996      vertex_pipeline = 4;
997      alpha_test_enabled = false;
998      alpha_reference = 0;
999      alpha_func = nv2a_renderer::ALWAYS;
1000      blending_enabled = false;
1001      blend_equation = nv2a_renderer::FUNC_ADD;
1002      blend_color = 0;
1003      blend_function_destination = nv2a_renderer::ZERO;
1004      blend_function_source = nv2a_renderer::ONE;
1005      logical_operation_enabled = false;
1006      logical_operation = nv2a_renderer::COPY;
1007      debug_grab_texttype = -1;
1008      debug_grab_textfile = NULL;
1009      memset(vertex_attribute_words, 0, sizeof(vertex_attribute_words));
1010      memset(vertex_attribute_offset, 0, sizeof(vertex_attribute_offset));
1011   }
1012   DECLARE_READ32_MEMBER( geforce_r );
1013   DECLARE_WRITE32_MEMBER( geforce_w );
1014   void vblank_callback(screen_device &screen, bool state);
1015   UINT32 screen_update_callback(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
1016
1017   void render_texture_simple(INT32 scanline, const extent_t &extent, const nvidia_object_data &extradata, int threadid);
1018   void render_color(INT32 scanline, const extent_t &extent, const nvidia_object_data &extradata, int threadid);
1019   void render_register_combiners(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid);
1020
1021   int geforce_commandkind(UINT32 word);
1022   UINT32 geforce_object_offset(UINT32 handle);
1023   void geforce_read_dma_object(UINT32 handle,UINT32 &offset,UINT32 &size);
1024   void geforce_exec_method(address_space &space,UINT32 channel,UINT32 subchannel,UINT32 method,UINT32 address,int &countlen);
1025   UINT32 texture_get_texel(int number,int x,int y);
1026   void write_pixel(int x, int y, UINT32 color);
1027   void combiner_initialize_registers(UINT32 argb8[6]);
1028   void combiner_initialize_stage(int stage_number);
1029   void combiner_initialize_final();
1030   void combiner_map_input(int stage_number); // map combiner registers to variables A..D
1031   void combiner_map_output(int stage_number); // map combiner calculation results to combiner registers
1032   void combiner_map_final_input(); // map final combiner registers to variables A..F
1033   void combiner_final_output(); // generate final combiner output
1034   float combiner_map_input_select(int code,int index); // get component index in register code
1035   float *combiner_map_input_select3(int code); // get pointer to register code
1036   float *combiner_map_output_select3(int code); // get pointer to register code for output
1037   float combiner_map_input_function(int code,float value); // apply input mapping function code to value
1038   void combiner_map_input_function3(int code,float *data); // apply input mapping function code to data
1039   void combiner_function_AB(float result[4]);
1040   void combiner_function_AdotB(float result[4]);
1041   void combiner_function_CD(float result[4]);
1042   void combiner_function_CdotD(float result[4]);
1043   void combiner_function_ABmuxCD(float result[4]);
1044   void combiner_function_ABsumCD(float result[4]);
1045   void combiner_compute_rgb_outputs(int index);
1046   void combiner_compute_a_outputs(int index);
1047   void combiner_argb8_float(UINT32 color,float reg[4]);
1048   UINT32 combiner_float_argb8(float reg[4]);
1049   UINT32 dilate0(UINT32 value,int bits);
1050   UINT32 dilate1(UINT32 value,int bits);
1051   void computedilated(void);
1052   void putpixtex(int xp,int yp,int up,int vp);
1053   int toggle_register_combiners_usage();
1054   void debug_grab_texture(int type, const char *filename);
1055   void debug_grab_vertex_program_slot(int slot, UINT32 *instruction);
1056   void savestate_items();
1057
1058   struct vertex {
1059      union {
1060         float fv[4];
1061         UINT32 iv[4];
1062      } attribute[16];
1063   };
1064   int read_vertices_0x1810(address_space & space, vertex *destination, int offset, int limit);
1065   int read_vertices_0x1800(address_space & space, vertex *destination, UINT32 address, int limit);
1066   int read_vertices_0x1818(address_space & space, vertex *destination, UINT32 address, int limit);
1067   void convert_vertices_poly(vertex *source, vertex_t *destination, int count);
1068
1069   struct {
1070      UINT32 regs[0x80/4];
1071      struct {
1072         UINT32 objhandle;
1073         UINT32 objclass;
1074         UINT32 method[0x2000/4];
1075      } object;
1076   } channel[32][8];
1077   UINT32 pfifo[0x2000/4];
1078   UINT32 pcrtc[0x1000/4];
1079   UINT32 pmc[0x1000/4];
1080   UINT32 ramin[0x100000/4];
1081   UINT32 dma_offset[2];
1082   UINT32 dma_size[2];
1083   UINT32 vertexbuffer_address[16];
1084   int vertexbuffer_stride[16];
1085   struct {
1086      int enabled;
1087      int sizeu;
1088      int sizev;
1089      int sizew;
1090      int dilate;
1091      int format;
1092      int rectangle_pitch;
1093      void *buffer;
1094   } texture[4];
1095   int primitives_count;
1096   int indexesleft_count;
1097   int indexesleft_first;
1098   UINT32 indexesleft[8];
1099   struct {
1100      float variable_A[4]; // 0=R 1=G 2=B 3=A
1101      float variable_B[4];
1102      float variable_C[4];
1103      float variable_D[4];
1104      float variable_E[4];
1105      float variable_F[4];
1106      float variable_G;
1107      float variable_EF[4];
1108      float variable_sumclamp[4];
1109      float function_RGBop1[4]; // 0=R 1=G 2=B
1110      float function_RGBop2[4];
1111      float function_RGBop3[4];
1112      float function_Aop1;
1113      float function_Aop2;
1114      float function_Aop3;
1115      float register_primarycolor[4]; // rw
1116      float register_secondarycolor[4];
1117      float register_texture0color[4];
1118      float register_texture1color[4];
1119      float register_texture2color[4];
1120      float register_texture3color[4];
1121      float register_color0[4];
1122      float register_color1[4];
1123      float register_spare0[4];
1124      float register_spare1[4];
1125      float register_fogcolor[4]; // ro
1126      float register_zero[4];
1127      float output[4];
1128      struct {
1129         float register_constantcolor0[4];
1130         float register_constantcolor1[4];
1131         int mapin_aA_input;
1132         int mapin_aA_component;
1133         int mapin_aA_mapping;
1134         int mapin_aB_input;
1135         int mapin_aB_component;
1136         int mapin_aB_mapping;
1137         int mapin_aC_input;
1138         int mapin_aC_component;
1139         int mapin_aC_mapping;
1140         int mapin_aD_input;
1141         int mapin_aD_component;
1142         int mapin_aD_mapping;
1143         int mapin_rgbA_input;
1144         int mapin_rgbA_component;
1145         int mapin_rgbA_mapping;
1146         int mapin_rgbB_input;
1147         int mapin_rgbB_component;
1148         int mapin_rgbB_mapping;
1149         int mapin_rgbC_input;
1150         int mapin_rgbC_component;
1151         int mapin_rgbC_mapping;
1152         int mapin_rgbD_input;
1153         int mapin_rgbD_component;
1154         int mapin_rgbD_mapping;
1155         int mapout_aCD_output;
1156         int mapout_aAB_output;
1157         int mapout_aSUM_output;
1158         int mapout_aCD_dotproduct;
1159         int mapout_aAB_dotproduct;
1160         int mapout_a_muxsum;
1161         int mapout_a_bias;
1162         int mapout_a_scale;
1163         int mapout_rgbCD_output;
1164         int mapout_rgbAB_output;
1165         int mapout_rgbSUM_output;
1166         int mapout_rgbCD_dotproduct;
1167         int mapout_rgbAB_dotproduct;
1168         int mapout_rgb_muxsum;
1169         int mapout_rgb_bias;
1170         int mapout_rgb_scale;
1171      } stage[8];
1172      struct {
1173         float register_constantcolor0[4];
1174         float register_constantcolor1[4];
1175         int color_sum_clamp;
1176         int mapin_rgbA_input;
1177         int mapin_rgbA_component;
1178         int mapin_rgbA_mapping;
1179         int mapin_rgbB_input;
1180         int mapin_rgbB_component;
1181         int mapin_rgbB_mapping;
1182         int mapin_rgbC_input;
1183         int mapin_rgbC_component;
1184         int mapin_rgbC_mapping;
1185         int mapin_rgbD_input;
1186         int mapin_rgbD_component;
1187         int mapin_rgbD_mapping;
1188         int mapin_rgbE_input;
1189         int mapin_rgbE_component;
1190         int mapin_rgbE_mapping;
1191         int mapin_rgbF_input;
1192         int mapin_rgbF_component;
1193         int mapin_rgbF_mapping;
1194         int mapin_aG_input;
1195         int mapin_aG_component;
1196         int mapin_aG_mapping;
1197      } final;
1198      int stages;
1199      int used;
1200      osd_lock *lock;
1201   } combiner;
1202   bool alpha_test_enabled;
1203   int alpha_func;
1204   int alpha_reference;
1205   bool blending_enabled;
1206   int blend_equation;
1207   int blend_function_source;
1208   int blend_function_destination;
1209   UINT32 blend_color;
1210   bool logical_operation_enabled;
1211   int logical_operation;
1212   struct {
1213      float modelview[16];
1214      float modelview_inverse[16];
1215      float projection[16];
1216      float translate[4];
1217      float scale[4];
1218   } matrix;
1219   struct {
1220      UINT32 instruction[1024];
1221      int instructions;
1222      int upload_instruction;
1223      int start_instruction;
1224      float parameter[1024];
1225      int upload_parameter;
1226   } vertexprogram;
1227   int vertex_pipeline;
1228   int enabled_vertex_attributes;
1229   int vertex_attribute_words[16];
1230   int vertex_attribute_offset[16];
1231   bitmap_rgb32 fb;
1232   UINT32 dilated0[16][2048];
1233   UINT32 dilated1[16][2048];
1234   int dilatechose[256];
1235   nvidia_object_data *objectdata;
1236   int debug_grab_texttype;
1237   char *debug_grab_textfile;
1238
1239   enum NV2A_BEGIN_END {
1240      STOP=0,
1241      POINTS=1,
1242      LINES=2,
1243      LINE_LOOP=3,
1244      LINE_STRIP=4,
1245      TRIANGLES=5,
1246      TRIANGLE_STRIP=6,
1247      TRIANGLE_FAN=7,
1248      QUADS=8,
1249      QUAD_STRIP=9,
1250      POLYGON=10
1251   };
1252   enum NV2A_VERTEX_ATTR {
1253      POS=0,
1254      WEIGHT=1,
1255      NORMAL=2,
1256      COLOR0=3,
1257      COLOR1=4,
1258      FOG=5,
1259      TEX0=9,
1260      TEX1=10,
1261      TEX2=11,
1262      TEX3=12
1263   };
1264   enum NV2A_VTXBUF_TYPE {
1265      FLOAT=2,
1266      UBYTE=4,
1267      USHORT=5
1268   };
1269   enum NV2A_TEX_FORMAT {
1270      L8=0x0,
1271      I8=0x1,
1272      A1R5G5B5=0x2,
1273      A4R4G4B4=0x4,
1274      R5G6B5=0x5,
1275      A8R8G8B8=0x6,
1276      X8R8G8B8=0x7,
1277      INDEX8=0xb,
1278      DXT1=0xc,
1279      DXT3=0xe,
1280      DXT5=0xf,
1281      A1R5G5B5_RECT=0x10,
1282      R5G6B5_RECT=0x11,
1283      A8R8G8B8_RECT=0x12,
1284      L8_RECT=0x13,
1285      DSDT8_RECT=0x17,
1286      A8L8=0x1a,
1287      I8_RECT=0x1b,
1288      A4R4G4B4_RECT=0x1d,
1289      R8G8B8_RECT=0x1e,
1290      A8L8_RECT=0x20,
1291      Z24=0x2a,
1292      Z24_RECT=0x2b,
1293      Z16=0x2c,
1294      Z16_RECT=0x2d,
1295      DSDT8=0x28,
1296      HILO16=0x33,
1297      HILO16_RECT=0x36,
1298      HILO8=0x44,
1299      SIGNED_HILO8=0x45,
1300      HILO8_RECT=0x46,
1301      SIGNED_HILO8_RECT=0x47
1302   };
1303   enum NV2A_LOGIC_OP {
1304      CLEAR=0x1500,
1305      AND=0x1501,
1306      AND_REVERSE=0x1502,
1307      COPY=0x1503,
1308      AND_INVERTED=0x1504,
1309      NOOP=0x1505,
1310      XOR=0x1506,
1311      OR=0x1507,
1312      NOR=0x1508,
1313      EQUIV=0x1509,
1314      INVERT=0x150a,
1315      OR_REVERSE=0x150b,
1316      COPY_INVERTED=0x150c,
1317      OR_INVERTED=0x150d,
1318      NAND=0x150e,
1319      SET=0x150f
1320   };
1321   enum NV2A_BLEND_EQUATION {
1322      FUNC_ADD=0x8006,
1323      MIN=0x8007,
1324      MAX=0x8008,
1325      FUNC_SUBTRACT=0x800a,
1326      FUNC_REVERSE_SUBTRACT=0x80b
1327   };
1328   enum NV2A_BLEND_FACTOR {
1329      ZERO=0x0000,
1330      ONE=0x0001,
1331      SRC_COLOR=0x0300,
1332      ONE_MINUS_SRC_COLOR=0x0301,
1333      SRC_ALPHA=0x0302,
1334      ONE_MINUS_SRC_ALPHA=0x0303,
1335      DST_ALPHA=0x0304,
1336      ONE_MINUS_DST_ALPHA=0x0305,
1337      DST_COLOR=0x0306,
1338      ONE_MINUS_DST_COLOR=0x0307,
1339      SRC_ALPHA_SATURATE=0x0308,
1340      CONSTANT_COLOR=0x8001,
1341      ONE_MINUS_CONSTANT_COLOR=0x8002,
1342      CONSTANT_ALPHA=0x8003,
1343      ONE_MINUS_CONSTANT_ALPHA=0x8004
1344   };
1345   enum NV2A_COMPARISON_OP {
1346      NEVER=0x0200,
1347      LESS=0x0201,
1348      EQUAL=0x0202,
1349      LEQUAL=0x0203,
1350      GREATER=0x0204,
1351      NOTEQUAL=0x0205,
1352      GEQUAL=0x0206,
1353      ALWAYS=0x0207
1354   };
1355   enum NV2A_STENCIL_OP {
1356      ZEROOP=0x0000,
1357      INVERTOP=0x150a,
1358      KEEP=0x1e00,
1359      REPLACE=0x1e01,
1360      INCR=0x1e02,
1361      DECR=0x1e03,
1362      INCR_WRAP=0x8507,
1363      DECR_WRAP=0x8508
1364   };
1365};
1366
1367475/* jamtable instructions for Chihiro (different from console)
1368476St.     Instr.       Comment
13694770x01    POKEPCI      PCICONF[OP2] := OP1
r242231r242232
1380488*/
1381489
1382490/* jamtable disassembler */
1383static void jamtable_disasm(running_machine &machine, address_space &space,UINT32 address,UINT32 size) // 0xff000080 == fff00080
491static void jamtable_disasm(running_machine &machine, address_space &space, UINT32 address, UINT32 size) // 0xff000080 == fff00080
1384492{
1385   offs_t base,addr;
1386   UINT32 opcode,op1,op2;
493   offs_t base, addr;
494   UINT32 opcode, op1, op2;
1387495   char sop1[16];
1388496   char sop2[16];
1389497   char pcrel[16];
1390498
1391   addr=(offs_t)address;
1392   if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&addr))
499   addr = (offs_t)address;
500   if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &addr))
1393501   {
1394      debug_console_printf(machine,"Address is unmapped.\n");
502      debug_console_printf(machine, "Address is unmapped.\n");
1395503      return;
1396504   }
1397505   while (1)
1398506   {
1399      base=addr;
1400      opcode=space.read_byte(addr);
507      base = addr;
508      opcode = space.read_byte(addr);
1401509      addr++;
1402      op1=space.read_dword_unaligned(addr);
1403      addr+=4;
1404      op2=space.read_dword_unaligned(addr);
1405      addr+=4;
510      op1 = space.read_dword_unaligned(addr);
511      addr += 4;
512      op2 = space.read_dword_unaligned(addr);
513      addr += 4;
1406514      if (opcode == 0xe1)
1407515      {
1408         opcode=op2 & 255;
1409         op2=op1;
516         opcode = op2 & 255;
517         op2 = op1;
1410518         //op1=edi;
1411         sprintf(sop2,"%08X",op2);
1412         sprintf(sop1,"ACC");
1413         sprintf(pcrel,"PC+ACC");
519         sprintf(sop2, "%08X", op2);
520         sprintf(sop1, "ACC");
521         sprintf(pcrel, "PC+ACC");
1414522      }
1415523      else
1416524      {
1417         sprintf(sop2,"%08X",op2);
1418         sprintf(sop1,"%08X",op1);
1419         sprintf(pcrel,"%08X",base+9+op1);
525         sprintf(sop2, "%08X", op2);
526         sprintf(sop1, "%08X", op1);
527         sprintf(pcrel, "%08X", base + 9 + op1);
1420528      }
1421      debug_console_printf(machine,"%08X ",base);
529      debug_console_printf(machine, "%08X ", base);
1422530      // dl=instr ebx=par1 eax=par2
1423531      switch (opcode)
1424532      {
1425         case 0x01:
1426            // if ((op2 & 0xff) == 0x880) op1=op1 & 0xfffffffd
1427            // out cf8,op2
1428            // out cfc,op1
1429            // out cf8,0
1430            // cf8 (CONFIG_ADDRESS) format:
1431            // 31 30      24 23        16 15           11 10              8 7               2 1 0
1432            // +-+----------+------------+---------------+-----------------+-----------------+-+-+
1433            // | | Reserved | Bus Number | Device Number | Function Number | Register Number |0|0|
1434            // +-+----------+------------+---------------+-----------------+-----------------+-+-+
1435            // 31 - Enable bit
1436            debug_console_printf(machine,"POKEPCI PCICONF[%s]=%s\n",sop2,sop1);
1437            break;
1438         case 0x02:
1439            debug_console_printf(machine,"OUTB    PORT[%s]=%s\n",sop2,sop1);
1440            break;
1441         case 0x03:
1442            debug_console_printf(machine,"POKE    MEM[%s]=%s\n",sop2,sop1);
1443            break;
1444         case 0x04:
1445            debug_console_printf(machine,"BNE     IF ACC != %s THEN PC=%s\n",sop2,pcrel);
1446            break;
1447         case 0x05:
1448            // out cf8,op2
1449            // in acc,cfc
1450            debug_console_printf(machine,"PEEKPCI ACC=PCICONF[%s]\n",sop2);
1451            break;
1452         case 0x06:
1453            debug_console_printf(machine,"AND/OR  ACC=(ACC & %s) | %s\n",sop2,sop1);
1454            break;
1455         case 0x07:
1456            debug_console_printf(machine,"BRA     PC=%s\n",pcrel);
1457            break;
1458         case 0x08:
1459            debug_console_printf(machine,"INB     ACC=PORT[%s]\n",sop2);
1460            break;
1461         case 0x09:
1462            debug_console_printf(machine,"PEEK    ACC=MEM[%s]\n",sop2);
1463            break;
1464         case 0xee:
1465            debug_console_printf(machine,"END\n");
1466            break;
1467         default:
1468            debug_console_printf(machine,"NOP     ????\n");
1469            break;
533      case 0x01:
534         // if ((op2 & 0xff) == 0x880) op1=op1 & 0xfffffffd
535         // out cf8,op2
536         // out cfc,op1
537         // out cf8,0
538         // cf8 (CONFIG_ADDRESS) format:
539         // 31 30      24 23        16 15           11 10              8 7               2 1 0
540         // +-+----------+------------+---------------+-----------------+-----------------+-+-+
541         // | | Reserved | Bus Number | Device Number | Function Number | Register Number |0|0|
542         // +-+----------+------------+---------------+-----------------+-----------------+-+-+
543         // 31 - Enable bit
544         debug_console_printf(machine, "POKEPCI PCICONF[%s]=%s\n", sop2, sop1);
545         break;
546      case 0x02:
547         debug_console_printf(machine, "OUTB    PORT[%s]=%s\n", sop2, sop1);
548         break;
549      case 0x03:
550         debug_console_printf(machine, "POKE    MEM[%s]=%s\n", sop2, sop1);
551         break;
552      case 0x04:
553         debug_console_printf(machine, "BNE     IF ACC != %s THEN PC=%s\n", sop2, pcrel);
554         break;
555      case 0x05:
556         // out cf8,op2
557         // in acc,cfc
558         debug_console_printf(machine, "PEEKPCI ACC=PCICONF[%s]\n", sop2);
559         break;
560      case 0x06:
561         debug_console_printf(machine, "AND/OR  ACC=(ACC & %s) | %s\n", sop2, sop1);
562         break;
563      case 0x07:
564         debug_console_printf(machine, "BRA     PC=%s\n", pcrel);
565         break;
566      case 0x08:
567         debug_console_printf(machine, "INB     ACC=PORT[%s]\n", sop2);
568         break;
569      case 0x09:
570         debug_console_printf(machine, "PEEK    ACC=MEM[%s]\n", sop2);
571         break;
572      case 0xee:
573         debug_console_printf(machine, "END\n");
574         break;
575      default:
576         debug_console_printf(machine, "NOP     ????\n");
577         break;
1470578      }
1471579      if (opcode == 0xee)
1472580         break;
1473581      if (size <= 9)
1474582         break;
1475      size-=9;
583      size -= 9;
1476584   }
1477585}
1478586
1479587static void jamtable_disasm_command(running_machine &machine, int ref, int params, const char **param)
1480588{
1481589   chihiro_state *state = machine.driver_data<chihiro_state>();
1482   address_space &space=state->m_maincpu->space();
1483   UINT64  addr,size;
590   address_space &space = state->m_maincpu->space();
591   UINT64  addr, size;
1484592
1485593   if (params < 2)
1486594      return;
r242231r242232
1494602static void dump_string_command(running_machine &machine, int ref, int params, const char **param)
1495603{
1496604   chihiro_state *state = machine.driver_data<chihiro_state>();
1497   address_space &space=state->m_maincpu->space();
605   address_space &space = state->m_maincpu->space();
1498606   UINT64  addr;
1499607   offs_t address;
1500   UINT32 length,maximumlength;
608   UINT32 length, maximumlength;
1501609   offs_t buffer;
1502610
1503611   if (params < 1)
1504612      return;
1505613   if (!debug_command_parameter_number(machine, param[0], &addr))
1506614      return;
1507   address=(offs_t)addr;
1508   if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
615   address = (offs_t)addr;
616   if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
1509617   {
1510      debug_console_printf(machine,"Address is unmapped.\n");
618      debug_console_printf(machine, "Address is unmapped.\n");
1511619      return;
1512620   }
1513   length=space.read_word_unaligned(address);
1514   maximumlength=space.read_word_unaligned(address+2);
1515   buffer=space.read_dword_unaligned(address+4);
1516   debug_console_printf(machine,"Length %d word\n",length);
1517   debug_console_printf(machine,"MaximumLength %d word\n",maximumlength);
1518   debug_console_printf(machine,"Buffer %08X byte* ",buffer);
1519   if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&buffer))
621   length = space.read_word_unaligned(address);
622   maximumlength = space.read_word_unaligned(address + 2);
623   buffer = space.read_dword_unaligned(address + 4);
624   debug_console_printf(machine, "Length %d word\n", length);
625   debug_console_printf(machine, "MaximumLength %d word\n", maximumlength);
626   debug_console_printf(machine, "Buffer %08X byte* ", buffer);
627   if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &buffer))
1520628   {
1521      debug_console_printf(machine,"\nBuffer is unmapped.\n");
629      debug_console_printf(machine, "\nBuffer is unmapped.\n");
1522630      return;
1523631   }
1524632   if (length > 256)
1525      length=256;
1526   for (int a=0;a < length;a++)
633      length = 256;
634   for (int a = 0; a < length; a++)
1527635   {
1528      UINT8 c=space.read_byte(buffer+a);
1529      debug_console_printf(machine,"%c",c);
636      UINT8 c = space.read_byte(buffer + a);
637      debug_console_printf(machine, "%c", c);
1530638   }
1531   debug_console_printf(machine,"\n");
639   debug_console_printf(machine, "\n");
1532640}
1533641
1534642static void dump_process_command(running_machine &machine, int ref, int params, const char **param)
1535643{
1536644   chihiro_state *state = machine.driver_data<chihiro_state>();
1537   address_space &space=state->m_maincpu->space();
645   address_space &space = state->m_maincpu->space();
1538646   UINT64 addr;
1539647   offs_t address;
1540648
r242231r242232
1542650      return;
1543651   if (!debug_command_parameter_number(machine, param[0], &addr))
1544652      return;
1545   address=(offs_t)addr;
1546   if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
653   address = (offs_t)addr;
654   if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
1547655   {
1548      debug_console_printf(machine,"Address is unmapped.\n");
656      debug_console_printf(machine, "Address is unmapped.\n");
1549657      return;
1550658   }
1551   debug_console_printf(machine,"ReadyListHead {%08X,%08X} _LIST_ENTRY\n",space.read_dword_unaligned(address),space.read_dword_unaligned(address+4));
1552   debug_console_printf(machine,"ThreadListHead {%08X,%08X} _LIST_ENTRY\n",space.read_dword_unaligned(address+8),space.read_dword_unaligned(address+12));
1553   debug_console_printf(machine,"StackCount %d dword\n",space.read_dword_unaligned(address+16));
1554   debug_console_printf(machine,"ThreadQuantum %d dword\n",space.read_dword_unaligned(address+20));
1555   debug_console_printf(machine,"BasePriority %d byte\n",space.read_byte(address+24));
1556   debug_console_printf(machine,"DisableBoost %d byte\n",space.read_byte(address+25));
1557   debug_console_printf(machine,"DisableQuantum %d byte\n",space.read_byte(address+26));
1558   debug_console_printf(machine,"_padding %d byte\n",space.read_byte(address+27));
659   debug_console_printf(machine, "ReadyListHead {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address), space.read_dword_unaligned(address + 4));
660   debug_console_printf(machine, "ThreadListHead {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address + 8), space.read_dword_unaligned(address + 12));
661   debug_console_printf(machine, "StackCount %d dword\n", space.read_dword_unaligned(address + 16));
662   debug_console_printf(machine, "ThreadQuantum %d dword\n", space.read_dword_unaligned(address + 20));
663   debug_console_printf(machine, "BasePriority %d byte\n", space.read_byte(address + 24));
664   debug_console_printf(machine, "DisableBoost %d byte\n", space.read_byte(address + 25));
665   debug_console_printf(machine, "DisableQuantum %d byte\n", space.read_byte(address + 26));
666   debug_console_printf(machine, "_padding %d byte\n", space.read_byte(address + 27));
1559667}
1560668
1561669static void dump_list_command(running_machine &machine, int ref, int params, const char **param)
1562670{
1563671   chihiro_state *state = machine.driver_data<chihiro_state>();
1564   address_space &space=state->m_maincpu->space();
1565   UINT64 addr,offs,start,old;
1566   offs_t address,offset;
672   address_space &space = state->m_maincpu->space();
673   UINT64 addr, offs, start, old;
674   offs_t address, offset;
1567675
1568676   if (params < 1)
1569677      return;
1570678   if (!debug_command_parameter_number(machine, param[0], &addr))
1571679      return;
1572   offs=0;
1573   offset=0;
680   offs = 0;
681   offset = 0;
1574682   if (params >= 2)
1575683   {
1576684      if (!debug_command_parameter_number(machine, param[1], &offs))
1577685         return;
1578      offset=(offs_t)offs;
686      offset = (offs_t)offs;
1579687   }
1580   start=addr;
1581   address=(offs_t)addr;
1582   if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
688   start = addr;
689   address = (offs_t)addr;
690   if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
1583691   {
1584      debug_console_printf(machine,"Address is unmapped.\n");
692      debug_console_printf(machine, "Address is unmapped.\n");
1585693      return;
1586694   }
1587695   if (params >= 2)
1588      debug_console_printf(machine,"Entry    Object\n");
696      debug_console_printf(machine, "Entry    Object\n");
1589697   else
1590      debug_console_printf(machine,"Entry\n");
1591   for (int num=0;num < 32;num++)
698      debug_console_printf(machine, "Entry\n");
699   for (int num = 0; num < 32; num++)
1592700   {
1593701      if (params >= 2)
1594         debug_console_printf(machine,"%08X %08X\n",(UINT32)addr,(offs_t)addr-offset);
702         debug_console_printf(machine, "%08X %08X\n", (UINT32)addr, (offs_t)addr - offset);
1595703      else
1596         debug_console_printf(machine,"%08X\n",(UINT32)addr);
1597      old=addr;
1598      addr=space.read_dword_unaligned(address);
704         debug_console_printf(machine, "%08X\n", (UINT32)addr);
705      old = addr;
706      addr = space.read_dword_unaligned(address);
1599707      if (addr == start)
1600708         break;
1601709      if (addr == old)
1602710         break;
1603      address=(offs_t)addr;
1604      if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
711      address = (offs_t)addr;
712      if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
1605713         break;
1606714   }
1607715}
r242231r242232
1609717static void curthread_command(running_machine &machine, int ref, int params, const char **param)
1610718{
1611719   chihiro_state *state = machine.driver_data<chihiro_state>();
1612   address_space &space=state->m_maincpu->space();
720   address_space &space = state->m_maincpu->space();
1613721   UINT64 fsbase;
1614   UINT32 kthrd,topstack,tlsdata;
722   UINT32 kthrd, topstack, tlsdata;
1615723   offs_t address;
1616724
1617725   fsbase = state->m_maincpu->state_int(44);
1618   address=(offs_t)fsbase+0x28;
1619   if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
726   address = (offs_t)fsbase + 0x28;
727   if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
1620728   {
1621      debug_console_printf(machine,"Address is unmapped.\n");
729      debug_console_printf(machine, "Address is unmapped.\n");
1622730      return;
1623731   }
1624   kthrd=space.read_dword_unaligned(address);
1625   debug_console_printf(machine,"Current thread is %08X\n",kthrd);
1626   address=(offs_t)kthrd+0x1c;
1627   if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
732   kthrd = space.read_dword_unaligned(address);
733   debug_console_printf(machine, "Current thread is %08X\n", kthrd);
734   address = (offs_t)kthrd + 0x1c;
735   if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
1628736      return;
1629   topstack=space.read_dword_unaligned(address);
1630   debug_console_printf(machine,"Current thread stack top is %08X\n",topstack);
1631   address=(offs_t)kthrd+0x28;
1632   if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
737   topstack = space.read_dword_unaligned(address);
738   debug_console_printf(machine, "Current thread stack top is %08X\n", topstack);
739   address = (offs_t)kthrd + 0x28;
740   if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
1633741      return;
1634   tlsdata=space.read_dword_unaligned(address);
742   tlsdata = space.read_dword_unaligned(address);
1635743   if (tlsdata == 0)
1636      address=(offs_t)topstack-0x210-8;
744      address = (offs_t)topstack - 0x210 - 8;
1637745   else
1638      address=(offs_t)tlsdata-8;
1639   if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
746      address = (offs_t)tlsdata - 8;
747   if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
1640748      return;
1641   debug_console_printf(machine,"Current thread function is %08X\n",space.read_dword_unaligned(address));
749   debug_console_printf(machine, "Current thread function is %08X\n", space.read_dword_unaligned(address));
1642750}
1643751
1644752static void generate_irq_command(running_machine &machine, int ref, int params, const char **param)
1645753{
1646754   UINT64 irq;
1647   chihiro_state *chst=machine.driver_data<chihiro_state>();
755   chihiro_state *chst = machine.driver_data<chihiro_state>();
1648756
1649757   if (params < 1)
1650758      return;
r242231r242232
1654762      return;
1655763   if (irq == 2)
1656764      return;
1657   chst->debug_generate_irq((int)irq,true);
765   chst->debug_generate_irq((int)irq, true);
1658766}
1659767
1660768static void nv2a_combiners_command(running_machine &machine, int ref, int params, const char **param)
1661769{
1662770   int en;
1663771
1664   chihiro_state *chst=machine.driver_data<chihiro_state>();
1665   en=chst->nvidia_nv2a->toggle_register_combiners_usage();
772   chihiro_state *chst = machine.driver_data<chihiro_state>();
773   en = chst->nvidia_nv2a->toggle_register_combiners_usage();
1666774   if (en != 0)
1667      debug_console_printf(machine,"Register combiners enabled\n");
775      debug_console_printf(machine, "Register combiners enabled\n");
1668776   else
1669      debug_console_printf(machine,"Register combiners disabled\n");
777      debug_console_printf(machine, "Register combiners disabled\n");
1670778}
1671779
1672780static void grab_texture_command(running_machine &machine, int ref, int params, const char **param)
r242231r242232
1680788      return;
1681789   if ((param[1][0] == 0) || (strlen(param[1]) > 127))
1682790      return;
1683   chst->nvidia_nv2a->debug_grab_texture((int)type,param[1]);
791   chst->nvidia_nv2a->debug_grab_texture((int)type, param[1]);
1684792}
1685793
1686794static void grab_vprog_command(running_machine &machine, int ref, int params, const char **param)
r242231r242232
1728836         if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &addr))
1729837            return;
1730838         instruction[0] = space.read_dword_unaligned(address);
1731         instruction[1] = space.read_dword_unaligned(address+4);
1732         instruction[2] = space.read_dword_unaligned(address+8);
1733         instruction[3] = space.read_dword_unaligned(address+12);
1734      } else
839         instruction[1] = space.read_dword_unaligned(address + 4);
840         instruction[2] = space.read_dword_unaligned(address + 8);
841         instruction[3] = space.read_dword_unaligned(address + 12);
842      }
843      else
1735844         chst->nvidia_nv2a->debug_grab_vertex_program_slot((int)address, instruction);
1736845      while (vd.disassemble(instruction, line) != 0)
1737846         debug_console_printf(machine, "%s\n", line);
r242231r242232
1745854
1746855static void help_command(running_machine &machine, int ref, int params, const char **param)
1747856{
1748   debug_console_printf(machine,"Available Chihiro commands:\n");
1749   debug_console_printf(machine,"  chihiro jamdis,<start>,<size> -- Disassemble <size> bytes of JamTable instructions starting at <start>\n");
1750   debug_console_printf(machine,"  chihiro dump_string,<address> -- Dump _STRING object at <address>\n");
1751   debug_console_printf(machine,"  chihiro dump_process,<address> -- Dump _PROCESS object at <address>\n");
1752   debug_console_printf(machine,"  chihiro dump_list,<address>[,<offset>] -- Dump _LIST_ENTRY chain starting at <address>\n");
1753   debug_console_printf(machine,"  chihiro curthread -- Print information about current thread\n");
1754   debug_console_printf(machine,"  chihiro irq,<number> -- Generate interrupt with irq number 0-15\n");
1755   debug_console_printf(machine,"  chihiro nv2a_combiners -- Toggle use of register combiners\n");
1756   debug_console_printf(machine,"  chihiro grab_texture,<type>,<filename> -- Save to <filename> the next used texture of type <type>\n");
1757   debug_console_printf(machine,"  chihiro grab_vprog,<filename> -- save current vertex program instruction slots to <filename>\n");
1758   debug_console_printf(machine,"  chihiro vprogdis,<address>,<length>[,<type>] -- disassemble <lenght> vertex program instructions at <address> of <type>\n");
1759   debug_console_printf(machine,"  chihiro help -- this list\n");
857   debug_console_printf(machine, "Available Chihiro commands:\n");
858   debug_console_printf(machine, "  chihiro jamdis,<start>,<size> -- Disassemble <size> bytes of JamTable instructions starting at <start>\n");
859   debug_console_printf(machine, "  chihiro dump_string,<address> -- Dump _STRING object at <address>\n");
860   debug_console_printf(machine, "  chihiro dump_process,<address> -- Dump _PROCESS object at <address>\n");
861   debug_console_printf(machine, "  chihiro dump_list,<address>[,<offset>] -- Dump _LIST_ENTRY chain starting at <address>\n");
862   debug_console_printf(machine, "  chihiro curthread -- Print information about current thread\n");
863   debug_console_printf(machine, "  chihiro irq,<number> -- Generate interrupt with irq number 0-15\n");
864   debug_console_printf(machine, "  chihiro nv2a_combiners -- Toggle use of register combiners\n");
865   debug_console_printf(machine, "  chihiro grab_texture,<type>,<filename> -- Save to <filename> the next used texture of type <type>\n");
866   debug_console_printf(machine, "  chihiro grab_vprog,<filename> -- save current vertex program instruction slots to <filename>\n");
867   debug_console_printf(machine, "  chihiro vprogdis,<address>,<length>[,<type>] -- disassemble <lenght> vertex program instructions at <address> of <type>\n");
868   debug_console_printf(machine, "  chihiro help -- this list\n");
1760869}
1761870
1762871static void chihiro_debug_commands(running_machine &machine, int ref, int params, const char **param)
1763872{
1764873   if (params < 1)
1765874      return;
1766   if (strcmp("jamdis",param[0]) == 0)
1767      jamtable_disasm_command(machine,ref,params-1,param+1);
1768   else if (strcmp("dump_string",param[0]) == 0)
1769      dump_string_command(machine,ref,params-1,param+1);
1770   else if (strcmp("dump_process",param[0]) == 0)
1771      dump_process_command(machine,ref,params-1,param+1);
1772   else if (strcmp("dump_list",param[0]) == 0)
1773      dump_list_command(machine,ref,params-1,param+1);
1774   else if (strcmp("curthread",param[0]) == 0)
1775      curthread_command(machine,ref,params-1,param+1);
1776   else if (strcmp("irq",param[0]) == 0)
1777      generate_irq_command(machine,ref,params-1,param+1);
1778   else if (strcmp("nv2a_combiners",param[0]) == 0)
1779      nv2a_combiners_command(machine,ref,params-1,param+1);
875   if (strcmp("jamdis", param[0]) == 0)
876      jamtable_disasm_command(machine, ref, params - 1, param + 1);
877   else if (strcmp("dump_string", param[0]) == 0)
878      dump_string_command(machine, ref, params - 1, param + 1);
879   else if (strcmp("dump_process", param[0]) == 0)
880      dump_process_command(machine, ref, params - 1, param + 1);
881   else if (strcmp("dump_list", param[0]) == 0)
882      dump_list_command(machine, ref, params - 1, param + 1);
883   else if (strcmp("curthread", param[0]) == 0)
884      curthread_command(machine, ref, params - 1, param + 1);
885   else if (strcmp("irq", param[0]) == 0)
886      generate_irq_command(machine, ref, params - 1, param + 1);
887   else if (strcmp("nv2a_combiners", param[0]) == 0)
888      nv2a_combiners_command(machine, ref, params - 1, param + 1);
1780889   else if (strcmp("grab_texture", param[0]) == 0)
1781890      grab_texture_command(machine, ref, params - 1, param + 1);
1782891   else if (strcmp("grab_vprog", param[0]) == 0)
r242231r242232
1784893   else if (strcmp("vprogdis", param[0]) == 0)
1785894      vprogdis_command(machine, ref, params - 1, param + 1);
1786895   else
1787      help_command(machine,ref,params-1,param+1);
896      help_command(machine, ref, params - 1, param + 1);
1788897}
1789898
1790/*
1791 * Graphics
1792 */
1793
1794UINT32 nv2a_renderer::dilate0(UINT32 value,int bits) // dilate first "bits" bits in "value"
899void chihiro_state::debug_generate_irq(int irq, bool active)
1795900{
1796   UINT32 x,m1,m2,m3;
1797   int a;
1798
1799   x = value;
1800   for (a=0;a < bits;a++)
1801   {
1802      m2 = 1 << (a << 1);
1803      m1 = m2 - 1;
1804      m3 = (~m1) << 1;
1805      x = (x & m1) + (x & m2) + ((x & m3) << 1);
1806   }
1807   return x;
1808}
1809
1810UINT32 nv2a_renderer::dilate1(UINT32 value,int bits) // dilate first "bits" bits in "value"
1811{
1812   UINT32 x,m1,m2,m3;
1813   int a;
1814
1815   x = value;
1816   for (a=0;a < bits;a++)
1817   {
1818      m2 = 1 << (a << 1);
1819      m1 = m2 - 1;
1820      m3 = (~m1) << 1;
1821      x = (x & m1) + ((x & m2) << 1) + ((x & m3) << 1);
1822   }
1823   return x;
1824}
1825
1826void nv2a_renderer::computedilated(void)
1827{
1828   int a,b;
1829
1830   for (b=0;b < 16;b++)
1831      for (a=0;a < 2048;a++) {
1832         dilated0[b][a]=dilate0(a,b);
1833         dilated1[b][a]=dilate1(a,b);
1834      }
1835   for (b=0;b < 16;b++)
1836      for (a=0;a < 16;a++)
1837         dilatechose[(b << 4) + a]=(a < b ? a : b);
1838}
1839
1840int nv2a_renderer::geforce_commandkind(UINT32 word)
1841{
1842   if ((word & 0x00000003) == 0x00000002)
1843      return 7; // call
1844   if ((word & 0x00000003) == 0x00000001)
1845      return 6; // jump
1846   if ((word & 0xE0030003) == 0x40000000)
1847      return 5; // non increasing
1848   if ((word & 0xE0000003) == 0x20000000)
1849      return 4; // old jump
1850   if ((word & 0xFFFF0003) == 0x00030000)
1851      return 3; // long non icreasing
1852   if ((word & 0xFFFFFFFF) == 0x00020000)
1853      return 2; // return
1854   if ((word & 0xFFFF0003) == 0x00010000)
1855      return 1; // sli conditional
1856   if ((word & 0xE0030003) == 0x00000000)
1857      return 0; // increasing
1858   return -1;
1859}
1860
1861UINT32 nv2a_renderer::geforce_object_offset(UINT32 handle)
1862{
1863   UINT32 h=((((handle >> 11) ^ handle) >> 11) ^ handle) & 0x7ff;
1864   UINT32 o=(pfifo[0x210/4] & 0x1f) << 8; // or 12 ?
1865   UINT32 e=o+h*8; // at 0xfd000000+0x00700000
1866   UINT32 w;
1867
1868   if (ramin[e/4] != handle)
1869      e=0;
1870   w=ramin[e/4+1];
1871   return (w & 0xffff)*0x10;
1872}
1873
1874void nv2a_renderer::geforce_read_dma_object(UINT32 handle,UINT32 &offset,UINT32 &size)
1875{
1876   //UINT32 objclass,pt_present,pt_linear,access,target,rorw;
1877   UINT32 dma_adjust,dma_frame;
1878   UINT32 o=geforce_object_offset(handle);
1879
1880   o=o/4;
1881   //objclass=ramin[o] & 0xfff;
1882   //pt_present=(ramin[o] >> 12) & 1;
1883   //pt_linear=(ramin[o] >> 13) & 1;
1884   //access=(ramin[o] >> 14) & 3;
1885   //target=(ramin[o] >> 16) & 3;
1886   dma_adjust=(ramin[o] >> 20) & 0xfff;
1887   size=ramin[o+1];
1888   //rorw=ramin[o+2] & 1;
1889   dma_frame=ramin[o+2] & 0xfffff000;
1890   offset=dma_frame+dma_adjust;
1891}
1892
1893/*void myline(bitmap_rgb32 &bmp,float x1,float y1,float x2,float y2)
1894{
1895    int xx1,yy1,xx2,yy2;
1896
1897    xx1=x1;
1898    xx2=x2;
1899    yy1=y1;
1900    yy2=y2;
1901    if (xx1 == xx2) {
1902        if (yy1 > yy2) {
1903            int t=yy1;
1904            yy1=yy2;
1905            yy2=t;
1906        }
1907        for (int y=yy1;y <= yy2;y++)
1908            *((UINT32 *)bmp.raw_pixptr(y,xx1))= -1;
1909    } else if (yy1 == yy2) {
1910        if (xx1 > xx2) {
1911            int t=xx1;
1912            xx1=xx2;
1913            xx2=t;
1914        }
1915        for (int x=xx1;x <= xx2;x++)
1916            *((UINT32 *)bmp.raw_pixptr(yy1,x))= -1;
1917    }
1918}*/
1919
1920inline UINT32 convert_a4r4g4b4_a8r8g8b8(UINT32 a4r4g4b4)
1921{
1922   UINT32 a8r8g8b8;
1923   int ca,cr,cg,cb;
1924
1925   cb=pal4bit(a4r4g4b4 & 0x000f);
1926   cg=pal4bit((a4r4g4b4 & 0x00f0) >> 4);
1927   cr=pal4bit((a4r4g4b4 & 0x0f00) >> 8);
1928   ca=pal4bit((a4r4g4b4 & 0xf000) >> 12);
1929   a8r8g8b8=(ca<<24)|(cr<<16)|(cg<<8)|(cb); // color converted to 8 bits per component
1930   return a8r8g8b8;
1931}
1932
1933inline UINT32 convert_a1r5g5b5_a8r8g8b8(UINT32 a1r5g5b5)
1934{
1935   UINT32 a8r8g8b8;
1936   int ca,cr,cg,cb;
1937
1938   cb=pal5bit(a1r5g5b5 & 0x001f);
1939   cg=pal5bit((a1r5g5b5 & 0x03e0) >> 5);
1940   cr=pal5bit((a1r5g5b5 & 0x7c00) >> 10);
1941   ca=a1r5g5b5 & 0x8000 ? 0xff : 0;
1942   a8r8g8b8=(ca<<24)|(cr<<16)|(cg<<8)|(cb); // color converted to 8 bits per component
1943   return a8r8g8b8;
1944}
1945
1946inline UINT32 convert_r5g6b5_r8g8b8(UINT32 r5g6b5)
1947{
1948   UINT32 r8g8b8;
1949   int cr,cg,cb;
1950
1951   cb=pal5bit(r5g6b5 & 0x001f);
1952   cg=pal6bit((r5g6b5 & 0x07e0) >> 5);
1953   cr=pal5bit((r5g6b5 & 0xf800) >> 11);
1954   r8g8b8=(cr<<16)|(cg<<8)|(cb); // color converted to 8 bits per component
1955   return r8g8b8;
1956}
1957
1958UINT32 nv2a_renderer::texture_get_texel(int number,int x,int y)
1959{
1960   UINT32 to, s, c, sa, ca;
1961   UINT32 a4r4g4b4, a1r5g5b5, r5g6b5;
1962   int bx, by;
1963   int color0, color1, color0m2, color1m2, alpha0, alpha1;
1964   UINT32 codes;
1965   UINT64 alphas;
1966   int cr, cg, cb;
1967
1968   // force to [0,size-1]
1969   x = (unsigned int)x & (texture[number].sizeu - 1);
1970   y = (unsigned int)y & (texture[number].sizev - 1);
1971   switch (texture[number].format) {
1972   case A8R8G8B8:
1973      to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
1974      return *(((UINT32 *)texture[number].buffer) + to); // get texel color
1975   case DXT1:
1976      bx = x >> 2;
1977      by = y >> 2;
1978      x = x & 3;
1979      y = y & 3;
1980      to = bx + by*(texture[number].sizeu >> 2);
1981      color0 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 0);
1982      color1 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 1);
1983      codes = *((UINT32 *)(((UINT64 *)texture[number].buffer) + to) + 1);
1984      s = (y << 3) + (x << 1);
1985      c = (codes >> s) & 3;
1986      c = c + (color0 > color1 ? 0 : 4);
1987      color0m2 = color0 << 1;
1988      color1m2 = color1 << 1;
1989      switch (c) {
1990      case 0:
1991         return 0xff000000 + convert_r5g6b5_r8g8b8(color0);
1992      case 1:
1993         return 0xff000000 + convert_r5g6b5_r8g8b8(color1);
1994      case 2:
1995         cb = pal5bit(((color0m2 & 0x003e) + (color1 & 0x001f)) / 3);
1996         cg = pal6bit(((color0m2 & 0x0fc0) + (color1 & 0x07e0)) / 3 >> 5);
1997         cr = pal5bit(((color0m2 & 0x1f000) + color1) / 3 >> 11);
1998         return 0xff000000 | (cr << 16) | (cg << 8) | (cb);
1999      case 3:
2000         cb = pal5bit(((color1m2 & 0x003e) + (color0 & 0x001f)) / 3);
2001         cg = pal6bit(((color1m2 & 0x0fc0) + (color0 & 0x07e0)) / 3 >> 5);
2002         cr = pal5bit(((color1m2 & 0x1f000) + color0) / 3 >> 11);
2003         return 0xff000000 | (cr << 16) | (cg << 8) | (cb);
2004      case 4:
2005         return 0xff000000 + convert_r5g6b5_r8g8b8(color0);
2006      case 5:
2007         return 0xff000000 + convert_r5g6b5_r8g8b8(color1);
2008      case 6:
2009         cb = pal5bit(((color0 & 0x001f) + (color1 & 0x001f)) / 2);
2010         cg = pal6bit(((color0 & 0x07e0) + (color1 & 0x07e0)) / 2 >> 5);
2011         cr = pal5bit(((color0 & 0xf800) + (color1 & 0xf800)) / 2 >> 11);
2012         return 0xff000000 | (cr << 16) | (cg << 8) | (cb);
2013      default:
2014         return 0xff000000;
2015      }
2016   case DXT3:
2017      bx = x >> 2;
2018      by = y >> 2;
2019      x = x & 3;
2020      y = y & 3;
2021      to = (bx + by*(texture[number].sizeu >> 2)) << 1;
2022      color0 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 4);
2023      color1 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 5);
2024      codes = *((UINT32 *)(((UINT64 *)texture[number].buffer) + to) + 3);
2025      alphas = *(((UINT64 *)texture[number].buffer) + to);
2026      s = (y << 3) + (x << 1);
2027      sa = ((y << 2) + x) << 2;
2028      c = (codes >> s) & 3;
2029      ca = (alphas >> sa) & 15;
2030      switch (c) {
2031      case 0:
2032         return ((ca + (ca << 4)) << 24) + convert_r5g6b5_r8g8b8(color0);
2033      case 1:
2034         return ((ca + (ca << 4)) << 24) + convert_r5g6b5_r8g8b8(color1);
2035      case 2:
2036         cb = pal5bit((2 * (color0 & 0x001f) + (color1 & 0x001f)) / 3);
2037         cg = pal6bit((2 * (color0 & 0x07e0) + (color1 & 0x07e0)) / 3 >> 5);
2038         cr = pal5bit((2 * (color0 & 0xf800) + (color1 & 0xf800)) / 3 >> 11);
2039         return ((ca + (ca << 4)) << 24) | (cr << 16) | (cg << 8) | (cb);
2040      default:
2041         cb = pal5bit(((color0 & 0x001f) + 2 * (color1 & 0x001f)) / 3);
2042         cg = pal6bit(((color0 & 0x07e0) + 2 * (color1 & 0x07e0)) / 3 >> 5);
2043         cr = pal5bit(((color0 & 0xf800) + 2 * (color1 & 0xf800)) / 3 >> 11);
2044         return ((ca + (ca << 4)) << 24) | (cr << 16) | (cg << 8) | (cb);
2045      }
2046   case A4R4G4B4:
2047      to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
2048      a4r4g4b4 = *(((UINT16 *)texture[number].buffer) + to); // get texel color
2049      return convert_a4r4g4b4_a8r8g8b8(a4r4g4b4);
2050   case A1R5G5B5:
2051      to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
2052      a1r5g5b5 = *(((UINT16 *)texture[number].buffer) + to); // get texel color
2053      return convert_a1r5g5b5_a8r8g8b8(a1r5g5b5);
2054   case R5G6B5:
2055      to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
2056      r5g6b5 = *(((UINT16 *)texture[number].buffer) + to); // get texel color
2057      return 0xff000000 + convert_r5g6b5_r8g8b8(r5g6b5);
2058   case R8G8B8_RECT:
2059      to = texture[number].rectangle_pitch*y + (x << 2);
2060      return *((UINT32 *)(((UINT8 *)texture[number].buffer) + to));
2061   case A8R8G8B8_RECT:
2062      to = texture[number].rectangle_pitch*y + (x << 2);
2063      return *((UINT32 *)(((UINT8 *)texture[number].buffer) + to));
2064   case DXT5:
2065      bx = x >> 2;
2066      by = y >> 2;
2067      x = x & 3;
2068      y = y & 3;
2069      to = (bx + by*(texture[number].sizeu >> 2)) << 1;
2070      color0 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 4);
2071      color1 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 5);
2072      codes = *((UINT32 *)(((UINT64 *)texture[number].buffer) + to) + 3);
2073      alpha0 = *((UINT8 *)(((UINT64 *)texture[number].buffer) + to) + 0);
2074      alpha1 = *((UINT8 *)(((UINT64 *)texture[number].buffer) + to) + 1);
2075      alphas = *(((UINT64 *)texture[number].buffer) + to);
2076      s = (y << 3) + (x << 1);
2077      sa = ((y << 2) + x) * 3;
2078      c = (codes >> s) & 3;
2079      ca = (alphas >> sa) & 7;
2080      ca = ca + (alpha0 > alpha1 ? 0 : 8);
2081      switch (ca) {
2082      case 0:
2083         ca = alpha0;
2084         break;
2085      case 1:
2086         ca = alpha1;
2087         break;
2088      case 2:
2089         ca = (6 * alpha0 + 1 * alpha1) / 7;
2090         break;
2091      case 3:
2092         ca = (5 * alpha0 + 2 * alpha1) / 7;
2093         break;
2094      case 4:
2095         ca = (4 * alpha0 + 3 * alpha1) / 7;
2096         break;
2097      case 5:
2098         ca = (3 * alpha0 + 4 * alpha1) / 7;
2099         break;
2100      case 6:
2101         ca = (2 * alpha0 + 5 * alpha1) / 7;
2102         break;
2103      case 7:
2104         ca = (1 * alpha0 + 6 * alpha1) / 7;
2105         break;
2106      case 8:
2107         ca = alpha0;
2108         break;
2109      case 9:
2110         ca = alpha1;
2111         break;
2112      case 10:
2113         ca = (4 * alpha0 + 1 * alpha1) / 5;
2114         break;
2115      case 11:
2116         ca = (3 * alpha0 + 2 * alpha1) / 5;
2117         break;
2118      case 12:
2119         ca = (2 * alpha0 + 3 * alpha1) / 5;
2120         break;
2121      case 13:
2122         ca = (1 * alpha0 + 4 * alpha1) / 5;
2123         break;
2124      case 14:
2125         ca = 0;
2126         break;
2127      case 15:
2128         ca = 255;
2129         break;
2130      }
2131      switch (c) {
2132      case 0:
2133         return (ca << 24) + convert_r5g6b5_r8g8b8(color0);
2134      case 1:
2135         return (ca << 24) + convert_r5g6b5_r8g8b8(color1);
2136      case 2:
2137         cb = pal5bit((2 * (color0 & 0x001f) + (color1 & 0x001f)) / 3);
2138         cg = pal6bit((2 * (color0 & 0x07e0) + (color1 & 0x07e0)) / 3 >> 5);
2139         cr = pal5bit((2 * (color0 & 0xf800) + (color1 & 0xf800)) / 3 >> 11);
2140         return (ca << 24) | (cr << 16) | (cg << 8) | (cb);
2141      default:
2142         cb = pal5bit(((color0 & 0x001f) + 2 * (color1 & 0x001f)) / 3);
2143         cg = pal6bit(((color0 & 0x07e0) + 2 * (color1 & 0x07e0)) / 3 >> 5);
2144         cr = pal5bit(((color0 & 0xf800) + 2 * (color1 & 0xf800)) / 3 >> 11);
2145         return (ca << 24) | (cr << 16) | (cg << 8) | (cb);
2146      }
2147   default:
2148      return 0xff00ff00;
2149   }
2150}
2151
2152void nv2a_renderer::write_pixel(int x, int y, UINT32 color)
2153{
2154   void *addr;
2155   UINT32 fbcolor;
2156   UINT32 c[4], fb[4], s[4], d[4], cc[4];
2157
2158   addr = this->fb.raw_pixptr(y, x);
2159   fbcolor = *((UINT32 *)addr);
2160   c[3] = color >> 24;
2161   c[2] = (color >> 16) & 255;
2162   c[1] = (color >> 8) & 255;
2163   c[0] = color & 255;
2164   fb[3] = fbcolor >> 24;
2165   fb[2] = (fbcolor >> 16) & 255;
2166   fb[1] = (fbcolor >> 8) & 255;
2167   fb[0] = fbcolor & 255;
2168   cc[3] = blend_color >> 24;
2169   cc[2] = (blend_color >> 16) & 255;
2170   cc[1] = (blend_color >> 8) & 255;
2171   cc[0] = blend_color & 255;
2172   // ownership test and scissor test not done
2173   // alpha test
2174   if (alpha_test_enabled) {
2175      switch (alpha_func) {
2176      case nv2a_renderer::NEVER:
2177         return;
2178      case nv2a_renderer::ALWAYS:
2179      default:
2180         break;
2181      case nv2a_renderer::LESS:
2182         if (c[3] >= alpha_reference)
2183            return;
2184         break;
2185      case nv2a_renderer::LEQUAL:
2186         if (c[3] > alpha_reference)
2187            return;
2188         break;
2189      case nv2a_renderer::EQUAL:
2190         if (c[3] != alpha_reference)
2191            return;
2192         break;
2193      case nv2a_renderer::GEQUAL:
2194         if (c[3] < alpha_reference)
2195            return;
2196         break;
2197      case nv2a_renderer::GREATER:
2198         if (c[3] <= alpha_reference)
2199            return;
2200         break;
2201      case nv2a_renderer::NOTEQUAL:
2202         if (c[3] == alpha_reference)
2203            return;
2204         break;
2205      }
2206   }
2207   // stencil test not done
2208   // depth buffer test not done
2209   // blending
2210   if (blending_enabled) {
2211      switch (blend_function_source) {
2212      case nv2a_renderer::ZERO:
2213         s[3] = s[2] = s[1] = s[0] = 0;
2214         break;
2215      case nv2a_renderer::ONE:
2216      default:
2217         s[3] = s[2] = s[1] = s[0] = 255;
2218         break;
2219      case nv2a_renderer::DST_COLOR:
2220         s[3] = fb[3];
2221         s[2] = fb[2];
2222         s[1] = fb[1];
2223         s[0] = fb[0];
2224         break;
2225      case nv2a_renderer::ONE_MINUS_DST_COLOR:
2226         s[3] = fb[3] ^ 255;
2227         s[2] = fb[2] ^ 255;
2228         s[1] = fb[1] ^ 255;
2229         s[0] = fb[0] ^ 255;
2230         break;
2231      case nv2a_renderer::SRC_ALPHA:
2232         s[3] = s[2] = s[1] = s[0] = c[3];
2233         break;
2234      case nv2a_renderer::ONE_MINUS_SRC_ALPHA:
2235         s[3] = s[2] = s[1] = s[0] = c[3] ^ 255;
2236         break;
2237      case nv2a_renderer::DST_ALPHA:
2238         s[3] = s[2] = s[1] = s[0] = fb[3];
2239         break;
2240      case nv2a_renderer::ONE_MINUS_DST_ALPHA:
2241         s[3] = s[2] = s[1] = s[0] = fb[3] ^ 255;
2242         break;
2243      case nv2a_renderer::CONSTANT_COLOR:
2244         s[3] = cc[3];
2245         s[2] = cc[2];
2246         s[1] = cc[1];
2247         s[0] = cc[0];
2248         break;
2249      case nv2a_renderer::ONE_MINUS_CONSTANT_COLOR:
2250         s[3] = cc[3] ^ 255;
2251         s[2] = cc[2] ^ 255;
2252         s[1] = cc[1] ^ 255;
2253         s[0] = cc[0] ^ 255;
2254         break;
2255      case nv2a_renderer::CONSTANT_ALPHA:
2256         s[3] = s[2] = s[1] = s[0] = cc[3];
2257         break;
2258      case nv2a_renderer::ONE_MINUS_CONSTANT_ALPHA:
2259         s[3] = s[2] = s[1] = s[0] = cc[3] ^ 255;
2260         break;
2261      case nv2a_renderer::SRC_ALPHA_SATURATE:
2262         s[3] = 255;
2263         if (c[3] < (fb[3] ^ 255))
2264            s[2] = c[3];
2265         else
2266            s[2] = fb[3];
2267         s[1] = s[0] = s[2];
2268         break;
2269      }
2270      switch (blend_function_destination) {
2271      case nv2a_renderer::ZERO:
2272      default:
2273         d[3] = d[2] = d[1] = d[0] = 0;
2274         break;
2275      case nv2a_renderer::ONE:
2276         d[3] = d[2] = d[1] = d[0] = 255;
2277         break;
2278      case nv2a_renderer::SRC_COLOR:
2279         d[3] = c[3];
2280         d[2] = c[2];
2281         d[1] = c[1];
2282         d[0] = c[0];
2283         break;
2284      case nv2a_renderer::ONE_MINUS_SRC_COLOR:
2285         d[3] = c[3] ^ 255;
2286         d[2] = c[2] ^ 255;
2287         d[1] = c[1] ^ 255;
2288         d[0] = c[0] ^ 255;
2289         break;
2290      case nv2a_renderer::SRC_ALPHA:
2291         d[3] = d[2] = d[1] = d[0] = c[3];
2292         break;
2293      case nv2a_renderer::ONE_MINUS_SRC_ALPHA:
2294         d[3] = d[2] = d[1] = d[0] = c[3] ^ 255;
2295         break;
2296      case nv2a_renderer::DST_ALPHA:
2297         d[3] = d[2] = d[1] = d[0] = fb[3];
2298         break;
2299      case nv2a_renderer::ONE_MINUS_DST_ALPHA:
2300         d[3] = d[2] = d[1] = d[0] = fb[3] ^ 255;
2301         break;
2302      case nv2a_renderer::CONSTANT_COLOR:
2303         d[3] = cc[3];
2304         d[2] = cc[2];
2305         d[1] = cc[1];
2306         d[0] = cc[0];
2307         break;
2308      case nv2a_renderer::ONE_MINUS_CONSTANT_COLOR:
2309         d[3] = cc[3] ^ 255;
2310         d[2] = cc[2] ^ 255;
2311         d[1] = cc[1] ^ 255;
2312         d[0] = cc[0] ^ 255;
2313         break;
2314      case nv2a_renderer::CONSTANT_ALPHA:
2315         d[3] = d[2] = d[1] = d[0] = cc[3];
2316         break;
2317      case nv2a_renderer::ONE_MINUS_CONSTANT_ALPHA:
2318         d[3] = d[2] = d[1] = d[0] = cc[3] ^ 255;
2319         break;
2320      }
2321      switch (blend_equation) {
2322      case nv2a_renderer::FUNC_ADD:
2323         c[3] = (c[3]*s[3] + fb[3]*d[3]) / 255;
2324         if (c[3] > 255)
2325            c[3] = 255;
2326         c[2] = (c[2]*s[2] + fb[2]*d[2]) / 255;
2327         if (c[2] > 255)
2328            c[2] = 255;
2329         c[1] = (c[1]*s[1] + fb[1]*d[1]) / 255;
2330         if (c[1] > 255)
2331            c[1] = 255;
2332         c[0] = (c[0]*s[0] + fb[0]*d[0]) / 255;
2333         if (c[0] > 255)
2334            c[0] = 255;
2335         break;
2336      case nv2a_renderer::FUNC_SUBTRACT:
2337         c[3] = (c[3]*s[3] - fb[3]*d[3]) / 255;
2338         if (c[3] < 0)
2339            c[3] = 255;
2340         c[2] = (c[2]*s[2] - fb[2]*d[2]) / 255;
2341         if (c[2] < 0)
2342            c[2] = 255;
2343         c[1] = (c[1]*s[1] - fb[1]*d[1]) / 255;
2344         if (c[1] < 0)
2345            c[1] = 255;
2346         c[0] = (c[0]*s[0] - fb[0]*d[0]) / 255;
2347         if (c[0] < 0)
2348            c[0] = 255;
2349         break;
2350      case nv2a_renderer::FUNC_REVERSE_SUBTRACT:
2351         c[3] = (fb[3] * d[3] - c[3] * s[3]) / 255;
2352         if (c[3] < 0)
2353            c[3] = 255;
2354         c[2] = (fb[2] * d[2] - c[2] * s[2]) / 255;
2355         if (c[2] < 0)
2356            c[2] = 255;
2357         c[1] = (fb[1] * d[1] - c[1] * s[1]) / 255;
2358         if (c[1] < 0)
2359            c[1] = 255;
2360         c[0] = (fb[0] * d[0] - c[0] * s[0]) / 255;
2361         if (c[0] < 0)
2362            c[0] = 255;
2363         break;
2364      case nv2a_renderer::MIN:
2365         c[3] = s[3];
2366         if (d[3] < c[3])
2367            c[3] = d[3];
2368         c[2] = s[2];
2369         if (d[2] < c[2])
2370            c[2] = d[2];
2371         c[1] = s[1];
2372         if (d[1] < c[1])
2373            c[1] = d[1];
2374         c[0] = s[0];
2375         if (d[0] < c[0])
2376            c[0] = d[0];
2377         break;
2378      case nv2a_renderer::MAX:
2379         c[3] = s[3];
2380         if (d[3] > c[3])
2381            c[3] = d[3];
2382         c[2] = s[2];
2383         if (d[2] > c[2])
2384            c[2] = d[2];
2385         c[1] = s[1];
2386         if (d[1] > c[1])
2387            c[1] = d[1];
2388         c[0] = s[0];
2389         if (d[0] > c[0])
2390            c[0] = d[0];
2391         break;
2392      }
2393   }
2394   // dithering not done
2395   // logical operation
2396   if (logical_operation_enabled) {
2397      switch (logical_operation) {
2398      case  nv2a_renderer::CLEAR:
2399         c[3] = 0;
2400         c[2] = 0;
2401         c[1] = 0;
2402         c[0] = 0;
2403         break;
2404      case  nv2a_renderer::AND:
2405         c[3] = c[3] & fb[3];
2406         c[2] = c[2] & fb[2];
2407         c[1] = c[1] & fb[1];
2408         c[0] = c[0] & fb[0];
2409         break;
2410      case  nv2a_renderer::AND_REVERSE:
2411         c[3] = c[3] & (fb[3] ^ 255);
2412         c[2] = c[2] & (fb[2] ^ 255);
2413         c[1] = c[1] & (fb[1] ^ 255);
2414         c[0] = c[0] & (fb[0] ^ 255);
2415         break;
2416      case  nv2a_renderer::COPY:
2417      default:
2418         break;
2419      case  nv2a_renderer::AND_INVERTED:
2420         c[3] = (c[3] ^ 255) & fb[3];
2421         c[2] = (c[2] ^ 255) & fb[2];
2422         c[1] = (c[1] ^ 255) & fb[1];
2423         c[0] = (c[0] ^ 255) & fb[0];
2424         break;
2425      case  nv2a_renderer::NOOP:
2426         c[3] = fb[3];
2427         c[2] = fb[2];
2428         c[1] = fb[1];
2429         c[0] = fb[0];
2430         break;
2431      case  nv2a_renderer::XOR:
2432         c[3] = c[3] ^ fb[3];
2433         c[2] = c[2] ^ fb[2];
2434         c[1] = c[1] ^ fb[1];
2435         c[0] = c[0] ^ fb[0];
2436         break;
2437      case  nv2a_renderer::OR:
2438         c[3] = c[3] | fb[3];
2439         c[2] = c[2] | fb[2];
2440         c[1] = c[1] | fb[1];
2441         c[0] = c[0] | fb[0];
2442         break;
2443      case  nv2a_renderer::NOR:
2444         c[3] = (c[3] | fb[3]) ^ 255;
2445         c[2] = (c[2] | fb[2]) ^ 255;
2446         c[1] = (c[1] | fb[1]) ^ 255;
2447         c[0] = (c[0] | fb[0]) ^ 255;
2448         break;
2449      case  nv2a_renderer::EQUIV:
2450         c[3] = (c[3] ^ fb[3]) ^ 255;
2451         c[2] = (c[2] ^ fb[2]) ^ 255;
2452         c[1] = (c[1] ^ fb[1]) ^ 255;
2453         c[0] = (c[0] ^ fb[0]) ^ 255;
2454         break;
2455      case  nv2a_renderer::INVERT:
2456         c[3] = fb[3] ^ 255;
2457         c[2] = fb[2] ^ 255;
2458         c[1] = fb[1] ^ 255;
2459         c[0] = fb[0] ^ 255;
2460         break;
2461      case  nv2a_renderer::OR_REVERSE:
2462         c[3] = c[3] | (fb[3] ^ 255);
2463         c[2] = c[2] | (fb[2] ^ 255);
2464         c[1] = c[1] | (fb[1] ^ 255);
2465         c[0] = c[0] | (fb[0] ^ 255);
2466         break;
2467      case  nv2a_renderer::COPY_INVERTED:
2468         c[3] = c[3] ^ 255;
2469         c[2] = c[2] ^ 255;
2470         c[1] = c[1] ^ 255;
2471         c[0] = c[0] ^ 255;
2472         break;
2473      case  nv2a_renderer::OR_INVERTED:
2474         c[3] = (c[3] ^ 255) | fb[3];
2475         c[2] = (c[2] ^ 255) | fb[2];
2476         c[1] = (c[1] ^ 255) | fb[1];
2477         c[0] = (c[0] ^ 255) | fb[0];
2478         break;
2479      case  nv2a_renderer::NAND:
2480         c[3] = (c[3] & fb[3]) ^ 255;
2481         c[2] = (c[2] & fb[2]) ^ 255;
2482         c[1] = (c[1] & fb[1]) ^ 255;
2483         c[0] = (c[0] & fb[0]) ^ 255;
2484         break;
2485      case  nv2a_renderer::SET:
2486         c[3] = 255;
2487         c[2] = 255;
2488         c[1] = 255;
2489         c[0] = 255;
2490         break;
2491      }
2492   }
2493   fbcolor = (c[3] << 24) | (c[2] << 16) | (c[1] << 8) | c[0];
2494   *((UINT32 *)addr) = fbcolor;
2495}
2496
2497void nv2a_renderer::render_color(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid)
2498{
2499   int x;
2500
2501   x=extent.stopx-extent.startx-1; // number of pixels to draw
2502   while (x >= 0) {
2503      UINT32 a8r8g8b8;
2504      int ca,cr,cg,cb;
2505      int xp=extent.startx+x; // x coordinate of current pixel
2506
2507      cb=(extent.param[0].start+(float)x*extent.param[0].dpdx);
2508      cg=(extent.param[1].start+(float)x*extent.param[1].dpdx);
2509      cr=(extent.param[2].start+(float)x*extent.param[2].dpdx);
2510      ca=(extent.param[3].start+(float)x*extent.param[3].dpdx);
2511      a8r8g8b8=(ca << 24)+(cr << 16)+(cg << 8)+cb; // pixel color obtained by interpolating the colors of the vertices
2512      write_pixel(xp, scanline, a8r8g8b8);
2513      x--;
2514   }
2515}
2516
2517void nv2a_renderer::render_texture_simple(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid)
2518{
2519   int x;
2520   UINT32 a8r8g8b8;
2521
2522   if (!objectdata.data->texture[0].enabled) {
2523      return;
2524   }
2525   x=extent.stopx-extent.startx-1;
2526   while (x >= 0) {
2527      int up,vp;
2528      int xp=extent.startx+x; // x coordinate of current pixel
2529
2530      up=(extent.param[4].start+(float)x*extent.param[4].dpdx)*(float)(objectdata.data->texture[0].sizeu-1); // x coordinate of texel in texture
2531      vp=extent.param[5].start*(float)(objectdata.data->texture[0].sizev-1); // y coordinate of texel in texture
2532      a8r8g8b8=texture_get_texel(0, up, vp);
2533      write_pixel(xp, scanline, a8r8g8b8);
2534      x--;
2535   }
2536}
2537
2538void nv2a_renderer::render_register_combiners(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid)
2539{
2540   int x,xp;
2541   int up,vp;
2542   int ca,cr,cg,cb;
2543   UINT32 color[6];
2544   UINT32 a8r8g8b8;
2545   int n;//,m,i,j,k;
2546
2547   color[0] = color[1] = color[2] = color[3] = color[4] = color[5] = 0;
2548
2549   osd_lock_acquire(combiner.lock); // needed since multithreading is not supported yet
2550   x=extent.stopx-extent.startx-1; // number of pixels to draw
2551   while (x >= 0) {
2552      xp=extent.startx+x;
2553      // 1: fetch data
2554      // 1.1: interpolated color from vertices
2555      cb=(extent.param[0].start+(float)x*extent.param[0].dpdx);
2556      cg=(extent.param[1].start+(float)x*extent.param[1].dpdx);
2557      cr=(extent.param[2].start+(float)x*extent.param[2].dpdx);
2558      ca=(extent.param[3].start+(float)x*extent.param[3].dpdx);
2559      color[0]=(ca << 24)+(cr << 16)+(cg << 8)+cb; // pixel color obtained by interpolating the colors of the vertices
2560      color[1]=0; // lighting not yet
2561      // 1.2: color for each of the 4 possible textures
2562      for (n=0;n < 4;n++) {
2563         if (texture[n].enabled) {
2564            up=(extent.param[4+n*2].start+(float)x*extent.param[4+n*2].dpdx)*(float)(objectdata.data->texture[n].sizeu-1);
2565            vp=extent.param[5+n*2].start*(float)(objectdata.data->texture[n].sizev-1);
2566            color[n+2]=texture_get_texel(n, up, vp);
2567         }
2568      }
2569      // 2: compute
2570      // 2.1: initialize
2571      combiner_initialize_registers(color);
2572      // 2.2: general cmbiner stages
2573      for (n=0;n < combiner.stages;n++) {
2574         // 2.2.1 initialize
2575         combiner_initialize_stage(n);
2576         // 2.2.2 map inputs
2577         combiner_map_input(n);
2578         // 2.2.3 compute possible outputs
2579         combiner_compute_rgb_outputs(n);
2580         combiner_compute_a_outputs(n);
2581         // 2.2.4 map outputs to registers
2582         combiner_map_output(n);
2583      }
2584      // 2.3: final cmbiner stage
2585      combiner_initialize_final();
2586      combiner_map_final_input();
2587      combiner_final_output();
2588      a8r8g8b8=combiner_float_argb8(combiner.output);
2589      // 3: write pixel
2590      write_pixel(xp, scanline, a8r8g8b8);
2591      x--;
2592   }
2593   osd_lock_release(combiner.lock);
2594}
2595
2596#if 0
2597const char *rc_mapping_str[]={
2598   "UNSIGNED_IDENTITY",
2599   "UNSIGNED_INVERT",
2600   "EXPAND_NORMAL",
2601   "EXPAND_NEGATE",
2602   "HALF_BIAS_NORMAL",
2603   "HALF_BIAS_NEGATE",
2604   "SIGNED_IDENTITY",
2605   "SIGNED_NEGATE"
2606};
2607
2608const char *rc_usage_rgb_str[]={
2609   "RGB",
2610   "ALPHA"
2611};
2612
2613const char *rc_usage_alpha_str[]={
2614   "BLUE",
2615   "ALPHA"
2616};
2617
2618const char *rc_variable_str[]={
2619   "ZERO",
2620   "CONSTANT_COLOR0",
2621   "CONSTANT_COLOR1",
2622   "FOG",
2623   "PRIMARY_COLOR",
2624   "SECONDARY_COLOR",
2625   "???",
2626   "???",
2627   "TEXTURE0",
2628   "TEXTURE1",
2629   "TEXTURE2",
2630   "TEXTURE3",
2631   "SPARE0",
2632   "SPARE1",
2633   "SPARE0_PLUS_SECONDARY_COLOR",
2634   "E_TIMES_F"
2635};
2636
2637const char *rc_bias_str[]={
2638   "NONE",
2639   "BIAS_BY_NEGATIVE_ONE_HALF"
2640};
2641
2642const char *rc_scale_str[]={
2643   "NONE",
2644   "SCALE_BY_TWO",
2645   "SCALE_BY_FOUR",
2646   "SCALE_BY_ONE_HALF"
2647};
2648
2649/* Dump the current setup of the register combiners */
2650void dumpcombiners(UINT32 *m)
2651{
2652   int a,b,n,v;
2653
2654   n=m[0x1e60/4] & 0xf;
2655   printf("Combiners active: %d\n\r",n);
2656   for (a=0;a < n;a++) {
2657      printf("Combiner %d\n\r",a+1);
2658      printf(" RC_IN_ALPHA %08X\n\r",m[0x0260/4+a]);
2659      for (b=24;b >= 0;b=b-8) {
2660         v=(m[0x0260/4+a] >> b) & 0xf;
2661         printf("  %c_INPUT %s\n\r",'A'+3-b/8,rc_variable_str[v]);
2662         v=(m[0x0260/4+a] >> (b+4)) & 1;
2663         printf("  %c_COMPONENT_USAGE %s\n\r",'A'+3-b/8,rc_usage_alpha_str[v]);
2664         v=(m[0x0260/4+a] >> (b+5)) & 7;
2665         printf("  %c_MAPPING %s\n\r",'A'+3-b/8,rc_mapping_str[v]);
2666      }
2667      printf(" RC_IN_RGB %08X\n\r",m[0x0ac0/4+a]);
2668      for (b=24;b >= 0;b=b-8) {
2669         v=(m[0x0ac0/4+a] >> b) & 0xf;
2670         printf("  %c_INPUT %s\n\r",'A'+3-b/8,rc_variable_str[v]);
2671         v=(m[0x0ac0/4+a] >> (b+4)) & 1;
2672         printf("  %c_COMPONENT_USAGE %s\n\r",'A'+3-b/8,rc_usage_rgb_str[v]);
2673         v=(m[0x0ac0/4+a] >> (b+5)) & 7;
2674         printf("  %c_MAPPING %s\n\r",'A'+3-b/8,rc_mapping_str[v]);
2675      }
2676      printf(" RC_OUT_ALPHA %08X\n\r",m[0x0aa0/4+a]);
2677      v=m[0x0aa0/4+a] & 0xf;
2678      printf("  CD_OUTPUT %s\n\r",rc_variable_str[v]);
2679      v=(m[0x0aa0/4+a] >> 4) & 0xf;
2680      printf("  AB_OUTPUT %s\n\r",rc_variable_str[v]);
2681      v=(m[0x0aa0/4+a] >> 8) & 0xf;
2682      printf("  SUM_OUTPUT %s\n\r",rc_variable_str[v]);
2683      v=(m[0x0aa0/4+a] >> 12) & 1;
2684      printf("  CD_DOT_PRODUCT %d\n\r",v);
2685      v=(m[0x0aa0/4+a] >> 13) & 1;
2686      printf("  AB_DOT_PRODUCT %d\n\r",v);
2687      v=(m[0x0aa0/4+a] >> 14) & 1;
2688      printf("  MUX_SUM %d\n\r",v);
2689      v=(m[0x0aa0/4+a] >> 15) & 1;
2690      printf("  BIAS %s\n\r",rc_bias_str[v]);
2691      v=(m[0x0aa0/4+a] >> 16) & 3;
2692      printf("  SCALE %s\n\r",rc_scale_str[v]);
2693      //v=(m[0x0aa0/4+a] >> 27) & 7;
2694      printf(" RC_OUT_RGB %08X\n\r",m[0x1e40/4+a]);
2695      v=m[0x1e40/4+a] & 0xf;
2696      printf("  CD_OUTPUT %s\n\r",rc_variable_str[v]);
2697      v=(m[0x1e40/4+a] >> 4) & 0xf;
2698      printf("  AB_OUTPUT %s\n\r",rc_variable_str[v]);
2699      v=(m[0x1e40/4+a] >> 8) & 0xf;
2700      printf("  SUM_OUTPUT %s\n\r",rc_variable_str[v]);
2701      v=(m[0x1e40/4+a] >> 12) & 1;
2702      printf("  CD_DOT_PRODUCT %d\n\r",v);
2703      v=(m[0x1e40/4+a] >> 13) & 1;
2704      printf("  AB_DOT_PRODUCT %d\n\r",v);
2705      v=(m[0x1e40/4+a] >> 14) & 1;
2706      printf("  MUX_SUM %d\n\r",v);
2707      v=(m[0x1e40/4+a] >> 15) & 1;
2708      printf("  BIAS %s\n\r",rc_bias_str[v]);
2709      v=(m[0x1e40/4+a] >> 16) & 3;
2710      printf("  SCALE %s\n\r",rc_scale_str[v]);
2711      //v=(m[0x1e40/4+a] >> 27) & 7;
2712      printf("\n\r");
2713   }
2714   printf("Combiner final %08X %08X\n\r",m[0x0288/4],m[0x028c/4]);
2715   for (a=24;a >= 0;a=a-8) {
2716      n=(m[0x0288/4] >> a) & 0xf;
2717      printf("  %c_INPUT %s\n\r",'A'+3-a/8,rc_variable_str[n]);
2718      n=(m[0x0288/4] >> (a+4)) & 1;
2719      printf("  %c_COMPONENT_USAGE %s\n\r",'A'+3-a/8,rc_usage_rgb_str[n]);
2720      n=(m[0x0288/4] >> (a+5)) & 7;
2721      printf("  %c_MAPPING %s\n\r",'A'+3-a/8,rc_mapping_str[n]);
2722   }
2723   for (a=24;a >= 8;a=a-8) {
2724      n=(m[0x028c/4] >> a) & 0xf;
2725      printf("  %c_INPUT %s\n\r",'E'+3-a/8,rc_variable_str[n]);
2726      n=(m[0x028c/4] >> (a+4)) & 1;
2727      printf("  %c_COMPONENT_USAGE %s\n\r",'E'+3-a/8,rc_usage_rgb_str[n]);
2728      n=(m[0x028c/4] >> (a+5)) & 7;
2729      printf("  %c_MAPPING %s\n\r",'E'+3-a/8,rc_mapping_str[n]);
2730   }
2731   n=(m[0x028c/4] >> 7) & 1;
2732   printf(" color sum clamp: %d\n\r",n);
2733}
2734#endif
2735
2736/* Read vertices data from system memory. Method 0x1810 */
2737int nv2a_renderer::read_vertices_0x1810(address_space & space, vertex *destination, int offset, int limit)
2738{
2739   UINT32 m, u;
2740
2741   for (m = 0; m < limit; m++) {
2742      destination[m].attribute[0].iv[0] = space.read_dword(vertexbuffer_address[0] + (m + offset)*vertexbuffer_stride[0] + 0);
2743      destination[m].attribute[0].iv[1] = space.read_dword(vertexbuffer_address[0] + (m + offset)*vertexbuffer_stride[0] + 4);
2744      destination[m].attribute[0].iv[2] = space.read_dword(vertexbuffer_address[0] + (m + offset)*vertexbuffer_stride[0] + 8);
2745      destination[m].attribute[0].iv[3] = space.read_dword(vertexbuffer_address[0] + (m + offset)*vertexbuffer_stride[0] + 12);
2746      destination[m].attribute[3].iv[0] = space.read_dword(vertexbuffer_address[3] + (m + offset)*vertexbuffer_stride[3] + 0); // color
2747      for (u = 0; u < 4; u++) {
2748         destination[m].attribute[9 + u].iv[0] = space.read_dword(vertexbuffer_address[9 + u] + (m + offset)*vertexbuffer_stride[9 + u] + 0);
2749         destination[m].attribute[9 + u].iv[1] = space.read_dword(vertexbuffer_address[9 + u] + (m + offset)*vertexbuffer_stride[9 + u] + 4);
2750      }
2751   }
2752   return m;
2753}
2754
2755/* Read vertices data from system memory. Method 0x1800 */
2756int nv2a_renderer::read_vertices_0x1800(address_space & space, vertex *destination, UINT32 address, int limit)
2757{
2758   UINT32 data;
2759   UINT32 m, u, i, c;
2760
2761   c = 0;
2762   for (m = 0; m < limit; m++) {
2763      if (indexesleft_count == 0) {
2764         data = space.read_dword(address);
2765         i = (indexesleft_first + indexesleft_count) & 7;
2766         indexesleft[i] = data & 0xffff;
2767         indexesleft[(i + 1) & 7] = (data >> 16) & 0xffff;
2768         indexesleft_count = indexesleft_count + 2;
2769         address += 4;
2770         c++;
2771      }
2772      destination[m].attribute[0].iv[0] = space.read_dword(vertexbuffer_address[0] + indexesleft[indexesleft_first] * vertexbuffer_stride[0] + 0);
2773      destination[m].attribute[0].iv[1] = space.read_dword(vertexbuffer_address[0] + indexesleft[indexesleft_first] * vertexbuffer_stride[0] + 4);
2774      destination[m].attribute[0].iv[2] = space.read_dword(vertexbuffer_address[0] + indexesleft[indexesleft_first] * vertexbuffer_stride[0] + 8);
2775      destination[m].attribute[0].iv[3] = space.read_dword(vertexbuffer_address[0] + indexesleft[indexesleft_first] * vertexbuffer_stride[0] + 12);
2776      destination[m].attribute[3].iv[0] = space.read_dword(vertexbuffer_address[3] + indexesleft[indexesleft_first] * vertexbuffer_stride[3] + 0); // color
2777      for (u = 0; u < 4; u++) {
2778         destination[m].attribute[9 + u].iv[0] = space.read_dword(vertexbuffer_address[9 + u] + indexesleft[indexesleft_first] * vertexbuffer_stride[9 + u] + 0);
2779         destination[m].attribute[9 + u].iv[1] = space.read_dword(vertexbuffer_address[9 + u] + indexesleft[indexesleft_first] * vertexbuffer_stride[9 + u] + 4);
2780      }
2781      indexesleft_first = (indexesleft_first + 1) & 7;
2782      indexesleft_count--;
2783   }
2784   return (int)c;
2785}
2786
2787/* Read vertices data from system memory. Method 0x1818 */
2788int nv2a_renderer::read_vertices_0x1818(address_space & space, vertex *destination, UINT32 address, int limit)
2789{
2790   UINT32 m, u, vwords;
2791
2792   vwords = vertex_attribute_words[15] + vertex_attribute_offset[15];
2793   for (m = 0; m < limit; m++) {
2794      destination[m].attribute[0].iv[0] = space.read_dword(address + vertex_attribute_offset[0] * 4 + 0);
2795      destination[m].attribute[0].iv[1] = space.read_dword(address + vertex_attribute_offset[0] * 4 + 4);
2796      destination[m].attribute[0].iv[2] = space.read_dword(address + vertex_attribute_offset[0] * 4 + 8);
2797      destination[m].attribute[0].iv[3] = space.read_dword(address + vertex_attribute_offset[0] * 4 + 12);
2798      destination[m].attribute[3].iv[0] = space.read_dword(address + vertex_attribute_offset[3] * 4 + 0); // color
2799      for (u = 0; u < 4; u++) {
2800         destination[m].attribute[9 + u].iv[0] = space.read_dword(address + vertex_attribute_offset[9 + u] * 4 + 0);
2801         destination[m].attribute[9 + u].iv[1] = space.read_dword(address + vertex_attribute_offset[9 + u] * 4 + 4);
2802      }
2803      address = address + vwords * 4;
2804   }
2805   return (int)(m*vwords);
2806}
2807
2808void nv2a_renderer::convert_vertices_poly(vertex *source, vertex_t *destination, int count)
2809{
2810   int m, u;
2811
2812   for (m = 0; m < count; m++) {
2813      destination[m].x = source[m].attribute[0].fv[0];
2814      destination[m].y = source[m].attribute[0].fv[1];
2815      u = source[m].attribute[3].iv[0];
2816      destination[m].p[0] = u & 0xff; // b
2817      destination[m].p[1] = (u & 0xff00) >> 8;  // g
2818      destination[m].p[2] = (u & 0xff0000) >> 16;  // r
2819      destination[m].p[3] = (u & 0xff000000) >> 24;  // a
2820      for (u = 0; u < 4; u++) {
2821         destination[m].p[4 + u * 2] = 0;
2822         destination[m].p[5 + u * 2] = 0;
2823         if (texture[u].enabled) {
2824            destination[m].p[4 + u * 2] = source[m].attribute[9 + u].fv[0];
2825            destination[m].p[5 + u * 2] = source[m].attribute[9 + u].fv[1];
2826         }
2827      }
2828   }
2829}
2830
2831void nv2a_renderer::geforce_exec_method(address_space & space,UINT32 chanel,UINT32 subchannel,UINT32 method,UINT32 address,int &countlen)
2832{
2833   UINT32 maddress;
2834   UINT32 data;
2835
2836   maddress=method*4;
2837   data=space.read_dword(address);
2838   channel[chanel][subchannel].object.method[method]=data;
2839   if (maddress == 0x17fc) {
2840      indexesleft_count = 0;
2841      indexesleft_first = 0;
2842      primitives_count = 0;
2843      countlen--;
2844   }
2845   if (maddress == 0x1810) {
2846      // draw vertices
2847      int offset,count,type;
2848      UINT32 n;
2849      render_delegate renderspans;
2850
2851      offset=data & 0xffffff;
2852      count=(data >> 24) & 0xff;
2853      type=channel[chanel][subchannel].object.method[0x17fc/4];
2854      if (((channel[chanel][subchannel].object.method[0x1e60/4] & 7) > 0) && (combiner.used != 0)) {
2855         renderspans=render_delegate(FUNC(nv2a_renderer::render_register_combiners),this);
2856      } else if (texture[0].enabled) {
2857         renderspans=render_delegate(FUNC(nv2a_renderer::render_texture_simple),this);
2858      } else
2859         renderspans=render_delegate(FUNC(nv2a_renderer::render_color),this);
2860#ifdef LOG_NV2A
2861      printf("vertex %d %d %d\n\r",type,offset,count);
2862#endif
2863      if (type == nv2a_renderer::QUADS) {
2864         for (n = 0; n <= count; n += 4) {
2865            vertex vert[4];
2866            vertex_t xy[4];
2867
2868            read_vertices_0x1810(space, vert, n+offset, 4);
2869            convert_vertices_poly(vert, xy, 4);
2870            render_polygon<4>(fb.cliprect(), renderspans, 4 + 4 * 2, xy); // 4 rgba, 4 texture units 2 uv
2871         }
2872         wait();
2873      } else if (type == nv2a_renderer::TRIANGLE_STRIP) {
2874         vertex vert[4];
2875         vertex_t xy[4];
2876
2877         read_vertices_0x1810(space, vert, offset, 2);
2878         convert_vertices_poly(vert, xy, 2);
2879         count = count - 2;
2880         offset = offset + 2;
2881         for (n = 0; n <= count; n++) {
2882            read_vertices_0x1810(space, vert + ((n+2) & 3), offset + n, 1);
2883            convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 1);
2884            render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[((n & 1)+n) & 3], xy[((~n & 1)+n) & 3], xy[(2+n) & 3]);
2885         }
2886         wait();
2887      } else {
2888         logerror("Unsupported primitive %d for method 0x1810\n",type);
2889      }
2890      countlen--;
2891   }
2892   if (maddress == 0x1800) {
2893      UINT32 type, n;
2894      render_delegate renderspans;
2895
2896      // vertices are selected from the vertex buffer using an array of indexes
2897      // each dword after 1800 contains two 16 bit index values to select the vartices
2898      type = channel[chanel][subchannel].object.method[0x17fc / 4];
2899      if (((channel[chanel][subchannel].object.method[0x1e60 / 4] & 7) > 0) && (combiner.used != 0)) {
2900         renderspans = render_delegate(FUNC(nv2a_renderer::render_register_combiners), this);
2901      }
2902      else if (texture[0].enabled) {
2903         renderspans = render_delegate(FUNC(nv2a_renderer::render_texture_simple), this);
2904      }
2905      else
2906         renderspans = render_delegate(FUNC(nv2a_renderer::render_color), this);
2907#ifdef LOG_NV2A
2908      printf("vertex %d %d %d\n\r", type, offset, count);
2909#endif
2910      if (type == nv2a_renderer::QUADS) {
2911         while (1) {
2912            vertex vert[4];
2913            vertex_t xy[4];
2914            int c;
2915
2916            if ((countlen * 2 + indexesleft_count) < 4)
2917               break;
2918            c=read_vertices_0x1800(space, vert, address, 4);
2919            address = address + c*4;
2920            countlen = countlen - c;
2921            convert_vertices_poly(vert, xy, 4);
2922            render_polygon<4>(fb.cliprect(), renderspans, 4 + 4 * 2, xy); // 4 rgba, 4 texture units 2 uv
2923         }
2924         while (countlen > 0) {
2925            data = space.read_dword(address);
2926            n = (indexesleft_first + indexesleft_count) & 7;
2927            indexesleft[n] = data & 0xffff;
2928            indexesleft[(n + 1) & 7] = (data >> 16) & 0xffff;
2929            indexesleft_count = indexesleft_count + 2;
2930            address += 4;
2931            countlen--;
2932         }
2933         wait();
2934      }
2935      else if (type == nv2a_renderer::TRIANGLES) {
2936         while (1) {
2937            vertex vert[3];
2938            vertex_t xy[3];
2939            int c;
2940
2941            if ((countlen * 2 + indexesleft_count) < 3)
2942               break;
2943            c = read_vertices_0x1800(space, vert, address, 3);
2944            address = address + c * 4;
2945            countlen = countlen - c;
2946            convert_vertices_poly(vert, xy, 3);
2947            render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[0], xy[1], xy[2]); // 4 rgba, 4 texture units 2 uv
2948         }
2949         while (countlen > 0) {
2950            data = space.read_dword(address);
2951            n = (indexesleft_first + indexesleft_count) & 7;
2952            indexesleft[n] = data & 0xffff;
2953            indexesleft[(n + 1) & 7] = (data >> 16) & 0xffff;
2954            indexesleft_count = indexesleft_count + 2;
2955            address += 4;
2956            countlen--;
2957         }
2958         wait();
2959      }
2960      else if (type == nv2a_renderer::TRIANGLE_STRIP) {
2961         if ((countlen * 2 + indexesleft_count) >= 3) {
2962            vertex vert[4];
2963            vertex_t xy[4];
2964            int c, count;
2965
2966            c = read_vertices_0x1800(space, vert, address, 2);
2967            convert_vertices_poly(vert, xy, 2);
2968            address = address + c * 4;
2969            countlen = countlen - c;
2970            count = countlen * 2 + indexesleft_count;
2971            for (n = 0; n < count; n++) { // <=
2972               c = read_vertices_0x1800(space, vert + ((n + 2) & 3), address, 1);
2973               address = address + c * 4;
2974               countlen = countlen - c;
2975               convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 1);
2976               render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[((n & 1) + n) & 3], xy[((~n & 1) + n) & 3], xy[(2 + n) & 3]);
2977            }
2978         }
2979         while (countlen > 0) {
2980            data = space.read_dword(address);
2981            n = (indexesleft_first + indexesleft_count) & 7;
2982            indexesleft[n] = data & 0xffff;
2983            indexesleft[(n + 1) & 7] = (data >> 16) & 0xffff;
2984            indexesleft_count = indexesleft_count + 2;
2985            address += 4;
2986            countlen--;
2987         }
2988         wait();
2989      }
2990      else {
2991         logerror("Unsupported primitive %d for method 0x1800\n", type);
2992         countlen = 0;
2993      }
2994   }
2995   if (maddress == 0x1818) {
2996      int n;
2997      int type;
2998      render_delegate renderspans;
2999
3000      if (((channel[chanel][subchannel].object.method[0x1e60/4] & 7) > 0) && (combiner.used != 0)) {
3001         renderspans=render_delegate(FUNC(nv2a_renderer::render_register_combiners),this);
3002      } else if (texture[0].enabled) {
3003         renderspans=render_delegate(FUNC(nv2a_renderer::render_texture_simple),this);
3004      } else
3005         renderspans=render_delegate(FUNC(nv2a_renderer::render_color),this);
3006      // vertices are taken from the next words, not from a vertex buffer
3007      // first send primitive type with 17fc
3008      // then countlen number of dwords with 1818
3009      // end with 17fc primitive type 0
3010      // at 1760 16 words specify the vertex format:for each possible vertex attribute the number of components (0=not present) and type of each
3011      type=channel[chanel][subchannel].object.method[0x17fc/4];
3012      if (type == nv2a_renderer::TRIANGLE_FAN) {
3013         vertex vert[3];
3014         vertex_t xy[3];
3015         int c;
3016
3017         c=read_vertices_0x1818(space, vert, address, 2);
3018         convert_vertices_poly(vert, xy, 2);
3019         countlen = countlen - c;
3020         if (countlen < 0) {
3021            logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
3022            countlen = 0;
3023            return;
3024         }
3025         address = address + c * 4;
3026         for (n = 1; countlen > 0; n++) {
3027            c=read_vertices_0x1818(space, vert + ((n & 1) + 1), address, 1);
3028            countlen = countlen - c;
3029            if (countlen < 0) {
3030               logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
3031               countlen = 0;
3032               break;
3033            }
3034            address = address + c * 4;
3035            convert_vertices_poly(vert + ((n & 1) + 1), xy + ((n & 1) + 1), 1);
3036            render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[0], xy[(~n & 1) + 1], xy[(n & 1) + 1]);
3037         }
3038         wait();
3039      } else if (type == nv2a_renderer::TRIANGLE_STRIP) {
3040         vertex vert[4];
3041         vertex_t xy[4];
3042         int c;
3043
3044         c=read_vertices_0x1818(space, vert, address, 2);
3045         convert_vertices_poly(vert, xy, 2);
3046         countlen = countlen - c;
3047         if (countlen < 0) {
3048            logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
3049            countlen = 0;
3050            return;
3051         }
3052         address = address + c * 4;
3053         for (n = 0;countlen > 0; n++) {
3054            c=read_vertices_0x1818(space, vert + ((n + 2) & 3), address, 1);
3055            convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 1);
3056            countlen = countlen - c;
3057            if (countlen < 0) {
3058               logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
3059               countlen = 0;
3060               break;
3061            }
3062            address = address + c * 4;
3063            render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[((n & 1) + n) & 3], xy[((~n & 1) + n) & 3], xy[(2 + n) & 3]);
3064         }
3065         wait();
3066      } else if (type == nv2a_renderer::QUADS) {
3067         while (countlen > 0) {
3068            vertex vert[4];
3069            vertex_t xy[4];
3070            int c;
3071
3072            c = read_vertices_0x1818(space, vert, address, 4);
3073            convert_vertices_poly(vert, xy, 4);
3074            countlen = countlen - c;
3075            if (countlen < 0) {
3076               logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
3077               countlen = 0;
3078               break;
3079            }
3080            address = address + c * 4;
3081            render_polygon<4>(fb.cliprect(), renderspans, 4 + 4 * 2, xy); // 4 rgba, 4 texture units 2 uv
3082         }
3083         wait();
3084      } else if (type == nv2a_renderer::QUAD_STRIP) {
3085         vertex vert[4];
3086         vertex_t xy[4];
3087         int c;
3088
3089         c=read_vertices_0x1818(space, vert, address, 2);
3090         convert_vertices_poly(vert, xy, 2);
3091         countlen = countlen - c;
3092         if (countlen < 0) {
3093            logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
3094            countlen = 0;
3095            return;
3096         }
3097         address = address + c * 4;
3098         for (n = 0; countlen > 0; n+=2) {
3099            c = read_vertices_0x1818(space, vert + ((n + 2) & 3), address + ((n + 2) & 3), 2);
3100            convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 2);
3101            countlen = countlen - c;
3102            if (countlen < 0) {
3103               logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
3104               countlen = 0;
3105               return;
3106            }
3107            address = address + c * 4;
3108            render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[n & 3], xy[(n + 1) & 3], xy[(n + 2) & 3]);
3109            render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[(n + 2) & 3], xy[(n + 1) & 3], xy[(n + 3) & 3]);
3110         }
3111         wait();
3112      } else {
3113         logerror("Unsupported primitive %d for method 0x1818\n",type);
3114         countlen = 0;
3115      }
3116   }
3117   if ((maddress >= 0x1720) && (maddress < 0x1760)) {
3118      int bit = method - 0x1720 / 4;
3119
3120      if (data & 0x80000000)
3121         vertexbuffer_address[bit] = (data & 0x0fffffff) + dma_offset[1];
3122      else
3123         vertexbuffer_address[bit] = (data & 0x0fffffff) + dma_offset[0];
3124   }
3125   if ((maddress >= 0x1760) && (maddress < 0x17A0)) {
3126      int bit=method-0x1760/4;
3127
3128      vertexbuffer_stride[bit] = (data >> 8) & 255;
3129      //vertexbuffer_kind[n]=tmp & 15;
3130      //vertexbuffer_size[n]=(tmp >> 4) & 15;
3131      data = data & 255;
3132      switch (data & 15) {
3133         case 0:
3134            vertex_attribute_words[bit]=(((data >> 4) + 3) & 15) >> 2;
3135            break;
3136         case nv2a_renderer::FLOAT:
3137            vertex_attribute_words[bit]=(data >> 4);
3138            break;
3139         case nv2a_renderer::UBYTE:
3140            vertex_attribute_words[bit]=(((data >> 4) + 3) & 15) >> 2;
3141            break;
3142         case nv2a_renderer::USHORT:
3143            vertex_attribute_words[bit]=(((data >> 4) + 1) & 15) >> 1;
3144            break;
3145         default:
3146            vertex_attribute_words[bit]=0;
3147      }
3148      if (data > 15)
3149         enabled_vertex_attributes |= (1 << bit);
3150      else
3151         enabled_vertex_attributes &= ~(1 << bit);
3152      for (int n = bit+1; n < 16; n++) {
3153         if ((enabled_vertex_attributes & (1 << (n - 1))) != 0)
3154            vertex_attribute_offset[n] = vertex_attribute_offset[n - 1] + vertex_attribute_words[n - 1];
3155         else
3156            vertex_attribute_offset[n] = vertex_attribute_offset[n - 1];
3157      }
3158      countlen--;
3159   }
3160   if ((maddress == 0x1d6c) || (maddress == 0x1d70) || (maddress == 0x1a4))
3161      countlen--;
3162   if (maddress == 0x019c) {
3163      geforce_read_dma_object(data, dma_offset[0], dma_size[0]);
3164   }
3165   if (maddress == 0x01a0) {
3166      geforce_read_dma_object(data, dma_offset[1], dma_size[1]);
3167   }
3168   if (maddress == 0x1d70) {
3169      // with 1d70 write the value at offest [1d6c] inside dma object [1a4]
3170      UINT32 offset,base;
3171      UINT32 dmahand,dmaoff,smasiz;
3172
3173      offset=channel[chanel][subchannel].object.method[0x1d6c/4];
3174      dmahand=channel[chanel][subchannel].object.method[0x1a4/4];
3175      geforce_read_dma_object(dmahand,dmaoff,smasiz);
3176      base=dmaoff;
3177      space.write_dword(base+offset,data);
3178      countlen--;
3179   }
3180   if (maddress == 0x1d94) {
3181      // possible buffers: color, depth, stencil, and accumulation
3182      // clear framebuffer
3183      if (data & 0xf0) {
3184         // clear colors
3185         UINT32 color=channel[chanel][subchannel].object.method[0x1d90/4];
3186         fb.fill(color);
3187         //printf("clearscreen\n\r");
3188      }
3189      if (data & 0x03) {
3190         // clear stencil+zbuffer
3191      }
3192      countlen--;
3193   }
3194   if (maddress == 0x0300) {
3195      alpha_test_enabled = data != 0;
3196   }
3197   if (maddress == 0x033c) {
3198      alpha_func = data;
3199   }
3200   if (maddress == 0x0340) {
3201      alpha_reference = data;
3202   }
3203   if (maddress == 0x0304) {
3204      if (logical_operation_enabled)
3205         blending_enabled = false;
3206      else
3207         blending_enabled = data != 0;
3208   }
3209   if (maddress == 0x0344) {
3210      blend_function_source = data;
3211   }
3212   if (maddress == 0x0348) {
3213      blend_function_destination = data;
3214   }
3215   if (maddress == 0x034c) {
3216      blend_color = data;
3217   }
3218   if (maddress == 0x0350) {
3219      blend_equation = data;
3220   }
3221   if (maddress == 0x0d40) {
3222      if (data != 0)
3223         blending_enabled = false;
3224      else
3225         blending_enabled = channel[chanel][subchannel].object.method[0x0304 / 4] != 0;
3226      logical_operation_enabled = data != 0;
3227   }
3228   if (maddress == 0x0d44) {
3229      logical_operation = data;
3230   }
3231   // Texture Units
3232   if ((maddress >= 0x1b00) && (maddress < 0x1c00)) {
3233      int unit;//,off;
3234
3235      unit=(maddress >> 6) & 3;
3236      //off=maddress & 0xc0;
3237      maddress=maddress & ~0xc0;
3238      if (maddress == 0x1b00) {
3239         UINT32 offset;//,base;
3240         //UINT32 dmahand,dmaoff,dmasiz;
3241
3242         offset=data;
3243         texture[unit].buffer=space.get_read_ptr(offset);
3244         /*if (dma0 != 0) {
3245             dmahand=channel[channel][subchannel].object.method[0x184/4];
3246             geforce_read_dma_object(dmahand,dmaoff,smasiz);
3247         } else if (dma1 != 0) {
3248             dmahand=channel[channel][subchannel].object.method[0x188/4];
3249             geforce_read_dma_object(dmahand,dmaoff,smasiz);
3250         }*/
3251      }
3252      if (maddress == 0x1b04) {
3253         //int dma0,dma1,cubic,noborder,dims,mipmap;
3254         int basesizeu,basesizev,basesizew,format;
3255
3256         //dma0=(data >> 0) & 1;
3257         //dma1=(data >> 1) & 1;
3258         //cubic=(data >> 2) & 1;
3259         //noborder=(data >> 3) & 1;
3260         //dims=(data >> 4) & 15;
3261         //mipmap=(data >> 19) & 1;
3262         format=(data >> 8) & 255;
3263         basesizeu=(data >> 20) & 15;
3264         basesizev=(data >> 24) & 15;
3265         basesizew=(data >> 28) & 15;
3266         texture[unit].sizeu=1 << basesizeu;
3267         texture[unit].sizev=1 << basesizev;
3268         texture[unit].sizew=1 << basesizew;
3269         texture[unit].dilate=dilatechose[(basesizeu << 4)+basesizev];
3270         texture[unit].format=format;
3271         if (debug_grab_texttype == format) {
3272            FILE *f;
3273            int written;
3274
3275            debug_grab_texttype = -1;
3276            f = fopen(debug_grab_textfile, "wb");
3277            if (f) {
3278               written=(int)fwrite(texture[unit].buffer, texture[unit].sizeu*texture[unit].sizev*4, 1, f);
3279               fclose(f);
3280               logerror("Written %d bytes of texture to specified file\n", written);
3281            } else
3282               logerror("Unable to save texture to specified file\n");
3283         }
3284      }
3285      if (maddress == 0x1b0c) {
3286         // enable texture
3287         int enable;
3288
3289         enable=(data >> 30) & 1;
3290         texture[unit].enabled=enable;
3291      }
3292      if (maddress == 0x1b10) {
3293         texture[unit].rectangle_pitch=data >> 16;
3294      }
3295      countlen--;
3296   }
3297   // modelview matrix
3298   if ((maddress >= 0x0480) && (maddress < 0x04c0)) {
3299      maddress = (maddress - 0x0480) / 4;
3300      *(UINT32 *)(&matrix.modelview[maddress]) = data;
3301      countlen--;
3302   }
3303   // inverse modelview matrix
3304   if ((maddress >= 0x0580) && (maddress < 0x05c0)) {
3305      maddress = (maddress - 0x0580) / 4;
3306      *(UINT32 *)(&matrix.modelview_inverse[maddress]) = data;
3307      countlen--;
3308   }
3309   // projection matrix
3310   if ((maddress >= 0x0680) && (maddress < 0x06c0)) {
3311      maddress = (maddress - 0x0680) / 4;
3312      *(UINT32 *)(&matrix.projection[maddress]) = data;
3313      countlen--;
3314   }
3315   // viewport translate
3316   if ((maddress >= 0x0a20) && (maddress < 0x0a30)) {
3317      maddress = (maddress - 0x0a20) / 4;
3318      *(UINT32 *)(&matrix.translate[maddress]) = data;
3319      countlen--;
3320   }
3321   // viewport scale
3322   if ((maddress >= 0x0af0) && (maddress < 0x0b00)) {
3323      maddress = (maddress - 0x0af0) / 4;
3324      *(UINT32 *)(&matrix.scale[maddress]) = data;
3325      countlen--;
3326   }
3327   // Vertex program (shader)
3328   if (maddress == 0x1e94) {
3329      /*if (data == 2)
3330          logerror("Enabled vertex program\n");
3331      else if (data == 4)
3332          logerror("Enabled fixed function pipeline\n");
3333      else if (data == 6)
3334          logerror("Enabled both fixed function pipeline and vertex program ?\n");
3335      else
3336          logerror("Unknown value %d to method 0x1e94\n",data);*/
3337      vertex_pipeline = data & 6;
3338      countlen--;
3339   }
3340   if (maddress == 0x1e9c) {
3341      //logerror("VP_UPLOAD_FROM_ID %d\n",data);
3342      vertexprogram.upload_instruction=data*4;
3343      countlen--;
3344   }
3345   if (maddress == 0x1ea0) {
3346      //logerror("VP_START_FROM_ID %d\n",data);
3347      vertexprogram.instructions=vertexprogram.upload_instruction/4;
3348      vertexprogram.start_instruction = data * 4;
3349      countlen--;
3350   }
3351   if (maddress == 0x1ea4) {
3352      //logerror("VP_UPLOAD_CONST_ID %d\n",data);
3353      vertexprogram.upload_parameter=data*4;
3354      countlen--;
3355   }
3356   if ((maddress >= 0x0b00) && (maddress < 0x0b80)) {
3357      //logerror("VP_UPLOAD_INST\n");
3358      if (vertexprogram.upload_instruction < 1024)
3359         vertexprogram.instruction[vertexprogram.upload_instruction]=data;
3360      else
3361         logerror("Need to increase size of vertexprogram.instruction to %d\n\r", vertexprogram.upload_parameter);
3362      vertexprogram.upload_instruction++;
3363   }
3364   if ((maddress >= 0x0b80) && (maddress < 0x0c00)) {
3365      //logerror("VP_UPLOAD_CONST\n");
3366      if (vertexprogram.upload_parameter < 1024)
3367         *(UINT32 *)(&vertexprogram.parameter[vertexprogram.upload_parameter]) = data;
3368      else
3369         logerror("Need to increase size of vertexprogram.parameter to %d\n\r", vertexprogram.upload_parameter);
3370      vertexprogram.upload_parameter++;
3371   }
3372   // Register combiners
3373   if (maddress == 0x1e60) {
3374      combiner.stages=data & 15;
3375      countlen--;
3376   }
3377   if (maddress == 0x0288) {
3378      combiner.final.mapin_rgbD_input=data & 15;
3379      combiner.final.mapin_rgbD_component=(data >> 4) & 1;
3380      combiner.final.mapin_rgbD_mapping=(data >> 5) & 7;
3381      combiner.final.mapin_rgbC_input=(data >> 8) & 15;
3382      combiner.final.mapin_rgbC_component=(data >> 12) & 1;
3383      combiner.final.mapin_rgbC_mapping=(data >> 13) & 7;
3384      combiner.final.mapin_rgbB_input=(data >> 16) & 15;
3385      combiner.final.mapin_rgbB_component=(data >> 20) & 1;
3386      combiner.final.mapin_rgbB_mapping=(data >> 21) & 7;
3387      combiner.final.mapin_rgbA_input=(data >> 24) & 15;
3388      combiner.final.mapin_rgbA_component=(data >> 28) & 1;
3389      combiner.final.mapin_rgbA_mapping=(data >> 29) & 7;
3390      countlen--;
3391   }
3392   if (maddress == 0x028c) {
3393      combiner.final.color_sum_clamp=(data >> 7) & 1;
3394      combiner.final.mapin_aG_input=(data >> 8) & 15;
3395      combiner.final.mapin_aG_component=(data >> 12) & 1;
3396      combiner.final.mapin_aG_mapping=(data >> 13) & 7;
3397      combiner.final.mapin_rgbF_input=(data >> 16) & 15;
3398      combiner.final.mapin_rgbF_component=(data >> 20) & 1;
3399      combiner.final.mapin_rgbF_mapping=(data >> 21) & 7;
3400      combiner.final.mapin_rgbE_input=(data >> 24) & 15;
3401      combiner.final.mapin_rgbE_component=(data >> 28) & 1;
3402      combiner.final.mapin_rgbE_mapping=(data >> 29) & 7;
3403      countlen--;
3404   }
3405   if (maddress == 0x1e20) {
3406      combiner_argb8_float(data,combiner.final.register_constantcolor0);
3407      countlen--;
3408   }
3409   if (maddress == 0x1e24) {
3410      combiner_argb8_float(data,combiner.final.register_constantcolor1);
3411      countlen--;
3412   }
3413   if ((maddress >= 0x0260) && (maddress < 0x0280)) {
3414      int n;
3415
3416      n=(maddress-0x0260) >> 2;
3417      combiner.stage[n].mapin_aD_input=data & 15;
3418      combiner.stage[n].mapin_aD_component=(data >> 4) & 1;
3419      combiner.stage[n].mapin_aD_mapping=(data >> 5) & 7;
3420      combiner.stage[n].mapin_aC_input=(data >> 8) & 15;
3421      combiner.stage[n].mapin_aC_component=(data >> 12) & 1;
3422      combiner.stage[n].mapin_aC_mapping=(data >> 13) & 7;
3423      combiner.stage[n].mapin_aB_input=(data >> 16) & 15;
3424      combiner.stage[n].mapin_aB_component=(data >> 20) & 1;
3425      combiner.stage[n].mapin_aB_mapping=(data >> 21) & 7;
3426      combiner.stage[n].mapin_aA_input=(data >> 24) & 15;
3427      combiner.stage[n].mapin_aA_component=(data >> 28) & 1;
3428      combiner.stage[n].mapin_aA_mapping=(data >> 29) & 7;
3429      countlen--;
3430   }
3431   if ((maddress >= 0x0ac0) && (maddress < 0x0ae0)) {
3432      int n;
3433
3434      n=(maddress-0x0ac0) >> 2;
3435      combiner.stage[n].mapin_rgbD_input=data & 15;
3436      combiner.stage[n].mapin_rgbD_component=(data >> 4) & 1;
3437      combiner.stage[n].mapin_rgbD_mapping=(data >> 5) & 7;
3438      combiner.stage[n].mapin_rgbC_input=(data >> 8) & 15;
3439      combiner.stage[n].mapin_rgbC_component=(data >> 12) & 1;
3440      combiner.stage[n].mapin_rgbC_mapping=(data >> 13) & 7;
3441      combiner.stage[n].mapin_rgbB_input=(data >> 16) & 15;
3442      combiner.stage[n].mapin_rgbB_component=(data >> 20) & 1;
3443      combiner.stage[n].mapin_rgbB_mapping=(data >> 21) & 7;
3444      combiner.stage[n].mapin_rgbA_input=(data >> 24) & 15;
3445      combiner.stage[n].mapin_rgbA_component=(data >> 28) & 1;
3446      combiner.stage[n].mapin_rgbA_mapping=(data >> 29) & 7;
3447      countlen--;
3448   }
3449   if ((maddress >= 0x0a60) && (maddress < 0x0a80)) {
3450      int n;
3451
3452      n=(maddress-0x0a60) >> 2;
3453      combiner_argb8_float(data,combiner.stage[n].register_constantcolor0);
3454      countlen--;
3455   }
3456   if ((maddress >= 0x0a80) && (maddress < 0x0aa0)) {
3457      int n;
3458
3459      n=(maddress-0x0a80) >> 2;
3460      combiner_argb8_float(data,combiner.stage[n].register_constantcolor1);
3461      countlen--;
3462   }
3463   if ((maddress >= 0x0aa0) && (maddress < 0x0ac0)) {
3464      int n;
3465
3466      n=(maddress-0x0aa0) >> 2;
3467      combiner.stage[n].mapout_aCD_output=data & 15;
3468      combiner.stage[n].mapout_aAB_output=(data >> 4) & 15;
3469      combiner.stage[n].mapout_aSUM_output=(data >> 8) & 15;
3470      combiner.stage[n].mapout_aCD_dotproduct=(data >> 12) & 1;
3471      combiner.stage[n].mapout_aAB_dotproduct=(data >> 13) & 1;
3472      combiner.stage[n].mapout_a_muxsum=(data >> 14) & 1;
3473      combiner.stage[n].mapout_a_bias=(data >> 15) & 1;
3474      combiner.stage[n].mapout_a_scale=(data >> 16) & 3;
3475      //combiner.=(data >> 27) & 7;
3476      countlen--;
3477   }
3478   if ((maddress >= 0x1e40) && (maddress < 0x1e60)) {
3479      int n;
3480
3481      n=(maddress-0x1e40) >> 2;
3482      combiner.stage[n].mapout_rgbCD_output=data & 15;
3483      combiner.stage[n].mapout_rgbAB_output=(data >> 4) & 15;
3484      combiner.stage[n].mapout_rgbSUM_output=(data >> 8) & 15;
3485      combiner.stage[n].mapout_rgbCD_dotproduct=(data >> 12) & 1;
3486      combiner.stage[n].mapout_rgbAB_dotproduct=(data >> 13) & 1;
3487      combiner.stage[n].mapout_rgb_muxsum=(data >> 14) & 1;
3488      combiner.stage[n].mapout_rgb_bias=(data >> 15) & 1;
3489      combiner.stage[n].mapout_rgb_scale=(data >> 16) & 3;
3490      //combiner.=(data >> 27) & 7;
3491      countlen--;
3492   }
3493}
3494
3495int nv2a_renderer::toggle_register_combiners_usage()
3496{
3497   combiner.used=1-combiner.used;
3498   return combiner.used;
3499}
3500
3501void nv2a_renderer::debug_grab_texture(int type, const char *filename)
3502{
3503   debug_grab_texttype = type;
3504   if (debug_grab_textfile == NULL)
3505      debug_grab_textfile = (char *)malloc(128);
3506   strncpy(debug_grab_textfile, filename, 127);
3507}
3508
3509void nv2a_renderer::debug_grab_vertex_program_slot(int slot, UINT32 *instruction)
3510{
3511   if (slot >= 1024 / 4)
3512      return;
3513   instruction[0] = vertexprogram.instruction[slot * 4 + 0];
3514   instruction[1] = vertexprogram.instruction[slot * 4 + 1];
3515   instruction[2] = vertexprogram.instruction[slot * 4 + 2];
3516   instruction[3] = vertexprogram.instruction[slot * 4 + 3];
3517}
3518
3519void nv2a_renderer::savestate_items()
3520{
3521}
3522
3523void nv2a_renderer::combiner_argb8_float(UINT32 color,float reg[4])
3524{
3525   reg[0]=(float)(color & 0xff)/255.0;
3526   reg[1]=(float)((color >> 8) & 0xff)/255.0;
3527   reg[2]=(float)((color >> 16) & 0xff)/255.0;
3528   reg[3]=(float)((color >> 24) & 0xff)/255.0;
3529}
3530
3531UINT32 nv2a_renderer::combiner_float_argb8(float reg[4])
3532{
3533   UINT32 r,g,b,a;
3534
3535   a=reg[3]*255.0;
3536   b=reg[2]*255.0;
3537   g=reg[1]*255.0;
3538   r=reg[0]*255.0;
3539   return (a << 24) | (r << 16) | (g << 8) | b;
3540}
3541
3542float nv2a_renderer::combiner_map_input_select(int code,int index)
3543{
3544   switch (code) {
3545      case 0:
3546      default:
3547         return combiner.register_zero[index];
3548      case 1:
3549         return combiner.register_color0[index];
3550      case 2:
3551         return combiner.register_color1[index];
3552      case 3:
3553         return combiner.register_fogcolor[index];
3554      case 4:
3555         return combiner.register_primarycolor[index];
3556      case 5:
3557         return combiner.register_secondarycolor[index];
3558      case 8:
3559         return combiner.register_texture0color[index];
3560      case 9:
3561         return combiner.register_texture1color[index];
3562      case 10:
3563         return combiner.register_texture2color[index];
3564      case 11:
3565         return combiner.register_texture3color[index];
3566      case 12:
3567         return combiner.register_spare0[index];
3568      case 13:
3569         return combiner.register_spare1[index];
3570      case 14:
3571         return combiner.variable_sumclamp[index];
3572      case 15:
3573         return combiner.variable_EF[index];
3574   }
3575
3576   // never executed
3577   //return 0;
3578}
3579
3580float *nv2a_renderer::combiner_map_input_select3(int code)
3581{
3582   switch (code) {
3583      case 0:
3584      default:
3585         return combiner.register_zero;
3586      case 1:
3587         return combiner.register_color0;
3588      case 2:
3589         return combiner.register_color1;
3590      case 3:
3591         return combiner.register_fogcolor;
3592      case 4:
3593         return combiner.register_primarycolor;
3594      case 5:
3595         return combiner.register_secondarycolor;
3596      case 8:
3597         return combiner.register_texture0color;
3598      case 9:
3599         return combiner.register_texture1color;
3600      case 10:
3601         return combiner.register_texture2color;
3602      case 11:
3603         return combiner.register_texture3color;
3604      case 12:
3605         return combiner.register_spare0;
3606      case 13:
3607         return combiner.register_spare1;
3608      case 14:
3609         return combiner.variable_sumclamp;
3610      case 15:
3611         return combiner.variable_EF;
3612   }
3613
3614   // never executed
3615   //return 0;
3616}
3617
3618float *nv2a_renderer::combiner_map_output_select3(int code)
3619{
3620   switch (code) {
3621      case 0:
3622         return 0;
3623      case 1:
3624         return 0;
3625      case 2:
3626         return 0;
3627      case 3:
3628         return 0;
3629      case 4:
3630         return combiner.register_primarycolor;
3631      case 5:
3632         return combiner.register_secondarycolor;
3633      case 8:
3634         return combiner.register_texture0color;
3635      case 9:
3636         return combiner.register_texture1color;
3637      case 10:
3638         return combiner.register_texture2color;
3639      case 11:
3640         return combiner.register_texture3color;
3641      case 12:
3642         return combiner.register_spare0;
3643      case 13:
3644         return combiner.register_spare1;
3645      case 14:
3646         return 0;
3647      case 15:
3648      default:
3649         return 0;
3650   }
3651}
3652
3653float nv2a_renderer::combiner_map_input_function(int code,float value)
3654{
3655   float t;
3656
3657   switch (code) {
3658      case 0:
3659         return MAX(0.0,value);
3660      case 1:
3661         t=MAX(value, 0.0);
3662         return 1.0 - MIN(t, 1.0);
3663      case 2:
3664         return 2.0 * MAX(0.0, value) - 1.0;
3665      case 3:
3666         return -2.0 * MAX(0.0, value) + 1.0;
3667      case 4:
3668         return MAX(0.0, value) - 0.5;
3669      case 5:
3670         return -MAX(0.0, value) + 0.5;
3671      case 6:
3672         return value;
3673      case 7:
3674      default:
3675         return -value;
3676   }
3677
3678   // never executed
3679   //return 0;
3680}
3681
3682void nv2a_renderer::combiner_map_input_function3(int code,float *data)
3683{
3684   float t;
3685
3686   switch (code) {
3687      case 0:
3688         data[0]=MAX(0.0,data[0]);
3689         data[1]=MAX(0.0,data[1]);
3690         data[2]=MAX(0.0,data[2]);
3691      break;
3692      case 1:
3693         t=MAX(data[0], 0.0);
3694         data[0]=1.0 - MIN(t, 1.0);
3695         t=MAX(data[1], 0.0);
3696         data[1]=1.0 - MIN(t, 1.0);
3697         t=MAX(data[2], 0.0);
3698         data[2]=1.0 - MIN(t, 1.0);
3699      break;
3700      case 2:
3701         data[0]=2.0 * MAX(0.0, data[0]) - 1.0;
3702         data[1]=2.0 * MAX(0.0, data[1]) - 1.0;
3703         data[2]=2.0 * MAX(0.0, data[2]) - 1.0;
3704      break;
3705      case 3:
3706         data[0]=-2.0 * MAX(0.0, data[0]) + 1.0;
3707         data[1]=-2.0 * MAX(0.0, data[1]) + 1.0;
3708         data[2]=-2.0 * MAX(0.0, data[2]) + 1.0;
3709      break;
3710      case 4:
3711         data[0]=MAX(0.0, data[0]) - 0.5;
3712         data[1]=MAX(0.0, data[1]) - 0.5;
3713         data[2]=MAX(0.0, data[2]) - 0.5;
3714      break;
3715      case 5:
3716         data[0]=-MAX(0.0, data[0]) + 0.5;
3717         data[1]=-MAX(0.0, data[1]) + 0.5;
3718         data[2]=-MAX(0.0, data[2]) + 0.5;
3719      break;
3720      case 6:
3721         return;
3722      case 7:
3723      default:
3724         data[0]=-data[0];
3725         data[1]=-data[1];
3726         data[2]=-data[2];
3727      break;
3728   }
3729}
3730
3731void nv2a_renderer::combiner_initialize_registers(UINT32 argb8[6])
3732{
3733   combiner_argb8_float(argb8[0],combiner.register_primarycolor);
3734   combiner_argb8_float(argb8[1],combiner.register_secondarycolor);
3735   combiner_argb8_float(argb8[2],combiner.register_texture0color);
3736   combiner_argb8_float(argb8[3],combiner.register_texture1color);
3737   combiner_argb8_float(argb8[4],combiner.register_texture2color);
3738   combiner_argb8_float(argb8[5],combiner.register_texture3color);
3739   combiner.register_spare0[3]=combiner.register_texture0color[3];
3740   combiner.register_zero[0]=combiner.register_zero[1]=combiner.register_zero[2]=combiner.register_zero[3]=0;
3741}
3742
3743void nv2a_renderer::combiner_initialize_stage(int stage_number)
3744{
3745   int n=stage_number;
3746
3747   // put register_constantcolor0 in register_color0
3748   combiner.register_color0[0]=combiner.stage[n].register_constantcolor0[0];
3749   combiner.register_color0[1]=combiner.stage[n].register_constantcolor0[1];
3750   combiner.register_color0[2]=combiner.stage[n].register_constantcolor0[2];
3751   combiner.register_color0[3]=combiner.stage[n].register_constantcolor0[3];
3752   // put register_constantcolor1 in register_color1
3753   combiner.register_color1[0]=combiner.stage[n].register_constantcolor1[0];
3754   combiner.register_color1[1]=combiner.stage[n].register_constantcolor1[1];
3755   combiner.register_color1[2]=combiner.stage[n].register_constantcolor1[2];
3756   combiner.register_color1[3]=combiner.stage[n].register_constantcolor1[3];
3757}
3758
3759void nv2a_renderer::combiner_initialize_final()
3760{
3761   // put register_constantcolor0 in register_color0
3762   combiner.register_color0[0]=combiner.final.register_constantcolor0[0];
3763   combiner.register_color0[1]=combiner.final.register_constantcolor0[1];
3764   combiner.register_color0[2]=combiner.final.register_constantcolor0[2];
3765   combiner.register_color0[3]=combiner.final.register_constantcolor0[3];
3766   // put register_constantcolor1 in register_color1
3767   combiner.register_color1[0]=combiner.final.register_constantcolor1[0];
3768   combiner.register_color1[1]=combiner.final.register_constantcolor1[1];
3769   combiner.register_color1[2]=combiner.final.register_constantcolor1[2];
3770   combiner.register_color1[3]=combiner.final.register_constantcolor1[3];
3771}
3772
3773void nv2a_renderer::combiner_map_input(int stage_number)
3774{
3775   int n=stage_number;
3776   int c,d,i;
3777   float v,*pv;
3778
3779   // A
3780   v=combiner_map_input_select(combiner.stage[n].mapin_aA_input,2+combiner.stage[n].mapin_aA_component);
3781   combiner.variable_A[3]=combiner_map_input_function(combiner.stage[n].mapin_aA_mapping,v);
3782   // B
3783   v=combiner_map_input_select(combiner.stage[n].mapin_aB_input,2+combiner.stage[n].mapin_aB_component);
3784   combiner.variable_B[3]=combiner_map_input_function(combiner.stage[n].mapin_aB_mapping,v);
3785   // C
3786   v=combiner_map_input_select(combiner.stage[n].mapin_aC_input,2+combiner.stage[n].mapin_aC_component);
3787   combiner.variable_C[3]=combiner_map_input_function(combiner.stage[n].mapin_aC_mapping,v);
3788   // D
3789   v=combiner_map_input_select(combiner.stage[n].mapin_aD_input,2+combiner.stage[n].mapin_aD_component);
3790   combiner.variable_D[3]=combiner_map_input_function(combiner.stage[n].mapin_aD_mapping,v);
3791
3792   // A
3793   pv=combiner_map_input_select3(combiner.stage[n].mapin_rgbA_input);
3794   c=combiner.stage[n].mapin_rgbA_component*3;
3795   i=~combiner.stage[n].mapin_rgbA_component & 1;
3796   for (d=0;d < 3;d++) {
3797      combiner.variable_A[d]=pv[c];
3798      c=c+i;
3799   }
3800   combiner_map_input_function3(combiner.stage[n].mapin_rgbA_mapping,combiner.variable_A);
3801   // B
3802   pv=combiner_map_input_select3(combiner.stage[n].mapin_rgbB_input);
3803   c=combiner.stage[n].mapin_rgbB_component*3;
3804   i=~combiner.stage[n].mapin_rgbB_component & 1;
3805   for (d=0;d < 3;d++) {
3806      combiner.variable_B[d]=pv[c];
3807      c=c+i;
3808   }
3809   combiner_map_input_function3(combiner.stage[n].mapin_rgbB_mapping,combiner.variable_B);
3810   // C
3811   pv=combiner_map_input_select3(combiner.stage[n].mapin_rgbC_input);
3812   c=combiner.stage[n].mapin_rgbC_component*3;
3813   i=~combiner.stage[n].mapin_rgbC_component & 1;
3814   for (d=0;d < 3;d++) {
3815      combiner.variable_C[d]=pv[c];
3816      c=c+i;
3817   }
3818   combiner_map_input_function3(combiner.stage[n].mapin_rgbC_mapping,combiner.variable_C);
3819   // D
3820   pv=combiner_map_input_select3(combiner.stage[n].mapin_rgbD_input);
3821   c=combiner.stage[n].mapin_rgbD_component*3;
3822   i=~combiner.stage[n].mapin_rgbD_component & 1;
3823   for (d=0;d < 3;d++) {
3824      combiner.variable_D[d]=pv[c];
3825      c=c+i;
3826   }
3827   combiner_map_input_function3(combiner.stage[n].mapin_rgbD_mapping,combiner.variable_D);
3828}
3829
3830void nv2a_renderer::combiner_map_output(int stage_number)
3831{
3832   int n=stage_number;
3833   float *f;
3834
3835   // rgb
3836   f=combiner_map_output_select3(combiner.stage[n].mapout_rgbAB_output);
3837   if (f) {
3838      f[0]=combiner.function_RGBop1[0];
3839      f[1]=combiner.function_RGBop1[1];
3840      f[2]=combiner.function_RGBop1[2];
3841   }
3842   f=combiner_map_output_select3(combiner.stage[n].mapout_rgbCD_output);
3843   if (f) {
3844      f[0]=combiner.function_RGBop2[0];
3845      f[1]=combiner.function_RGBop2[1];
3846      f[2]=combiner.function_RGBop2[2];
3847   }
3848   if ((combiner.stage[n].mapout_rgbAB_dotproduct | combiner.stage[n].mapout_rgbCD_dotproduct) == 0) {
3849      f=combiner_map_output_select3(combiner.stage[n].mapout_rgbSUM_output);
3850      if (f) {
3851         f[0]=combiner.function_RGBop3[0];
3852         f[1]=combiner.function_RGBop3[1];
3853         f[2]=combiner.function_RGBop3[2];
3854      }
3855   }
3856   // a
3857   f=combiner_map_output_select3(combiner.stage[n].mapout_aAB_output);
3858   if (f)
3859      f[3]=combiner.function_Aop1;
3860   f=combiner_map_output_select3(combiner.stage[n].mapout_aCD_output);
3861   if (f)
3862      f[3]=combiner.function_Aop2;
3863   f=combiner_map_output_select3(combiner.stage[n].mapout_aSUM_output);
3864   if (f)
3865      f[3]=combiner.function_Aop3;
3866}
3867
3868void nv2a_renderer::combiner_map_final_input()
3869{
3870   int i,c,d;
3871   float *pv;
3872
3873   // E
3874   pv=combiner_map_input_select3(combiner.final.mapin_rgbE_input);
3875   c=combiner.final.mapin_rgbE_component*3;
3876   i=~combiner.final.mapin_rgbE_component & 1;
3877   for (d=0;d < 3;d++) {
3878      combiner.variable_E[d]=pv[c];
3879      c=c+i;
3880   }
3881   combiner_map_input_function3(combiner.final.mapin_rgbE_mapping,combiner.variable_E);
3882   // F
3883   pv=combiner_map_input_select3(combiner.final.mapin_rgbF_input);
3884   c=combiner.final.mapin_rgbF_component*3;
3885   i=~combiner.final.mapin_rgbF_component & 1;
3886   for (d=0;d < 3;d++) {
3887      combiner.variable_F[d]=pv[c];
3888      c=c+i;
3889   }
3890   combiner_map_input_function3(combiner.final.mapin_rgbF_mapping,combiner.variable_F);
3891   // EF
3892   combiner.variable_EF[0]=combiner.variable_E[0]*combiner.variable_F[0];
3893   combiner.variable_EF[1]=combiner.variable_E[1]*combiner.variable_F[1];
3894   combiner.variable_EF[2]=combiner.variable_E[2]*combiner.variable_F[2];
3895   // sumclamp
3896   combiner.variable_sumclamp[0]=MAX(0,combiner.register_spare0[0])+MAX(0,combiner.register_secondarycolor[0]);
3897   combiner.variable_sumclamp[1]=MAX(0,combiner.register_spare0[1])+MAX(0,combiner.register_secondarycolor[1]);
3898   combiner.variable_sumclamp[2]=MAX(0,combiner.register_spare0[2])+MAX(0,combiner.register_secondarycolor[2]);
3899   if (combiner.final.color_sum_clamp != 0) {
3900      combiner.variable_sumclamp[0]=MIN(combiner.variable_sumclamp[0],1.0);
3901      combiner.variable_sumclamp[1]=MIN(combiner.variable_sumclamp[1],1.0);
3902      combiner.variable_sumclamp[2]=MIN(combiner.variable_sumclamp[2],1.0);
3903   }
3904   // A
3905   pv=combiner_map_input_select3(combiner.final.mapin_rgbA_input);
3906   c=combiner.final.mapin_rgbA_component*3;
3907   i=~combiner.final.mapin_rgbA_component & 1;
3908   for (d=0;d < 3;d++) {
3909      combiner.variable_A[d]=pv[c];
3910      c=c+i;
3911   }
3912   combiner_map_input_function3(combiner.final.mapin_rgbA_mapping,combiner.variable_A);
3913   // B
3914   pv=combiner_map_input_select3(combiner.final.mapin_rgbB_input);
3915   c=combiner.final.mapin_rgbB_component*3;
3916   i=~combiner.final.mapin_rgbB_component & 1;
3917   for (d=0;d < 3;d++) {
3918      combiner.variable_B[d]=pv[c];
3919      c=c+i;
3920   }
3921   combiner_map_input_function3(combiner.final.mapin_rgbB_mapping,combiner.variable_B);
3922   // C
3923   pv=combiner_map_input_select3(combiner.final.mapin_rgbC_input);
3924   c=combiner.final.mapin_rgbC_component*3;
3925   i=~combiner.final.mapin_rgbC_component & 1;
3926   for (d=0;d < 3;d++) {
3927      combiner.variable_C[d]=pv[c];
3928      c=c+i;
3929   }
3930   combiner_map_input_function3(combiner.final.mapin_rgbC_mapping,combiner.variable_C);
3931   // D
3932   pv=combiner_map_input_select3(combiner.final.mapin_rgbD_input);
3933   c=combiner.final.mapin_rgbD_component*3;
3934   i=~combiner.final.mapin_rgbD_component & 1;
3935   for (d=0;d < 3;d++) {
3936      combiner.variable_D[d]=pv[c];
3937      c=c+i;
3938   }
3939   combiner_map_input_function3(combiner.final.mapin_rgbD_mapping,combiner.variable_D);
3940   // G
3941   combiner.variable_G=combiner_map_input_select(combiner.final.mapin_aG_input,2+combiner.final.mapin_aG_component);
3942}
3943
3944void nv2a_renderer::combiner_final_output()
3945{
3946   // rgb
3947   combiner.output[0]=combiner.variable_A[0]*combiner.variable_B[0]+(1.0-combiner.variable_A[0])*combiner.variable_C[0]+combiner.variable_D[0];
3948   combiner.output[1]=combiner.variable_A[1]*combiner.variable_B[1]+(1.0-combiner.variable_A[1])*combiner.variable_C[1]+combiner.variable_D[1];
3949   combiner.output[2]=combiner.variable_A[2]*combiner.variable_B[2]+(1.0-combiner.variable_A[2])*combiner.variable_C[2]+combiner.variable_D[2];
3950   combiner.output[0]=MIN(combiner.output[0],1.0);
3951   combiner.output[1]=MIN(combiner.output[1],1.0);
3952   combiner.output[2]=MIN(combiner.output[2],1.0);
3953   // a
3954   combiner.output[3]=combiner_map_input_function(combiner.final.mapin_aG_mapping,combiner.variable_G);
3955}
3956
3957void nv2a_renderer::combiner_function_AB(float result[4])
3958{
3959   result[0]=combiner.variable_A[0]*combiner.variable_B[0];
3960   result[1]=combiner.variable_A[1]*combiner.variable_B[1];
3961   result[2]=combiner.variable_A[2]*combiner.variable_B[2];
3962}
3963
3964void nv2a_renderer::combiner_function_AdotB(float result[4])
3965{
3966   result[0]=combiner.variable_A[0]*combiner.variable_B[0]+combiner.variable_A[1]*combiner.variable_B[1]+combiner.variable_A[2]*combiner.variable_B[2];
3967   result[1]=result[0];
3968   result[2]=result[0];
3969}
3970
3971void nv2a_renderer::combiner_function_CD(float result[4])
3972{
3973   result[0]=combiner.variable_C[0]*combiner.variable_D[0];
3974   result[1]=combiner.variable_C[1]*combiner.variable_D[1];
3975   result[2]=combiner.variable_C[2]*combiner.variable_D[2];
3976}
3977
3978void nv2a_renderer::combiner_function_CdotD(float result[4])
3979{
3980   result[0]=combiner.variable_C[0]*combiner.variable_D[0]+combiner.variable_C[1]*combiner.variable_D[1]+combiner.variable_C[2]*combiner.variable_D[2];
3981   result[1]=result[0];
3982   result[2]=result[0];
3983}
3984
3985void nv2a_renderer::combiner_function_ABmuxCD(float result[4])
3986{
3987   if (combiner.register_spare0[3] >= 0.5)
3988      combiner_function_AB(result);
3989   else
3990      combiner_function_CD(result);
3991}
3992
3993void nv2a_renderer::combiner_function_ABsumCD(float result[4])
3994{
3995   result[0]=combiner.variable_A[0]*combiner.variable_B[0]+combiner.variable_C[0]*combiner.variable_D[0];
3996   result[1]=combiner.variable_A[1]*combiner.variable_B[1]+combiner.variable_C[1]*combiner.variable_D[1];
3997   result[2]=combiner.variable_A[2]*combiner.variable_B[2]+combiner.variable_C[2]*combiner.variable_D[2];
3998}
3999
4000void nv2a_renderer::combiner_compute_rgb_outputs(int stage_number)
4001{
4002   int n=stage_number;
4003   int m;
4004   float biasrgb,scalergb;
4005
4006   if (combiner.stage[n].mapout_rgb_bias)
4007      biasrgb= -0.5;
4008   else
4009      biasrgb=0;
4010   switch (combiner.stage[n].mapout_rgb_scale) {
4011      case 0:
4012      default:
4013         scalergb=1.0;
4014      break;
4015      case 1:
4016         scalergb=2.0;
4017      break;
4018      case 2:
4019         scalergb=4.0;
4020      break;
4021      case 3:
4022         scalergb=0.5;
4023      break;
4024   }
4025   if (combiner.stage[n].mapout_rgbAB_dotproduct) {
4026      m=1;
4027      combiner_function_AdotB(combiner.function_RGBop1);
4028   } else {
4029      m=0;
4030      combiner_function_AB(combiner.function_RGBop1);
4031      }
4032   combiner.function_RGBop1[0]=MAX(MIN((combiner.function_RGBop1[0] + biasrgb) * scalergb, 1.0), -1.0);
4033   combiner.function_RGBop1[1]=MAX(MIN((combiner.function_RGBop1[1] + biasrgb) * scalergb, 1.0), -1.0);
4034   combiner.function_RGBop1[2]=MAX(MIN((combiner.function_RGBop1[2] + biasrgb) * scalergb, 1.0), -1.0);
4035   if (combiner.stage[n].mapout_rgbCD_dotproduct) {
4036      m=m | 1;
4037      combiner_function_CdotD(combiner.function_RGBop2);
4038   } else
4039      combiner_function_CD(combiner.function_RGBop2);
4040   combiner.function_RGBop2[0]=MAX(MIN((combiner.function_RGBop2[0] + biasrgb) * scalergb, 1.0), -1.0);
4041   combiner.function_RGBop2[1]=MAX(MIN((combiner.function_RGBop2[1] + biasrgb) * scalergb, 1.0), -1.0);
4042   combiner.function_RGBop2[2]=MAX(MIN((combiner.function_RGBop2[2] + biasrgb) * scalergb, 1.0), -1.0);
4043   if (m == 0) {
4044      if (combiner.stage[n].mapout_rgb_muxsum)
4045         combiner_function_ABmuxCD(combiner.function_RGBop3);
4046      else
4047         combiner_function_ABsumCD(combiner.function_RGBop3);
4048      combiner.function_RGBop3[0]=MAX(MIN((combiner.function_RGBop3[0] + biasrgb) * scalergb, 1.0), -1.0);
4049      combiner.function_RGBop3[1]=MAX(MIN((combiner.function_RGBop3[1] + biasrgb) * scalergb, 1.0), -1.0);
4050      combiner.function_RGBop3[2]=MAX(MIN((combiner.function_RGBop3[2] + biasrgb) * scalergb, 1.0), -1.0);
4051   }
4052}
4053
4054void nv2a_renderer::combiner_compute_a_outputs(int stage_number)
4055{
4056   int n=stage_number;
4057   float biasa,scalea;
4058
4059   if (combiner.stage[n].mapout_a_bias)
4060      biasa= -0.5;
4061   else
4062      biasa=0;
4063   switch (combiner.stage[n].mapout_a_scale) {
4064      case 0:
4065      default:
4066         scalea=1.0;
4067      break;
4068      case 1:
4069         scalea=2.0;
4070      break;
4071      case 2:
4072         scalea=4.0;
4073      break;
4074      case 3:
4075         scalea=0.5;
4076      break;
4077   }
4078   combiner.function_Aop1=combiner.variable_A[3]*combiner.variable_B[3];
4079   combiner.function_Aop1=MAX(MIN((combiner.function_Aop1 + biasa) * scalea, 1.0), -1.0);
4080   combiner.function_Aop2=combiner.variable_C[3]*combiner.variable_D[3];
4081   combiner.function_Aop2=MAX(MIN((combiner.function_Aop2 + biasa) * scalea, 1.0), -1.0);
4082   if (combiner.stage[n].mapout_a_muxsum) {
4083      if (combiner.register_spare0[3] >= 0.5)
4084         combiner.function_Aop3=combiner.variable_A[3]*combiner.variable_B[3];
4085      else
4086         combiner.function_Aop3=combiner.variable_C[3]*combiner.variable_D[3];
4087   } else
4088      combiner.function_Aop3=combiner.variable_A[3]*combiner.variable_B[3]+combiner.variable_C[3]*combiner.variable_D[3];
4089   combiner.function_Aop3=MAX(MIN((combiner.function_Aop3 + biasa) * scalea, 1.0), -1.0);
4090}
4091
4092void nv2a_renderer::vblank_callback(screen_device &screen, bool state)
4093{
4094   chihiro_state *chst=machine().driver_data<chihiro_state>();
4095
4096   //printf("vblank_callback\n\r");
4097   if (state == true)
4098      pcrtc[0x100/4] |= 1;
4099   else
4100      pcrtc[0x100/4] &= ~1;
4101   if (pcrtc[0x100/4] & pcrtc[0x140/4])
4102      pmc[0x100/4] |= 0x1000000;
4103   else
4104      pmc[0x100/4] &= ~0x1000000;
4105   if ((pmc[0x100/4] != 0) && (pmc[0x140/4] != 0)) {
4106      // send interrupt
4107      chst->chihiro_devs.pic8259_1->ir3_w(1); // IRQ 3
4108   } else
4109      chst->chihiro_devs.pic8259_1->ir3_w(0); // IRQ 3
4110}
4111
4112UINT32 nv2a_renderer::screen_update_callback(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
4113{
4114   UINT32 *dst=(UINT32 *)bitmap.raw_pixptr(0,0);
4115   UINT32 *src=(UINT32 *)fb.raw_pixptr(0,0);
4116
4117   //printf("updatescreen\n\r");
4118   memcpy(dst,src,bitmap.rowbytes()*bitmap.height());
4119   return 0;
4120}
4121
4122void chihiro_state::debug_generate_irq(int irq,bool active)
4123{
4124901   int state;
4125902
4126903   if (active)
4127904   {
4128      debug_irq_active=true;
4129      debug_irq_number=irq;
4130      state=1;
905      debug_irq_active = true;
906      debug_irq_number = irq;
907      state = 1;
4131908   }
4132909   else
4133910   {
4134      debug_irq_active=false;
4135      state=0;
911      debug_irq_active = false;
912      state = 0;
4136913   }
4137914   switch (irq)
4138915   {
r242231r242232
4186963
4187964void chihiro_state::vblank_callback(screen_device &screen, bool state)
4188965{
4189   nvidia_nv2a->vblank_callback(screen,state);
966   if (nvidia_nv2a->vblank_callback(screen, state))
967      chihiro_devs.pic8259_1->ir3_w(1); // IRQ 3
968   else
969      chihiro_devs.pic8259_1->ir3_w(0); // IRQ 3
4190970}
4191971
4192972UINT32 chihiro_state::screen_update_callback(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
r242231r242232
4194974   return nvidia_nv2a->screen_update_callback(screen, bitmap, cliprect);
4195975}
4196976
4197READ32_MEMBER( nv2a_renderer::geforce_r )
977READ32_MEMBER(chihiro_state::geforce_r)
4198978{
4199static int x,ret;
4200
4201   ret=0;
4202   if (offset == 0x1804f6) {
4203      x = x ^ 0x08080808;
4204      ret=x;
4205   }
4206   if ((offset >= 0x00101000/4) && (offset < 0x00102000/4)) {
4207      //logerror("NV_2A: read STRAPS[%06X] mask %08X value %08X\n",offset*4-0x00101000,mem_mask,ret);
4208   } else if ((offset >= 0x00002000/4) && (offset < 0x00004000/4)) {
4209      ret=pfifo[offset-0x00002000/4];
4210      // PFIFO.CACHE1.STATUS or PFIFO.RUNOUT_STATUS
4211      if ((offset == 0x3214/4) || (offset == 0x2400/4))
4212         ret=0x10;
4213      //logerror("NV_2A: read PFIFO[%06X] value %08X\n",offset*4-0x00002000,ret);
4214   } else if ((offset >= 0x00700000/4) && (offset < 0x00800000/4)) {
4215      ret=ramin[offset-0x00700000/4];
4216      //logerror("NV_2A: read PRAMIN[%06X] value %08X\n",offset*4-0x00700000,ret);
4217   } else if ((offset >= 0x00400000/4) && (offset < 0x00402000/4)) {
4218      //logerror("NV_2A: read PGRAPH[%06X] value %08X\n",offset*4-0x00400000,ret);
4219   } else if ((offset >= 0x00600000/4) && (offset < 0x00601000/4)) {
4220      ret=pcrtc[offset-0x00600000/4];
4221      //logerror("NV_2A: read PCRTC[%06X] value %08X\n",offset*4-0x00600000,ret);
4222   } else if ((offset >= 0x00000000/4) && (offset < 0x00001000/4)) {
4223      ret=pmc[offset-0x00000000/4];
4224      //logerror("NV_2A: read PMC[%06X] value %08X\n",offset*4-0x00000000,ret);
4225   } else if ((offset >= 0x00800000/4) && (offset < 0x00900000/4)) {
4226      // 32 channels size 0x10000 each, 8 subchannels per channel size 0x2000 each
4227      int chanel,subchannel,suboffset;
4228
4229      suboffset=offset-0x00800000/4;
4230      chanel=(suboffset >> (16-2)) & 31;
4231      subchannel=(suboffset >> (13-2)) & 7;
4232      suboffset=suboffset & 0x7ff;
4233      if (suboffset < 0x80/4)
4234         ret=channel[chanel][subchannel].regs[suboffset];
4235      //logerror("NV_2A: read channel[%02X,%d,%04X]=%08X\n",chanel,subchannel,suboffset*4,ret);
4236      return ret;
4237   } else ;
4238      //logerror("NV_2A: read at %08X mask %08X value %08X\n",0xfd000000+offset*4,mem_mask,ret);
4239   return ret;
979   return nvidia_nv2a->geforce_r(space, offset, mem_mask);
4240980}
4241981
4242WRITE32_MEMBER( nv2a_renderer::geforce_w )
982WRITE32_MEMBER(chihiro_state::geforce_w)
4243983{
4244   if ((offset >= 0x00101000/4) && (offset < 0x00102000/4)) {
4245      //logerror("NV_2A: write STRAPS[%06X] mask %08X value %08X\n",offset*4-0x00101000,mem_mask,data);
4246   } else if ((offset >= 0x00002000/4) && (offset < 0x00004000/4)) {
4247      COMBINE_DATA(pfifo+offset-0x00002000/4);
4248      //logerror("NV_2A: read PFIFO[%06X]=%08X\n",offset*4-0x00002000,data & mem_mask); // 2210 pfifo ramht & 1f0 << 12
4249   } else if ((offset >= 0x00700000/4) && (offset < 0x00800000/4)) {
4250      COMBINE_DATA(ramin+offset-0x00700000/4);
4251      //logerror("NV_2A: write PRAMIN[%06X]=%08X\n",offset*4-0x00700000,data & mem_mask);
4252   } else if ((offset >= 0x00400000/4) && (offset < 0x00402000/4)) {
4253      //logerror("NV_2A: write PGRAPH[%06X]=%08X\n",offset*4-0x00400000,data & mem_mask);
4254   } else if ((offset >= 0x00600000/4) && (offset < 0x00601000/4)) {
4255      COMBINE_DATA(pcrtc+offset-0x00600000/4);
4256      //logerror("NV_2A: write PCRTC[%06X]=%08X\n",offset*4-0x00600000,data & mem_mask);
4257   } else if ((offset >= 0x00000000/4) && (offset < 0x00001000/4)) {
4258      COMBINE_DATA(pmc+offset-0x00000000/4);
4259      //logerror("NV_2A: write PMC[%06X]=%08X\n",offset*4-0x00000000,data & mem_mask);
4260   } else if ((offset >= 0x00800000/4) && (offset < 0x00900000/4)) {
4261      // 32 channels size 0x10000 each, 8 subchannels per channel size 0x2000 each
4262      int chanel,subchannel,suboffset;
4263      int method,count,handle,objclass;
4264#ifdef LOG_NV2A
4265      int subch;
4266#endif
4267
4268      suboffset=offset-0x00800000/4;
4269      chanel=(suboffset >> (16-2)) & 31;
4270      subchannel=(suboffset >> (13-2)) & 7;
4271      suboffset=suboffset & 0x7ff;
4272      //logerror("NV_2A: write channel[%02X,%d,%04X]=%08X\n",chanel,subchannel,suboffset*4,data & mem_mask);
4273      if (suboffset >= 0x80/4)
4274         return;
4275      COMBINE_DATA(&channel[chanel][subchannel].regs[suboffset]);
4276      if ((suboffset == 0x40/4) || (suboffset == 0x44/4)) { // DMA_PUT or DMA_GET
4277         UINT32 *dmaput,*dmaget;
4278         UINT32 cmd,cmdtype;
4279         int countlen;
4280
4281         dmaput=&channel[chanel][subchannel].regs[0x40/4];
4282         dmaget=&channel[chanel][subchannel].regs[0x44/4];
4283         //printf("dmaget %08X dmaput %08X\n\r",*dmaget,*dmaput);
4284         if ((*dmaput == 0x048cf000) && (*dmaget == 0x07f4d000))
4285            *dmaget = *dmaput;
4286         while (*dmaget != *dmaput) {
4287            cmd=space.read_dword(*dmaget);
4288            *dmaget += 4;
4289            cmdtype=geforce_commandkind(cmd);
4290            switch (cmdtype)
4291            {
4292               case 6: // jump
4293#ifdef LOG_NV2A
4294                  printf("jump dmaget %08X",*dmaget);
4295#endif
4296                  *dmaget=cmd & 0xfffffffc;
4297#ifdef LOG_NV2A
4298                  printf(" -> %08X\n\r",*dmaget);
4299#endif
4300                  break;
4301               case 0: // increasing method
4302                  method=(cmd >> 2) & 2047; // method*4 is address // if method >= 0x40 send it to assigned object
4303#ifdef LOG_NV2A
4304                  subch=(cmd >> 13) & 7;
4305#endif
4306                  count=(cmd >> 18) & 2047;
4307                  if ((method == 0) && (count == 1)) {
4308                     handle=space.read_dword(*dmaget);
4309                     handle=geforce_object_offset(handle);
4310#ifdef LOG_NV2A
4311                     logerror("  assign to subchannel %d object at %d\n",subch,handle);
4312#endif
4313                     channel[chanel][subchannel].object.objhandle=handle;
4314                     handle=ramin[handle/4];
4315                     objclass=handle & 0xff;
4316                     channel[chanel][subchannel].object.objclass=objclass;
4317                     *dmaget += 4;
4318                  } else {
4319#ifdef LOG_NV2A
4320                     logerror("  subch. %d method %04x offset %04x count %d\n",subch,method,method*4,count);
4321#endif
4322                     while (count > 0) {
4323                        countlen=1;
4324                        geforce_exec_method(space,chanel,subchannel,method,*dmaget,countlen);
4325                        count--;
4326                        method++;
4327                        *dmaget += 4;
4328                     }
4329                  }
4330                  break;
4331               case 5: // non-increasing method
4332                  method=(cmd >> 2) & 2047;
4333#ifdef LOG_NV2A
4334                  subch=(cmd >> 13) & 7;
4335#endif
4336                  count=(cmd >> 18) & 2047;
4337                  if ((method == 0) && (count == 1)) {
4338#ifdef LOG_NV2A
4339                     logerror("  assign channel %d\n",subch);
4340#endif
4341                     handle=space.read_dword(*dmaget);
4342                     handle=geforce_object_offset(handle);
4343#ifdef LOG_NV2A
4344                     logerror("  assign to subchannel %d object at %d\n",subch,handle);
4345#endif
4346                     channel[chanel][subchannel].object.objhandle=handle;
4347                     handle=ramin[handle/4];
4348                     objclass=handle & 0xff;
4349                     channel[chanel][subchannel].object.objclass=objclass;
4350                     *dmaget += 4;
4351                  } else {
4352#ifdef LOG_NV2A
4353                     logerror("  subch. %d method %04x offset %04x count %d\n",subch,method,method*4,count);
4354#endif
4355                     while (count > 0) {
4356                        countlen=count;
4357                        geforce_exec_method(space,chanel,subchannel,method,*dmaget,countlen);
4358                        *dmaget += 4*(count-countlen);
4359                        count=countlen;
4360                     }
4361                  }
4362                  break;
4363               case 3: // long non-increasing method
4364                  method=(cmd >> 2) & 2047;
4365#ifdef LOG_NV2A
4366                  subch=(cmd >> 13) & 7;
4367#endif
4368                  count=space.read_dword(*dmaget);
4369                  *dmaget += 4;
4370                  if ((method == 0) && (count == 1)) {
4371                     handle=space.read_dword(*dmaget);
4372                     handle=geforce_object_offset(handle);
4373#ifdef LOG_NV2A
4374                     logerror("  assign to subchannel %d object at %d\n",subch,handle);
4375#endif
4376                     channel[chanel][subchannel].object.objhandle=handle;
4377                     handle=ramin[handle/4];
4378                     objclass=handle & 0xff;
4379                     channel[chanel][subchannel].object.objclass=objclass;
4380                     *dmaget += 4;
4381                  } else {
4382#ifdef LOG_NV2A
4383                     logerror("  subch. %d method %04x offset %04x count %d\n",subch,method,method*4,count);
4384#endif
4385                     while (count > 0) {
4386                        countlen=count;
4387                        geforce_exec_method(space,chanel,subchannel,method,*dmaget,countlen);
4388                        *dmaget += 4*(count-countlen);
4389                        count=countlen;
4390                     }
4391                  }
4392                  break;
4393               default:
4394                  logerror("  unimplemented command %08X\n",cmd);
4395            }
4396         }
4397      }
4398   } else ;
4399//      logerror("NV_2A: write at %08X mask %08X value %08X\n",0xfd000000+offset*4,mem_mask,data);
984   nvidia_nv2a->geforce_w(space, offset, data, mem_mask);
4400985}
4401986
4402READ32_MEMBER( chihiro_state::geforce_r )
4403{
4404   return nvidia_nv2a->geforce_r(space,offset,mem_mask);
4405}
4406
4407WRITE32_MEMBER( chihiro_state::geforce_w )
4408{
4409   nvidia_nv2a->geforce_w(space,offset,data,mem_mask);
4410}
4411
4412987static UINT32 geforce_pci_r(device_t *busdevice, device_t *device, int function, int reg, UINT32 mem_mask)
4413988{
4414989#ifdef LOG_PCI
4415//  logerror("  bus:1 device:NV_2A function:%d register:%d mask:%08X\n",function,reg,mem_mask);
990   //  logerror("  bus:1 device:NV_2A function:%d register:%d mask:%08X\n",function,reg,mem_mask);
4416991#endif
4417992   return 0;
4418993}
r242231r242232
4420995static void geforce_pci_w(device_t *busdevice, device_t *device, int function, int reg, UINT32 data, UINT32 mem_mask)
4421996{
4422997#ifdef LOG_PCI
4423//  logerror("  bus:1 device:NV_2A function:%d register:%d data:%08X mask:%08X\n",function,reg,data,mem_mask);
998   //  logerror("  bus:1 device:NV_2A function:%d register:%d data:%08X mask:%08X\n",function,reg,data,mem_mask);
4424999#endif
44251000}
44261001
r242231r242232
44291004 */
44301005
44311006#ifdef LOG_OHCI
4432static const char *const usbregnames[]={
1007static const char *const usbregnames[] = {
44331008   "HcRevision",
44341009   "HcControl",
44351010   "HcCommandStatus",
r242231r242232
44551030};
44561031#endif
44571032
4458READ32_MEMBER( chihiro_state::usbctrl_r )
1033READ32_MEMBER(chihiro_state::usbctrl_r)
44591034{
44601035   if (offset == 0) { /* hack needed until usb (and jvs) is implemented */
44611036      if (usbhack_counter == 0) {
4462         m_maincpu->space(0).write_byte(0x6a79f,0x01);
4463         m_maincpu->space(0).write_byte(0x6a7a0,0x00);
4464         m_maincpu->space(0).write_byte(0x6b575,0x00);
4465         m_maincpu->space(0).write_byte(0x6b576,0x00);
4466         m_maincpu->space(0).write_byte(0x6b5af,0x75);
4467         m_maincpu->space(0).write_byte(0x6b78a,0x75);
4468         m_maincpu->space(0).write_byte(0x6b7ca,0x00);
4469         m_maincpu->space(0).write_byte(0x6b7b8,0x00);
4470         m_maincpu->space(0).write_byte(0x8f5b2,0x75);
4471         m_maincpu->space(0).write_byte(0x79a9e,0x74);
4472         m_maincpu->space(0).write_byte(0x79b80,0x74);
4473         m_maincpu->space(0).write_byte(0x79b97,0x74);
1037         m_maincpu->space(0).write_byte(0x6a79f, 0x01);
1038         m_maincpu->space(0).write_byte(0x6a7a0, 0x00);
1039         m_maincpu->space(0).write_byte(0x6b575, 0x00);
1040         m_maincpu->space(0).write_byte(0x6b576, 0x00);
1041         m_maincpu->space(0).write_byte(0x6b5af, 0x75);
1042         m_maincpu->space(0).write_byte(0x6b78a, 0x75);
1043         m_maincpu->space(0).write_byte(0x6b7ca, 0x00);
1044         m_maincpu->space(0).write_byte(0x6b7b8, 0x00);
1045         m_maincpu->space(0).write_byte(0x8f5b2, 0x75);
1046         m_maincpu->space(0).write_byte(0x79a9e, 0x74);
1047         m_maincpu->space(0).write_byte(0x79b80, 0x74);
1048         m_maincpu->space(0).write_byte(0x79b97, 0x74);
44741049      }
44751050      // after game loaded
44761051      if (usbhack_counter == 1) {
4477         m_maincpu->space(0).write_byte(0x12e4cf,0x01);
4478         m_maincpu->space(0).write_byte(0x12e4d0,0x00);
4479         m_maincpu->space(0).write_byte(0x4793e,0x01);
4480         m_maincpu->space(0).write_byte(0x4793f,0x00);
4481         m_maincpu->space(0).write_byte(0x47aa3,0x01);
4482         m_maincpu->space(0).write_byte(0x47aa4,0x00);
4483         m_maincpu->space(0).write_byte(0x14f2b6,0x84);
4484         m_maincpu->space(0).write_byte(0x14f2d1,0x75);
4485         m_maincpu->space(0).write_byte(0x8732f,0x7d);
4486         m_maincpu->space(0).write_byte(0x87384,0x7d);
4487         m_maincpu->space(0).write_byte(0x87388,0xeb);
1052         m_maincpu->space(0).write_byte(0x12e4cf, 0x01);
1053         m_maincpu->space(0).write_byte(0x12e4d0, 0x00);
1054         m_maincpu->space(0).write_byte(0x4793e, 0x01);
1055         m_maincpu->space(0).write_byte(0x4793f, 0x00);
1056         m_maincpu->space(0).write_byte(0x47aa3, 0x01);
1057         m_maincpu->space(0).write_byte(0x47aa4, 0x00);
1058         m_maincpu->space(0).write_byte(0x14f2b6, 0x84);
1059         m_maincpu->space(0).write_byte(0x14f2d1, 0x75);
1060         m_maincpu->space(0).write_byte(0x8732f, 0x7d);
1061         m_maincpu->space(0).write_byte(0x87384, 0x7d);
1062         m_maincpu->space(0).write_byte(0x87388, 0xeb);
44881063      }
44891064      usbhack_counter++;
44901065   }
44911066#ifdef LOG_OHCI
4492   if (offset >= 0x54/4)
4493      logerror("usb controller 0 register HcRhPortStatus[%d] read\n",(offset-0x54/4)+1);
1067   if (offset >= 0x54 / 4)
1068      logerror("usb controller 0 register HcRhPortStatus[%d] read\n", (offset - 0x54 / 4) + 1);
44941069   else
4495      logerror("usb controller 0 register %s read\n",usbregnames[offset]);
1070      logerror("usb controller 0 register %s read\n", usbregnames[offset]);
44961071#endif
44971072   return 0;
44981073}
44991074
4500WRITE32_MEMBER( chihiro_state::usbctrl_w )
1075WRITE32_MEMBER(chihiro_state::usbctrl_w)
45011076{
45021077#ifdef LOG_OHCI
4503   if (offset >= 0x54/4)
4504      logerror("usb controller 0 register HcRhPortStatus[%d] write %08X\n",(offset-0x54/4)+1,data);
1078   if (offset >= 0x54 / 4)
1079      logerror("usb controller 0 register HcRhPortStatus[%d] write %08X\n", (offset - 0x54 / 4) + 1, data);
45051080   else
4506      logerror("usb controller 0 register %s write %08X\n",usbregnames[offset],data);
1081      logerror("usb controller 0 register %s write %08X\n", usbregnames[offset], data);
45071082#endif
45081083}
45091084
r242231r242232
45111086 * Audio
45121087 */
45131088
4514READ32_MEMBER( chihiro_state::audio_apu_r )
1089READ32_MEMBER(chihiro_state::audio_apu_r)
45151090{
4516   logerror("Audio_APU: read from %08X mask %08X\n",0xfe800000+offset*4,mem_mask);
4517   if (offset == 0x20010/4) // some kind of internal counter or state value
4518      return 0x20+4+8+0x48+0x80;
1091   logerror("Audio_APU: read from %08X mask %08X\n", 0xfe800000 + offset * 4, mem_mask);
1092   if (offset == 0x20010 / 4) // some kind of internal counter or state value
1093      return 0x20 + 4 + 8 + 0x48 + 0x80;
45191094   return apust.memory[offset];
45201095}
45211096
4522WRITE32_MEMBER( chihiro_state::audio_apu_w )
1097WRITE32_MEMBER(chihiro_state::audio_apu_w)
45231098{
45241099   //UINT32 old;
45251100   UINT32 v;
45261101
4527   logerror("Audio_APU: write at %08X mask %08X value %08X\n",0xfe800000+offset*4,mem_mask,data);
1102   logerror("Audio_APU: write at %08X mask %08X value %08X\n", 0xfe800000 + offset * 4, mem_mask, data);
45281103   //old = apust.memory[offset];
45291104   apust.memory[offset] = data;
4530   if (offset == 0x02040/4) // address of memory area with scatter-gather info (gpdsp scratch dma)
4531      apust.gpdsp_sgaddress=data;
4532   if (offset == 0x020d4/4) { // block count (gpdsp)
4533      apust.gpdsp_sgblocks=data;
4534      apust.gpdsp_address=apust.space->read_dword(apust.gpdsp_sgaddress); // memory address of first block
1105   if (offset == 0x02040 / 4) // address of memory area with scatter-gather info (gpdsp scratch dma)
1106      apust.gpdsp_sgaddress = data;
1107   if (offset == 0x020d4 / 4) { // block count (gpdsp)
1108      apust.gpdsp_sgblocks = data;
1109      apust.gpdsp_address = apust.space->read_dword(apust.gpdsp_sgaddress); // memory address of first block
45351110      apust.timer->enable();
4536      apust.timer->adjust(attotime::from_msec(1),0,attotime::from_msec(1));
1111      apust.timer->adjust(attotime::from_msec(1), 0, attotime::from_msec(1));
45371112   }
45381113   if (offset == 0x02048 / 4) // (epdsp scratch dma)
4539      apust.epdsp_sgaddress=data;
1114      apust.epdsp_sgaddress = data;
45401115   if (offset == 0x020dc / 4) // (epdsp)
4541      apust.epdsp_sgblocks=data;
1116      apust.epdsp_sgblocks = data;
45421117   if (offset == 0x0204c / 4) // address of memory area with information about blocks
45431118      apust.unknown_sgaddress = data;
45441119   if (offset == 0x020e0 / 4) // block count - 1
r242231r242232
45741149      return;
45751150   if (offset == 0x20304 / 4) { // format
45761151      /*
4577        bits 28-31 sample format:
4578         0  8-bit pcm
4579         5  16-bit pcm
4580         10 adpcm ?
4581         14 24-bit pcm
4582         15 32-bit pcm
4583        bits 16-20 number of channels - 1:
4584         0  mono
4585         1  stereo
1152      bits 28-31 sample format:
1153      0  8-bit pcm
1154      5  16-bit pcm
1155      10 adpcm ?
1156      14 24-bit pcm
1157      15 32-bit pcm
1158      bits 16-20 number of channels - 1:
1159      0  mono
1160      1  stereo
45861161      */
45871162      return;
45881163   }
r242231r242232
45971172   if (offset == 0x203a0 / 4) // start offset of data in scatter-gather heap
45981173      return;
45991174   if (offset == 0x203a4 / 4) { // first sample to play
4600      apust.voices_position_start[apust.voice_number] = data*1000;
1175      apust.voices_position_start[apust.voice_number] = data * 1000;
46011176      return;
46021177   }
46031178   if (offset == 0x203dc / 4) { // last sample to play
4604      apust.voices_position_end[apust.voice_number] = data*1000;
1179      apust.voices_position_end[apust.voice_number] = data * 1000;
46051180      return;
46061181   }
46071182   if (offset == 0x2010c / 4) // voice processor 0 idle 1 not idle ?
r242231r242232
46261201      return;
46271202}
46281203
4629READ32_MEMBER( chihiro_state::audio_ac93_r )
1204READ32_MEMBER(chihiro_state::audio_ac93_r)
46301205{
4631   UINT32 ret=0;
1206   UINT32 ret = 0;
46321207
4633   logerror("Audio_AC3: read from %08X mask %08X\n",0xfec00000+offset*4,mem_mask);
4634   if (offset < 0x80/4)
1208   logerror("Audio_AC3: read from %08X mask %08X\n", 0xfec00000 + offset * 4, mem_mask);
1209   if (offset < 0x80 / 4)
46351210   {
4636      ret=ac97st.mixer_regs[offset];
1211      ret = ac97st.mixer_regs[offset];
46371212   }
4638   if ((offset >= 0x100/4) && (offset <= 0x138/4))
1213   if ((offset >= 0x100 / 4) && (offset <= 0x138 / 4))
46391214   {
4640      offset=offset-0x100/4;
4641      if (offset == 0x18/4)
1215      offset = offset - 0x100 / 4;
1216      if (offset == 0x18 / 4)
46421217      {
46431218         ac97st.controller_regs[offset] &= ~0x02000000; // REGRST: register reset
46441219      }
4645      if (offset == 0x30/4)
1220      if (offset == 0x30 / 4)
46461221      {
46471222         ac97st.controller_regs[offset] |= 0x100; // PCRDY: primary codec ready
46481223      }
4649      if (offset == 0x34/4)
1224      if (offset == 0x34 / 4)
46501225      {
46511226         ac97st.controller_regs[offset] &= ~1; // CAS: codec access semaphore
46521227      }
4653      ret=ac97st.controller_regs[offset];
1228      ret = ac97st.controller_regs[offset];
46541229   }
46551230   return ret;
46561231}
46571232
4658WRITE32_MEMBER( chihiro_state::audio_ac93_w )
1233WRITE32_MEMBER(chihiro_state::audio_ac93_w)
46591234{
4660   logerror("Audio_AC3: write at %08X mask %08X value %08X\n",0xfec00000+offset*4,mem_mask,data);
4661   if (offset < 0x80/4)
1235   logerror("Audio_AC3: write at %08X mask %08X value %08X\n", 0xfec00000 + offset * 4, mem_mask, data);
1236   if (offset < 0x80 / 4)
46621237   {
4663      COMBINE_DATA(ac97st.mixer_regs+offset);
1238      COMBINE_DATA(ac97st.mixer_regs + offset);
46641239   }
4665   if ((offset >= 0x100/4) && (offset <= 0x138/4))
1240   if ((offset >= 0x100 / 4) && (offset <= 0x138 / 4))
46661241   {
4667      offset=offset-0x100/4;
4668      COMBINE_DATA(ac97st.controller_regs+offset);
1242      offset = offset - 0x100 / 4;
1243      COMBINE_DATA(ac97st.controller_regs + offset);
46691244   }
46701245}
46711246
r242231r242232
46761251   UINT64 bv;
46771252   UINT32 phys;
46781253
4679   cmd=apust.space->read_dword(apust.gpdsp_address+0x800+0x10);
1254   cmd = apust.space->read_dword(apust.gpdsp_address + 0x800 + 0x10);
46801255   if (cmd == 3)
4681      apust.space->write_dword(apust.gpdsp_address+0x800+0x10,0);
1256      apust.space->write_dword(apust.gpdsp_address + 0x800 + 0x10, 0);
46821257   /*else
4683       logerror("Audio_APU: unexpected value at address %d\n",apust.gpdsp_address+0x800+0x10);*/
1258   logerror("Audio_APU: unexpected value at address %d\n",apust.gpdsp_address+0x800+0x10);*/
46841259   for (b = 0; b < 4; b++) {
46851260      bv = 1;
46861261      for (bb = 0; bb < 64; bb++) {
r242231r242232
47041279static UINT32 dummy_pci_r(device_t *busdevice, device_t *device, int function, int reg, UINT32 mem_mask)
47051280{
47061281#ifdef LOG_PCI
4707//  logerror("  bus:0 function:%d register:%d mask:%08X\n",function,reg,mem_mask);
1282   //  logerror("  bus:0 function:%d register:%d mask:%08X\n",function,reg,mem_mask);
47081283#endif
47091284   return 0;
47101285}
r242231r242232
47121287static void dummy_pci_w(device_t *busdevice, device_t *device, int function, int reg, UINT32 data, UINT32 mem_mask)
47131288{
47141289#ifdef LOG_PCI
4715   if (reg >= 16) logerror("  bus:0 function:%d register:%d data:%08X mask:%08X\n",function,reg,data,mem_mask);
1290   if (reg >= 16) logerror("  bus:0 function:%d register:%d data:%08X mask:%08X\n", function, reg, data, mem_mask);
47161291#endif
47171292}
47181293
4719READ32_MEMBER( chihiro_state::dummy_r )
1294READ32_MEMBER(chihiro_state::dummy_r)
47201295{
47211296   return 0;
47221297}
47231298
4724WRITE32_MEMBER( chihiro_state::dummy_w )
1299WRITE32_MEMBER(chihiro_state::dummy_w)
47251300{
47261301}
47271302
r242231r242232
47671342void ide_baseboard_device::device_start()
47681343{
47691344   ata_mass_storage_device::device_start();
4770   chihirosystem=machine().driver_data<chihiro_state>();
1345   chihirosystem = machine().driver_data<chihiro_state>();
47711346   // savestates
47721347   save_item(NAME(read_buffer));
47731348   save_item(NAME(write_buffer));
r242231r242232
47811356{
47821357   if (!m_can_identify_device)
47831358   {
4784      m_num_cylinders=65535;
4785      m_num_sectors=255;
4786      m_num_heads=255;
1359      m_num_cylinders = 65535;
1360      m_num_sectors = 255;
1361      m_num_heads = 255;
47871362      ide_build_identify_device();
47881363      m_can_identify_device = 1;
47891364   }
r242231r242232
47981373
47991374   /*
48001375   It assumes there are 4 "partitions", the size of the first one depends on bits 3-0 of io port 40f4:
4801    Value    Size lba
4802      0   0x40000-0x8000
4803        ...
4804      4   0x400000-0x8000
1376   Value    Size lba
1377   0   0x40000-0x8000
1378   ...
1379   4   0x400000-0x8000
48051380   The size of the second one is always 0x8000 sectors, and is used as a special communication area
48061381   This is a list of the partitions in the minimum size case:
4807    Name          Start lba  Size lba Size
4808    \??\mbfs:     0x0        0x38000  112MB
4809    \??\mbcom:    0x38000    0x8000   16MB
4810    \??\mbrom0:   0x8000000  0x800    1MB
4811    \??\mbrom1:   0x8000800  0x800    1MB
1382   Name          Start lba  Size lba Size
1383   \??\mbfs:     0x0        0x38000  112MB
1384   \??\mbcom:    0x38000    0x8000   16MB
1385   \??\mbrom0:   0x8000000  0x800    1MB
1386   \??\mbrom1:   0x8000800  0x800    1MB
48121387   This is a list of the partitions in the maximum size case:
4813    Name          Start lba  Size lba Size
4814    \??\mbfs:     0x0        0x3f8000 2032MB
4815    \??\mbcom:    0x3f8000   0x8000   16MB
4816    \??\mbrom0:   0x8000000  0x800    1MB
4817    \??\mbrom1:   0x8000800  0x800    1MB
1388   Name          Start lba  Size lba Size
1389   \??\mbfs:     0x0        0x3f8000 2032MB
1390   \??\mbcom:    0x3f8000   0x8000   16MB
1391   \??\mbrom0:   0x8000000  0x800    1MB
1392   \??\mbrom1:   0x8000800  0x800    1MB
48181393   */
4819   logerror("baseboard: read sector lba %08x\n",lba);
1394   logerror("baseboard: read sector lba %08x\n", lba);
48201395   if (lba >= 0x08000000) {
4821      off=(lba&0x7ff)*512;
4822      data=memregion(":others")->base();
4823      memcpy(buffer,data+off,512);
1396      off = (lba & 0x7ff) * 512;
1397      data = memregion(":others")->base();
1398      memcpy(buffer, data + off, 512);
48241399      return 1;
48251400   }
48261401   if (lba >= 0xf8000) {
4827      memset(buffer,0,512);
4828      lba=lba-0xf8000;
1402      memset(buffer, 0, 512);
1403      lba = lba - 0xf8000;
48291404      if (lba == 0x4800)
4830         memcpy(buffer,read_buffer,0x20);
1405         memcpy(buffer, read_buffer, 0x20);
48311406      else if (lba == 0x4801)
4832         memcpy(buffer,write_buffer,0x20);
1407         memcpy(buffer, write_buffer, 0x20);
48331408      return 1;
48341409   }
48351410   // in a type 1 chihiro this gets data from the dimm board memory
4836   data=chihirosystem->baseboard_ide_dimmboard(lba);
1411   data = chihirosystem->baseboard_ide_dimmboard(lba);
48371412   if (data != NULL)
4838      memcpy(buffer,data,512);
1413      memcpy(buffer, data, 512);
48391414   return 1;
48401415}
48411416
48421417int ide_baseboard_device::write_sector(UINT32 lba, const void *buffer)
48431418{
4844   logerror("baseboard: write sector lba %08x\n",lba);
1419   logerror("baseboard: write sector lba %08x\n", lba);
48451420   if (lba >= 0xf8000) {
4846      lba=lba-0xf8000;
1421      lba = lba - 0xf8000;
48471422      if (lba == 0x4800)
4848         memcpy(read_buffer,buffer,0x20);
1423         memcpy(read_buffer, buffer, 0x20);
48491424      else if (lba == 0x4801) {
4850         memcpy(write_buffer,buffer,0x20);
1425         memcpy(write_buffer, buffer, 0x20);
48511426         // call chihiro driver
4852         chihirosystem->baseboard_ide_event(3,read_buffer,write_buffer);
1427         chihirosystem->baseboard_ide_event(3, read_buffer, write_buffer);
48531428      }
48541429   }
48551430   return 1;
r242231r242232
48591434 * Chihiro Type 1 baseboard
48601435 */
48611436
4862void chihiro_state::dword_write_le(UINT8 *addr,UINT32 d)
1437void chihiro_state::dword_write_le(UINT8 *addr, UINT32 d)
48631438{
4864   addr[0]=d & 255;
4865   addr[1]=(d >> 8) & 255;
4866   addr[2]=(d >> 16) & 255;
4867   addr[3]=(d >> 24) & 255;
1439   addr[0] = d & 255;
1440   addr[1] = (d >> 8) & 255;
1441   addr[2] = (d >> 16) & 255;
1442   addr[3] = (d >> 24) & 255;
48681443}
48691444
4870void chihiro_state::word_write_le(UINT8 *addr,UINT16 d)
1445void chihiro_state::word_write_le(UINT8 *addr, UINT16 d)
48711446{
4872   addr[0]=d & 255;
4873   addr[1]=(d >> 8) & 255;
1447   addr[0] = d & 255;
1448   addr[1] = (d >> 8) & 255;
48741449}
48751450
4876void chihiro_state::baseboard_ide_event(int type,UINT8 *read_buffer,UINT8 *write_buffer)
1451void chihiro_state::baseboard_ide_event(int type, UINT8 *read_buffer, UINT8 *write_buffer)
48771452{
48781453   int c;
48791454
r242231r242232
48811456      return;
48821457#ifdef LOG_BASEBOARD
48831458   logerror("Baseboard sector command:\n");
4884   for (int a=0;a < 32;a++)
4885      logerror(" %02X",write_buffer[a]);
1459   for (int a = 0; a < 32; a++)
1460      logerror(" %02X", write_buffer[a]);
48861461   logerror("\n");
48871462#endif
48881463   // response
48891464   // second word 8001 (8000+counter), first word=first word of written data (command ?), second dword ?
4890   read_buffer[0]=write_buffer[0];
4891   read_buffer[1]=write_buffer[1];
4892   read_buffer[2]=0x01; // write_buffer[2];
4893   read_buffer[3]=0x80; // write_buffer[3] | 0x80;
4894   c=write_buffer[2]+(write_buffer[3] << 8); // 0001 0101 0103
1465   read_buffer[0] = write_buffer[0];
1466   read_buffer[1] = write_buffer[1];
1467   read_buffer[2] = 0x01; // write_buffer[2];
1468   read_buffer[3] = 0x80; // write_buffer[3] | 0x80;
1469   c = write_buffer[2] + (write_buffer[3] << 8); // 0001 0101 0103
48951470   switch (c)
48961471   {
4897      case 0x0001:
4898         // second dword
4899         dword_write_le(read_buffer+4,0x00f00000); // ?
4900         break;
4901      case 0x0100:
4902         // second dword third dword
4903         dword_write_le(read_buffer+4,5); // game data loading phase
4904         dword_write_le(read_buffer+8,0); // completion %
4905         break;
4906      case 0x0101:
4907         // third word fourth word
4908         word_write_le(read_buffer+4,0xca); // ?
4909         word_write_le(read_buffer+6,0xcb); // ?
4910         break;
4911      case 0x0102:
4912         // second dword
4913         dword_write_le(read_buffer+4,0); // bit 16 develop. mode
4914         break;
4915      case 0x0103:
4916         // dwords 1 3 4
4917         memcpy(read_buffer+4,"-abc-abc12345678",16); // ?
4918         break;
1472   case 0x0001:
1473      // second dword
1474      dword_write_le(read_buffer + 4, 0x00f00000); // ?
1475      break;
1476   case 0x0100:
1477      // second dword third dword
1478      dword_write_le(read_buffer + 4, 5); // game data loading phase
1479      dword_write_le(read_buffer + 8, 0); // completion %
1480      break;
1481   case 0x0101:
1482      // third word fourth word
1483      word_write_le(read_buffer + 4, 0xca); // ?
1484      word_write_le(read_buffer + 6, 0xcb); // ?
1485      break;
1486   case 0x0102:
1487      // second dword
1488      dword_write_le(read_buffer + 4, 0); // bit 16 develop. mode
1489      break;
1490   case 0x0103:
1491      // dwords 1 3 4
1492      memcpy(read_buffer + 4, "-abc-abc12345678", 16); // ?
1493      break;
49191494   }
49201495   // clear
4921   write_buffer[0]=write_buffer[1]=write_buffer[2]=write_buffer[3]=0;
1496   write_buffer[0] = write_buffer[1] = write_buffer[2] = write_buffer[3] = 0;
49221497   // irq 10 active
49231498   chihiro_devs.pic8259_2->ir2_w(1);
49241499}
r242231r242232
49271502{
49281503   // return pointer to memory containing decrypted gdrom data (contains an image of a fatx partition)
49291504   if (chihiro_devs.dimmboard != NULL)
4930      return dimm_board_memory+lba*512;
1505      return dimm_board_memory + lba * 512;
49311506   return NULL;
49321507}
49331508
r242231r242232
49421517
49431518READ8_MEMBER(chihiro_state::get_slave_ack)
49441519{
4945   if (offset==2) { // IRQ = 2
1520   if (offset == 2) { // IRQ = 2
49461521      return chihiro_devs.pic8259_2->acknowledge();
49471522   }
49481523   return 0x00;
r242231r242232
49521527{
49531528   int r = 0;
49541529   r = chihiro_devs.pic8259_2->acknowledge();
4955   if (r==0)
1530   if (r == 0)
49561531   {
49571532      r = chihiro_devs.pic8259_1->acknowledge();
49581533   }
49591534   if (debug_irq_active)
4960      debug_generate_irq(debug_irq_number,false);
1535      debug_generate_irq(debug_irq_number, false);
49611536   return r;
49621537}
49631538
49641539WRITE_LINE_MEMBER(chihiro_state::chihiro_pit8254_out0_changed)
49651540{
4966   if ( chihiro_devs.pic8259_1 )
1541   if (chihiro_devs.pic8259_1)
49671542   {
49681543      chihiro_devs.pic8259_1->ir0_w(state);
49691544   }
r242231r242232
49781553 * SMbus devices
49791554 */
49801555
4981int smbus_callback_pic16lc(chihiro_state &chs,int command,int rw,int data)
1556int smbus_callback_pic16lc(chihiro_state &chs, int command, int rw, int data)
49821557{
49831558   return chs.smbus_pic16lc(command, rw, data);
49841559}
49851560
4986int chihiro_state::smbus_pic16lc(int command,int rw,int data)
1561int chihiro_state::smbus_pic16lc(int command, int rw, int data)
49871562{
49881563   if (rw == 1) { // read
49891564      if (command == 0) {
49901565         if (pic16lc_buffer[0] == 'D')
4991            pic16lc_buffer[0]='X';
1566            pic16lc_buffer[0] = 'X';
49921567         else if (pic16lc_buffer[0] == 'X')
4993            pic16lc_buffer[0]='B';
1568            pic16lc_buffer[0] = 'B';
49941569         else if (pic16lc_buffer[0] == 'B')
4995            pic16lc_buffer[0]='D';
1570            pic16lc_buffer[0] = 'D';
49961571      }
4997      logerror("pic16lc: %d %d %d\n",command,rw,pic16lc_buffer[command]);
1572      logerror("pic16lc: %d %d %d\n", command, rw, pic16lc_buffer[command]);
49981573      return pic16lc_buffer[command];
4999   } else
1574   }
1575   else
50001576      if (command == 0)
5001         pic16lc_buffer[0]='B';
1577         pic16lc_buffer[0] = 'B';
50021578      else
5003         pic16lc_buffer[command]=(UINT8)data;
5004   logerror("pic16lc: %d %d %d\n",command,rw,data);
1579         pic16lc_buffer[command] = (UINT8)data;
1580   logerror("pic16lc: %d %d %d\n", command, rw, data);
50051581   return 0;
50061582}
50071583
5008int smbus_callback_cx25871(chihiro_state &chs,int command,int rw,int data)
1584int smbus_callback_cx25871(chihiro_state &chs, int command, int rw, int data)
50091585{
50101586   return chs.smbus_cx25871(command, rw, data);
50111587}
50121588
5013int chihiro_state::smbus_cx25871(int command,int rw,int data)
1589int chihiro_state::smbus_cx25871(int command, int rw, int data)
50141590{
5015   logerror("cx25871: %d %d %d\n",command,rw,data);
1591   logerror("cx25871: %d %d %d\n", command, rw, data);
50161592   return 0;
50171593}
50181594
r242231r242232
50231599   0x4F,0x6E,0x6C,0x69,0x6E,0x65,0x6B,0x65,0x79,0x69,0x6E,0x76,0x61,0x6C,0x69,0x64,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
50241600   0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
50251601
5026int smbus_callback_eeprom(chihiro_state &chs,int command,int rw,int data)
1602int smbus_callback_eeprom(chihiro_state &chs, int command, int rw, int data)
50271603{
50281604   return chs.smbus_eeprom(command, rw, data);
50291605}
50301606
5031int chihiro_state::smbus_eeprom(int command,int rw,int data)
1607int chihiro_state::smbus_eeprom(int command, int rw, int data)
50321608{
50331609   if (command >= 112)
50341610      return 0;
r242231r242232
50371613      // hack to avoid hanging if eeprom contents are not correct
50381614      // this would need dumping the serial eeprom on the xbox board
50391615      if (command == 0) {
5040         m_maincpu->space(0).write_byte(0x3b744,0x90);
5041         m_maincpu->space(0).write_byte(0x3b745,0x90);
5042         m_maincpu->space(0).write_byte(0x3b766,0xc9);
5043         m_maincpu->space(0).write_byte(0x3b767,0xc3);
1616         m_maincpu->space(0).write_byte(0x3b744, 0x90);
1617         m_maincpu->space(0).write_byte(0x3b745, 0x90);
1618         m_maincpu->space(0).write_byte(0x3b766, 0xc9);
1619         m_maincpu->space(0).write_byte(0x3b767, 0xc3);
50441620      }
5045      data = dummyeeprom[command]+dummyeeprom[command+1]*256;
5046      logerror("eeprom: %d %d %d\n",command,rw,data);
1621      data = dummyeeprom[command] + dummyeeprom[command + 1] * 256;
1622      logerror("eeprom: %d %d %d\n", command, rw, data);
50471623      return data;
50481624   }
5049   logerror("eeprom: %d %d %d\n",command,rw,data);
5050   dummyeeprom[command]=data;
1625   logerror("eeprom: %d %d %d\n", command, rw, data);
1626   dummyeeprom[command] = data;
50511627   return 0;
50521628}
50531629
r242231r242232
50551631 * SMbus controller
50561632 */
50571633
5058void chihiro_state::smbus_register_device(int address,int (*handler)(chihiro_state &chs,int command,int rw,int data))
1634void chihiro_state::smbus_register_device(int address, int(*handler)(chihiro_state &chs, int command, int rw, int data))
50591635{
50601636   if (address < 128)
5061      smbusst.devices[address]=handler;
1637      smbusst.devices[address] = handler;
50621638}
50631639
5064READ32_MEMBER( chihiro_state::smbus_r )
1640READ32_MEMBER(chihiro_state::smbus_r)
50651641{
50661642   if ((offset == 0) && (mem_mask == 0xff)) // 0 smbus status
50671643      smbusst.words[offset] = (smbusst.words[offset] & ~mem_mask) | ((smbusst.status << 0) & mem_mask);
r242231r242232
50701646   return smbusst.words[offset];
50711647}
50721648
5073WRITE32_MEMBER( chihiro_state::smbus_w )
1649WRITE32_MEMBER(chihiro_state::smbus_w)
50741650{
50751651   COMBINE_DATA(smbusst.words);
50761652   if ((offset == 0) && (mem_mask == 0xff)) // 0 smbus status
r242231r242232
50811657   }
50821658   if ((offset == 0) && (mem_mask == 0xff0000)) // 2 smbus control
50831659   {
5084      data=data>>16;
1660      data = data >> 16;
50851661      smbusst.control = data;
50861662      int cycletype = smbusst.control & 7;
50871663      if (smbusst.control & 8) { // start
r242231r242232
50891665         {
50901666            if (smbusst.devices[smbusst.address])
50911667               if (smbusst.rw == 0)
5092                  smbusst.devices[smbusst.address](*this,smbusst.command,smbusst.rw,smbusst.data);
1668                  smbusst.devices[smbusst.address](*this, smbusst.command, smbusst.rw, smbusst.data);
50931669               else
5094                  smbusst.data=smbusst.devices[smbusst.address](*this,smbusst.command,smbusst.rw,smbusst.data);
1670                  smbusst.data = smbusst.devices[smbusst.address](*this, smbusst.command, smbusst.rw, smbusst.data);
50951671            else
5096               logerror("SMBUS: access to missing device at address %d\n",smbusst.address);
1672               logerror("SMBUS: access to missing device at address %d\n", smbusst.address);
50971673            smbusst.status |= 0x10;
50981674            if (smbusst.control & 0x10)
50991675            {
r242231r242232
51091685   }
51101686   if ((offset == 1) && ((mem_mask == 0x00ff0000) || (mem_mask == 0xffff0000))) // 6 smbus data
51111687   {
5112      data=data>>16;
1688      data = data >> 16;
51131689      smbusst.data = data;
51141690   }
51151691   if ((offset == 2) && (mem_mask == 0xff)) // 8 smbus command
51161692      smbusst.command = data;
51171693}
51181694
5119READ32_MEMBER( chihiro_state::mediaboard_r )
1695READ32_MEMBER(chihiro_state::mediaboard_r)
51201696{
51211697   UINT32 r;
51221698
5123   logerror("I/O port read %04x mask %08X\n",offset*4+0x4000,mem_mask);
5124   r=0;
1699   logerror("I/O port read %04x mask %08X\n", offset * 4 + 0x4000, mem_mask);
1700   r = 0;
51251701   if ((offset == 7) && ACCESSING_BITS_16_31)
5126      r=0x10000000;
1702      r = 0x10000000;
51271703   if ((offset == 8) && ACCESSING_BITS_0_15)
5128      r=0x000000a0;
1704      r = 0x000000a0;
51291705   if ((offset == 8) && ACCESSING_BITS_16_31)
5130      r=0x42580000;
1706      r = 0x42580000;
51311707   if ((offset == 9) && ACCESSING_BITS_0_15)
5132      r=0x00004d41;
1708      r = 0x00004d41;
51331709   if ((offset == 0x3c) && ACCESSING_BITS_0_15)
5134      r=0x00000000; // bits 15-0 0 if media board present
1710      r = 0x00000000; // bits 15-0 0 if media board present
51351711   if ((offset == 0x3d) && ACCESSING_BITS_0_15)
5136      r=0x00000002; // bits 3-0 size of dimm board memory. Must be 2
1712      r = 0x00000002; // bits 3-0 size of dimm board memory. Must be 2
51371713   return r;
51381714}
51391715
5140WRITE32_MEMBER( chihiro_state::mediaboard_w )
1716WRITE32_MEMBER(chihiro_state::mediaboard_w)
51411717{
5142   logerror("I/O port write %04x mask %08X value %08X\n",offset*4+0x4000,mem_mask,data);
1718   logerror("I/O port write %04x mask %08X value %08X\n", offset * 4 + 0x4000, mem_mask, data);
51431719   // irq 10
51441720   if ((offset == 0x38) && ACCESSING_BITS_8_15)
51451721      chihiro_devs.pic8259_2->ir2_w(0);
51461722}
51471723
5148static ADDRESS_MAP_START( xbox_map, AS_PROGRAM, 32, chihiro_state )
1724static ADDRESS_MAP_START(xbox_map, AS_PROGRAM, 32, chihiro_state)
51491725   AM_RANGE(0x00000000, 0x07ffffff) AM_RAM // 128 megabytes
51501726   AM_RANGE(0xf0000000, 0xf0ffffff) AM_RAM
51511727   AM_RANGE(0xfd000000, 0xfdffffff) AM_RAM AM_READWRITE(geforce_r, geforce_w)
r242231r242232
51551731   AM_RANGE(0xff000000, 0xffffffff) AM_ROM AM_REGION("bios", 0) AM_MIRROR(0x00f80000)
51561732ADDRESS_MAP_END
51571733
5158static ADDRESS_MAP_START(xbox_map_io, AS_IO, 32, chihiro_state )
1734static ADDRESS_MAP_START(xbox_map_io, AS_IO, 32, chihiro_state)
51591735   AM_RANGE(0x0020, 0x0023) AM_DEVREADWRITE8("pic8259_1", pic8259_device, read, write, 0xffffffff)
51601736   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8("pit8254", pit8254_device, read, write, 0xffffffff)
51611737   AM_RANGE(0x00a0, 0x00a3) AM_DEVREADWRITE8("pic8259_2", pic8259_device, read, write, 0xffffffff)
r242231r242232
51671743   AM_RANGE(0xff60, 0xff67) AM_DEVREADWRITE("ide", bus_master_ide_controller_device, bmdma_r, bmdma_w)
51681744ADDRESS_MAP_END
51691745
5170static INPUT_PORTS_START( chihiro )
1746static INPUT_PORTS_START(chihiro)
51711747INPUT_PORTS_END
51721748
51731749void chihiro_state::machine_start()
51741750{
5175   nvidia_nv2a=auto_alloc(machine(), nv2a_renderer(machine()));
5176   memset(pic16lc_buffer,0,sizeof(pic16lc_buffer));
5177   pic16lc_buffer[0]='B';
5178   pic16lc_buffer[4]=0; // A/V connector, 2=vga
5179   smbus_register_device(0x10,smbus_callback_pic16lc);
5180   smbus_register_device(0x45,smbus_callback_cx25871);
5181   smbus_register_device(0x54,smbus_callback_eeprom);
5182   chihiro_devs.pic8259_1 = machine().device<pic8259_device>( "pic8259_1" );
5183   chihiro_devs.pic8259_2 = machine().device<pic8259_device>( "pic8259_2" );
5184   chihiro_devs.ide = machine().device<bus_master_ide_controller_device>( "ide" );
5185   chihiro_devs.dimmboard=machine().device<naomi_gdrom_board>("rom_board");
1751   nvidia_nv2a = auto_alloc(machine(), nv2a_renderer(machine()));
1752   memset(pic16lc_buffer, 0, sizeof(pic16lc_buffer));
1753   pic16lc_buffer[0] = 'B';
1754   pic16lc_buffer[4] = 0; // A/V connector, 2=vga
1755   smbus_register_device(0x10, smbus_callback_pic16lc);
1756   smbus_register_device(0x45, smbus_callback_cx25871);
1757   smbus_register_device(0x54, smbus_callback_eeprom);
1758   chihiro_devs.pic8259_1 = machine().device<pic8259_device>("pic8259_1");
1759   chihiro_devs.pic8259_2 = machine().device<pic8259_device>("pic8259_2");
1760   chihiro_devs.ide = machine().device<bus_master_ide_controller_device>("ide");
1761   chihiro_devs.dimmboard = machine().device<naomi_gdrom_board>("rom_board");
51861762   if (chihiro_devs.dimmboard != NULL) {
5187      dimm_board_memory=chihiro_devs.dimmboard->memory(dimm_board_memory_size);
1763      dimm_board_memory = chihiro_devs.dimmboard->memory(dimm_board_memory_size);
51881764   }
51891765   memset(apust.memory, 0, sizeof(apust.memory));
51901766   memset(apust.voices_heap_blockaddr, 0, sizeof(apust.voices_heap_blockaddr));
r242231r242232
51941770   memset(apust.voices_position_end, 0, sizeof(apust.voices_position_end));
51951771   memset(apust.voices_position_increment, 0, sizeof(apust.voices_position_increment));
51961772   apust.space = &m_maincpu->space();
5197   apust.timer=machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(chihiro_state::audio_apu_timer),this),(void *)"APU Timer");
1773   apust.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(chihiro_state::audio_apu_timer), this), (void *)"APU Timer");
51981774   apust.timer->enable(false);
51991775   if (machine().debug_flags & DEBUG_FLAG_ENABLED)
5200      debug_console_register_command(machine(),"chihiro",CMDFLAG_NONE,0,1,4,chihiro_debug_commands);
5201   usbhack_counter=0;
1776      debug_console_register_command(machine(), "chihiro", CMDFLAG_NONE, 0, 1, 4, chihiro_debug_commands);
1777   usbhack_counter = 0;
52021778   // savestates
52031779   save_item(NAME(debug_irq_active));
52041780   save_item(NAME(debug_irq_number));
r242231r242232
52181794   SLOT_INTERFACE("bb", IDE_BASEBOARD)
52191795SLOT_INTERFACE_END
52201796
5221static MACHINE_CONFIG_START( chihiro_base, chihiro_state )
1797static MACHINE_CONFIG_START(chihiro_base, chihiro_state)
52221798
52231799   /* basic machine hardware */
52241800   MCFG_CPU_ADD("maincpu", PENTIUM3, 733333333) /* Wrong! family 6 model 8 stepping 10 */
52251801   MCFG_CPU_PROGRAM_MAP(xbox_map)
52261802   MCFG_CPU_IO_MAP(xbox_map_io)
5227   MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(chihiro_state,irq_callback)
1803   MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(chihiro_state, irq_callback)
52281804
52291805   MCFG_QUANTUM_TIME(attotime::from_hz(6000))
52301806
r242231r242232
52411817   MCFG_PCI_BUS_LEGACY_ADD("agpbus", 1)
52421818   MCFG_PCI_BUS_LEGACY_SIBLING("pcibus")
52431819   MCFG_PCI_BUS_LEGACY_DEVICE(0, "NV2A GeForce 3MX Integrated GPU/Northbridge", geforce_pci_r, geforce_pci_w)
5244   MCFG_PIC8259_ADD( "pic8259_1", WRITELINE(chihiro_state, chihiro_pic8259_1_set_int_line), VCC, READ8(chihiro_state,get_slave_ack) )
5245   MCFG_PIC8259_ADD( "pic8259_2", DEVWRITELINE("pic8259_1", pic8259_device, ir2_w), GND, NULL )
1820   MCFG_PIC8259_ADD("pic8259_1", WRITELINE(chihiro_state, chihiro_pic8259_1_set_int_line), VCC, READ8(chihiro_state, get_slave_ack))
1821   MCFG_PIC8259_ADD("pic8259_2", DEVWRITELINE("pic8259_1", pic8259_device, ir2_w), GND, NULL)
52461822
52471823   MCFG_DEVICE_ADD("pit8254", PIT8254, 0)
52481824   MCFG_PIT8253_CLK0(1125000) /* heartbeat IRQ */
r242231r242232
52511827   MCFG_PIT8253_CLK2(1125000) /* (unused) pio port c pin 4, and speaker polling enough */
52521828   MCFG_PIT8253_OUT2_HANDLER(WRITELINE(chihiro_state, chihiro_pit8254_out2_changed))
52531829
5254   MCFG_BUS_MASTER_IDE_CONTROLLER_ADD( "ide", ide_baseboard, NULL, "bb", true)
1830   MCFG_BUS_MASTER_IDE_CONTROLLER_ADD("ide", ide_baseboard, NULL, "bb", true)
52551831   MCFG_ATA_INTERFACE_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w))
52561832   MCFG_BUS_MASTER_IDE_CONTROLLER_SPACE("maincpu", AS_PROGRAM)
52571833
r242231r242232
52611837   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))  /* not accurate */
52621838   MCFG_SCREEN_SIZE(640, 480)
52631839   MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 479)
5264   MCFG_SCREEN_UPDATE_DRIVER(chihiro_state,screen_update_callback)
5265   MCFG_SCREEN_VBLANK_DRIVER(chihiro_state,vblank_callback)
1840   MCFG_SCREEN_UPDATE_DRIVER(chihiro_state, screen_update_callback)
1841   MCFG_SCREEN_VBLANK_DRIVER(chihiro_state, vblank_callback)
52661842
52671843   MCFG_PALETTE_ADD("palette", 65536)
52681844MACHINE_CONFIG_END
52691845
5270static MACHINE_CONFIG_DERIVED( chihirogd, chihiro_base )
1846static MACHINE_CONFIG_DERIVED(chihirogd, chihiro_base)
52711847   MCFG_NAOMI_GDROM_BOARD_ADD("rom_board", ":gdrom", ":pic", NULL, NOOP)
52721848MACHINE_CONFIG_END
52731849
trunk/src/mame/drivers/cps1.c
r242231r242232
548548   AM_RANGE(0x800030, 0x800037) AM_WRITE(cps1_coinctrl_w)
549549   /* Forgotten Worlds has dial controls on B-board mapped at 800040-80005f. See DRIVER_INIT */
550550   AM_RANGE(0x800100, 0x80013f) AM_WRITE(cps1_cps_a_w) AM_SHARE("cps_a_regs")  /* CPS-A custom */
551   /* CPS-B custom is mapped by the PAL IOB2 on the B-board. SF2 revision "E" World and USA 910228 has it a a different
551   /* CPS-B custom is mapped by the PAL IOB2 on the B-board. SF2 revision "E" World and USA 910228 has it at a different
552552      address, see DRIVER_INIT */
553553   AM_RANGE(0x800140, 0x80017f) AM_READWRITE(cps1_cps_b_r, cps1_cps_b_w) AM_SHARE("cps_b_regs")
554554   AM_RANGE(0x800180, 0x800187) AM_WRITE(cps1_soundlatch_w)    /* Sound command */
trunk/src/mame/drivers/crystal.c
r242231r242232
10541054
10551055The PIC uses a software UART bit banged on a single output pin of the main CPU:
10561056the data port is bit 0x20000000 on the PIO register, the same register where the EEPROM control lines are. The serial data is transmitted at 8 data bits, even parity, 1 stop bit. It's probably
1057tricky to get it working properly because it doesn't rely on a clock signal, and so, the pic and main cpu must run in in parallel, and the bit lengths must match. The pic bit delay routine is just a loop.
1057tricky to get it working properly because it doesn't rely on a clock signal, and so, the pic and main cpu must run in parallel, and the bit lengths must match. The pic bit delay routine is just a loop.
10581058also it seems that bit 0x40000000 is the PIC reset.
10591059
10601060*/
trunk/src/mame/drivers/cultures.c
r242231r242232
1111#include "emu.h"
1212#include "cpu/z80/z80.h"
1313#include "sound/okim6295.h"
14#include "machine/bankdev.h"
1415
1516#define MCLK 16000000
1617
r242231r242232
1920public:
2021   cultures_state(const machine_config &mconfig, device_type type, const char *tag)
2122      : driver_device(mconfig, type, tag),
23      m_maincpu(*this, "maincpu"),
24      m_gfxdecode(*this, "gfxdecode"),
25      m_vrambank(*this, "vrambank"),
26      m_prgbank(*this, "prgbank"),
27      m_okibank(*this, "okibank"),
28      m_bg1_rom(*this, "bg1"),
29      m_bg2_rom(*this, "bg2"),
2230      m_bg0_videoram(*this, "bg0_videoram"),
2331      m_bg0_regs_x(*this, "bg0_regs_x"),
2432      m_bg0_regs_y(*this, "bg0_regs_y"),
2533      m_bg1_regs_x(*this, "bg1_regs_x"),
2634      m_bg1_regs_y(*this, "bg1_regs_y"),
2735      m_bg2_regs_x(*this, "bg2_regs_x"),
28      m_bg2_regs_y(*this, "bg2_regs_y"),
29      m_maincpu(*this, "maincpu"),
30      m_gfxdecode(*this, "gfxdecode"),
31      m_palette(*this, "palette") { }
36      m_bg2_regs_y(*this, "bg2_regs_y")
37      { }
3238
33   UINT8     m_paletteram[0x4000];
39   /* devices */
40   required_device<cpu_device> m_maincpu;
41   required_device<gfxdecode_device> m_gfxdecode;
42   required_device<address_map_bank_device> m_vrambank;
43   required_memory_bank m_prgbank;
44   required_memory_bank m_okibank;
45
3446   /* memory pointers */
47   required_region_ptr<UINT16> m_bg1_rom;
48   required_region_ptr<UINT16> m_bg2_rom;
49
3550   required_shared_ptr<UINT8> m_bg0_videoram;
3651   required_shared_ptr<UINT8> m_bg0_regs_x;
3752   required_shared_ptr<UINT8> m_bg0_regs_y;
r242231r242232
4459   tilemap_t  *m_bg0_tilemap;
4560   tilemap_t  *m_bg1_tilemap;
4661   tilemap_t  *m_bg2_tilemap;
47   int      m_video_bank;
4862   int      m_irq_enable;
4963   int      m_bg1_bank;
5064   int      m_bg2_bank;
51   int      m_old_bank;
5265   DECLARE_WRITE8_MEMBER(cpu_bankswitch_w);
5366   DECLARE_WRITE8_MEMBER(bg0_videoram_w);
5467   DECLARE_WRITE8_MEMBER(misc_w);
r242231r242232
6174   virtual void video_start();
6275   UINT32 screen_update_cultures(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
6376   INTERRUPT_GEN_MEMBER(cultures_interrupt);
64   required_device<cpu_device> m_maincpu;
65   required_device<gfxdecode_device> m_gfxdecode;
66   required_device<palette_device> m_palette;
6777};
6878
6979
7080
7181TILE_GET_INFO_MEMBER(cultures_state::get_bg1_tile_info)
7282{
73   UINT8 *region = memregion("gfx3")->base() + 0x200000 + 0x80000 * m_bg1_bank;
74   int code = region[tile_index * 2] + (region[tile_index * 2 + 1] << 8);
75   SET_TILE_INFO_MEMBER(2, code, code >> 12, 0);
83   int const code = m_bg1_rom[0x200000/2 + m_bg1_bank * 0x80000/2 + tile_index];
84   SET_TILE_INFO_MEMBER(1, code, code >> 12, 0);
7685}
7786
7887TILE_GET_INFO_MEMBER(cultures_state::get_bg2_tile_info)
7988{
80   UINT8 *region = memregion("gfx2")->base() + 0x200000 + 0x80000 * m_bg2_bank;
81   int code = region[tile_index * 2] + (region[tile_index * 2 + 1] << 8);
82   SET_TILE_INFO_MEMBER(1, code, code >> 12, 0);
89   int const code = m_bg2_rom[0x200000/2 + m_bg2_bank * 0x80000/2 + tile_index];
90   SET_TILE_INFO_MEMBER(2, code, code >> 12, 0);
8391}
8492
8593TILE_GET_INFO_MEMBER(cultures_state::get_bg0_tile_info)
8694{
87   int code = m_bg0_videoram[tile_index * 2] + (m_bg0_videoram[tile_index * 2 + 1] << 8);
95   int const code = m_bg0_videoram[tile_index * 2] + (m_bg0_videoram[tile_index * 2 + 1] << 8);
8896   SET_TILE_INFO_MEMBER(0, code, code >> 12, 0);
8997}
9098
r242231r242232
97105   m_bg1_tilemap->set_transparent_pen(0);
98106   m_bg0_tilemap->set_transparent_pen(0);
99107
100   m_bg0_tilemap->set_scrolldx(502, 10);
101   m_bg1_tilemap->set_scrolldx(502, 10);
102   m_bg2_tilemap->set_scrolldx(502, 10);
108   m_bg0_tilemap->set_scrolldx(502, -118);
109   m_bg1_tilemap->set_scrolldx(502, -118);
110   m_bg2_tilemap->set_scrolldx(502, -118);
103111
104   m_bg0_tilemap->set_scrolldy(255, 0);
105   m_bg1_tilemap->set_scrolldy(255, 0);
106   m_bg2_tilemap->set_scrolldy(255, 0);
112   m_bg0_tilemap->set_scrolldy(255, -16);
113   m_bg1_tilemap->set_scrolldy(255, -16);
114   m_bg2_tilemap->set_scrolldy(255, -16);
107115}
108116
109117UINT32 cultures_state::screen_update_cultures(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
r242231r242232
137145
138146WRITE8_MEMBER(cultures_state::cpu_bankswitch_w)
139147{
140   membank("bank1")->set_entry(data & 0x0f);
141   m_video_bank = ~data & 0x20;
148   m_prgbank->set_entry(data & 0x0f);
149   m_vrambank->set_bank((data & 0x20)>>5);
142150}
143151
152
144153WRITE8_MEMBER(cultures_state::bg0_videoram_w)
145154{
146   if (m_video_bank == 0)
147   {
148      int r, g, b, datax;
149      m_paletteram[offset] = data;
150      offset >>= 1;
151      datax = m_paletteram[offset * 2] + 256 * m_paletteram[offset * 2 + 1];
152
153      r = ((datax >> 7) & 0x1e) | ((datax & 0x4000) ? 0x1 : 0);
154      g = ((datax >> 3) & 0x1e) | ((datax & 0x2000) ? 0x1 : 0);
155      b = ((datax << 1) & 0x1e) | ((datax & 0x1000) ? 0x1 : 0);
156
157      m_palette->set_pen_color(offset, pal5bit(r), pal5bit(g), pal5bit(b));
158   }
159   else
160   {
161      m_bg0_videoram[offset] = data;
162      m_bg0_tilemap->mark_tile_dirty(offset >> 1);
163   }
155   m_bg0_videoram[offset] = data;
156   m_bg0_tilemap->mark_tile_dirty(offset >> 1);
164157}
165158
166159WRITE8_MEMBER(cultures_state::misc_w)
167160{
168   int new_bank = data & 0xf;
169
170   if (m_old_bank != new_bank)
171   {
172      // oki banking
173      UINT8 *src = memregion("oki")->base() + 0x40000 + 0x20000 * new_bank;
174      UINT8 *dst = memregion("oki")->base() + 0x20000;
175      memcpy(dst, src, 0x20000);
176
177      m_old_bank = new_bank;
178   }
179
161   m_okibank->set_entry(data&0x0f);
180162   m_irq_enable = data & 0x80;
181163}
182164
r242231r242232
196178   coin_counter_w(machine(), 0, data & 0x10);
197179}
198180
181
182static ADDRESS_MAP_START( oki_map, AS_0, 8, cultures_state )
183   AM_RANGE(0x00000, 0x1ffff) AM_ROM
184   AM_RANGE(0x20000, 0x3ffff) AM_ROMBANK("okibank")
185ADDRESS_MAP_END
186
187static ADDRESS_MAP_START( vrambank_map, AS_PROGRAM, 8, cultures_state )
188   AM_RANGE(0x0000, 0x3fff) AM_RAM_WRITE(bg0_videoram_w) AM_SHARE("bg0_videoram")   
189   AM_RANGE(0x4000, 0x6fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
190ADDRESS_MAP_END
191
199192static ADDRESS_MAP_START( cultures_map, AS_PROGRAM, 8, cultures_state )
200193   AM_RANGE(0x0000, 0x3fff) AM_ROM
201   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
202   AM_RANGE(0x8000, 0xbfff) AM_RAM_WRITE(bg0_videoram_w) AM_SHARE("bg0_videoram")
194   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("prgbank")
195   AM_RANGE(0x8000, 0xbfff) AM_DEVICE("vrambank", address_map_bank_device, amap8)
203196   AM_RANGE(0xc000, 0xdfff) AM_RAM
204197   AM_RANGE(0xf000, 0xffff) AM_RAM
205198ADDRESS_MAP_END
r242231r242232
364357};
365358
366359static GFXDECODE_START( culture )
367   GFXDECODE_ENTRY("gfx1", 0, gfxlayout, 0x0000, 0x10 )
368   GFXDECODE_ENTRY("gfx2", 0, gfxlayout, 0x1000, 0x10 )
369   GFXDECODE_ENTRY("gfx3", 0, gfxlayout, 0x1000, 0x10 )
360   GFXDECODE_ENTRY("bg0", 0, gfxlayout, 0x0000, 16 )
361   GFXDECODE_ENTRY("bg1", 0, gfxlayout, 0x1000, 8 )
362   GFXDECODE_ENTRY("bg2", 0, gfxlayout, 0x1000, 8 )
370363GFXDECODE_END
371364
372365INTERRUPT_GEN_MEMBER(cultures_state::cultures_interrupt)
r242231r242232
377370
378371void cultures_state::machine_start()
379372{
380   UINT8 *ROM = memregion("maincpu")->base();
373   m_prgbank->configure_entries(0, 16, memregion("maincpu")->base(), 0x4000);
374   m_okibank->configure_entries(0, 0x200000 / 0x20000, memregion("oki")->base(), 0x20000);
375   m_okibank->set_entry(0);
381376
382   membank("bank1")->configure_entries(0, 16, &ROM[0x0000], 0x4000);
383
384   save_item(NAME(m_paletteram));
385   save_item(NAME(m_old_bank));
386   save_item(NAME(m_video_bank));
387377   save_item(NAME(m_irq_enable));
388378   save_item(NAME(m_bg1_bank));
389379   save_item(NAME(m_bg2_bank));
r242231r242232
391381
392382void cultures_state::machine_reset()
393383{
394   m_old_bank = -1;
395   m_video_bank = 0;
384   m_okibank->set_entry(0);
385   m_vrambank->set_bank(1);
396386   m_irq_enable = 0;
397387   m_bg1_bank = 0;
398388   m_bg2_bank = 0;
399389}
400390
391
392
401393static MACHINE_CONFIG_START( cultures, cultures_state )
402394
403395   /* basic machine hardware */
r242231r242232
406398   MCFG_CPU_IO_MAP(cultures_io_map)
407399   MCFG_CPU_VBLANK_INT_DRIVER("screen", cultures_state,  cultures_interrupt)
408400
401   MCFG_DEVICE_ADD("vrambank", ADDRESS_MAP_BANK, 0)
402   MCFG_DEVICE_PROGRAM_MAP(vrambank_map)
403   MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
404   MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
405   MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(15)
406   MCFG_ADDRESS_MAP_BANK_STRIDE(0x4000)
409407
408
410409   /* video hardware */
411410   MCFG_SCREEN_ADD("screen", RASTER)
412411   MCFG_SCREEN_REFRESH_RATE(60)
r242231r242232
417416   MCFG_SCREEN_PALETTE("palette")
418417
419418   MCFG_GFXDECODE_ADD("gfxdecode", "palette", culture)
420   MCFG_PALETTE_ADD("palette", 0x2000)
419   MCFG_PALETTE_ADD("palette", 0x3000/2)
420   MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0)
421421
422
423422   /* sound hardware */
424423   MCFG_SPEAKER_STANDARD_MONO("mono")
425424
426   MCFG_OKIM6295_ADD("oki", (MCLK/1024)*132, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
425   MCFG_OKIM6295_ADD("oki", MCLK/8, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
427426   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
427   MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
428
428429MACHINE_CONFIG_END
429430
430431/*
r242231r242232
471472   ROM_REGION( 0x40000, "maincpu", 0 )
472473   ROM_LOAD( "ma01.u12",     0x000000, 0x040000, CRC(f57417b3) SHA1(9a2a50222f54e5da9bc5c66863b8be16e33b171f) )
473474
474   ROM_REGION( 0x300000, "gfx1", 0 )
475   ROM_REGION( 0x400000, "bg0", ROMREGION_ERASE00 )
475476   ROM_LOAD( "bg0c.u45",     0x000000, 0x200000, CRC(ad2e1263) SHA1(b28a3d82aaa0421a7b4df837814147b109e7d1a5) )
476477   ROM_LOAD( "bg0c2.u46",    0x200000, 0x100000, CRC(97c71c09) SHA1(ffbcee1d9cb39d0824f3aa652c3a24579113cf2e) )
477
478   ROM_REGION( 0x400000, "gfx2", ROMREGION_ERASE00 )
479   ROM_LOAD( "bg1c.u80",     0x000000, 0x200000, CRC(9ab99bd9) SHA1(bce41b6f5d83c8262ba8d37b2dfcd5d7a5e7ace7) )
480   ROM_LOAD( "bg2t.u79",     0x200000, 0x100000, CRC(0610a79f) SHA1(9fc6b2e5c573ed682b2f7fa462c8f42ff99da5ba) )
481478   /* 0x300000 - 0x3fffff empty */
482479
483   ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 )
480   ROM_REGION16_LE( 0x400000, "bg1", ROMREGION_ERASE00 )
484481   ROM_LOAD( "bg2c.u68",     0x000000, 0x200000, CRC(fa598644) SHA1(532249e456c34f18a787d5a028df82f2170f604d) )
485482   ROM_LOAD( "bg1t.u67",     0x200000, 0x100000, CRC(d2e594ee) SHA1(a84b5ab62dec1867d433ccaeb1381e7593958cf0) )
486483   /* 0x300000 - 0x3fffff empty */
487484
488   ROM_REGION( 0x240000, "oki", 0 )
489   ROM_LOAD( "pcm.u87",      0x040000, 0x200000, CRC(84206475) SHA1(d1423bd5c7425e121fb4e7845cf57801e9afa7b3) )
490   ROM_RELOAD(               0x000000, 0x020000 )
485   ROM_REGION16_LE( 0x400000, "bg2", ROMREGION_ERASE00 )
486   ROM_LOAD( "bg1c.u80",     0x000000, 0x200000, CRC(9ab99bd9) SHA1(bce41b6f5d83c8262ba8d37b2dfcd5d7a5e7ace7) )
487   ROM_LOAD( "bg2t.u79",     0x200000, 0x100000, CRC(0610a79f) SHA1(9fc6b2e5c573ed682b2f7fa462c8f42ff99da5ba) )
488   /* 0x300000 - 0x3fffff empty */
489
490   ROM_REGION( 0x200000, "oki", 0 )
491   ROM_LOAD( "pcm.u87",      0x000000, 0x200000, CRC(84206475) SHA1(d1423bd5c7425e121fb4e7845cf57801e9afa7b3) )
491492ROM_END
492493
493494
trunk/src/mame/drivers/dietgo.c
r242231r242232
142142   PORT_DIPSETTING(      0x2000, DEF_STR( Off ) )
143143   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
144144   PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) // Demo_Sounds ) )
145   PORT_DIPSETTING(      0x4000, DEF_STR( Off ) ) // Players dont move in attract mode if on!?
145   PORT_DIPSETTING(      0x4000, DEF_STR( Off ) ) // Players don't move in attract mode if on!?
146146   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
147147   PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
148148   PORT_DIPSETTING(      0x8000, DEF_STR( Off ) )
trunk/src/mame/drivers/ecoinfr.c
r242231r242232
16941694GAME( 19??, ec_rdht7,   0        , ecoinfr,   ecoinfr_barx, ecoinfr_state,   ecoinfrmab,    ROT0,  "Concept Games Ltd", "Red Hot 7 (MAB PCB?) (Concept Games Ltd) (?)"      , GAME_FLAGS)
16951695GAME( 19??, ec_unkt,    0        , ecoinfr,   ecoinfr_barx, ecoinfr_state,   ecoinfrmab,    ROT0,  "Concept Games Ltd", "unknown 'T' (MAB PCB?) (Concept Games Ltd) (?)"        , GAME_FLAGS)
16961696
1697//These look more like some variant of Astra Gaming hardware than the MAB PCB, but I can't be sure. Certainly they dont seem to be on the base hardware
1697//These look more like some variant of Astra Gaming hardware than the MAB PCB, but I can't be sure. Certainly they don't seem to be on the base hardware
16981698GAME( 19??, ec_gold7,   0        , ecoinfr,   ecoinfr_barx, ecoinfr_state,   ecoinfrmab,    ROT0,  "Concept Games Ltd", "Golden 7 (Concept Games Ltd) (?)"      , GAME_FLAGS)
16991699GAME( 19??, ec_mgbel,   0        , ecoinfr,   ecoinfr_barx, ecoinfr_state,   ecoinfrmab,    ROT0,  "Concept Games Ltd", "Megabell (Concept Games Ltd) (?)"      , GAME_FLAGS)
17001700GAME( 19??, ec_jackb,   0        , ecoinfr,   ecoinfr_barx, ecoinfr_state,   ecoinfrmab,    ROT0,  "Concept Games Ltd", "Jackpot Bars (MAB PCB?) (Concept Games Ltd) (?)"       , GAME_FLAGS)
trunk/src/mame/drivers/gaelco3d.c
r242231r242232
523523 *
524524 *************************************/
525525
526/* These are the some of the control register, we dont use them all */
526/* These are some of the control registers. We don't use them all */
527527enum
528528{
529529   S1_AUTOBUF_REG = 15,
r242231r242232
663663         /* get the base value, since we need to keep it around for wrapping */
664664         source -= m_adsp_incs;
665665
666         /* make it go back one so we dont lose the first sample */
666         /* make it go back one so we don't lose the first sample */
667667         m_adsp->set_state_int(ADSP2100_I0 + m_adsp_ireg, source);
668668
669669         /* save it as it is now */
trunk/src/mame/drivers/galpani2.c
r242231r242232
7171     PISCES - NEC uPD78324 series MCU with 32k internal rom. Clock 13.500MHz [27/2] on pins 51 & 52
7272      VSync - 59.1856Hz
7373      HSync - 15.625kHz
74
74     
75      (TODO: VTOTAL = 264, HTOTAL = 432, pixel clock 27 MHz / 4)
76     
7577***************************************************************************/
7678
7779#include "emu.h"
r242231r242232
120122
121123***************************************************************************/
122124
125void galpani2_state::machine_start()
126{
127   UINT8 *ROM = memregion("subdata")->base();
128   membank("subdatabank")->configure_entries(0, 0x2000000/0x0800000, ROM, 0x0800000);
129   membank("subdatabank")->set_entry(0);
123130
131}
132
124133void galpani2_state::machine_reset()
125134{
126135   machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(50)); //initial mcu xchk
r242231r242232
337346   AM_RANGE(0x300000, 0x301fff) AM_RAM                                             // ?
338347   AM_RANGE(0x302000, 0x303fff) AM_RAM AM_SHARE("spriteram")   // Sprites
339348   AM_RANGE(0x304000, 0x30401f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w)
340   AM_RANGE(0x308000, 0x308001) AM_WRITENOP                                        // ? 0 at startup
341   AM_RANGE(0x30c000, 0x30c001) AM_WRITENOP                                        // ? hblank effect ?
342   AM_RANGE(0x310000, 0x3101ff) AM_RAM_WRITE(galpani2_palette_0_w) AM_SHARE("palette.0")    // ?
349//   AM_RANGE(0x308000, 0x308001) AM_WRITENOP                                        // ? 0 at startup
350//   AM_RANGE(0x30c000, 0x30c001) AM_WRITENOP                                        // ? hblank effect ?
351   AM_RANGE(0x310000, 0x3101ff) AM_RAM_DEVWRITE("bg8palette", palette_device, write) AM_SHARE("bg8palette")    // ?
343352   AM_RANGE(0x314000, 0x314001) AM_WRITENOP                                        // ? flip backgrounds ?
344353   AM_RANGE(0x318000, 0x318001) AM_READWRITE(galpani2_eeprom_r, galpani2_eeprom_w) // EEPROM
345354   AM_RANGE(0x380000, 0x387fff) AM_RAM                                             // Palette?
346355   AM_RANGE(0x388000, 0x38ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")   // Palette
347   AM_RANGE(0x390000, 0x3901ff) AM_WRITENOP                                        // ? at startup of service mode
356//   AM_RANGE(0x390000, 0x3901ff) AM_WRITENOP                                        // ? at startup of service mode
348357
349   AM_RANGE(0x400000, 0x43ffff) AM_RAM_WRITE(galpani2_bg8_0_w) AM_SHARE("bg8.0")    // Background 0
358   AM_RANGE(0x400000, 0x43ffff) AM_RAM AM_SHARE("bg8.0")    // Background 0
350359   AM_RANGE(0x440000, 0x440001) AM_RAM AM_SHARE("bg8_scrollx.0")           // Background 0 Scroll X
351360   AM_RANGE(0x480000, 0x480001) AM_RAM AM_SHARE("bg8_scrolly.0")           // Background 0 Scroll Y
352   AM_RANGE(0x4c0000, 0x4c0001) AM_WRITENOP                                        // ? 0 at startup only
353   AM_RANGE(0x500000, 0x53ffff) AM_RAM_WRITE(galpani2_bg8_1_w) AM_SHARE("bg8.1")    // Background 1
361//   AM_RANGE(0x4c0000, 0x4c0001) AM_WRITENOP                                        // ? 0 at startup only
362   AM_RANGE(0x500000, 0x53ffff) AM_RAM AM_SHARE("bg8.1")    // Background 1
354363   AM_RANGE(0x540000, 0x540001) AM_RAM AM_SHARE("bg8_scrollx.1")           // Background 1 Scroll X
364   AM_RANGE(0x580000, 0x580001) AM_RAM AM_SHARE("bg8_scrolly.1")           // Background 1 Scroll Y
365//   AM_RANGE(0x5c0000, 0x5c0001) AM_WRITENOP                                        // ? 0 at startup only
355366
356367   AM_RANGE(0x540572, 0x540573) AM_READNOP                                         // ? galpani2 at F0A4
357368   AM_RANGE(0x54057a, 0x54057b) AM_READNOP                                         // ? galpani2 at F148
r242231r242232
363374   AM_RANGE(0x5405c2, 0x5405c3) AM_READNOP                                         // ? galpani2 at F0A4 and F148
364375   AM_RANGE(0x5405ca, 0x5405cb) AM_READNOP                                         // ? galpani2 at F148
365376
366   AM_RANGE(0x580000, 0x580001) AM_RAM AM_SHARE("bg8_scrolly.1")           // Background 1 Scroll Y
367   AM_RANGE(0x5c0000, 0x5c0001) AM_WRITENOP                                        // ? 0 at startup only
368   AM_RANGE(0x600000, 0x600001) AM_WRITENOP                                        // Watchdog
377   AM_RANGE(0x600000, 0x600001) AM_NOP                                        // Watchdog
369378   AM_RANGE(0x640000, 0x640001) AM_WRITE8(galpani2_mcu_init_w, 0x00ff          )   // ? 0 before resetting and at startup, Reset mcu ?
370379   AM_RANGE(0x680000, 0x680001) AM_WRITE8(galpani2_mcu_nmi1_w, 0x00ff)             // ? 0 -> 1 -> 0 (lev 5) / 0 -> $10 -> 0
371380   AM_RANGE(0x6c0000, 0x6c0001) AM_WRITE8(galpani2_coin_lockout_w, 0xff00      )   // Coin + Card Lockout
r242231r242232
389398***************************************************************************/
390399
391400
392READ16_MEMBER(galpani2_state::galpani2_bankedrom_r)
401WRITE16_MEMBER(galpani2_state::subdatabank_select_w)
393402{
394   UINT16 *ROM = (UINT16 *) memregion( "user1" )->base();
395   size_t    len = memregion( "user1" )->bytes() / 2;
403   data &= mem_mask;
396404
397   offset += (0x800000/2) * (*m_rombank & 0x0003);
398
399   if ( offset < len ) return ROM[offset];
400   else                return 0xffff; //floating bus for absent ROMs
405   if (data & 0xfffc) printf("subdatabank_select_w %04x\n", data);
406   membank("subdatabank")->set_entry(data&3);
401407}
402408
409
403410static ADDRESS_MAP_START( galpani2_mem2, AS_PROGRAM, 16, galpani2_state )
404411   AM_RANGE(0x000000, 0x03ffff) AM_ROM                                                             // ROM
405412   AM_RANGE(0x100000, 0x13ffff) AM_RAM AM_SHARE("ram2")                                        // Work RAM
406   AM_RANGE(0x400000, 0x4fffff) AM_RAM_WRITE(galpani2_bg15_w) AM_SHARE("bg15")  // bg15
407   AM_RANGE(0x500000, 0x5fffff) AM_RAM                                                             // bg15
408   AM_RANGE(0x600000, 0x600001) AM_NOP // ? 0 at startup only
409   AM_RANGE(0x640000, 0x640001) AM_WRITENOP                                // ? 0 at startup only
410   AM_RANGE(0x680000, 0x680001) AM_WRITENOP                                // ? 0 at startup only
411   AM_RANGE(0x6c0000, 0x6c0001) AM_WRITENOP                                // ? 0 at startup only
412   AM_RANGE(0x700000, 0x700001) AM_WRITENOP                                // Watchdog
413   AM_RANGE(0x400000, 0x5fffff) AM_RAM AM_SHARE("bg15")  // bg15
414//   AM_RANGE(0x600000, 0x600001) AM_NOP // ? 0 at startup only
415//   AM_RANGE(0x640000, 0x640001) AM_WRITENOP                                // ? 0 at startup only
416//   AM_RANGE(0x680000, 0x680001) AM_WRITENOP                                // ? 0 at startup only
417//   AM_RANGE(0x6c0000, 0x6c0001) AM_WRITENOP                                // ? 0 at startup only
418   AM_RANGE(0x700000, 0x700001) AM_NOP                                 // Watchdog
413419//  AM_RANGE(0x740000, 0x740001) AM_WRITENOP                                // ? Reset mcu
414420   AM_RANGE(0x780000, 0x780001) AM_WRITE8(galpani2_mcu_nmi2_w, 0x00ff)             // ? 0 -> 1 -> 0 (lev 5)
415   AM_RANGE(0x7c0000, 0x7c0001) AM_WRITEONLY AM_SHARE("rombank")   // Rom Bank
416   AM_RANGE(0x800000, 0xffffff) AM_READ(galpani2_bankedrom_r       )       // Banked ROM
421   AM_RANGE(0x7c0000, 0x7c0001) AM_WRITE(subdatabank_select_w)   // Rom Bank
422   AM_RANGE(0x800000, 0xffffff) AM_ROMBANK("subdatabank")
417423ADDRESS_MAP_END
418424
419425/***************************************************************************
r242231r242232
514520   PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
515521   PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
516522   PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
517// PORT_SERVICE_NO_TOGGLE( 0x2000, IP_ACTIVE_LOW )
523    PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_SERVICE2  ) // this button is used in gp2se as an alt way to bring up the service menu, booting with it held down breaks the game tho!
518524   PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_TILT     )
519525   PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_SERVICE1 )
520526
r242231r242232
626632   MCFG_SCREEN_SIZE(320, 256)
627633   MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 256-1-16)
628634   MCFG_SCREEN_UPDATE_DRIVER(galpani2_state, screen_update_galpani2)
629   MCFG_SCREEN_PALETTE("palette")
630635
631636   MCFG_GFXDECODE_ADD("gfxdecode", "palette", galpani2)
632   MCFG_PALETTE_ADD("palette", 0x4000 + 0x200 + 0x8000)    // sprites, bg8, bg15
637   MCFG_PALETTE_ADD("palette", 0x4000)    // sprites
633638   MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB)
634   MCFG_PALETTE_INIT_OWNER(galpani2_state, galpani2)
635639
640   MCFG_PALETTE_ADD("bg8palette", 0x200/2) // bg8
641   MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB)
642
643   MCFG_PALETTE_ADD("bgpalette", 32768) /* 32768 static colors for the bg */
644   MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB)
645   MCFG_PALETTE_INIT_OWNER(galpani2_state,galpani2)
646
636647   MCFG_DEVICE_ADD_KC002_SPRITES
637648   kaneko16_sprite_device::set_offsets(*device, 0x10000 - 0x16c0 + 0xc00, 0);
638649   MCFG_KANEKO16_SPRITE_GFXDECODE("gfxdecode")
r242231r242232
731742   ROM_LOAD16_BYTE( "g002a2.u64-1", 0x000000, 0x020000, CRC(c0b94eaf) SHA1(4f3a65b238b31ee8d256b7025253f01eaf6e55d5) )
732743   ROM_LOAD16_BYTE( "g003a2.u63-1", 0x000001, 0x020000, CRC(0d30725d) SHA1(d4614f9ffb930c4ea36cb3fbacffe63060e92402) )
733744
734   ROM_REGION16_BE( 0x2000000, "user1", 0 )    /* Backgrounds (CPU2) */
745   ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF )    /* Backgrounds (CPU2) */
735746   ROM_LOAD( "gp2-300a.052", 0x0000000, 0x100000, CRC(09ebedba) SHA1(3c06614633f0da03facb5199deac492b8ce07257) )
736747   ROM_LOAD( "gp2-300b.053", 0x0100000, 0x100000, CRC(d7d12920) SHA1(4b6e01cc0ac5192758f4b3d26f102905b2b5e8ac) )
737748   ROM_LOAD( "gp2-301.035", 0x0200000, 0x200000, CRC(e71e749d) SHA1(420c4c085e89d9641a84e34fa870df2bc02165b6) )
r242231r242232
777788   ROM_LOAD16_BYTE( "g002a1-u125-1.bin", 0x000000, 0x020000, CRC(100e76b3) SHA1(24a259ee427cd7a6e487520a712dc7ef632dc5d6) )
778789   ROM_LOAD16_BYTE( "g003a1-u126-1.bin", 0x000001, 0x020000, CRC(0efe7835) SHA1(c7eecacdf101c0515da504cc77512f27b61b2ab7) )
779790
780   ROM_REGION16_BE( 0x2000000, "user1", 0 )    /* Backgrounds (CPU2) */
791   ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF )    /* Backgrounds (CPU2) */
781792   ROM_LOAD( "gp2-300a.052", 0x0000000, 0x100000, CRC(09ebedba) SHA1(3c06614633f0da03facb5199deac492b8ce07257) )
782793   ROM_LOAD( "gp2-300b.053", 0x0100000, 0x100000, CRC(d7d12920) SHA1(4b6e01cc0ac5192758f4b3d26f102905b2b5e8ac) )
783794   ROM_LOAD( "gp2-301.035", 0x0200000, 0x200000, CRC(e71e749d) SHA1(420c4c085e89d9641a84e34fa870df2bc02165b6) )
r242231r242232
824835   ROM_LOAD16_BYTE( "g002a2.u64-1", 0x000000, 0x020000, CRC(c0b94eaf) SHA1(4f3a65b238b31ee8d256b7025253f01eaf6e55d5) )
825836   ROM_LOAD16_BYTE( "g003a2.u63-1", 0x000001, 0x020000, CRC(0d30725d) SHA1(d4614f9ffb930c4ea36cb3fbacffe63060e92402) )
826837
827   ROM_REGION16_BE( 0x2000000, "user1", 0 )    /* Backgrounds (CPU2) */
838   ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF )    /* Backgrounds (CPU2) */
828839   ROM_LOAD( "gp2-300a.052", 0x0000000, 0x100000, CRC(09ebedba) SHA1(3c06614633f0da03facb5199deac492b8ce07257) )
829840   ROM_LOAD( "gp2-300b.053", 0x0100000, 0x100000, CRC(d7d12920) SHA1(4b6e01cc0ac5192758f4b3d26f102905b2b5e8ac) )
830841   ROM_LOAD( "gp2-301.035", 0x0200000, 0x200000, CRC(e71e749d) SHA1(420c4c085e89d9641a84e34fa870df2bc02165b6) )
r242231r242232
873884   ROM_LOAD16_BYTE( "g003g1.u65-2", 0x000000, 0x020000, CRC(c0b94eaf) SHA1(4f3a65b238b31ee8d256b7025253f01eaf6e55d5) )
874885   ROM_LOAD16_BYTE( "g002g1.u64-2", 0x000001, 0x020000, CRC(0d30725d) SHA1(d4614f9ffb930c4ea36cb3fbacffe63060e92402) )
875886
876   ROM_REGION16_BE( 0x2000000, "user1", 0 )    /* Backgrounds (CPU2) */
887   ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF )    /* Backgrounds (CPU2) */
877888   ROM_LOAD( "gp2-300a.052", 0x0000000, 0x100000, CRC(09ebedba) SHA1(3c06614633f0da03facb5199deac492b8ce07257) )
878889   ROM_LOAD( "gp2-300b.053", 0x0100000, 0x100000, CRC(d7d12920) SHA1(4b6e01cc0ac5192758f4b3d26f102905b2b5e8ac) )
879890   ROM_LOAD( "gp2-301.035", 0x0200000, 0x200000, CRC(e71e749d) SHA1(420c4c085e89d9641a84e34fa870df2bc02165b6) )
r242231r242232
921932   ROM_LOAD16_BYTE( "g002t1.125", 0x000000, 0x020000, CRC(a3034e1c) SHA1(493e4be36f2aea0083d5d37e16486ed66dab952e) )
922933   ROM_LOAD16_BYTE( "g003t1.126", 0x000001, 0x020000, CRC(20d3a2ad) SHA1(93450e5a23456c242ebf1a3560013a17c6b05354) )
923934
924   ROM_REGION16_BE( 0x2000000, "user1", 0 )    /* Backgrounds (CPU2) */
935   ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF )    /* Backgrounds (CPU2) */
925936   ROM_LOAD16_BYTE( "g300a0.u44-00", 0x0000000, 0x080000, CRC(50406294) SHA1(fc1165b7b31a44ab204cd5ac3e7b2733ed6b1534) )
926937   ROM_LOAD16_BYTE( "g300a1.u41-00", 0x0000001, 0x080000, CRC(d26b7c4f) SHA1(b491170010977ba1e5111893937cc6bab0539e7d) )
927938   ROM_LOAD16_BYTE( "g300b0.u45-00", 0x0100000, 0x080000, CRC(9637934c) SHA1(d3b39d9f44825bdf24d4aa39ca32035bc5af4905) )
r242231r242232
973984   ROM_LOAD16_BYTE( "g002i1.125", 0x000000, 0x020000, CRC(a3034e1c) SHA1(493e4be36f2aea0083d5d37e16486ed66dab952e) )
974985   ROM_LOAD16_BYTE( "g003i1.126", 0x000001, 0x020000, CRC(20d3a2ad) SHA1(93450e5a23456c242ebf1a3560013a17c6b05354) )
975986
976   ROM_REGION16_BE( 0x2000000, "user1", 0 )    /* Backgrounds (CPU2) */
987   ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF )    /* Backgrounds (CPU2) */
977988   ROM_LOAD16_BYTE( "g300a0.u44-00", 0x0000000, 0x080000, CRC(50406294) SHA1(fc1165b7b31a44ab204cd5ac3e7b2733ed6b1534) )
978989   ROM_LOAD16_BYTE( "g300a1.u41-00", 0x0000001, 0x080000, CRC(d26b7c4f) SHA1(b491170010977ba1e5111893937cc6bab0539e7d) )
979990   ROM_LOAD16_BYTE( "g300b0.u45-00", 0x0100000, 0x080000, CRC(9637934c) SHA1(d3b39d9f44825bdf24d4aa39ca32035bc5af4905) )
r242231r242232
10251036   ROM_LOAD16_BYTE( "g002t1.125", 0x000000, 0x020000, CRC(a3034e1c) SHA1(493e4be36f2aea0083d5d37e16486ed66dab952e) )
10261037   ROM_LOAD16_BYTE( "g003t1.126", 0x000001, 0x020000, CRC(20d3a2ad) SHA1(93450e5a23456c242ebf1a3560013a17c6b05354) )
10271038
1028   ROM_REGION16_BE( 0x2000000, "user1", 0 )    /* Backgrounds (CPU2) */
1039   ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF )    /* Backgrounds (CPU2) */
10291040   ROM_LOAD( "gp2-300a.052", 0x0000000, 0x100000, CRC(09ebedba) SHA1(3c06614633f0da03facb5199deac492b8ce07257) )
10301041   ROM_LOAD( "gp2-300b.053", 0x0100000, 0x100000, CRC(d7d12920) SHA1(4b6e01cc0ac5192758f4b3d26f102905b2b5e8ac) )
10311042   ROM_LOAD( "gp2-301.035", 0x0200000, 0x200000, CRC(e71e749d) SHA1(420c4c085e89d9641a84e34fa870df2bc02165b6) )
r242231r242232
10901101   ROM_LOAD16_BYTE( "g002j1.64",  0x000000, 0x020000, CRC(5e523829) SHA1(dad11e4a3348c988ff658609cf78a3fbee58064e) )
10911102   ROM_LOAD16_BYTE( "g003j1.63",  0x000001, 0x020000, CRC(2a0d5f89) SHA1(0a7031c4b8b7bc757da25250dbb5fa1004205aeb) )
10921103
1093   ROM_REGION16_BE( 0x2000000, "user1", 0 )    /* Backgrounds (CPU2) */
1104   ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF )    /* Backgrounds (CPU2) */
10941105   ROM_LOAD( "gp2-300j.175", 0x000000, 0x200000, CRC(3a0afc1d) SHA1(91fba9074cc3c28e919053f0ea07b28d88b2ce5f) )
10951106   ROM_LOAD( "gp2-301j.176", 0x200000, 0x200000, CRC(5b6d1709) SHA1(a7d35247fe71895f2b6169409aa0bdaef446804c) )
10961107   ROM_LOAD16_BYTE( "gp2-302a.177", 0x400000, 0x100000, CRC(311fa273) SHA1(c2adeac45be701f6f474841755fac4347d44f844) )
r242231r242232
11211132   ROM_LOAD16_BYTE( "g002j4.u64",  0x000000, 0x020000, CRC(bcd4edd9) SHA1(17ae6fbf75d8e5333133737de926a36f5cd29661) )
11221133   ROM_LOAD16_BYTE( "g003j4.u63",  0x000001, 0x020000, CRC(2fbe0194) SHA1(52da771ba813b27ec1a996b237c14dab9b33db82) )
11231134
1124   ROM_REGION16_BE( 0x2000000, "user1", 0 )    /* Backgrounds (CPU2) */
1135   ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF )    /* Backgrounds (CPU2) */
11251136   ROM_LOAD( "gp2-300-j-0071.u175", 0x000000, 0x200000, CRC(3a0afc1d) SHA1(91fba9074cc3c28e919053f0ea07b28d88b2ce5f) )
11261137   ROM_LOAD( "gp2-301-j-0072.u176", 0x200000, 0x200000, CRC(5b6d1709) SHA1(a7d35247fe71895f2b6169409aa0bdaef446804c) )
11271138   ROM_LOAD16_BYTE( "gp2-302a-0057.u177", 0x400000, 0x100000, CRC(311fa273) SHA1(c2adeac45be701f6f474841755fac4347d44f844) )
r242231r242232
11581169   ROM_LOAD16_BYTE( "g002e3.u64-3",  0x000000, 0x020000, CRC(5e523829) SHA1(dad11e4a3348c988ff658609cf78a3fbee58064e) )
11591170   ROM_LOAD16_BYTE( "g003e3.u63-3",  0x000001, 0x020000, CRC(2a0d5f89) SHA1(0a7031c4b8b7bc757da25250dbb5fa1004205aeb) )
11601171
1161   ROM_REGION16_BE( 0x2000000, "user1", 0 )    /* Backgrounds (CPU2) */
1172   ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF )    /* Backgrounds (CPU2) */
11621173   ROM_LOAD( "gp2-300-j-0071.u175", 0x000000, 0x200000, CRC(3a0afc1d) SHA1(91fba9074cc3c28e919053f0ea07b28d88b2ce5f) )
11631174   ROM_LOAD( "gp2-301-j-0072.u176", 0x200000, 0x200000, CRC(5b6d1709) SHA1(a7d35247fe71895f2b6169409aa0bdaef446804c) )
11641175   ROM_LOAD16_BYTE( "gp2-302a-0057.u177", 0x400000, 0x100000, CRC(311fa273) SHA1(c2adeac45be701f6f474841755fac4347d44f844) )
trunk/src/mame/drivers/gts1.c
r242231r242232
6868
6969#include "machine/genpin.h"
7070#include "cpu/pps4/pps4.h"
71//#include "gts1.lh"
71#include "gts1.lh"
7272
73#define VERBOSE    1
74
75#if VERBOSE
76#define LOG(x) logerror x
77#else
78#define LOG(x)
79#endif
80
7381class gts1_state : public genpin_class
7482{
7583public:
76   gts1_state(const machine_config &mconfig, device_type type, const char *tag)
77      : genpin_class(mconfig, type, tag)
78      , m_maincpu(*this, "maincpu")
79   { }
84    gts1_state(const machine_config &mconfig, device_type type, const char *tag)
85        : genpin_class(mconfig, type, tag)
86        , m_maincpu(*this, "maincpu")
87    { }
8088
81   DECLARE_DRIVER_INIT(gts1);
89    DECLARE_DRIVER_INIT(gts1);
90    DECLARE_READ8_MEMBER (gts1_pa_r);
91    DECLARE_WRITE8_MEMBER(gts1_pa_w);
92    DECLARE_WRITE8_MEMBER(gts1_pb_w);
8293private:
83   virtual void machine_reset();
84   required_device<cpu_device> m_maincpu;
94    virtual void machine_reset();
95    required_device<cpu_device> m_maincpu;
96    UINT8 m_6351_addr;
8597};
8698
87
8899static ADDRESS_MAP_START( gts1_map, AS_PROGRAM, 8, gts1_state )
89   AM_RANGE(0x0000, 0x0fff) AM_ROM
100    AM_RANGE(0x0000, 0x0fff) AM_ROM
90101ADDRESS_MAP_END
91102
92103static ADDRESS_MAP_START( gts1_data, AS_DATA, 8, gts1_state )
93   AM_RANGE(0x0000, 0x0fff) AM_RAM // not correct
104    AM_RANGE(0x0000, 0x0fff) AM_RAM // not correct
94105ADDRESS_MAP_END
95106
96107static ADDRESS_MAP_START( gts1_io, AS_IO, 8, gts1_state )
97   AM_RANGE(0x0000, 0x00ff) AM_RAM // connects to all the other chips
108    AM_RANGE(0x0000, 0x00ff) AM_RAM // connects to all the other chips
109    AM_RANGE(0x0100, 0x0100) AM_READ (gts1_pa_r) AM_WRITE(gts1_pa_w)
110    AM_RANGE(0x0101, 0x0101) AM_WRITE(gts1_pb_w)
98111ADDRESS_MAP_END
99112
100113static INPUT_PORTS_START( gts1 )
101   PORT_START("DSW0")
102   PORT_DIPNAME( 0x01, 0x00, "S01")
103   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
104   PORT_DIPSETTING(    0x01, DEF_STR( On ))
105   PORT_DIPNAME( 0x02, 0x00, "S02")
106   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
107   PORT_DIPSETTING(    0x02, DEF_STR( On ))
108   PORT_DIPNAME( 0x04, 0x00, "S03")
109   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
110   PORT_DIPSETTING(    0x04, DEF_STR( On ))
111   PORT_DIPNAME( 0x08, 0x00, "S04")
112   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
113   PORT_DIPSETTING(    0x08, DEF_STR( On ))
114   PORT_DIPNAME( 0x10, 0x00, "S05")
115   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
116   PORT_DIPSETTING(    0x10, DEF_STR( On ))
117   PORT_DIPNAME( 0x20, 0x20, "S06")
118   PORT_DIPSETTING(    0x00, DEF_STR( No ))
119   PORT_DIPSETTING(    0x20, DEF_STR( Yes ))
120   PORT_DIPNAME( 0x40, 0x40, "S07")
121   PORT_DIPSETTING(    0x00, DEF_STR( No ))
122   PORT_DIPSETTING(    0x40, DEF_STR( Yes ))
123   PORT_DIPNAME( 0x80, 0x80, "S08")
124   PORT_DIPSETTING(    0x00, DEF_STR( No ))
125   PORT_DIPSETTING(    0x80, DEF_STR( Yes ))
114    PORT_START("DSW0")
115    PORT_DIPNAME( 0x01, 0x00, "S01")
116    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
117    PORT_DIPSETTING(    0x01, DEF_STR( On ))
118    PORT_DIPNAME( 0x02, 0x00, "S02")
119    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
120    PORT_DIPSETTING(    0x02, DEF_STR( On ))
121    PORT_DIPNAME( 0x04, 0x00, "S03")
122    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
123    PORT_DIPSETTING(    0x04, DEF_STR( On ))
124    PORT_DIPNAME( 0x08, 0x00, "S04")
125    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
126    PORT_DIPSETTING(    0x08, DEF_STR( On ))
127    PORT_DIPNAME( 0x10, 0x00, "S05")
128    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
129    PORT_DIPSETTING(    0x10, DEF_STR( On ))
130    PORT_DIPNAME( 0x20, 0x20, "S06")
131    PORT_DIPSETTING(    0x00, DEF_STR( No ))
132    PORT_DIPSETTING(    0x20, DEF_STR( Yes ))
133    PORT_DIPNAME( 0x40, 0x40, "S07")
134    PORT_DIPSETTING(    0x00, DEF_STR( No ))
135    PORT_DIPSETTING(    0x40, DEF_STR( Yes ))
136    PORT_DIPNAME( 0x80, 0x80, "S08")
137    PORT_DIPSETTING(    0x00, DEF_STR( No ))
138    PORT_DIPSETTING(    0x80, DEF_STR( Yes ))
126139
127   PORT_START("DSW1")
128   PORT_DIPNAME( 0x01, 0x00, "S09")
129   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
130   PORT_DIPSETTING(    0x01, DEF_STR( On ))
131   PORT_DIPNAME( 0x02, 0x00, "S10")
132   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
133   PORT_DIPSETTING(    0x02, DEF_STR( On ))
134   PORT_DIPNAME( 0x04, 0x00, "S11")
135   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
136   PORT_DIPSETTING(    0x04, DEF_STR( On ))
137   PORT_DIPNAME( 0x08, 0x00, "S12")
138   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
139   PORT_DIPSETTING(    0x08, DEF_STR( On ))
140   PORT_DIPNAME( 0x10, 0x00, "S13")
141   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
142   PORT_DIPSETTING(    0x10, DEF_STR( On ))
143   PORT_DIPNAME( 0x20, 0x00, "S14")
144   PORT_DIPSETTING(    0x00, DEF_STR( Yes ))
145   PORT_DIPSETTING(    0x20, DEF_STR( No ))
146   PORT_DIPNAME( 0x40, 0x40, "S15")
147   PORT_DIPSETTING(    0x00, DEF_STR( No ))
148   PORT_DIPSETTING(    0x40, DEF_STR( Yes ))
149   PORT_DIPNAME( 0x80, 0x00, "S16")
150   PORT_DIPSETTING(    0x00, DEF_STR( No ))
151   PORT_DIPSETTING(    0x80, DEF_STR( Yes ))
140    PORT_START("DSW1")
141    PORT_DIPNAME( 0x01, 0x00, "S09")
142    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
143    PORT_DIPSETTING(    0x01, DEF_STR( On ))
144    PORT_DIPNAME( 0x02, 0x00, "S10")
145    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
146    PORT_DIPSETTING(    0x02, DEF_STR( On ))
147    PORT_DIPNAME( 0x04, 0x00, "S11")
148    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
149    PORT_DIPSETTING(    0x04, DEF_STR( On ))
150    PORT_DIPNAME( 0x08, 0x00, "S12")
151    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
152    PORT_DIPSETTING(    0x08, DEF_STR( On ))
153    PORT_DIPNAME( 0x10, 0x00, "S13")
154    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
155    PORT_DIPSETTING(    0x10, DEF_STR( On ))
156    PORT_DIPNAME( 0x20, 0x00, "S14")
157    PORT_DIPSETTING(    0x00, DEF_STR( Yes ))
158    PORT_DIPSETTING(    0x20, DEF_STR( No ))
159    PORT_DIPNAME( 0x40, 0x40, "S15")
160    PORT_DIPSETTING(    0x00, DEF_STR( No ))
161    PORT_DIPSETTING(    0x40, DEF_STR( Yes ))
162    PORT_DIPNAME( 0x80, 0x00, "S16")
163    PORT_DIPSETTING(    0x00, DEF_STR( No ))
164    PORT_DIPSETTING(    0x80, DEF_STR( Yes ))
152165
153   PORT_START("DSW2")
154   PORT_DIPNAME( 0x01, 0x00, "S17")
155   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
156   PORT_DIPSETTING(    0x01, DEF_STR( On ))
157   PORT_DIPNAME( 0x02, 0x00, "S18")
158   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
159   PORT_DIPSETTING(    0x02, DEF_STR( On ))
160   PORT_DIPNAME( 0x04, 0x00, "S19")
161   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
162   PORT_DIPSETTING(    0x04, DEF_STR( On ))
163   PORT_DIPNAME( 0x08, 0x00, "S20")
164   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
165   PORT_DIPSETTING(    0x08, DEF_STR( On ))
166   PORT_DIPNAME( 0x10, 0x00, "S21")
167   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
168   PORT_DIPSETTING(    0x10, DEF_STR( On ))
169   PORT_DIPNAME( 0x20, 0x00, "S22")
170   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
171   PORT_DIPSETTING(    0x20, DEF_STR( On ))
172   PORT_DIPNAME( 0x40, 0x00, "S23")
173   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
174   PORT_DIPSETTING(    0x40, DEF_STR( On ))
175   PORT_DIPNAME( 0x80, 0x00, "S24")
176   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
177   PORT_DIPSETTING(    0x80, DEF_STR( On ))
166    PORT_START("DSW2")
167    PORT_DIPNAME( 0x01, 0x00, "S17")
168    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
169    PORT_DIPSETTING(    0x01, DEF_STR( On ))
170    PORT_DIPNAME( 0x02, 0x00, "S18")
171    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
172    PORT_DIPSETTING(    0x02, DEF_STR( On ))
173    PORT_DIPNAME( 0x04, 0x00, "S19")
174    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
175    PORT_DIPSETTING(    0x04, DEF_STR( On ))
176    PORT_DIPNAME( 0x08, 0x00, "S20")
177    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
178    PORT_DIPSETTING(    0x08, DEF_STR( On ))
179    PORT_DIPNAME( 0x10, 0x00, "S21")
180    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
181    PORT_DIPSETTING(    0x10, DEF_STR( On ))
182    PORT_DIPNAME( 0x20, 0x00, "S22")
183    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
184    PORT_DIPSETTING(    0x20, DEF_STR( On ))
185    PORT_DIPNAME( 0x40, 0x00, "S23")
186    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
187    PORT_DIPSETTING(    0x40, DEF_STR( On ))
188    PORT_DIPNAME( 0x80, 0x00, "S24")
189    PORT_DIPSETTING(    0x00, DEF_STR( Off ))
190    PORT_DIPSETTING(    0x80, DEF_STR( On ))
178191INPUT_PORTS_END
179192
180193void gts1_state::machine_reset()
181194{
195    m_6351_addr = 0;
182196}
183197
184198DRIVER_INIT_MEMBER(gts1_state,gts1)
185199{
186200}
187201
202READ8_MEMBER (gts1_state::gts1_pa_r)
203{
204    // return ROM nibble
205    UINT8 *ROM = memregion("maincpu")->base();
206    UINT8 data = ROM[0x2000 + m_6351_addr] & 0x0f;
207    LOG(("%s: ROM[%03x]:%02x\n", __FUNCTION__, m_6351_addr, data));
208    return data;
209}
210
211WRITE8_MEMBER(gts1_state::gts1_pa_w)
212{
213    // write address lines 7-4
214    m_6351_addr = (m_6351_addr & 0x0f) | ((data & 0x0f) << 4);
215    LOG(("%s: ROM hi:%x addr:%02x\n", __FUNCTION__, data & 0x0f, m_6351_addr));
216}
217
218WRITE8_MEMBER(gts1_state::gts1_pb_w)
219{
220    // write address lines 3-0
221    m_6351_addr = (m_6351_addr & 0xf0) | (data & 0x0f);
222    LOG(("%s: ROM lo:%x addr:%02x\n", __FUNCTION__, data & 0x0f, m_6351_addr));
223}
224
225
188226static MACHINE_CONFIG_START( gts1, gts1_state )
189   /* basic machine hardware */
190   MCFG_CPU_ADD("maincpu", PPS4, XTAL_3_579545MHz / 18)  // divided in the CPU
191   MCFG_CPU_PROGRAM_MAP(gts1_map)
192   MCFG_CPU_DATA_MAP(gts1_data)
193   MCFG_CPU_IO_MAP(gts1_io)
227    /* basic machine hardware */
228    MCFG_CPU_ADD("maincpu", PPS4, XTAL_3_579545MHz / 18)  // divided in the CPU
229    MCFG_CPU_PROGRAM_MAP(gts1_map)
230    MCFG_CPU_DATA_MAP(gts1_data)
231    MCFG_CPU_IO_MAP(gts1_io)
194232
195   //MCFG_NVRAM_ADD_0FILL("nvram")
233    //MCFG_NVRAM_ADD_0FILL("nvram")
196234
197   /* Video */
198   //MCFG_DEFAULT_LAYOUT(layout_gts1)
235    /* Video */
236    MCFG_DEFAULT_LAYOUT(layout_gts1)
199237
200   /* Sound */
201   MCFG_FRAGMENT_ADD( genpin_audio )
238    /* Sound */
239    MCFG_FRAGMENT_ADD( genpin_audio )
202240MACHINE_CONFIG_END
203241
204242
205243ROM_START( gts1 )
206   ROM_REGION( 0x10000, "maincpu", 0 )
207   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
208   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
244    ROM_REGION( 0x10000, "maincpu", 0 )
245    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
246    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
209247ROM_END
210248
211249ROM_START( gts1s )
212   ROM_REGION( 0x10000, "maincpu", 0 )
213   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
214   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
250    ROM_REGION( 0x10000, "maincpu", 0 )
251    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
252    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
215253ROM_END
216254
217255/*-------------------------------------------------------------------
218256/ Asteroid Annie and the Aliens (12/1980) #442
219257/-------------------------------------------------------------------*/
220258ROM_START(astannie)
221   ROM_REGION(0x10000, "maincpu", 0)
222   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
223   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
224   ROM_LOAD("442.cpu", 0x2000, 0x0400, CRC(579521e0) SHA1(b1b19473e1ca3373955ee96104b87f586c4c311c))
225   ROM_REGION(0x10000, "cpu2", 0)
226   ROM_LOAD("442.snd", 0x0400, 0x0400, CRC(c70195b4) SHA1(ff06197f07111d6a4b8942dcfe8d2279bda6f281))
227   ROM_RELOAD( 0x0800, 0x0400)
228   ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
229   ROM_RELOAD( 0xfc00, 0x0400)
259    ROM_REGION(0x10000, "maincpu", 0)
260    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
261    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
262    ROM_LOAD("442.cpu", 0x2000, 0x0400, CRC(579521e0) SHA1(b1b19473e1ca3373955ee96104b87f586c4c311c))
263    ROM_REGION(0x10000, "cpu2", 0)
264    ROM_LOAD("442.snd", 0x0400, 0x0400, CRC(c70195b4) SHA1(ff06197f07111d6a4b8942dcfe8d2279bda6f281))
265    ROM_RELOAD( 0x0800, 0x0400)
266    ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
267    ROM_RELOAD( 0xfc00, 0x0400)
230268ROM_END
231269
232270/*-------------------------------------------------------------------
233271/ Buck Rogers (01/1980) #437
234272/-------------------------------------------------------------------*/
235273ROM_START(buckrgrs)
236   ROM_REGION(0x10000, "maincpu", 0)
237   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
238   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
239   ROM_LOAD("437.cpu", 0x2000, 0x0400, CRC(e57d9278) SHA1(dfc4ebff1e14b9a074468671a8e5ac7948d5b352))
240   ROM_REGION(0x10000, "cpu2", 0)
241   ROM_LOAD("437.snd", 0x0400, 0x0400, CRC(732b5a27) SHA1(7860ea54e75152246c3ac3205122d750b243b40c))
242   ROM_RELOAD( 0x0800, 0x0400)
243   ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
244   ROM_RELOAD( 0xfc00, 0x0400)
274    ROM_REGION(0x10000, "maincpu", 0)
275    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
276    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
277    ROM_LOAD("437.cpu", 0x2000, 0x0400, CRC(e57d9278) SHA1(dfc4ebff1e14b9a074468671a8e5ac7948d5b352))
278    ROM_REGION(0x10000, "cpu2", 0)
279    ROM_LOAD("437.snd", 0x0400, 0x0400, CRC(732b5a27) SHA1(7860ea54e75152246c3ac3205122d750b243b40c))
280    ROM_RELOAD( 0x0800, 0x0400)
281    ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
282    ROM_RELOAD( 0xfc00, 0x0400)
245283ROM_END
246284
247285/*-------------------------------------------------------------------
248286/ Charlie's Angels (11/1978) #425
249287/-------------------------------------------------------------------*/
250288ROM_START(charlies)
251   ROM_REGION(0x10000, "maincpu", 0)
252   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
253   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
254   ROM_LOAD("425.cpu", 0x2000, 0x0400, CRC(928b4279) SHA1(51096d45e880d6a8263eaeaa0cdab0f61ad2f58d))
289    ROM_REGION(0x10000, "maincpu", 0)
290    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
291    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
292    ROM_LOAD("425.cpu", 0x2000, 0x0400, CRC(928b4279) SHA1(51096d45e880d6a8263eaeaa0cdab0f61ad2f58d))
255293ROM_END
256294/*-------------------------------------------------------------------
257295/ Cleopatra (11/1977) #409
258296/-------------------------------------------------------------------*/
259297ROM_START(cleoptra)
260   ROM_REGION(0x10000, "maincpu", 0)
261   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
262   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
263   ROM_LOAD("409.cpu", 0x2000, 0x0400, CRC(8063ff71) SHA1(205f09f067bf79544d2ce2a48d23259901f935dd))
298    ROM_REGION(0x10000, "maincpu", 0)
299    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
300    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
301    ROM_LOAD("409.cpu", 0x2000, 0x0400, CRC(8063ff71) SHA1(205f09f067bf79544d2ce2a48d23259901f935dd))
264302ROM_END
265303
266304/*-------------------------------------------------------------------
267305/ Close Encounters of the Third Kind (10/1978) #424
268306/-------------------------------------------------------------------*/
269307ROM_START(closeenc)
270   ROM_REGION(0x10000, "maincpu", 0)
271   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
272   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
273   ROM_LOAD("424.cpu", 0x2000, 0x0400, CRC(a7a5dd13) SHA1(223c67b9484baa719c91de52b363ff22813db160))
308    ROM_REGION(0x10000, "maincpu", 0)
309    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
310    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
311    ROM_LOAD("424.cpu", 0x2000, 0x0400, CRC(a7a5dd13) SHA1(223c67b9484baa719c91de52b363ff22813db160))
274312ROM_END
275313
276314/*-------------------------------------------------------------------
277315/ Count-Down (05/1979) #422
278316/-------------------------------------------------------------------*/
279317ROM_START(countdwn)
280   ROM_REGION(0x10000, "maincpu", 0)
281   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
282   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
283   ROM_LOAD("422.cpu", 0x2000, 0x0400, CRC(51bc2df0) SHA1(d4b555d106c6b4e420b0fcd1df8871f869476c22))
318    ROM_REGION(0x10000, "maincpu", 0)
319    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
320    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
321    ROM_LOAD("422.cpu", 0x2000, 0x0400, CRC(51bc2df0) SHA1(d4b555d106c6b4e420b0fcd1df8871f869476c22))
284322ROM_END
285323
286324/*-------------------------------------------------------------------
287325/ Dragon (10/1978) #419
288326/-------------------------------------------------------------------*/
289327ROM_START(dragon)
290   ROM_REGION(0x10000, "maincpu", 0)
291   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
292   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
293   ROM_LOAD("419.cpu", 0x2000, 0x0400, CRC(018d9b3a) SHA1(da37ef5017c71bc41bdb1f30d3fd7ac3b7e1ee7e))
328    ROM_REGION(0x10000, "maincpu", 0)
329    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
330    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
331    ROM_LOAD("419.cpu", 0x2000, 0x0400, CRC(018d9b3a) SHA1(da37ef5017c71bc41bdb1f30d3fd7ac3b7e1ee7e))
294332ROM_END
295333
296334/*-------------------------------------------------------------------
297335/ Genie (11/1979) #435
298336/-------------------------------------------------------------------*/
299337ROM_START(geniep)
300   ROM_REGION(0x10000, "maincpu", 0)
301   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
302   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
303   ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58))
304   ROM_REGION(0x10000, "cpu2", 0)
305   ROM_LOAD("435.snd", 0x0400, 0x0400, CRC(4a98ceed) SHA1(f1d7548e03107033c39953ee04b043b5301dbb47))
306   ROM_RELOAD( 0x0800, 0x0400)
307   ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
308   ROM_RELOAD( 0xfc00, 0x0400)
338    ROM_REGION(0x10000, "maincpu", 0)
339    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
340    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
341    ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58))
342    ROM_REGION(0x10000, "cpu2", 0)
343    ROM_LOAD("435.snd", 0x0400, 0x0400, CRC(4a98ceed) SHA1(f1d7548e03107033c39953ee04b043b5301dbb47))
344    ROM_RELOAD( 0x0800, 0x0400)
345    ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
346    ROM_RELOAD( 0xfc00, 0x0400)
309347ROM_END
310348
311349/*-------------------------------------------------------------------
312350/ Joker Poker (08/1978) #417
313351/-------------------------------------------------------------------*/
314352ROM_START(jokrpokr)
315   ROM_REGION(0x10000, "maincpu", 0)
316   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
317   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
318   ROM_LOAD("417.cpu", 0x2000, 0x0400, CRC(33dade08) SHA1(23b8dbd7b6c84b806fc0d2da95478235cbf9f80a))
353    ROM_REGION(0x10000, "maincpu", 0)
354    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
355    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
356    ROM_LOAD("417.cpu", 0x2000, 0x0400, CRC(33dade08) SHA1(23b8dbd7b6c84b806fc0d2da95478235cbf9f80a))
319357ROM_END
320358
321359/*-------------------------------------------------------------------
r242231r242232
325363/ L'Hexagone (04/1986)
326364/-------------------------------------------------------------------*/
327365ROM_START(hexagone)
328   ROM_REGION(0x10000, "maincpu", 0)
329   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
330   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
331   ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58))
332   ROM_REGION(0x10000, "cpu2", 0)
333   ROM_LOAD("hexagone.bin", 0, 0x4000, CRC(002b5464) SHA1(e2d971c4e85b4fb6580c2d3945c9946ea0cebc2e))
366    ROM_REGION(0x10000, "maincpu", 0)
367    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
368    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
369    ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58))
370    ROM_REGION(0x10000, "cpu2", 0)
371    ROM_LOAD("hexagone.bin", 0, 0x4000, CRC(002b5464) SHA1(e2d971c4e85b4fb6580c2d3945c9946ea0cebc2e))
334372ROM_END
335373/*-------------------------------------------------------------------
336374/ Movie
r242231r242232
340378/ Pinball Pool (08/1979) #427
341379/-------------------------------------------------------------------*/
342380ROM_START(pinpool)
343   ROM_REGION(0x10000, "maincpu", 0)
344   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
345   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
346   ROM_LOAD("427.cpu", 0x2000, 0x0400, CRC(c496393d) SHA1(e91d9596aacdb4277fa200a3f8f9da099c278f32))
381    ROM_REGION(0x10000, "maincpu", 0)
382    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
383    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
384    ROM_LOAD("427.cpu", 0x2000, 0x0400, CRC(c496393d) SHA1(e91d9596aacdb4277fa200a3f8f9da099c278f32))
347385ROM_END
348386
349387/*-------------------------------------------------------------------
350388/ Roller Disco (02/1980) #440
351389/-------------------------------------------------------------------*/
352390ROM_START(roldisco)
353   ROM_REGION(0x10000, "maincpu", 0)
354   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
355   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
356   ROM_LOAD("440.cpu", 0x2000, 0x0400, CRC(bc50631f) SHA1(6aa3124d09fc4e369d087a5ad6dd1737ace55e41))
357   ROM_REGION(0x10000, "cpu2", 0)
358   ROM_LOAD("440.snd", 0x0400, 0x0400, CRC(4a0a05ae) SHA1(88f21b5638494d8e78dc0b6b7d69873b76b5f75d))
359   ROM_RELOAD( 0x0800, 0x0400)
360   ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
361   ROM_RELOAD( 0xfc00, 0x0400)
391    ROM_REGION(0x10000, "maincpu", 0)
392    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
393    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
394    ROM_LOAD("440.cpu", 0x2000, 0x0400, CRC(bc50631f) SHA1(6aa3124d09fc4e369d087a5ad6dd1737ace55e41))
395    ROM_REGION(0x10000, "cpu2", 0)
396    ROM_LOAD("440.snd", 0x0400, 0x0400, CRC(4a0a05ae) SHA1(88f21b5638494d8e78dc0b6b7d69873b76b5f75d))
397    ROM_RELOAD( 0x0800, 0x0400)
398    ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
399    ROM_RELOAD( 0xfc00, 0x0400)
362400ROM_END
363401
364402/*-------------------------------------------------------------------
r242231r242232
369407/ Sinbad (05/1978) #412
370408/-------------------------------------------------------------------*/
371409ROM_START(sinbad)
372   ROM_REGION(0x10000, "maincpu", 0)
373   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
374   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
375   ROM_LOAD("412.cpu", 0x2000, 0x0400, CRC(84a86b83) SHA1(f331f2ffd7d1b279b4ffbb939aa8649e723f5fac))
410    ROM_REGION(0x10000, "maincpu", 0)
411    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
412    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
413    ROM_LOAD("412.cpu", 0x2000, 0x0400, CRC(84a86b83) SHA1(f331f2ffd7d1b279b4ffbb939aa8649e723f5fac))
376414ROM_END
377415
378416ROM_START(sinbadn)
379   ROM_REGION(0x10000, "maincpu", 0)
380   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
381   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
382   ROM_LOAD("412no1.cpu", 0x2000, 0x0400, CRC(f5373f5f) SHA1(027840501416ff01b2adf07188c7d667adf3ad5f))
417    ROM_REGION(0x10000, "maincpu", 0)
418    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
419    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
420    ROM_LOAD("412no1.cpu", 0x2000, 0x0400, CRC(f5373f5f) SHA1(027840501416ff01b2adf07188c7d667adf3ad5f))
383421ROM_END
384422
385423/*-------------------------------------------------------------------
r242231r242232
390428/ Solar Ride (02/1979) #421
391429/-------------------------------------------------------------------*/
392430ROM_START(solaride)
393   ROM_REGION(0x10000, "maincpu", 0)
394   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
395   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
396   ROM_LOAD("421.cpu", 0x2000, 0x0400, CRC(6b5c5da6) SHA1(a09b7009473be53586f53f48b7bfed9a0c5ecd55))
431    ROM_REGION(0x10000, "maincpu", 0)
432    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
433    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
434    ROM_LOAD("421.cpu", 0x2000, 0x0400, CRC(6b5c5da6) SHA1(a09b7009473be53586f53f48b7bfed9a0c5ecd55))
397435ROM_END
398436
399437/*-------------------------------------------------------------------
400438/ The Incredible Hulk (10/1979) #433
401439/-------------------------------------------------------------------*/
402440ROM_START(hulk)
403   ROM_REGION(0x10000, "maincpu", 0)
404   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
405   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
406   ROM_LOAD("433.cpu", 0x2000, 0x0400, CRC(c05d2b52) SHA1(393fe063b029246317c90ee384db95a84d61dbb7))
407   ROM_REGION(0x10000, "cpu2", 0)
408   ROM_LOAD("433.snd", 0x0400, 0x0400, CRC(20cd1dff) SHA1(93e7c47ff7051c3c0dc9f8f95aa33ba094e7cf25))
409   ROM_RELOAD( 0x0800, 0x0400)
410   ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
411   ROM_RELOAD( 0xfc00, 0x0400)
441    ROM_REGION(0x10000, "maincpu", 0)
442    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
443    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
444    ROM_LOAD("433.cpu", 0x2000, 0x0400, CRC(c05d2b52) SHA1(393fe063b029246317c90ee384db95a84d61dbb7))
445    ROM_REGION(0x10000, "cpu2", 0)
446    ROM_LOAD("433.snd", 0x0400, 0x0400, CRC(20cd1dff) SHA1(93e7c47ff7051c3c0dc9f8f95aa33ba094e7cf25))
447    ROM_RELOAD( 0x0800, 0x0400)
448    ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
449    ROM_RELOAD( 0xfc00, 0x0400)
412450ROM_END
413451
414452/*-------------------------------------------------------------------
415453/ Torch (02/1980) #438
416454/-------------------------------------------------------------------*/
417455ROM_START(torch)
418   ROM_REGION(0x10000, "maincpu", 0)
419   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
420   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
421   ROM_LOAD("438.cpu", 0x2000, 0x0400, CRC(2d396a64) SHA1(38a1862771500faa471071db08dfbadc6e8759e8))
422   ROM_REGION(0x10000, "cpu2", 0)
423   ROM_LOAD("438.snd", 0x0400, 0x0400, CRC(a9619b48) SHA1(1906bc1b059bf31082e3b4546f5a30159479ad3c))
424   ROM_RELOAD( 0x0800, 0x0400)
425   ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
426   ROM_RELOAD( 0xfc00, 0x0400)
456    ROM_REGION(0x10000, "maincpu", 0)
457    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
458    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
459    ROM_LOAD("438.cpu", 0x2000, 0x0400, CRC(2d396a64) SHA1(38a1862771500faa471071db08dfbadc6e8759e8))
460    ROM_REGION(0x10000, "cpu2", 0)
461    ROM_LOAD("438.snd", 0x0400, 0x0400, CRC(a9619b48) SHA1(1906bc1b059bf31082e3b4546f5a30159479ad3c))
462    ROM_RELOAD( 0x0800, 0x0400)
463    ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
464    ROM_RELOAD( 0xfc00, 0x0400)
427465ROM_END
428466
429467/*-------------------------------------------------------------------
430468/ Totem (10/1979) #429
431469/-------------------------------------------------------------------*/
432470ROM_START(totem)
433   ROM_REGION(0x10000, "maincpu", 0)
434   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
435   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
436   ROM_LOAD("429.cpu", 0x2000, 0x0400, CRC(7885a384) SHA1(1770662af7d48ad8297097a9877c5c497119978d))
437   ROM_REGION(0x10000, "cpu2", 0)
438   ROM_LOAD("429.snd", 0x0400, 0x0400, CRC(5d1b7ed4) SHA1(4a584f880e907fb21da78f3b3a0617f20599688f))
439   ROM_RELOAD( 0x0800, 0x0400)
440   ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
441   ROM_RELOAD( 0xfc00, 0x0400)
471    ROM_REGION(0x10000, "maincpu", 0)
472    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
473    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
474    ROM_LOAD("429.cpu", 0x2000, 0x0400, CRC(7885a384) SHA1(1770662af7d48ad8297097a9877c5c497119978d))
475    ROM_REGION(0x10000, "cpu2", 0)
476    ROM_LOAD("429.snd", 0x0400, 0x0400, CRC(5d1b7ed4) SHA1(4a584f880e907fb21da78f3b3a0617f20599688f))
477    ROM_RELOAD( 0x0800, 0x0400)
478    ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
479    ROM_RELOAD( 0xfc00, 0x0400)
442480ROM_END
443481
444482/*-------------------------------------------------------------------
445483/ System 1 Test prom
446484/-------------------------------------------------------------------*/
447485ROM_START(sys1test)
448   ROM_REGION(0x10000, "maincpu", 0)
449   ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
450   ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
451   ROM_LOAD("test.cpu", 0x2000, 0x0400, CRC(8b0704bb) SHA1(5f0eb8d5af867b815b6012c9d078927398efe6d8))
486    ROM_REGION(0x10000, "maincpu", 0)
487    ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
488    ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
489    ROM_LOAD("test.cpu", 0x2000, 0x0400, CRC(8b0704bb) SHA1(5f0eb8d5af867b815b6012c9d078927398efe6d8))
452490ROM_END
453491
454492
trunk/src/mame/drivers/igs_m036.c
r242231r242232
1212IGS036 could be a upgraded version of IGS027A
1313but with GFX processor integrated
1414
15I dont know the CPU core (should ARM based due to fail test)
16the chip has internal rom build-in
17the the FLASH(u33, EV29LV160AB-90PCR) is external rom and encrypted
18if the external rom decrypted then we can
15I don't know the CPU core (should be ARM based due to fail test)
16the chip has internal rom built-in
17the FLASH(u33, EV29LV160AB-90PCR) is external rom and encrypted
18if the external rom is decrypted then we can
1919try to trojan the internal rom
20here we offer several revision a same game to see
20here we offer several revisions of the same game to see
2121if anyone could find any clue, these 4 revision can
2222be programmed and running on a same PCB.
2323===================================================
trunk/src/mame/drivers/lindbergh.c
r242231r242232
2424On this red box the CPU is a Celeron D at 2.8GHz. RAM is 512M DDR PC3200
2525The box has Sega number 845-0001D-02
2626
27
28Security
29--------
30
31The security seems to work in multiple steps.  The information there
32is a combination of our research and things found on the internet.
33
34- At boot, the bios unlocks the CF card through an IDE 0x82 command
35  with a currently unknown key.  There is also a hardware heartbeat
36  signal on the IDE bus to avoid hotswapping.
37
38- The system boots on the CF which holds a customized Montavista linux.
39
40- The CF system can either install the game (from the DVD) or start it (on the HD)
41
42- The DVD is decrypted (probably on-the-fly with aesloop) using a
43  fixed system key (all the dvd images start identically).
44
45- The PIC includes an AES-CBC engine and has as data an IV, a key,
46  some game-specific identification information, and two pre and
47  post-whitening values.  Everything but the key is dumpable through
48  commands, but the key seems well-protected.  It's not realistic to
49  decrypt very large amounts of data through it though, the bandwidth
50  would be way too low.
51
52- The HD is probably unlocked by the CF and bootstrap code is
53  decrypted through the PIC.  That code in turn loop-decrypts/mounts all the
54  data needed from the partition (probably /usr, /X11R6 and /home).
55
56Currently, we do not have access to the CF image, making it impossible
57to do a complete boot/install.
58
59
2760Lindbergh Game List
2861-------------------
2962                                               Security
3063Game                                           Dongle Sticker    PIC Number      DVD Code
3164------------------------------------------------------------------------------------------
32 2 Spicy                                       253-5508-0491     317-0491-COM    DVP-0027A
65*2 Spicy                                       253-5508-0491     317-0491-COM    DVP-0027A
3366 After Burner Climax (EXPORT)                  253-5508-0440A   ^317-0440-COM    DVP-0009
67 After Burner Climax CE                        ?                 ?               DVP-0031A
3468 Ami-Gyo                                       ?                 ?               ?
3569 Answer X Answer                               ?                 ?               ?
3670 Answer X Answer 1.1                           ?                 ?               ?
r242231r242232
4074 Club Majesty Formal                           ?                 ?               ?
4175 Derby Owners Club 2008: Feel the Rush         ?                 ?               DVP-0047A
4276 Derby Owners Club 2008: Feel the Rush V2.0    ?                 ?               ?
43 Ghost Squad Evolution                         ?                 ?               ?
77*Ghost Squad Evolution                         ?                 ?               DVP-0029A
4478 Harley Davidson: King of the Road             ?                 ?               ?
4579 Hummer Extreme                                ?                 ?               ?
4680 Initial D Arcade Stage 4                      ?                 ?               DVP-0019
47 Initial D Arcade Stage 4 (rev B)              253-5508-0486E    317-0486-COM    DVP-0030B
48*Initial D Arcade Stage 4 (rev C)              253-5508-0486E    317-0486-COM    DVP-0030C
49*Initial D Arcade Stage 4 (rev D)              253-5508-0486E    317-0486-COM    DVP-0030D
81 Initial D Arcade Stage 4 (rev A)              ?                 ?               DVP-0019A
82 Initial D Arcade Stage 4 (rev B)              ?                 ?               DVP-0019B
83 Initial D Arcade Stage 4 (rev D)              ?                 ?               DVP-0019D
84 Initial D Arcade Stage 4 (rev G)              ?                 ?               DVP-0019G
85 Initial D4                                    ?                 ?               DVP-0030
86 Initial D4 (rev B)                            253-5508-0486E    317-0486-COM    DVP-0030B
87*Initial D4 (rev C)                            253-5508-0486E    317-0486-COM    DVP-0030C
88*Initial D4 (rev D)                            253-5508-0486E    317-0486-COM    DVP-0030D
5089 Initial D Arcade Stage 5                      ?                 ?               ?
5190 Let's Go Jungle (EXPORT)                      253-5508-0442     317-0442-COM    DVP-0011
5291 MJ4                                           ?                 ?               ?
53 Outrun 2 Special Tours (EXPORT)               253-5508-0452     317-0452-COM    ?
54 Primeval Hunt                                 ?                 ?               DVP-0048A
92 OutRun 2 Special Tours (EXPORT)               253-5508-0452     317-0452-COM    ?
93 OutRun 2 SP SDX                               ?                 ?               DVP-0015A
94*Primeval Hunt                                 253-5508-0512     317-0512-COM    DVP-0048A
5595 R-Tuned: Ultimate Street Racing               ?                 ?               DVP-0060
5696*Rambo (EXPORT)                                253-5508-0540    ^317-0540-COM    DVP-0069
57*Sega Race TV (EXPORT)                         253-5508-0504    ^317-0504-COM    DVP-0044
97 SEGA Network Taisen Mahjong MJ4 (rev A)       ?                 ?               DVP-0049A
98 SEGA Network Taisen Mahjong MJ4 (rev F)       ?                 ?               DVP-0049F
99 SEGA Network Taisen Mahjong MJ4 (rev G)       ?                 ?               DVP-0049G
100*SEGA-Race TV (EXPORT)                         253-5508-0504    ^317-0504-COM    DVP-0044
101 StarHorse 2: Fifth Expansion (rev D)          ?                 ?               DVP-0082D
102 StarHorse 2: Fifth Expansion (rev E)          ?                 ?               DVP-0082E
58103*The House Of The Dead 4 (EXPORT)              253-5508-0427    ^317-0427-COM    DVP-0003A
59104 The House Of The Dead EX (JAPAN)              253-5508-0550    ^317-0550-JPN    ?
60105 The House Of the Dead 4 Special               ?                 ?               ?
61 Virtua Fighter 5 (EXPORT)                     253-5508-0438     317-0438-COM    ?
106*VBIOS Update                                  ?                 ?               DVP-0021B
107 VBIOS Update [For VTF]                        ?                 ?               DVP-0023A
108 Virtua Fighter 5 (EXPORT)                     253-5508-0438     317-0438-COM    DVP-0008E
109 Virtua Tennis 3 (Power Smash 3)               ?                 ?               DVP-0005
62110 Virtua Tennis 3 (Power Smash 3) (EXPORT)      253-5508-0434    ^317-0434-COM    DVP-0005A
63111*Virtua Tennis 3 (JAPAN)                       253-5508-0506     317-0506-JPN    DVP-0005C
64*VBIOS Update                                  ?                 ?               DVP-0021B
65112 WCC Football Intercontinental Clubs 2006-2007 ?                 ?               ?
66113 WCC Football Intercontinental Clubs 2007-2008 ?                 ?               ?
67114 WCC Football Intercontinental Clubs 2008-2009 ?                 ?               ?
r242231r242232
134181                 P/N: 0A30209 BA17730E6B
135182                 Serial: EETNGM0G
136183       CF SLOT - Accepts a compact flash card. The card is required to boot the system.
137                 Revision C and E have been seen. There may be other revisions out there.
184                 Revision C and E have been seen. StarHorse 2 has it's own special card.
185                 There may be other revisions out there.
138186                 Sticker: LINDBERGH
139187                          MDA-C0004A
140188                          REV. C
r242231r242232
291339   virtual void machine_reset();
292340};
293341
294#if 0
295static ADDRESS_MAP_START(lindbergh_map, AS_PROGRAM, 32, lindbergh_state)
296   AM_RANGE(0x00000000, 0x0009ffff) AM_RAM
297                              //  AM_RANGE(0x000a0000, 0x000bffff) AM_DEVREADWRITE8("vga", vga_device, mem_r, mem_w, 0xffffffff)
298                              //  AM_RANGE(0x000c0000, 0x000cffff) AM_ROM AM_REGION("vid_bios", 0)
299//  0xd0000 - 0xdffff tested, wants 0x414d ("AM") in there
300   AM_RANGE(0x000f0000, 0x000fffff) AM_ROM AM_REGION("mb_bios", 0xf0000)
301//  AM_RANGE(0xfd000000, 0xfd3fffff) AM_ROM AM_REGION("jvs_bios", 0)    /* Hack to see the data */
302   AM_RANGE(0xfff00000, 0xffffffff) AM_ROM AM_REGION("mb_bios", 0)     /* System BIOS */
303ADDRESS_MAP_END
304
305static ADDRESS_MAP_START(lindbergh_io, AS_IO, 32, lindbergh_state)
306//  AM_IMPORT_FROM(pcat32_io_common)
307
308//  AM_RANGE(0x00e8, 0x00ef) AM_NOP
309//  AM_RANGE(0x0cf8, 0x0cff) AM_DEVREADWRITE("pcibus", pci_bus_legacy_device, read, write)
310ADDRESS_MAP_END
311#endif
312
313342lindbergh_state::lindbergh_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag)
314343{
315344}
r242231r242232
356385   MCFG_AC97_ADD(                    ":pci:1f.5",      0x808625a6, 0x02, 0x103382c0)
357386MACHINE_CONFIG_END
358387
388#define LINDBERGH_BIOS \
389   ROM_REGION32_LE(0x100000, ":pci:1f.0", 0) /* PC bios, location 3j7 */ \
390   ROM_SYSTEM_BIOS(0, "bios0", "6.0.0010 alternate version") \
391   ROMX_LOAD("6.0.0010a.bin", 0x00000, 0x100000, CRC(10dd9b76) SHA1(1fdf1f921bc395846a7c3180fbdbc4ca287a9670), ROM_BIOS(1) ) \
392   ROM_SYSTEM_BIOS(1, "bios1", "6.0.0009") \
393   ROMX_LOAD("6.0.0009.bin",  0x00000, 0x100000, CRC(5ffdfbf8) SHA1(605bc4967b749b4e6d13fc2ebb845ba956a259a7), ROM_BIOS(2) ) \
394   ROM_SYSTEM_BIOS(2, "bios2", "6.0.0010") \
395   ROMX_LOAD("6.0.0010.bin",  0x00000, 0x100000, CRC(ea2bf888) SHA1(c9c5b6f0d4f4f36620939b15dd2f128a74347e37), ROM_BIOS(3) ) \
396\
397   ROM_REGION(0x400000, ":pci:1e.0:03.0", 0) /* Baseboard MPC firmware */ \
398   ROM_LOAD("fpr-24370b.ic6", 0x000000, 0x400000, CRC(c3b021a4) SHA1(1b6938a50fe0e4ae813864649eb103838c399ac0)) \
399\
400   ROM_REGION32_LE(0x10000, ":pci:01.0:00.0", 0) /* Geforce bios extension (custom or standard?) */ \
401   ROM_LOAD("vid_bios.u504", 0x00000, 0x10000, CRC(f78d14d7) SHA1(f129787e487984edd23bf344f2e9500c85052275)) \
402
359403ROM_START(lindbios)
360   ROM_REGION32_LE(0x100000, ":pci:1f.0", 0) // PC bios, location 3j7
361   ROM_SYSTEM_BIOS(0, "bios0", "6.0.0010 alternate version")
362   ROMX_LOAD("6.0.0010a.bin", 0x00000, 0x100000, CRC(10dd9b76) SHA1(1fdf1f921bc395846a7c3180fbdbc4ca287a9670), ROM_BIOS(1) )
363   ROM_SYSTEM_BIOS(1, "bios1", "6.0.0009")
364   ROMX_LOAD("6.0.0009.bin", 0x00000, 0x100000, CRC(5ffdfbf8) SHA1(605bc4967b749b4e6d13fc2ebb845ba956a259a7), ROM_BIOS(2) )
365   ROM_SYSTEM_BIOS(2, "bios2", "6.0.0010")
366   ROMX_LOAD("6.0.0010.bin", 0x00000, 0x100000, CRC(ea2bf888) SHA1(c9c5b6f0d4f4f36620939b15dd2f128a74347e37), ROM_BIOS(3) )
404   LINDBERGH_BIOS
405ROM_END
367406
407ROM_START(hotd4)
408   LINDBERGH_BIOS
368409
369   ROM_REGION(0x400000, ":pci:1e.0:03.0", 0) // Baseboard MPC firmware
370   ROM_LOAD("fpr-24370b.ic6", 0x000000, 0x400000, CRC(c3b021a4) SHA1(1b6938a50fe0e4ae813864649eb103838c399ac0))
410   ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0427 / 317-0427-COM
411   ROM_LOAD("317-0427-com.bin", 0, 0x2000, CRC(ef4a120c) SHA1(fcc0386fa708af9e010e40e1d259a6bd95e8b9e2))
371412
372   ROM_REGION32_LE(0x10000, ":pci:01.0:00.0", 0) // Geforce bios extension (custom or standard?)
373   ROM_LOAD("vid_bios.u504", 0x00000, 0x10000, CRC(f78d14d7) SHA1(f129787e487984edd23bf344f2e9500c85052275))
413   DISK_REGION("dvd")
414   DISK_IMAGE_READONLY("dvp-0003a", 0, SHA1(46544e28735f55418dd78bd19446093874438264))
374415ROM_END
375416
376GAME(1999, lindbios, 0, lindbergh, 0, driver_device, 0, ROT0, "Sega Lindbergh", "Sega Lindbergh Bios", GAME_IS_SKELETON)
417ROM_START(vf5)
418   LINDBERGH_BIOS
419
420   ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0438 / 317-0438-COM
421   ROM_LOAD("317-0438-com.bin", 0, 0x2000, CRC(9aeb15d3) SHA1(405ddc44b2b40b72cfe2a081a0d5e43ceb9a380e))
422
423   DISK_REGION("dvd")
424   DISK_IMAGE_READONLY("dvp-0008e", 0, NO_DUMP)
425ROM_END
426
427ROM_START(abclimax)
428   LINDBERGH_BIOS
429
430   ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0440 / 317-0440-COM
431   ROM_LOAD("317-0440-com.bin", 0, 0x2000, CRC(8d09e717) SHA1(6b25982f7042541874115d33ea5d0c028140a962))
432
433   DISK_REGION("dvd")
434   DISK_IMAGE_READONLY("dvp-0009", 0, NO_DUMP)
435ROM_END
436
437ROM_START(letsgoju)
438   LINDBERGH_BIOS
439
440   ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0442 / 317-0442-COM
441   ROM_LOAD("317-0442-com.bin", 0, 0x2000, CRC(b706efbb) SHA1(97c2b65e521113c5201f0b588fcb37a39148a637))
442
443   DISK_REGION("dvd")
444   DISK_IMAGE_READONLY("dvp-0011", 0, NO_DUMP)
445ROM_END
446
447ROM_START(outr2sdx)
448   LINDBERGH_BIOS
449
450   ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0452 / 317-0452-COM (to verify, may be the one for OutRun 2 Special Tours)
451   ROM_LOAD("317-0452-com.bin", 0, 0x2000, CRC(f5b7bb3f) SHA1(6b179b255b3d29e5ce61902eeae4da07177a2943))
452
453   DISK_REGION("dvd")
454   DISK_IMAGE_READONLY("dvp-0015a", 0, NO_DUMP)
455ROM_END
456
457ROM_START(psmash3)
458   LINDBERGH_BIOS
459
460   ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0434 / 317-0434-COM
461   ROM_LOAD("317-0434-com.bin", 0, 0x2000, CRC(70e3b202) SHA1(4925a288f937d54529abe6ef467c9c23674e47f0))
462
463   DISK_REGION("dvd")
464   DISK_IMAGE_READONLY("dvp-0005a", 0, NO_DUMP)
465ROM_END
466
467ROM_START(vtennis3)
468   LINDBERGH_BIOS
469
470   ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0506 / 317-0506-JPN
471   ROM_LOAD("317-0506-jpn.bin", 0, 0x2000, NO_DUMP)
472
473   DISK_REGION("dvd")
474   DISK_IMAGE_READONLY("dvp-0005c", 0, SHA1(1fd689753c4b70dff0286cb7f623ee7fd439db62))
475ROM_END
476
477ROM_START(2spicy)
478   LINDBERGH_BIOS
479
480   ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0491 / 317-0491-COM
481   ROM_LOAD("317-0491-com.bin", 0, 0x2000, NO_DUMP)
482
483   DISK_REGION("dvd")
484   DISK_IMAGE_READONLY("dvp-0027a", 0, SHA1(da1aacee9e32e813844f4d434981e69cc5c80682))
485ROM_END
486
487ROM_START(ghostsev)
488   LINDBERGH_BIOS
489
490   DISK_REGION("dvd")
491   DISK_IMAGE_READONLY("dvp-0029a", 0, SHA1(256d9e8a6d61e1bcf65b17b8ed70fbc58796f7b1))
492ROM_END
493
494ROM_START(initiad4)
495   LINDBERGH_BIOS
496
497   ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0486E / 317-0486-COM
498   ROM_LOAD("317-0846-com.bin", 0, 0x2000, NO_DUMP)
499
500   DISK_REGION("dvd")
501   DISK_IMAGE_READONLY("dvp-0030d", 0, SHA1(e43e6d22fab4eceb81db8309e4634e049d9c41e6))
502ROM_END
503
504ROM_START(initiad4c)
505   LINDBERGH_BIOS
506
507   ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0486E / 317-0486-COM
508   ROM_LOAD("317-0846-com.bin", 0, 0x2000, NO_DUMP)
509
510   DISK_REGION("dvd")
511   DISK_IMAGE_READONLY("dvp-0030c", 0, SHA1(b1919f28539afec4c4bc52357e5210a090b5ae32))
512ROM_END
513
514ROM_START(segartv)
515   LINDBERGH_BIOS
516
517   ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0504 / 317-0504-COM
518   ROM_LOAD("317-0504-com.bin", 0, 0x2000, CRC(ae7eaea8) SHA1(187e417e0b5543d95245364b547925426aa9f80e))
519
520   DISK_REGION("dvd")
521   DISK_IMAGE_READONLY("dvp-0044", 0, SHA1(914aa23ece8aaf0f1942f77272b3a87d10f7a7db))
522ROM_END
523
524ROM_START(hotdex)
525   LINDBERGH_BIOS
526
527   ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0550 / 317-0550-JPN
528   ROM_LOAD("317-0550-jpn.bin", 0, 0x2000, CRC(7e247f13) SHA1(d416b0e7742b32eb31443967e84ef93fc9e56dfb))
529
530   DISK_REGION("dvd")
531   DISK_IMAGE_READONLY("hotdex", 0, NO_DUMP)
532ROM_END
533
534ROM_START(primevah)
535   LINDBERGH_BIOS
536
537   ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0512 / 317-0512-COM
538   ROM_LOAD("317-0512-com.bin", 0, 0x2000, NO_DUMP)
539
540   DISK_REGION("dvd")
541   DISK_IMAGE_READONLY("dvp-0048a", 0, SHA1(914aa23ece8aaf0f1942f77272b3a87d10f7a7db))
542ROM_END
543
544ROM_START(rambo)
545   LINDBERGH_BIOS
546
547   ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0540 / 317-0540-COM
548   ROM_LOAD("317-0540-com.bin", 0, 0x2000, CRC(fd9a7bc0) SHA1(140b05573e25a41c1237c7a96c8e099efbfd75b8))
549
550   DISK_REGION("dvd")
551   DISK_IMAGE_READONLY("dvp-0069", 0, SHA1(1f3401b652c45db2b843360aff9cda862c2832c0))
552ROM_END
553
554ROM_START(hummerxt)
555   LINDBERGH_BIOS
556
557   ROM_REGION(0x2000, ":pic", 0) // PIC security id unknown
558   ROM_LOAD("hummerextreme.bin", 0, 0x2000, CRC(524bc69a) SHA1(c79b6bd384196c169e40e623f4c80c8b9eb11f81))
559ROM_END
560
561ROM_START(lbvbiosu)
562   LINDBERGH_BIOS
563
564   DISK_REGION("dvd")
565   DISK_IMAGE_READONLY("dvp-0021b", 0, SHA1(362ac028ba19ba4762678953a033034a5ee8ad53))
566ROM_END
567
568GAME(1999, lindbios,         0, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Sega Lindbergh Bios",                      GAME_IS_BIOS_ROOT)
569GAME(2005, hotd4,     lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "House of the Dead 4 (Export)",             GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
570GAME(2005, vf5,       lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Virtua Fighter 5 (Export)",                GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
571GAME(2006, abclimax,  lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "After Burner Climax (Export)",             GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
572GAME(2006, letsgoju,  lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Let's Go Jungle (Export)",                 GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
573GAME(2006, outr2sdx,  lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Outrun 2 SP SDX",                          GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
574GAME(2006, psmash3,   lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Power Smash 3 / Virtua Tennis 3 (Export)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
575GAME(2006, vtennis3,  lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Virtua Tennis 3 (Japan)",                  GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
576GAME(2007, 2spicy,    lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "2 Spicy",                                  GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
577GAME(2007, ghostsev,  lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Ghost Squad Evolution",                    GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
578GAME(2007, initiad4,  lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Initial D4 (Rev D)",                       GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
579GAME(2007, initiad4c, initiad4, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Initial D4 (Rev C)",                       GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
580GAME(2007, segartv,   lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Sega Race-TV (Export)",                    GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
581GAME(2008, hotdex,    lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "House of the Dead EX (Japan)",             GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
582GAME(2008, primevah,  lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Primeval Hunt",                            GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
583GAME(2008, rambo,     lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Rambo (Export)",                           GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
584GAME(2009, hummerxt,  lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Hummer Extreme",                           GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
585GAME(200?, lbvbiosu,  lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "VBios updater",                            GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
trunk/src/mame/drivers/m62.c
r242231r242232
21522152
21532153DRIVER_INIT_MEMBER(m62_state,kidniki)
21542154{
2155   UINT8 *ROM = memregion("maincpu")->base();
2156
2157   /* in Kid Niki, bank 0 has code falling from 7fff to 8000, */
2158   /* so I have to copy it there because bank switching wouldn't catch it */
2159   memcpy(ROM + 0x08000, ROM + 0x10000, 0x2000);
2160
21612155   /* configure memory banks */
21622156   membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x2000);
21632157}
trunk/src/mame/drivers/mjkjidai.c
r242231r242232
2626#include "sound/sn76496.h"
2727#include "includes/mjkjidai.h"
2828
29/* Start of ADPCM custom chip code */
3029
31const device_type MJKJIDAI = &device_creator<mjkjidai_adpcm_device>;
32
33mjkjidai_adpcm_device::mjkjidai_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
34   : device_t(mconfig, MJKJIDAI, "Mahjong Kyou Jidai ADPCM Custom", tag, owner, clock, "mjkjidai_adpcm", __FILE__),
35      device_sound_interface(mconfig, *this),
36      m_stream(NULL),
37      m_current(0),
38      m_end(0),
39      m_nibble(0),
40      m_playing(0),
41      m_base(NULL)
30WRITE8_MEMBER(mjkjidai_state::adpcm_w)
4231{
32   m_adpcm_pos = (data & 0x07) * 0x1000 * 2;
33   m_adpcm_end = m_adpcm_pos + 0x1000 * 2;
34   m_msm->reset_w(0);
4335}
4436
45//-------------------------------------------------
46//  device_config_complete - perform any
47//  operations now that the configuration is
48//  complete
49//-------------------------------------------------
50
51void mjkjidai_adpcm_device::device_config_complete()
37WRITE_LINE_MEMBER(mjkjidai_state::adpcm_int)
5238{
53}
54
55//-------------------------------------------------
56//  device_start - device-specific startup
57//-------------------------------------------------
58
59void mjkjidai_adpcm_device::device_start()
60{
61   m_playing = 0;
62   m_stream = machine().sound().stream_alloc(*this, 0, 1, clock());
63   m_base = machine().root_device().memregion("adpcm")->base();
64   m_adpcm.reset();
65
66   save_item(NAME(m_current));
67   save_item(NAME(m_end));
68   save_item(NAME(m_nibble));
69   save_item(NAME(m_playing));
70}
71
72//-------------------------------------------------
73//  sound_stream_update - handle a stream update
74//-------------------------------------------------
75
76void mjkjidai_adpcm_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
77{
78   stream_sample_t *dest = outputs[0];
79
80   while (m_playing && samples > 0)
39   if (m_adpcm_pos >= m_adpcm_end)
8140   {
82      int val = (m_base[m_current] >> m_nibble) & 15;
83
84      m_nibble ^= 4;
85      if (m_nibble == 4)
86      {
87         m_current++;
88         if (m_current >= m_end)
89            m_playing = 0;
90      }
91
92      *dest++ = m_adpcm.clock(val) << 4;
93      samples--;
41      m_msm->reset_w(1);
9442   }
95   while (samples > 0)
43   else
9644   {
97      *dest++ = 0;
98      samples--;
45      UINT8 const data = m_adpcmrom[m_adpcm_pos / 2];
46      m_msm->data_w(m_adpcm_pos & 1 ? data & 0xf : data >> 4);
47      m_adpcm_pos++;
9948   }
10049}
10150
102void mjkjidai_adpcm_device::mjkjidai_adpcm_play (int offset, int length)
51CUSTOM_INPUT_MEMBER(mjkjidai_state::keyboard_r)
10352{
104   m_current = offset;
105   m_end = offset + length/2;
106   m_nibble = 4;
107   m_playing = 1;
108}
53   int res = 0x3f;
10954
110WRITE8_MEMBER(mjkjidai_state::adpcm_w)
111{
112   m_mjk_adpcm->mjkjidai_adpcm_play ((data & 0x07) * 0x1000, 0x1000 * 2);
113}
114/* End of ADPCM custom chip code */
115
116
117READ8_MEMBER(mjkjidai_state::keyboard_r)
118{
119   int res = 0x3f,i;
120   static const char *const keynames[] = { "PL2_1", "PL2_2", "PL2_3", "PL2_4", "PL2_5", "PL2_6", "PL1_1", "PL1_2", "PL1_3", "PL1_4", "PL1_5", "PL1_6" };
121
122//  logerror("%04x: keyboard_r\n", space.device().safe_pc());
123
124   for (i = 0; i < 12; i++)
55   for (int i = 0; i < 12; i++)
12556   {
126      if (~m_keyb & (1 << i))
57      if (~m_keyb & (0x800 >> i))
12758      {
128         res = ioport(keynames[i])->read() & 0x3f;
59         res = m_row[i]->read();
12960         break;
13061      }
13162   }
13263
133   res |= (ioport("IN3")->read() & 0xc0);
134
13564   return res;
13665}
13766
r242231r242232
15281   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
15382   AM_RANGE(0xc000, 0xcfff) AM_RAM
15483   AM_RANGE(0xd000, 0xdfff) AM_RAM AM_SHARE("nvram")   // cleared and initialized on startup if bit 6 of port 00 is 0
155   AM_RANGE(0xe000, 0xe01f) AM_RAM AM_SHARE("spriteram1")          // shared with tilemap ram
156   AM_RANGE(0xe800, 0xe81f) AM_RAM AM_SHARE("spriteram2")      // shared with tilemap ram
157   AM_RANGE(0xf000, 0xf01f) AM_RAM AM_SHARE("spriteram3")      // shared with tilemap ram
15884   AM_RANGE(0xe000, 0xf7ff) AM_RAM_WRITE(mjkjidai_videoram_w) AM_SHARE("videoram")
15985ADDRESS_MAP_END
16086
16187static ADDRESS_MAP_START( mjkjidai_io_map, AS_IO, 8, mjkjidai_state )
16288   ADDRESS_MAP_GLOBAL_MASK(0xff)
163   AM_RANGE(0x00, 0x00) AM_READ(keyboard_r)
89   AM_RANGE(0x00, 0x00) AM_READ_PORT("KEYBOARD")
16490   AM_RANGE(0x01, 0x01) AM_READNOP // ???
16591   AM_RANGE(0x02, 0x02) AM_READ_PORT("IN2")
16692   AM_RANGE(0x01, 0x02) AM_WRITE(keyboard_select_w)
16793   AM_RANGE(0x10, 0x10) AM_WRITE(mjkjidai_ctrl_w)  // rom bank, coin counter, flip screen etc
168   AM_RANGE(0x11, 0x11) AM_READ_PORT("IN0")
169   AM_RANGE(0x12, 0x12) AM_READ_PORT("IN1")
94   AM_RANGE(0x11, 0x11) AM_READ_PORT("DSW1")
95   AM_RANGE(0x12, 0x12) AM_READ_PORT("DSW2")
17096   AM_RANGE(0x20, 0x20) AM_DEVWRITE("sn1", sn76489_device, write)
17197   AM_RANGE(0x30, 0x30) AM_DEVWRITE("sn2", sn76489_device, write)
17298   AM_RANGE(0x40, 0x40) AM_WRITE(adpcm_w)
r242231r242232
174100
175101
176102static INPUT_PORTS_START( mjkjidai )
177   PORT_START("IN0")
178   PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
179   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
103   PORT_START("DSW1")
104   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:1")
105   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
180106   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
181   PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
182   PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
107   PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2")
108   PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
183109   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
184   PORT_SERVICE( 0x04, IP_ACTIVE_LOW )
185   PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
186   PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
110   PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3")
111   PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
187112   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
188   PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
113   PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
189114   PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
190115   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
191   PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
192   PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
116   PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
117   PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
193118   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
194   PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
195   PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
119   PORT_DIPNAME( 0x04, 0x04, "Test Mode" ) PORT_DIPLOCATION("SW1:6")
120   PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
196121   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
197   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
198   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
122   PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
123   PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
199124   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
200
201   PORT_START("IN1")
202   PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
125   PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8")
203126   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
204127   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
205   PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
206   PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
128
129   PORT_START("DSW2")
130   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:1")
131   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
207132   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
208   PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
209   PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
133   PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:2")
134   PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
210135   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
211   PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
212   PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
136   PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:3")
137   PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
213138   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
214   PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
139   PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:4")
215140   PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
216141   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
217   PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
218   PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
142   PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:5")
143   PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
219144   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
220   PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
221   PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
145   PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6")
146   PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
222147   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
223   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
224   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
148   PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:7")
149   PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
225150   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
151   PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:8")
152   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
153   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
226154
227155   PORT_START("IN2")
228   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
229   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
230   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
231   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
232   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE )    // service mode
156   PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
157   PORT_SERVICE( 0x10, IP_ACTIVE_LOW )
233158   PORT_DIPNAME( 0x20, 0x20, "Statistics" )
234159   PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
235160   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
236   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START3 )
237   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 )
161   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
238162
239   PORT_START("IN3")
163   PORT_START("KEYBOARD")
164   PORT_BIT( 0x3f, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, mjkjidai_state, keyboard_r, NULL)
240165   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_TILT )   // reinitialize NVRAM and reset the game
241166   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
242167
243   PORT_START("PL1_1")
244   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
245   PORT_BIT( 0x3e, IP_ACTIVE_LOW, IPT_UNUSED )
168   PORT_START("ROW.0")
169   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )
170   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_B )
171   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_C )
172   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_D )
173   PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
246174
247   PORT_START("PL1_2")
248   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )
249   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )
250   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_RON )
251   PORT_BIT( 0x38, IP_ACTIVE_LOW, IPT_UNUSED )
252
253   PORT_START("PL1_3")
254   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_M )
255   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_N )
256   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )
257   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )
175   PORT_START("ROW.1")
176   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_E )
177   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )
178   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_G )
179   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_H )
258180   PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
259181
260   PORT_START("PL1_4")
182   PORT_START("ROW.2")
261183   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_I )
262184   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_J )
263185   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )
264186   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_L )
265187   PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
266188
267   PORT_START("PL1_5")
268   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_E )
269   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )
270   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_G )
271   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_H )
189   PORT_START("ROW.3")
190   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_M )
191   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_N )
192   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )
193   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )
272194   PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
273195
274   PORT_START("PL1_6")
275   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )
276   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_B )
277   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_C )
278   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_D )
279   PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
196   PORT_START("ROW.4")
197   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )
198   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )
199   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_RON )
200   PORT_BIT( 0x38, IP_ACTIVE_LOW, IPT_UNUSED )
280201
281   PORT_START("PL2_1")
282   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 )
202   PORT_START("ROW.5")
203   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
283204   PORT_BIT( 0x3e, IP_ACTIVE_LOW, IPT_UNUSED )
284205
285   PORT_START("PL2_2")
286   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(2)
287   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(2)
288   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(2)
289   PORT_BIT( 0x38, IP_ACTIVE_LOW, IPT_UNUSED )
206   PORT_START("ROW.6")
207   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2)
208   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2)
209   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2)
210   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2)
211   PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
290212
291   PORT_START("PL2_3")
292   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(2)
293   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(2)
294   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(2)
295   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(2)
213   PORT_START("ROW.7")
214   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2)
215   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(2)
216   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2)
217   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2)
296218   PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
297219
298   PORT_START("PL2_4")
220   PORT_START("ROW.8")
299221   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(2)
300222   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(2)
301223   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(2)
302224   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(2)
303225   PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
304226
305   PORT_START("PL2_5")
306   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2)
307   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(2)
308   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2)
309   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2)
227   PORT_START("ROW.9")
228   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(2)
229   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(2)
230   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(2)
231   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(2)
310232   PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
311233
312   PORT_START("PL2_6")
313   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2)
314   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2)
315   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2)
316   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2)
317   PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
234   PORT_START("ROW.10")
235   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(2)
236   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(2)
237   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(2)
238   PORT_BIT( 0x38, IP_ACTIVE_LOW, IPT_UNUSED )
239
240   PORT_START("ROW.11")
241   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 )
242   PORT_BIT( 0x3e, IP_ACTIVE_LOW, IPT_UNUSED )
318243INPUT_PORTS_END
319244
320245
r242231r242232
350275
351276INTERRUPT_GEN_MEMBER(mjkjidai_state::vblank_irq)
352277{
353   if(m_nmi_mask)
278   if(m_nmi_enable)
354279      device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
355280}
356281
282void mjkjidai_state::machine_start()
283{
284   membank("bank1")->configure_entries(0, 4, memregion("maincpu")->base() + 0x8000, 0x4000);
285}
357286
287void mjkjidai_state::machine_reset()
288{
289   m_adpcm_pos = m_adpcm_end = 0;
290}
291
358292static MACHINE_CONFIG_START( mjkjidai, mjkjidai_state )
359293
360294   /* basic machine hardware */
r242231r242232
386320   MCFG_SOUND_ADD("sn2", SN76489, 10000000/4)
387321   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
388322
389   MCFG_SOUND_ADD("adpcm", MJKJIDAI, 6000)
323   MCFG_SOUND_ADD("msm", MSM5205, 384000)
324   MCFG_MSM5205_VCLK_CB(WRITELINE(mjkjidai_state, adpcm_int))
325   MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S64_4B)  /* 6kHz */
390326   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
391327MACHINE_CONFIG_END
392328
r242231r242232
399335***************************************************************************/
400336
401337ROM_START( mjkjidai )
402   ROM_REGION( 0x1c000, "maincpu", 0 )
338   ROM_REGION( 0x18000, "maincpu", 0 )
403339   ROM_LOAD( "mkj-00.14g",   0x00000, 0x8000, CRC(188a27e9) SHA1(2306ad112aaf8d9ac77a89d0e4c3a17f36945130) )
404   ROM_LOAD( "mkj-01.15g",   0x08000, 0x4000, CRC(a6a5e9c7) SHA1(974f4343f4347a0065f833c1fdcc47e96d42932d) )   /* banked, there is code flowing from 7fff to this bank */
405   ROM_CONTINUE(             0x10000, 0x4000 )
406   ROM_LOAD( "mkj-02.16g",   0x14000, 0x8000, CRC(fb312927) SHA1(b71db72ba881474f9c2523d0617757889af9f28e) )
340   ROM_LOAD( "mkj-01.15g",   0x08000, 0x8000, CRC(a6a5e9c7) SHA1(974f4343f4347a0065f833c1fdcc47e96d42932d) )
341   ROM_LOAD( "mkj-02.16g",   0x10000, 0x8000, CRC(fb312927) SHA1(b71db72ba881474f9c2523d0617757889af9f28e) )
407342
408343   ROM_REGION( 0x30000, "gfx1", 0 )
409344   ROM_LOAD( "mkj-20.4e",    0x00000, 0x8000, CRC(8fc66bce) SHA1(4f1006bc5168e39eb7a1f6a4b3c3f5aaa3c1c7dd) )
trunk/src/mame/drivers/multfish_ref.c
r242231r242232
11
22/* The following sets are known to exist based on official documentation, but have not been dumped. */
3/* no other official sets are known to exist apart from these and hte ones in multfish.c */
3/* no other official sets are known to exist apart from these and the ones in multfish.c */
44
55#if 0
66ROM_START( mfish ) // 021120
trunk/src/mame/drivers/naomi.c
r242231r242232
259259Ferrari F355 Challenge (twin, prototype)        no cart  22848P* 21 (64Mb)   present  315-6206  317-0267-COM  * flash-PCB have CRC 330B A417, the rest is the same as regular cart, not dumped but known to exist
260260Ferrari F355 Challenge 2 (twin)                 no cart  23399   21 (64Mb)   present  315-6206  317-0287-COM  content is the same as regular 171-7919A cart
261261House of the Dead 2 (prototype)                 no cart  A1E2    21 (64Mb)   present  315-6206  present       no label on IC42
262Inu No Osanpo / Dog Walking (Rev A)           840-0073C  22294A  16 (64Mb)   present  315-6206  317-0316-JPN  requires 837-13844 JVS IO with special jumpers settings enabling rotary
262Inu No Osanpo / Dog Walking (Rev A)           840-0073C  22294A  16 (64Mb)   present  315-6206  317-0316-JPN  requires 837-13844 JVS IO with DIPSW 1 ON
263263Maze of the Kings The (prototype)               no cart  *       21 (64Mb)   present  315-6206  FRI           * flash-PCB, not dumped but known to exist
264264Samba de Amigo (prototype)                      no cart  *       21 (64Mb)   present  315-6206  317-0270-COM  * instead of EPROM have tiny PCB with 2 flashroms on it
265265Soul Surfer (Rev A)                           840-0095C  23838C  21 (64Mb)   present  315-6206  not present
r242231r242232
335335Puyo Puyo Da!                                   841-0006C    22206   20 (64Mb)   ?           315-6213  ?
336336Ring Out 4x4                                    840-0004C    21779   10 (64Mb)   present     315-6213  317-0250-COM   requires 2 JVS boards
337337Samba de Amigo (Rev B)                          840-0020C    22966B  16 (64Mb)   present     315-6213  317-0270-COM   will boot but requires special controller to play it
338Sega Marine Fishing                             840-0027C    22221   10 (64Mb)   ?           315-6213  not present    ROM 3&4 not present. Requires fishing controller
338Sega Marine Fishing                             840-0027C    22221   10 (64Mb)   ?           315-6213  not present    ROM 3&4 not present. Requires 837-13844 JVS IO with all DIPSW Off and fishing controller
339339Sega Strike Fighter (Rev A, set 1)              840-0035C    23323A  20 (64Mb)   present     315-6213  317-0281-COM   have "Rev. A" label on case
340340Sega Strike Fighter (Rev A, set 2)              840-0035C    23786A  20 (64Mb)   present     315-6213  317-0281-COM   have "Rev. A" label on PCB
341341Sega Tetris                                     840-0018C    22909    6 (64Mb)   present     315-6213  317-0268-COM
r242231r242232
343343Spawn In the Demon's Hand (Rev B)               841-0005C    22977B  10 (64Mb)   ?           315-6213  317-5051-COM   joystick + 4 buttons
344344Super Major League '99                          840-0012C    22059   21 (64Mb)   ?           315-6213  ?
345345The Typing of the Dead (Rev A)                  840-0026C    23021A  20 (64Mb)   present     315-6213  not present
346Touch de UNO! / Unou Nouryoku Check Machine     840-0008C    22073    4 (64Mb)   present     315-6213  317-0255-JPN   requires special JVS board with touch input and printer
346Touch de UNO! / Unou Nouryoku Check Machine     840-0008C    22073    4 (64Mb)   present     315-6213  317-0255-JPN   requires 837-13844 JVS IO with DIPSW 5 On, ELO AccuTouch-compatible touch screen controller and special printer.
347347Toy Fighter / Waffupu                           840-0011C    22035   10 (64Mb)   present     315-6212  317-0257-COM   joystick + 3 buttons
348348Virtua NBA                                      840-0021C-01 23073   21 (64Mb)   present     315-6213  not present
349349Virtua NBA (original)                           840-0021C    22949   21 (64Mb)   present     315-6213  317-0271-COM
r242231r242232
460460Shootout Pool Prize / The Medal (Rev A)        840-0128C    24065A   4 (64Mb)   present  317-0367-COM  requires Naomi-based hopper controller
461461Shootout Pool Prize / The Medal Ver. B         840-0136C    24148    4 (64Mb)   present  317-0367-COM  requires Naomi-based or 837-14438 hopper controller
462462SWP Hopper Board                               840-0130C    24083   20 (64Mb)   present  317-0339-COM  Maskroms are not really used, they are recycled from other games; there is an additional 837-14381 IO board
463Touch de UNO! 2                                840-0022C    23071    6 (64Mb)   present  317-0276-JPN  requires special JVS board with touch input and printer
463Touch de UNO! 2                                840-0022C    23071    6 (64Mb)   present  317-0276-JPN  requires 837-13844 JVS IO with DIPSW 5 On, ELO AccuTouch-compatible touch screen controller and special printer.
464464Virtua Fighter 4 Evolution                     840-0106B    23934   20 (64Mb)   present  317-0339-COM
465465Virtua Tennis 2 / Power Smash 2 (Rev A)        840-0084C    22327A  18 (64Mb)   present  317-0320-COM
466466
r242231r242232
888888|-----------------------------|
889889Notes: (most info taken from poor quality pics/scans, better info is needed)
890890
891             JVS I/O board 2. Has both digital and analogue inputs.
891             JVS I/O board 2. Supports digital and analogue inputs, rotary input,
892             touch screens (ELO AccuTouch-compatible) and printer output using
893             extended JVS commands. This features can be enabled or disabled
894             by switching DIPSW 1-5.
892895             This board is used with F355, Ghost Squad, and many
893896             others including network/satellite games.
894897
r242231r242232
909912      IC7  - 27C512 EPROM with label 'EPR-22082' (DIP28)
910913             On plain 837-13844 (no -02) this is 'EPR-21868' (DIP28)
911914      IC8  - Sharp LH52256 32k x8 SRAM (SOP28)
912      IC10 - Something by NEC? (QFP44)
915      IC10 - NEC D71054GB programmable counter/timer (QFP44)
913916      OSC1 - 14.7456MHz
914917      OSC2 - 32MHz
915918      CNx  - 6 pin connector
r242231r242232
56315634   ROM_LOAD( "fpr-24333.ic8", 0x0000000, 0x4000000, CRC(a467b69c) SHA1(66a841b72ef1bb8cbabbfb1d14081b4dff14b1d3) )
56325635   ROM_LOAD( "fpr-24334.ic9", 0x4000000, 0x4000000, CRC(13d2d1dc) SHA1(6a47cfaddf006e6ff46837fac956fbcc20619d79) )
56335636
5634   // ROM_REGION( 4, "rom_key", 0 )
5635   // ROM_LOAD( "mushik2e-key.bin", 0, 4, CRC(b32a0633) SHA1(984c01e43cf359d8e8a0c6cb1a04c5dc3da47d39) )
5636   ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
5637   ROM_LOAD( "317-0437-com.ic3", 0, 20, NO_DUMP )
5637   ROM_REGION( 0x800, "pic_readout", 0 )
5638   ROM_LOAD( "317-0437-com.ic3", 0, 0x800, BAD_DUMP CRC(b6e4f61a) SHA1(b5cae574170afa3889e01517f1c4429e207042b9) )
56385639
56395640   ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x02))
56405641ROM_END
r242231r242232
56485649   ROM_LOAD( "epr-24357.ic7", 0x0000000, 0x0400000, CRC(a2236d58) SHA1(3746b9d3c0f7ecf6340619bb8bf01f170ac4efb7) ) // EPR mode, overwrite FPR data
56495650   ROM_LOAD( "fpr-24334.ic9", 0x4000000, 0x4000000, CRC(13d2d1dc) SHA1(6a47cfaddf006e6ff46837fac956fbcc20619d79) )
56505651
5651   // ROM_REGION( 4, "rom_key", 0 )
5652   // ROM_LOAD( "mushik2e-key.bin", 0, 4, CRC(b32a0633) SHA1(984c01e43cf359d8e8a0c6cb1a04c5dc3da47d39) )
5653   ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
5654   ROM_LOAD( "317-0437-com.ic3", 0, 20, NO_DUMP )
5652   ROM_REGION( 0x800, "pic_readout", 0 )
5653   ROM_LOAD( "317-0437-com.ic3", 0, 0x800, BAD_DUMP CRC(b6e4f61a) SHA1(b5cae574170afa3889e01517f1c4429e207042b9) )
56555654
56565655   ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x82))
56575656ROM_END
r242231r242232
56645663   ROM_LOAD( "fpr-24338.ic8", 0x0000000, 0x4000000, CRC(1423c374) SHA1(e6a3f0eaccd13c161d07705bcd00f447f08fc186) )
56655664   ROM_LOAD( "fpr-24339.ic9", 0x4000000, 0x4000000, CRC(11883792) SHA1(1782db04f74394f981f887ab1a95d687eb2c0b35) )
56665665
5667   // ROM_REGION( 4, "rom_key", 0 )
5668   // ROM_LOAD( "zunou-key.bin", 0, 4, CRC(cbe35afb) SHA1(78877655800aae27661bf720e1c37d6c6f2e3d1c) )
5669   ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
5670   ROM_LOAD( "317-0435-jpn.ic3", 0, 20, NO_DUMP )
5666   ROM_REGION( 0x800, "pic_readout", 0 )
5667   ROM_LOAD( "317-0435-jpn.ic3", 0, 0x800, BAD_DUMP CRC(b553d900) SHA1(ed1c3c2053f2c0e98cb5c4d99f93143a66c29e5c) )
56715668
56725669   ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x02))
56735670ROM_END
r242231r242232
56825679   ROM_LOAD( "fpr-24415.ic10", 0x8000000, 0x4000000, CRC(133c742c) SHA1(89f857a31731dc918afc72b6cb716f5c77cb9d6e) )
56835680   ROM_LOAD( "fpr-24416.ic11", 0xc000000, 0x4000000, CRC(562fb88e) SHA1(172678e3e27cfad7f7e6217c4653a4ba119bfbdf) )
56845681
5685   ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
5686   ROM_LOAD( "317-5129-jpn.ic3", 0, 20, CRC(b6191cea) SHA1(13e14ff013bf2728203641303141c016e82b10a3) )
5682   ROM_REGION( 0x800, "pic_readout", 0 )
5683   ROM_LOAD( "317-5129-jpn.ic3", 0, 0x800, CRC(432ba30f) SHA1(4935a16d1075430799269ac7ac990066d44d815b) )
56875684
56885685   ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04))
56895686ROM_END
r242231r242232
56985695   ROM_LOAD( "fpr-24384.ic10", 0x8000000, 0x4000000, CRC(2e9116c4) SHA1(58903a33c4ce72a1f75aefcab94393fc2e8bd2d9) )
56995696   ROM_LOAD( "fpr-24385.ic11", 0xc000000, 0x4000000, CRC(2b79f45d) SHA1(db97d980bf1590df4b983a4b7786977687238ef5) )
57005697
5701   ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
5702   ROM_LOAD( "317-0495-com.ic3", 0, 20, CRC(675aca7b) SHA1(5127189e1f960abf9ed3f643158747d9abcaee1c) )
5698   ROM_REGION( 0x800, "pic_readout", 0 )
5699   ROM_LOAD( "317-0495-com.ic3", 0, 0x800, CRC(c229a59b) SHA1(497dcc1e4e52eb044a8b709edbd00126cef212b1) )
57035700
57045701   ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04))
57055702ROM_END
r242231r242232
57145711   ROM_LOAD( "fpr-24439.ic10", 0x8000000, 0x4000000, CRC(c02040f9) SHA1(27ad2cb45e8a516433917f060ca9798412bb95f7) )
57155712   // IC11 Populated, Empty
57165713
5717   ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
5718   ROM_LOAD( "317-5131-jpn.ic3", 0, 20, CRC(44ab8ca9) SHA1(c17b10041e70590547ed010dc16a4dd2510fcc80) )
5714   ROM_REGION( 0x800, "pic_readout", 0 )
5715   ROM_LOAD( "317-5131-jpn.ic3", 0, 0x800, CRC(af4b38f2) SHA1(9b82f16a258854d7d618d60f9a610f7d47d67a78) )
57195716
57205717   ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04))
57215718ROM_END
r242231r242232
57305727   ROM_LOAD( "ic10.bin", 0x8000000, 0x4000000, CRC(76fb945f) SHA1(448be0c3d9a7c3956dd51aca3c4d8d28f8cec227) )
57315728   // IC11 Populated, Empty
57325729
5733   ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
5734   ROM_LOAD( "317-5132-jpn.ic3", 0, 20, CRC(f2089de5) SHA1(12af0681decb22bbfa4b3e01037c3503846f265a) )
5730   ROM_REGION( 0x800, "pic_readout", 0 )
5731   ROM_LOAD( "317-5132-jpn.ic3", 0, 0x800, CRC(d56e70a1) SHA1(fda1a2989f0fa3b0edeb292cdd4537d9b86af6f2) )
57355732
57365733   ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04))
57375734ROM_END
r242231r242232
57485745   ROM_LOAD( "ic12.bin",     0x10000000, 0x4000000, CRC(b8a6bff2) SHA1(befbc2e917b3107f1c4bfb9169623282ff97bfb2) )
57495746   ROM_LOAD( "ic13.bin",     0x14000000, 0x4000000, CRC(4886329f) SHA1(6ccf6fb83cfdbef3f85f6c06e641c38ff434d605) )
57505747
5751   ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
5752   ROM_LOAD( "317-5133-jpn.ic3", 0, 20, CRC(3dc7d902) SHA1(bb70e80dff878bca3652088f3333079e0781f482) )
5748   ROM_REGION( 0x800, "pic_readout", 0 )
5749   ROM_LOAD( "317-5133-jpn.ic3", 0, 0x800, CRC(0f16d180) SHA1(9d4ae15aa54752cdbd8e279388b7f3ae20777172) )
57535750
57545751   ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x06))
57555752ROM_END
r242231r242232
57675764   ROM_LOAD( "ic12.bin",     0x10000000, 0x4000000, CRC(b8a6bff2) SHA1(befbc2e917b3107f1c4bfb9169623282ff97bfb2) )
57685765   ROM_LOAD( "ic13.bin",     0x14000000, 0x4000000, CRC(4886329f) SHA1(6ccf6fb83cfdbef3f85f6c06e641c38ff434d605) )
57695766
5770   ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
5771   ROM_LOAD( "317-5133-jpn.ic3", 0, 20, CRC(3dc7d902) SHA1(bb70e80dff878bca3652088f3333079e0781f482) )
5767   ROM_REGION( 0x800, "pic_readout", 0 )
5768   ROM_LOAD( "317-5133-jpn.ic3", 0, 0x800, CRC(0f16d180) SHA1(9d4ae15aa54752cdbd8e279388b7f3ae20777172) )
57725769
57735770   ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x86))
57745771ROM_END
r242231r242232
57825779   ROM_LOAD( "ic9.bin", 0x4000000, 0x4000000, CRC(16cf2e7a) SHA1(ff7c6540e4507f84e3128ba03be4826ba504678c) )
57835780   // IC10 and IC11 Populated, Empty
57845781
5785   ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
5786   ROM_LOAD( "317-5138-jpn.ic3", 0, 20, CRC(babcc420) SHA1(653cdcfa388426f4ce03c76506046ec6fd070562) )
5782   ROM_REGION( 0x800, "pic_readout", 0 )
5783   ROM_LOAD( "317-5138-jpn.ic3", 0, 0x800, CRC(93b7a03d) SHA1(7af7c8d436f61e57b9d5957431c6fc745442f74f) )
57875784
57885785   ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04))
57895786ROM_END
r242231r242232
57975794   ROM_LOAD( "ic9.bin",    0x4000000, 0x4000000, CRC(18c994d7) SHA1(159e1425b2fc645133814b0d26d93a90e9849b1a) )
57985795   // IC10 and IC11 Populated, Empty
57995796
5800   ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
5801   ROM_LOAD( "317-5130-jpn.ic3", 0, 20, CRC(3e0c010b) SHA1(b6da97d4ecb228e73fb9a5ada837d0d6699ab0f1) )
5797   ROM_REGION( 0x800, "pic_readout", 0 )
5798   ROM_LOAD( "317-05130-jpn.ic3", 0, 0x800, CRC(eccdcd59) SHA1(9f374e0b37f18591c92c38c83c9310f2db0abf9c) )
58025799
58035800   ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04))
58045801ROM_END
r242231r242232
58175814   ROM_REGION( 0x200000, "ioboard", 0) // touch screen I/O board, program disassembles as little-endian SH-4
58185815   ROM_LOAD( "fpr24351.ic14", 0x000000, 0x200000, CRC(4d1b7b89) SHA1(965b8c6b5a2e7b3f1b1e2eac19c86000c3b66754) )
58195816
5820   // ROM_REGION( 4, "rom_key", 0 )
5821   // ROM_LOAD( "pokasuka-key.bin", 0, 4, CRC(f00bcd61) SHA1(b8315b851656c2e0b7853979988d1c44eab0886b) )
5822   ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
5823   ROM_LOAD( "317-0461-com.ic3", 0, 20, NO_DUMP )
5817   ROM_REGION( 0x800, "pic_readout", 0 )
5818   ROM_LOAD( "317-0461-com.ic3", 0, 0x800, BAD_DUMP CRC(c9282cdd) SHA1(23933e489d763515428e2714cc6e7676df1d5323) )
58245819
58255820   ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x05))
58265821ROM_END
r242231r242232
58395834   ROM_REGION( 0x200000, "ioboard", 0) // touch screen I/O board, program disassembles as little-endian SH-4
58405835   ROM_LOAD( "fpr24351.ic14", 0x000000, 0x200000, CRC(4d1b7b89) SHA1(965b8c6b5a2e7b3f1b1e2eac19c86000c3b66754) )
58415836
5842   // ROM_REGION( 4, "rom_key", 0 )
5843   // ROM_LOAD( "pokasuka-key.bin", 0, 4, CRC(f00bcd61) SHA1(b8315b851656c2e0b7853979988d1c44eab0886b) )
5844   ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
5845   ROM_LOAD( "317-0461-com.ic3", 0, 20, NO_DUMP )
5837   ROM_REGION( 0x800, "pic_readout", 0 )
5838   ROM_LOAD( "317-0461-com.ic3", 0, 0x800, BAD_DUMP CRC(c9282cdd) SHA1(23933e489d763515428e2714cc6e7676df1d5323) )
58465839
58475840   ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x05))
58485841ROM_END
r242231r242232
58605853   ROM_LOAD( "fpr-24425.ic10", 0x08000000, 0x4000000, CRC(6223ebac) SHA1(64c0ec61c108acbb557e7d3837f578deba832cb6) )
58615854   ROM_LOAD( "fpr-24426.ic11", 0x0c000000, 0x4000000, CRC(c78b0981) SHA1(f889acf9065566e11ff985a3b6c4824e364d57ae) )
58625855
5863   ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
5864   ROM_LOAD( "317-0503-jpn.ic3", 0, 20, CRC(69fc3f47) SHA1(3a887c62e93fa264b307c954eb39a4fca1bdfad6) )
5856   ROM_REGION( 0x800, "pic_readout", 0 )
5857   ROM_LOAD( "317-0503-jpn.ic3", 0, 0x800, CRC(6eb0976b) SHA1(d5d0fc09a0c0e3a8f2703c450f05f5082317fbe4) )
58655858
58665859   ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04))
58675860ROM_END
trunk/src/mame/drivers/neogeo_noslot.c
r242231r242232
620620   ROM_REGION( 0x100000, "maincpu", 0 )
621621   ROM_LOAD16_WORD_SWAP( "006-p1.p1", 0x000000, 0x080000, CRC(d4aaf597) SHA1(34d35b71adb5bd06f4f1b50ffd9c58ab9c440a84) ) /* MB834200 */
622622
623   ROM_REGION( 0x1000, "mcu", 0 )    /* Hitachi HD6301V1 MCU */
624   ROM_LOAD( "hd6301v1p.com", 0x0000, 0x1000, NO_DUMP )
623   ROM_REGION( 0x2000, "mcu", 0 )    /* Hitachi HD6301V1 MCU */
624   ROM_LOAD( "rhcom.bin", 0x0000, 0x2000, CRC(e5cd6306) SHA1(f6bbb8ae562804d67e137290c765c3589fa334c0) ) // dumped from a prototype with external ROM, not 100% confirmed as being the same on a final, or other games (lbowling, trally)
625625
626626   NEO_SFIX_128K( "006-s1.s1", CRC(eb5189f0) SHA1(0239c342ea62e73140a2306052f226226461a478) ) /* TC531000 */
627627
r242231r242232
649649   ROM_LOAD16_WORD_SWAP( "006-pg1.p1", 0x000000, 0x080000, BAD_DUMP CRC(52445646) SHA1(647bb31f2f68453c1366cb6e2e867e37d1df7a54) )
650650   /* Chip label p1h does not exist, renamed temporarly to pg1, marked BAD_DUMP. This needs to be verified. */
651651
652   ROM_REGION( 0x1000, "mcu", 0 )    /* Hitachi HD6301V1 MCU */
653   ROM_LOAD( "hd6301v1p.com", 0x0000, 0x1000, NO_DUMP )
652   ROM_REGION( 0x2000, "mcu", 0 )    /* Hitachi HD6301V1 MCU */
653   ROM_LOAD( "rhcom.bin", 0x0000, 0x2000, CRC(e5cd6306) SHA1(f6bbb8ae562804d67e137290c765c3589fa334c0) ) // dumped from a prototype with external ROM, not 100% confirmed as being the same on a final, or other games (lbowling, trally)
654654
655655   NEO_SFIX_128K( "006-s1.s1", CRC(eb5189f0) SHA1(0239c342ea62e73140a2306052f226226461a478) ) /* TC531000 */
656656
r242231r242232
25392539   ROM_REGION( 0x100000, "maincpu", 0 )
25402540   ROM_LOAD16_WORD_SWAP( "060-p1.p1", 0x0000000, 0x100000, CRC(2a104b50) SHA1(3eb663d3df7074e1cdf4c0e450a35c9cf55d8979) ) /* VIC940800 */
25412541
2542   NEO_SFIX_128K( "060-s1.s1", CRC(7f012104) SHA1(f366dcc3923655dff16ec08a40d5fce22a84257d) ) /* VIC930100 */
2542   NEO_SFIX_128K( "060-s1.s1", CRC(d62a72e9) SHA1(a23e4c4fd4ec11a7467ce41227c418b4dd1ef649) ) /* VIC930100 */
25432543
25442544   NEO_BIOS_AUDIO_128K( "060-m1.m1", CRC(0b7c4e65) SHA1(999a1e784de18db3f1332b30bc425836ea6970be) ) /* VIC930100 */
25452545
r242231r242232
25602560   ROM_REGION( 0x100000, "maincpu", 0 )
25612561   ROM_LOAD16_WORD_SWAP( "060-p1.p1", 0x0000000, 0x100000, CRC(2a104b50) SHA1(3eb663d3df7074e1cdf4c0e450a35c9cf55d8979) ) /* VIC940800 */
25622562   /* the rom below acts as a patch to the program rom in the cart, replacing the first 512kb */
2563   ROM_LOAD16_WORD_SWAP( "060-epr.sp2", 0x000000, 0x080000, BAD_DUMP CRC(3032041b) SHA1(4b8ed2e6f74579ea35a53e06ccac42d6905b0f51) )
2564   /* P is on eprom, correct chip label unknown */
2563   ROM_LOAD16_WORD_SWAP( "1.sp2", 0x000000, 0x080000, CRC(3032041b) SHA1(4b8ed2e6f74579ea35a53e06ccac42d6905b0f51) )
2564   /* P is on eprom, has a Viccom logo at the top of the label with a circled '1' in the center */
25652565
2566   NEO_SFIX_128K( "060-s1.s1", CRC(7f012104) SHA1(f366dcc3923655dff16ec08a40d5fce22a84257d) ) /* VIC930100 */
2566   NEO_SFIX_128K( "060-s1.s1", CRC(d62a72e9) SHA1(a23e4c4fd4ec11a7467ce41227c418b4dd1ef649) ) /* VIC930100 */
25672567
25682568   NEO_BIOS_AUDIO_128K( "060-m1.m1", CRC(0b7c4e65) SHA1(999a1e784de18db3f1332b30bc425836ea6970be) ) /* VIC930100 */
25692569
trunk/src/mame/drivers/nova2001.c
r242231r242232
930930/******************************************************************************
931931
932932Gfx ROMs in pkunwar have an unusual layout, where a high address bit
933(which is no the top bit) separates parts of the same tile.
933(which is not the top bit) separates parts of the same tile.
934934
935935This all originates from Nova2001 apparently, which uses 0x2000 bytes ROMs for
936936the graphics. When the number of tiles was increased, the same 0x2000 blocks
trunk/src/mame/drivers/r2dx_v33.c
r242231r242232
434434   AM_RANGE(0x10000, 0x1efff) AM_RAM
435435   AM_RANGE(0x1f000, 0x1ffff) AM_RAM //_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
436436
437   AM_RANGE(0x20000, 0x2ffff) AM_ROM AM_ROMBANK("bank1") AM_WRITENOP
438   AM_RANGE(0x30000, 0xfffff) AM_ROM AM_ROMBANK("bank3") AM_WRITENOP
437   AM_RANGE(0x20000, 0x2ffff) AM_ROMBANK("bank1") AM_WRITENOP
438   AM_RANGE(0x30000, 0xfffff) AM_ROMBANK("bank3") AM_WRITENOP
439439ADDRESS_MAP_END
440440
441441
r242231r242232
490490   AM_RANGE(0x10000, 0x1efff) AM_RAM
491491   AM_RANGE(0x1f000, 0x1ffff) AM_RAM //_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
492492
493   AM_RANGE(0x20000, 0xfffff) AM_ROM AM_REGION("mainprg", 0x20000 )
493   AM_RANGE(0x20000, 0xfffff) AM_ROM AM_REGION("maincpu", 0x20000 )
494494ADDRESS_MAP_END
495495
496496static ADDRESS_MAP_START( nzerotea_map, AS_PROGRAM, 16, r2dx_v33_state )
r242231r242232
846846   static const int spri[5] = { 0, 1, 2, 3, -1 };
847847   cur_spri = spri;
848848
849   membank("bank1")->configure_entries(0, 0x40, memregion("mainprg")->base(), 0x10000);
849   membank("bank1")->configure_entries(0, 0x40, memregion("maincpu")->base(), 0x10000);
850850
851   membank("bank3")->configure_entry(0, memregion("mainprg")->base()+0x030000); // 0x30000 - 0xfffff bank for Raiden 2
852   membank("bank3")->configure_entry(1, memregion("mainprg")->base()+0x230000); // 0x30000 - 0xfffff bank for Raiden DX
851   membank("bank3")->configure_entry(0, memregion("maincpu")->base()+0x030000); // 0x30000 - 0xfffff bank for Raiden 2
852   membank("bank3")->configure_entry(1, memregion("maincpu")->base()+0x230000); // 0x30000 - 0xfffff bank for Raiden DX
853853
854854
855855   raiden2_decrypt_sprites(machine());
r242231r242232
958958
959959
960960ROM_START( r2dx_v33 )
961   ROM_REGION( 0x400000, "mainprg", 0 ) /* v33 main cpu */
961   ROM_REGION( 0x400000, "maincpu", 0 ) /* v33 main cpu */
962962   ROM_LOAD("prg.223", 0x000000, 0x400000, CRC(b3dbcf98) SHA1(30d6ec2090531c8c579dff74c4898889902d7d87) )
963963
964   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF ) /* v33 main cpu */
965
966964   ROM_REGION( 0x040000, "gfx1", 0 ) /* chars */
967965   ROM_LOAD( "fix.613", 0x000000, 0x040000, CRC(3da27e39) SHA1(3d446990bf36dd0a3f8fadb68b15bed54904c8b5) )
968966
969967   ROM_REGION( 0x400000, "gfx2", 0 ) /* background gfx */
970968   ROM_LOAD( "bg.612", 0x000000, 0x400000, CRC(162c61e9) SHA1(bd0a6a29804b84196ba6bf3402e9f30a25da9269) )
971969
972   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
970   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
973971   ROM_LOAD32_WORD( "obj1.724", 0x000000, 0x400000, CRC(7d218985) SHA1(777241a533defcbea3d7e735f309478d260bad52) )
974972   ROM_LOAD32_WORD( "obj2.725", 0x000002, 0x400000, CRC(891b24d6) SHA1(74f89b47b1ba6b84ddd96d1fae92fddad0ace342) )
975973
r242231r242232
984982ROM_END
985983
986984ROM_START( r2dx_v33_r2 )
987   ROM_REGION( 0x400000, "mainprg", 0 ) /* v33 main cpu */
985   ROM_REGION( 0x400000, "maincpu", 0 ) /* v33 main cpu */
988986   ROM_LOAD("prg.223", 0x000000, 0x400000, CRC(b3dbcf98) SHA1(30d6ec2090531c8c579dff74c4898889902d7d87) )
989987
990   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF ) /* v33 main cpu */
991
992988   ROM_REGION( 0x040000, "gfx1", 0 ) /* chars */
993989   ROM_LOAD( "fix.613", 0x000000, 0x040000, CRC(3da27e39) SHA1(3d446990bf36dd0a3f8fadb68b15bed54904c8b5) )
994990
995991   ROM_REGION( 0x400000, "gfx2", 0 ) /* background gfx */
996992   ROM_LOAD( "bg.612", 0x000000, 0x400000, CRC(162c61e9) SHA1(bd0a6a29804b84196ba6bf3402e9f30a25da9269) )
997993
998   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
994   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
999995   ROM_LOAD32_WORD( "obj1.724", 0x000000, 0x400000, CRC(7d218985) SHA1(777241a533defcbea3d7e735f309478d260bad52) )
1000996   ROM_LOAD32_WORD( "obj2.725", 0x000002, 0x400000, CRC(891b24d6) SHA1(74f89b47b1ba6b84ddd96d1fae92fddad0ace342) )
1001997
r242231r242232
10121008
10131009// uses dipswitches
10141010ROM_START( nzeroteam ) /* V33 SYSTEM TYPE_B hardware, uses SEI333 (AKA COPX-D3) for protection  */
1015   ROM_REGION( 0x100000, "mainprg", 0 ) /* v30 main cpu */
1011   ROM_REGION( 0x100000, "maincpu", 0 ) /* v30 main cpu */
10161012   ROM_LOAD16_BYTE("prg1", 0x000000, 0x80000, CRC(3c7d9410) SHA1(25f2121b6c2be73f11263934266901ed5d64d2ee) )
10171013   ROM_LOAD16_BYTE("prg2", 0x000001, 0x80000, CRC(6cba032d) SHA1(bf5d488cd578fff09e62e3650efdee7658033e3f) )
10181014
1019   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF ) /* v33 main cpu */
1020
10211015   ROM_REGION( 0x20000, "math", 0 ) /* SEI333 (AKA COPX-D3) data */
10221016   ROM_LOAD( "copx-d3.bin", 0x00000, 0x20000, CRC(fa2cf3ad) SHA1(13eee40704d3333874b6e3da9ee7d969c6dc662a) ) /* Not from this set, but same data as Zero Team 2000 & Raiden II New */
10231017
r242231r242232
10341028   ROM_LOAD( "back-1", 0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) ) /* Same as "MUSHA BACK-1" of other Zero Team sets */
10351029   ROM_LOAD( "back-2", 0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) ) /* Same as "MUSHA BACK-2" of other Zero Team sets */
10361030
1037   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
1031   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
10381032   ROM_LOAD32_WORD( "obj-1", 0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) ) /* Same as "MUSHA OBJ-1" of other Zero Team sets */
10391033   ROM_LOAD32_WORD( "obj-2", 0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) ) /* Same as "MUSHA OBJ-2" of other Zero Team sets */
10401034
r242231r242232
10441038
10451039// uses a 93c46a eeprom
10461040ROM_START( zerotm2k ) /* V33 SYSTEM TYPE_C VER2 hardware, uses SEI333 (AKA COPX-D3) for protection  */
1047   ROM_REGION( 0x100000, "mainprg", 0 ) /* v30 main cpu */
1041   ROM_REGION( 0x100000, "maincpu", 0 ) /* v30 main cpu */
10481042   ROM_LOAD( "mt28f800b1.u0230", 0x000000, 0x100000, CRC(6ab49d8c) SHA1(d94ec9a46ff98a76c3372369246733268474de99) ) /* SMT rom, PCB silkscreened PRG01 */
10491043   /* PCB has unpopulated socket space for two 27C040 at u0224 silkscreened PRG0 & u0226 silkscreened PRG1) */
10501044
1051   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF ) /* v33 main cpu */
1052
10531045   ROM_REGION( 0x20000, "math", 0 ) /* SEI333 (AKA COPX-D3) data */
10541046   ROM_LOAD( "mx27c1000mc.u0366", 0x00000, 0x20000, CRC(fa2cf3ad) SHA1(13eee40704d3333874b6e3da9ee7d969c6dc662a) ) /* PCB silkscreened 333ROM */
10551047
r242231r242232
10671059   ROM_LOAD( "mt28f400b1.u0619", 0x100000, 0x080000, CRC(266acee6) SHA1(2a9da66c313a7536c7fb393134b9df0bb122cb2b) ) /* SMT rom, PCB silkscreened BG3 */
10681060   /* PCB has an unpopulated socket rom space for a LH535A00D at u0615 for alt BG3 location */
10691061
1070   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (NOT encrypted) */
1062   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (NOT encrypted) */
10711063   ROM_LOAD32_WORD( "musha_obj-1a.u0729", 0x000000, 0x200000, CRC(9b2cf68c) SHA1(cd8cb277091bfa125fd0f68410de39f72f1c7047) ) /* PCB silkscreened OBJ1 */
10721064   ROM_LOAD32_WORD( "musha_obj-2a.u0730", 0x000002, 0x200000, CRC(fcabee05) SHA1(b2220c0311b3bd2fd44fb56fff7c27bed0816fe9) ) /* PCB silkscreened OBJ2 */
10731065   /* PCB has unpopulated rom space for two SMT roms at u0734 & u0736 for alt OBJ1 & OBJ2 locations) */
trunk/src/mame/drivers/raiden2.c
r242231r242232
974974
975975   AM_RANGE(0x20000, 0x2ffff) AM_ROMBANK("mainbank1")
976976   AM_RANGE(0x30000, 0x3ffff) AM_ROMBANK("mainbank2")
977   AM_RANGE(0x40000, 0xfffff) AM_ROM AM_REGION("mainprg", 0x40000)
977   AM_RANGE(0x40000, 0xfffff) AM_ROM AM_REGION("maincpu", 0x40000)
978978ADDRESS_MAP_END
979979
980980static ADDRESS_MAP_START( raidendx_mem, AS_PROGRAM, 16, raiden2_state )
r242231r242232
10131013
10141014   AM_RANGE(0x20000, 0x2ffff) AM_ROMBANK("mainbank1")
10151015   AM_RANGE(0x30000, 0x3ffff) AM_ROMBANK("mainbank2")
1016   AM_RANGE(0x40000, 0xfffff) AM_ROM AM_REGION("mainprg", 0x40000)
1016   AM_RANGE(0x40000, 0xfffff) AM_ROM AM_REGION("maincpu", 0x40000)
10171017ADDRESS_MAP_END
10181018
10191019static ADDRESS_MAP_START( xsedae_mem, AS_PROGRAM, 16, raiden2_state )
r242231r242232
10431043
10441044   AM_RANGE(0x10000, 0x1ffff) AM_RAM
10451045
1046   AM_RANGE(0x20000, 0xfffff) AM_ROM AM_REGION("mainprg", 0x20000)
1046   AM_RANGE(0x20000, 0xfffff) AM_ROM AM_REGION("maincpu", 0x20000)
10471047ADDRESS_MAP_END
10481048
10491049
r242231r242232
15771577*/
15781578
15791579ROM_START( raiden2 )
1580   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
1580   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
15811581   ROM_LOAD16_BYTE("prg0.u0211",   0x000000, 0x80000, CRC(09475ec4) SHA1(05027f2d8f9e11fcbd485659eda68ada286dae32) )
15821582   ROM_RELOAD(0x100000, 0x80000)
15831583   ROM_LOAD16_BYTE("prg1.u0212",   0x000001, 0x80000, CRC(4609b5f2) SHA1(272d2aa75b8ea4d133daddf42c4fc9089093df2e) )
r242231r242232
15981598   ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
15991599   ROM_LOAD( "raiden_2_seibu_bg-2.u075",  0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
16001600
1601   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
1601   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
16021602   ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
16031603   ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082",  0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
16041604   ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
r242231r242232
16171617
16181618
16191619ROM_START( raiden2sw ) // original board with serial # 0008307
1620   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
1620   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
16211621   ROM_LOAD16_BYTE("seibu_1.u0211",   0x000000, 0x80000, CRC(09475ec4) SHA1(05027f2d8f9e11fcbd485659eda68ada286dae32) )
16221622   ROM_RELOAD(0x100000, 0x80000)
16231623   ROM_LOAD16_BYTE("seibu_2.u0212",   0x000001, 0x80000, CRC(59abc2ec) SHA1(45f2dbd2dd46f5da07dae0dc486772f8e61f4c43) )
r242231r242232
16381638   ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
16391639   ROM_LOAD( "raiden_2_seibu_bg-2.u075",  0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
16401640
1641   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
1641   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
16421642   ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
16431643   ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082",  0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
16441644   ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
r242231r242232
16741674*/
16751675
16761676ROM_START( raiden2hk )
1677   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
1677   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
16781678   ROM_LOAD16_BYTE("prg0.u0211",   0x000000, 0x80000, CRC(09475ec4) SHA1(05027f2d8f9e11fcbd485659eda68ada286dae32) ) // rom1
16791679   ROM_RELOAD(0x100000, 0x80000)
16801680   ROM_LOAD16_BYTE("rom2e.u0212",  0x000001, 0x80000, CRC(458d619c) SHA1(842bf0eeb5d192a6b188f4560793db8dad697683) )
r242231r242232
16951695   ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
16961696   ROM_LOAD( "raiden_2_seibu_bg-2.u075",  0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
16971697
1698   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
1698   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
16991699   ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
17001700   ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082",  0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
17011701   ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
r242231r242232
17481748*/
17491749
17501750ROM_START( raiden2j )
1751   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
1751   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
17521752   ROM_LOAD16_BYTE("prg0.u0211",   0x000000, 0x80000, CRC(09475ec4) SHA1(05027f2d8f9e11fcbd485659eda68ada286dae32) ) // rom1
17531753   ROM_RELOAD(0x100000, 0x80000)
17541754   ROM_LOAD16_BYTE("rom2j.u0212",  0x000001, 0x80000, CRC(e4e4fb4c) SHA1(7ccf33fe9a1cddf0c7e80d7ed66d615a828b3bb9) )
r242231r242232
17691769   ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
17701770   ROM_LOAD( "raiden_2_seibu_bg-2.u075",  0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
17711771
1772   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
1772   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
17731773   ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
17741774   ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082",  0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
17751775   ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
r242231r242232
17871787   ROM_END
17881788
17891789ROM_START( raiden2i )
1790   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
1790   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
17911791   ROM_LOAD16_BYTE("seibu1.u0211",   0x000000, 0x80000, CRC(c1fc70f5) SHA1(a054f5ae9583972c406d9cf871340d5e072d71a3) ) /* Italian set */
17921792   ROM_RELOAD(0x100000, 0x80000)
17931793   ROM_LOAD16_BYTE("seibu2.u0212",   0x000001, 0x80000, CRC(28d5365f) SHA1(21efe29c2d373229c2ff302d86e59c2c94fa6d03) )
r242231r242232
18081808   ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
18091809   ROM_LOAD( "raiden_2_seibu_bg-2.u075",  0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
18101810
1811   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
1811   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
18121812   ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
18131813   ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082",  0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
18141814   ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
r242231r242232
18441844*/
18451845
18461846ROM_START( raiden2e )
1847   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
1847   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
18481848   ROM_LOAD16_BYTE("r2_prg_0.u0211",   0x000000, 0x80000, CRC(2abc848c) SHA1(1df4276d0074fcf1267757fa0b525a980a520f3d) )
18491849   ROM_RELOAD(0x100000, 0x80000)
18501850   ROM_LOAD16_BYTE("r2_prg_1.u0212",   0x000001, 0x80000, CRC(509ade43) SHA1(7cdee7bb00a6a1c7899d10b96385d54c261f6f5a) )
r242231r242232
18651865   ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
18661866   ROM_LOAD( "raiden_2_seibu_bg-2.u075",  0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
18671867
1868   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
1868   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
18691869   ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
18701870   ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082",  0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
18711871   ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
r242231r242232
18831883ROM_END
18841884
18851885ROM_START( raiden2ea )
1886   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
1886   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
18871887   ROM_LOAD16_BYTE("r2.1.u0211",  0x000000, 0x80000, CRC(d7041be4) SHA1(3cf97132fba6f7b00c9059265f4e9f0bf1505b71) )
18881888   ROM_RELOAD(0x100000, 0x80000)
18891889   ROM_LOAD16_BYTE("r2.2.u0212",  0x000001, 0x80000, CRC(bf7577ec) SHA1(98576af78760b8aef1ef3efe1ba963977c89d225) )
r242231r242232
19041904   ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
19051905   ROM_LOAD( "raiden_2_seibu_bg-2.u075",  0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
19061906
1907   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
1907   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
19081908   ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
19091909   ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082",  0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
19101910   ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
r242231r242232
19221922ROM_END
19231923
19241924ROM_START( raiden2eu ) // same as raiden2ea, different region
1925   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
1925   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
19261926   ROM_LOAD16_BYTE("seibu_1.u0211",  0x000000, 0x80000, CRC(d7041be4) SHA1(3cf97132fba6f7b00c9059265f4e9f0bf1505b71) )
19271927   ROM_RELOAD(0x100000, 0x80000)
19281928   ROM_LOAD16_BYTE("seibu_2.u0212",  0x000001, 0x80000, CRC(beb71ddb) SHA1(471399ead1cdc27ac2a1139f9616f828efd14626) )
r242231r242232
19431943   ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
19441944   ROM_LOAD( "raiden_2_seibu_bg-2.u075",  0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
19451945
1946   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
1946   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
19471947   ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
19481948   ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082",  0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
19491949   ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
r242231r242232
19611961ROM_END
19621962
19631963ROM_START( raiden2eua ) // sort of a mixture of raiden2e easy set with voice rom of raiden2ea and 2f and a unique sound rom
1964   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
1964   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
19651965   ROM_LOAD32_BYTE("seibu__1.27c020j.u1210",   0x000000, 0x40000, CRC(ED1514E3) SHA1(296125BFE3C4F3033F7AA319DD8554BC978C4A00) )
19661966   ROM_RELOAD(0x100000, 0x40000)
19671967   ROM_LOAD32_BYTE("seibu__2.27c2001.u1211",   0x000001, 0x40000, CRC(BB6ECF2A) SHA1(D4F628E9D0ED2897654F05A8A2541E1ED3FAF8DD) )
r242231r242232
19861986   ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
19871987   ROM_LOAD( "raiden_2_seibu_bg-2.u075",  0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
19881988
1989   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
1989   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
19901990   ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
19911991   ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082",  0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
19921992   ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
r242231r242232
20052005
20062006
20072007ROM_START( raiden2g ) // this is the same code revision as raiden2eua but a german region
2008   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2008   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
20092009   ROM_LOAD32_BYTE("raiden_2_1.bin",   0x000000, 0x40000, CRC(ed1514e3) SHA1(296125bfe3c4f3033f7aa319dd8554bc978c4a00) )
20102010   ROM_RELOAD(0x100000, 0x40000)
20112011   ROM_LOAD32_BYTE("raiden_2_2.bin",   0x000001, 0x40000, CRC(bb6ecf2a) SHA1(d4f628e9d0ed2897654f05a8a2541e1ed3faf8dd) )
r242231r242232
20302030   ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
20312031   ROM_LOAD( "raiden_2_seibu_bg-2.u075",  0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
20322032
2033   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
2033   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
20342034   ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
20352035   ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082",  0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
20362036   ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
r242231r242232
20482048ROM_END
20492049
20502050ROM_START( raiden2nl )
2051   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2051   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
20522052   ROM_LOAD16_BYTE("1_u0211.bin",   0x000000, 0x80000, CRC(53be3dd0) SHA1(304d118423e4085eea3b883bd625d90d21bb2054) )
20532053   ROM_RELOAD(0x100000, 0x80000)
20542054   ROM_LOAD16_BYTE("2_u0212.bin",  0x000001, 0x80000, CRC(88829c08) SHA1(ecdfbafeeffcd009bbc4cf5bf797bcd4b5bfcf50) )
r242231r242232
20692069   ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
20702070   ROM_LOAD( "raiden_2_seibu_bg-2.u075",  0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
20712071
2072   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
2072   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
20732073   ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
20742074   ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082",  0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
20752075   ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
r242231r242232
20882088
20892089
20902090ROM_START( raiden2u )
2091   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2091   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
20922092   ROM_LOAD16_BYTE("1.u0211",  0x000000, 0x80000, CRC(b16df955) SHA1(9b7fd85cf2f2c9fea657f3c38abafa93673b3933) )
20932093   ROM_RELOAD(0x100000, 0x80000)
20942094   ROM_LOAD16_BYTE("2.u0212",  0x000001, 0x80000, CRC(2a14b112) SHA1(84cd9891b5be0b71b2bae3487ad38bed3045305e) )
r242231r242232
21092109   ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
21102110   ROM_LOAD( "raiden_2_seibu_bg-2.u075",  0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
21112111
2112   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
2112   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
21132113   ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
21142114   ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082",  0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
21152115   ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
r242231r242232
21282128
21292129
21302130ROM_START( raiden2dx ) // this set is very weird, it's Raiden II on a Raiden DX board, I'm assuming for now that it uses Raiden DX graphics, but could be wrong.
2131   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2131   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
21322132   ROM_LOAD32_BYTE("u1210.bin", 0x000000, 0x80000, CRC(413241e0) SHA1(50fa501db91412baea474a8faf8ad483f3a119c7) )
21332133   ROM_LOAD32_BYTE("prg1_u1211.bin", 0x000001, 0x80000, CRC(93491f56) SHA1(2239980fb7267906e4c3985703c2dc2932b23705) )
21342134   ROM_LOAD32_BYTE("u129.bin",  0x000002, 0x80000, CRC(e0932b6c) SHA1(04f1ca885d220e802023042438f63e40e4106696) )
r242231r242232
21502150   ROM_LOAD( "dx_back1.1s",   0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
21512151   ROM_LOAD( "dx_back2.2s",   0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
21522152
2153   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
2153   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
21542154   ROM_LOAD32_WORD( "obj1",        0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
21552155   ROM_LOAD32_WORD( "obj2",        0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
21562156   ROM_LOAD32_WORD( "dx_obj3.4k",  0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
r242231r242232
21662166/* Raiden DX sets */
21672167
21682168ROM_START( raidendx )
2169   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2169   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
21702170   ROM_LOAD32_BYTE("1d.4n",   0x000000, 0x80000, CRC(14d725fc) SHA1(f12806f64f069fdc4ee29b309a32f7ca00b36f93) )
21712171   ROM_LOAD32_BYTE("2d.4p",   0x000001, 0x80000, CRC(5e7e45cb) SHA1(94eff893b5335c522f1c063c3175b9bac87b0a25) )
21722172   ROM_LOAD32_BYTE("3d.6n",   0x000002, 0x80000, CRC(f0a47e67) SHA1(8cbd21993077b2e01295db6e343cae9e0e4bfefe) )
r242231r242232
21872187   ROM_LOAD( "dx_back1.1s",   0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
21882188   ROM_LOAD( "dx_back2.2s",   0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
21892189
2190   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
2190   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
21912191   ROM_LOAD32_WORD( "obj1",        0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
21922192   ROM_LOAD32_WORD( "obj2",        0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
21932193   ROM_LOAD32_WORD( "dx_obj3.4k",  0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
r242231r242232
22012201ROM_END
22022202
22032203ROM_START( raidendxa1 )
2204   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2204   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
22052205   ROM_LOAD32_BYTE("dx_1h.4n",   0x000000, 0x80000, BAD_DUMP CRC(7624c36b) SHA1(84c17f2988031210d06536710e1eac558f4290a1) ) // bad
22062206   ROM_LOAD32_BYTE("dx_2h.4p",   0x000001, 0x80000, CRC(4940fdf3) SHA1(c87e307ed7191802583bee443c7c8e4f4e33db25) )
22072207   ROM_LOAD32_BYTE("dx_3h.6n",   0x000002, 0x80000, CRC(6c495bcf) SHA1(fb6153ecc443dabc829dda6f8d11234ad48de88a) )
r242231r242232
22222222   ROM_LOAD( "dx_back1.1s",   0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
22232223   ROM_LOAD( "dx_back2.2s",   0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
22242224
2225   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
2225   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
22262226   ROM_LOAD32_WORD( "obj1",        0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
22272227   ROM_LOAD32_WORD( "obj2",        0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
22282228   ROM_LOAD32_WORD( "dx_obj3.4k",  0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
r242231r242232
22362236ROM_END
22372237
22382238ROM_START( raidendxa2 )
2239   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2239   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
22402240   ROM_LOAD32_BYTE("1d.bin",   0x000000, 0x80000, CRC(22b155ae) SHA1(388151e2c8fb301bd5bc66a974e9fe16816ae0bc) )
22412241   ROM_LOAD32_BYTE("2d.bin",   0x000001, 0x80000, CRC(2be98ca8) SHA1(491e990405b0ad3de45bdbcc2453af9215ae19c8) )
22422242   ROM_LOAD32_BYTE("3d.bin",   0x000002, 0x80000, CRC(b4785576) SHA1(aa5eee7b0c635c6d18a7fc1e037bf570a677dd90) )
r242231r242232
22572257   ROM_LOAD( "dx_back1.1s",   0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
22582258   ROM_LOAD( "dx_back2.2s",   0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
22592259
2260   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
2260   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
22612261   ROM_LOAD32_WORD( "obj1",        0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
22622262   ROM_LOAD32_WORD( "obj2",        0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
22632263   ROM_LOAD32_WORD( "dx_obj3.4k",  0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
r242231r242232
22712271ROM_END
22722272
22732273ROM_START( raidendxk )
2274   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2274   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
22752275   ROM_LOAD32_BYTE("rdxj_1.bin",   0x000000, 0x80000, CRC(b5b32885) SHA1(fb3c592b2436d347103c17bd765176062be95fa2) )
22762276   ROM_LOAD32_BYTE("rdxj_2.bin",   0x000001, 0x80000, CRC(7efd581d) SHA1(4609a0d8afb3d62a38b461089295efed47beea91) )
22772277   ROM_LOAD32_BYTE("rdxj_3.bin",   0x000002, 0x80000, CRC(55ec0e1d) SHA1(6be7f268df51311a817c1c329a578b38abb659ae) )
r242231r242232
22922292   ROM_LOAD( "dx_back1.1s",   0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
22932293   ROM_LOAD( "dx_back2.2s",   0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
22942294
2295   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
2295   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
22962296   ROM_LOAD32_WORD( "obj1",        0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
22972297   ROM_LOAD32_WORD( "obj2",        0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
22982298   ROM_LOAD32_WORD( "dx_obj3.4k",  0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
r242231r242232
23062306ROM_END
23072307
23082308ROM_START( raidendxu )
2309   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2309   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
23102310   ROM_LOAD32_BYTE("1a.u1210", 0x000000, 0x80000, CRC(53e63194) SHA1(a957330e14649cf46ad27fb99c460576c59e60b1) )
23112311   ROM_LOAD32_BYTE("2a.u1211", 0x000001, 0x80000, CRC(ec8d1647) SHA1(5ceae132c6c09d6bb8565e9141ee1170bbdfd5fc) )
23122312   ROM_LOAD32_BYTE("3a.u129",  0x000002, 0x80000, CRC(7dbfd73d) SHA1(43cb1dbc3ccbded64fc300c262d1fd528e0391a2) )
r242231r242232
23272327   ROM_LOAD( "dx_back1.1s",   0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
23282328   ROM_LOAD( "dx_back2.2s",   0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
23292329
2330   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
2330   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
23312331   ROM_LOAD32_WORD( "obj1",        0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
23322332   ROM_LOAD32_WORD( "obj2",        0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
23332333   ROM_LOAD32_WORD( "dx_obj3.4k",  0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
r242231r242232
23412341ROM_END
23422342
23432343ROM_START( raidendxg )
2344   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2344   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
23452345   ROM_LOAD32_BYTE("1d.u1210", 0x000000, 0x80000, CRC(14d725fc) SHA1(f12806f64f069fdc4ee29b309a32f7ca00b36f93) )
23462346   ROM_LOAD32_BYTE("2d.u1211", 0x000001, 0x80000, CRC(5e7e45cb) SHA1(94eff893b5335c522f1c063c3175b9bac87b0a25) )
23472347   ROM_LOAD32_BYTE("3d.u129",  0x000002, 0x80000, CRC(f0a47e67) SHA1(8cbd21993077b2e01295db6e343cae9e0e4bfefe) )
r242231r242232
23622362   ROM_LOAD( "dx_back-1.u075",  0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
23632363   ROM_LOAD( "dx_back-2.u0714", 0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
23642364
2365   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
2365   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
23662366   ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
23672367   ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082",  0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
23682368   ROM_LOAD32_WORD( "dx_obj-3.u0837", 0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
r242231r242232
23772377
23782378
23792379ROM_START( raidendxnl )
2380   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2380   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
23812381   ROM_LOAD32_BYTE("u1210_4n.bin", 0x000000, 0x80000, CRC(c589019a) SHA1(9bdd7f7d0bca16d67ba234d8a1fed5d2c8ab7191) )
23822382   ROM_LOAD32_BYTE("u1211_4p.bin", 0x000001, 0x80000, CRC(b2222254) SHA1(b0e41d88111a96f0c0fb11b20ea99f436e8d493d) )
23832383   ROM_LOAD32_BYTE("u129_6n.bin",  0x000002, 0x80000, CRC(60f04634) SHA1(50f1b721a017d879838d920cf5d5355aa024e09b) )
r242231r242232
23982398   ROM_LOAD( "dx_back-1.u075",  0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
23992399   ROM_LOAD( "dx_back-2.u0714", 0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
24002400
2401   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
2401   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
24022402   ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
24032403   ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082",  0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
24042404   ROM_LOAD32_WORD( "dx_obj-3.u0837", 0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
r242231r242232
24132413
24142414
24152415ROM_START( raidendxj )
2416   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2416   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
24172417   ROM_LOAD32_BYTE("rdxj_1.u1211", 0x000000, 0x80000, CRC(5af382e1) SHA1(a11fc181da322f484815f55a510ce7e6c7df2d60) )
24182418   ROM_LOAD32_BYTE("rdxj_2.u0212", 0x000001, 0x80000, CRC(899966fc) SHA1(0f91c2b05a44afb4c4b74e115a8fa530fb6d6414) )
24192419   ROM_LOAD32_BYTE("rdxj_3.u129",  0x000002, 0x80000, CRC(e7f08013) SHA1(1f99672d8fdbda847c6552da210c417b21ca78ac) )
r242231r242232
24342434   ROM_LOAD( "dx_back-1.u075",  0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
24352435   ROM_LOAD( "dx_back-2.u0714", 0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
24362436
2437   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
2437   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
24382438   ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
24392439   ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082",  0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
24402440   ROM_LOAD32_WORD( "dx_obj-3.u0837", 0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
r242231r242232
24502450
24512451
24522452ROM_START( raidendxch )
2453   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2453   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
24542454   ROM_LOAD32_BYTE("rdxc_1.u1210", 0x000000, 0x80000, CRC(2154c6ae) SHA1(dc794f8ddbd8a6267db37fe4e3ed44e06e9b84b7) )
24552455   ROM_LOAD32_BYTE("rdxc_2.u1211", 0x000001, 0x80000, CRC(73bb74b7) SHA1(2f197adbe89d96c9e75054c568c380fdd2e80162))
24562456   ROM_LOAD32_BYTE("rdxc_3.u129",  0x000002, 0x80000, CRC(50f0a6aa) SHA1(68579f8e73fe06b458368ac9cac0b33370cf3b4e))
r242231r242232
24722472   ROM_LOAD( "dx_back1.1s",   0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
24732473   ROM_LOAD( "dx_back2.2s",   0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
24742474
2475   ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
2475   ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
24762476   ROM_LOAD32_WORD( "obj1",        0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
24772477   ROM_LOAD32_WORD( "obj2",        0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
24782478   ROM_LOAD32_WORD( "dx_obj3.4k",  0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
r242231r242232
25792579
25802580
25812581ROM_START( zeroteam ) // Fabtek, US licensee, displays 'USA' under zero team logo, board had serial 'Seibu Kaihatsu No. 0001468' on it, as well as AAMA 0458657
2582   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2582   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
25832583   ROM_LOAD32_BYTE("seibu__1.u024.5k",   0x000000, 0x40000, CRC(25aa5ba4) SHA1(40e6047620fbd195c87ac3763569af099096eff9) ) // alternate label "1"
25842584   ROM_LOAD32_BYTE("seibu__3.u023.6k",   0x000002, 0x40000, CRC(ec79a12b) SHA1(515026a2fca92555284ac49818499af7395783d3) ) // alternate label "3"
25852585   ROM_LOAD32_BYTE("seibu__2.u025.6l",   0x000001, 0x40000, CRC(54f3d359) SHA1(869744185746d55c60d2f48eabe384a8499e00fd) ) // alternate label "2"
r242231r242232
26012601   ROM_LOAD( "musha_back-1.u075.4s",   0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) )
26022602   ROM_LOAD( "musha_back-2.u0714.2s",   0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) )
26032603
2604   ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
2604   ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
26052605   ROM_LOAD32_WORD( "musha_obj-1.u0811.6f",  0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) )
26062606   ROM_LOAD32_WORD( "musha_obj-2.u082.5f",  0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) )
26072607
r242231r242232
26162616ROM_END
26172617
26182618ROM_START( zeroteama ) // No licensee, original japan?
2619   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2619   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
26202620   ROM_LOAD32_BYTE("1.u024.5k",   0x000000, 0x40000, CRC(bd7b3f3a) SHA1(896413901a429d0efa3290f61920063c81730e9b) )
26212621   ROM_LOAD32_BYTE("3.u023.6k",   0x000002, 0x40000, CRC(19e02822) SHA1(36c9b887eaa9b9b67d65c55e8f7eefd08fe0be15) )
26222622   ROM_LOAD32_BYTE("2.u025.6l",   0x000001, 0x40000, CRC(0580b7e8) SHA1(d4416264aa5acdaa781ebcf51f128b3e665cc903) )
r242231r242232
26382638   ROM_LOAD( "musha_back-1.u075.4s",   0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) )
26392639   ROM_LOAD( "musha_back-2.u0714.2s",   0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) )
26402640
2641   ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
2641   ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
26422642   ROM_LOAD32_WORD( "musha_obj-1.u0811.6f",  0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) )
26432643   ROM_LOAD32_WORD( "musha_obj-2.u082.5f",  0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) )
26442644
r242231r242232
26602660// sets, using the sound and char roms from us set and code from later japan set. This would make sense if it was dumped
26612661// from a 'fixed, suicide free' modified us board where someone swapped in the later suicideless japan code roms.
26622662ROM_START( zeroteamb ) // No licensee, later japan?
2663   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2663   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
26642664   ROM_LOAD32_BYTE("1b.u024.5k",   0x000000, 0x40000, CRC(157743d0) SHA1(f9c84c9025319f76807ef0e79f1ee1599f915b45) )
26652665   ROM_LOAD32_BYTE("3b.u023.6k",   0x000002, 0x40000, CRC(fea7e4e8) SHA1(08c4bdff82362ae4bcf86fa56fcfc384bbf82b71) )
26662666   ROM_LOAD32_BYTE("2b.u025.6l",   0x000001, 0x40000, CRC(21d68f62) SHA1(8aa85b38e8f36057ef6c7dce5a2878958ce93ce8) )
r242231r242232
26822682   ROM_LOAD( "musha_back-1.u075.4s",   0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) )
26832683   ROM_LOAD( "musha_back-2.u0714.2s",   0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) )
26842684
2685   ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
2685   ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
26862686   ROM_LOAD32_WORD( "musha_obj-1.u0811.6f",  0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) )
26872687   ROM_LOAD32_WORD( "musha_obj-2.u082.5f",  0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) )
26882688
r242231r242232
26972697ROM_END
26982698
26992699ROM_START( zeroteamc ) // Liang Hwa, Taiwan licensee, no special word under logo on title
2700   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2700   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
27012701   ROM_LOAD32_BYTE("b1.u024.5k",   0x000000, 0x40000, CRC(528de3b9) SHA1(9ca8cdc0212f2540e852d20ab4c04f68b967d024) )
27022702   ROM_LOAD32_BYTE("b3.u023.6k",   0x000002, 0x40000, CRC(3688739a) SHA1(f98f461fb8e7804b3b4020a5e3762d36d6458a62) )
27032703   ROM_LOAD32_BYTE("b2.u025.6l",   0x000001, 0x40000, CRC(5176015e) SHA1(6b372564b2f1b1f56cae0c98f4ca588b784bfa3d) )
r242231r242232
27192719   ROM_LOAD( "musha_back-1.u075.4s",   0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) )
27202720   ROM_LOAD( "musha_back-2.u0714.2s",   0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) )
27212721
2722   ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
2722   ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
27232723   ROM_LOAD32_WORD( "musha_obj-1.u0811.6f",  0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) )
27242724   ROM_LOAD32_WORD( "musha_obj-2.u082.5f",  0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) )
27252725
r242231r242232
27352735
27362736ROM_START( zeroteamd ) // Dream Soft, Korea licensee, no special word under logo on title; board had serial 'no 1041' on it.
27372737   // this is weird, on other zt sets the rom order is 1 3 2 4, but this one is 1 3 4 2. blame seibu or whoever marked the roms, which were labeled in pen
2738   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2738   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
27392739   ROM_LOAD32_BYTE("1.d.u024.5k",   0x000000, 0x40000, CRC(6CC279BE) SHA1(63143BA3105D24D133E60FFDB3EDC2CEB2D5DC5B) )
27402740   ROM_LOAD32_BYTE("3.d.u023.6k",   0x000002, 0x40000, CRC(0212400D) SHA1(28F77B5FDDB9D724B735C3FF2255BD518B166E67) )
27412741   ROM_LOAD32_BYTE("4.d.u025.6l",   0x000001, 0x40000, CRC(08813EBB) SHA1(454779CEC2FD0E71B72F7161E7D9334893EE42DE) )
r242231r242232
27572757   ROM_LOAD( "musha_back-1.u075.4s",   0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) )
27582758   ROM_LOAD( "musha_back-2.u0714.2s",   0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) )
27592759
2760   ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
2760   ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
27612761   ROM_LOAD32_WORD( "musha_obj-1.u0811.6f",  0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) )
27622762   ROM_LOAD32_WORD( "musha_obj-2.u082.5f",  0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) )
27632763
r242231r242232
27732773// A version of the above exists (which dr.kitty used to own) which DOES have 'Korea' under the logo on title, needs dumping
27742774
27752775ROM_START( zeroteams ) // No license, displays 'Selection' under logo
2776   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2776   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
27772777   ROM_LOAD32_BYTE("1_sel.bin",   0x000000, 0x40000, CRC(d99d6273) SHA1(21dccd5d71c720b8364406835812b3c9defaff6c) )
27782778   ROM_LOAD32_BYTE("3_sel.bin",   0x000002, 0x40000, CRC(0a9fe0b1) SHA1(3588fe19788f77d07e9b5ab8182b94362ffd0024) )
27792779   ROM_LOAD32_BYTE("2_sel.bin",   0x000001, 0x40000, CRC(4e114e74) SHA1(fcccbb68c6b7ffe8d109ed3a1ec9120d338398f9) )
r242231r242232
27952795   ROM_LOAD( "musha_back-1.u075.4s",   0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) )
27962796   ROM_LOAD( "musha_back-2.u0714.2s",   0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) )
27972797
2798   ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
2798   ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
27992799   ROM_LOAD32_WORD( "musha_obj-1.u0811.6f",  0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) )
28002800   ROM_LOAD32_WORD( "musha_obj-2.u082.5f",  0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) )
28012801
r242231r242232
28222822*/
28232823
28242824ROM_START( zeroteamsr )
2825   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2825   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
28262826   ROM_LOAD32_BYTE("zteam1.u24",   0x000000, 0x40000, CRC(c531e009) SHA1(731881fca3dc0a8269ecdd295ba7119d93c892e7) )
28272827   ROM_LOAD32_BYTE("zteam3.u23",   0x000002, 0x40000, CRC(1f988808) SHA1(b1fcb8c96e57c4942bc032d42408d7289c6a3681) )
28282828   ROM_LOAD32_BYTE("zteam2.u25",   0x000001, 0x40000, CRC(b7234b93) SHA1(35bc093e8ad4bce1d2130a392ed1b9487a5642a1) )
r242231r242232
28442844   ROM_LOAD( "musha_back-1.u075.4s",   0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) )
28452845   ROM_LOAD( "musha_back-2.u0714.2s",   0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) )
28462846
2847   ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
2847   ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
28482848   ROM_LOAD32_WORD( "musha_obj-1.u0811.6f",  0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) )
28492849   ROM_LOAD32_WORD( "musha_obj-2.u082.5f",  0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) )
28502850
r242231r242232
28972897*/
28982898
28992899ROM_START( xsedae )
2900   ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
2900   ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
29012901   ROM_LOAD32_BYTE("1.u024",   0x000000, 0x40000, CRC(185437f9) SHA1(e46950b6a549d11dc57105dd7d9cb512a8ecbe70) )
29022902   ROM_LOAD32_BYTE("2.u025",   0x000001, 0x40000, CRC(a2b052df) SHA1(e8bf9ab3d5d4e601ea9386e1f2d4e017b025407e) )
29032903   ROM_LOAD32_BYTE("3.u023",   0x000002, 0x40000, CRC(293fd6c1) SHA1(8b1a231f4bedbf9c0f347330e13fdf092b9888b4) )
r242231r242232
29202920   ROM_LOAD( "bg-1.u075",   0x000000, 0x100000, CRC(ac087560) SHA1(b6473b20c55ec090961cfc46a024b3c5b707ec25) )
29212921   ROM_LOAD( "7.u0714",     0x100000, 0x080000, CRC(296105dc) SHA1(c2b80d681646f504b03c2dde13e37b1d820f82d2) )
29222922
2923   ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (not encrypted) */
2923   ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (not encrypted) */
29242924   ROM_LOAD32_WORD( "obj-1.u0811",  0x000000, 0x200000, CRC(6ae993eb) SHA1(d9713c79eacb4b3ce5e82dd3ce39003e3a433d8f) )
29252925   ROM_LOAD32_WORD( "obj-2.u082",   0x000002, 0x200000, CRC(26c806ee) SHA1(899a76a1b3f933c6f5cb6b5dcdf5b58e1b7e49c6) )
29262926
r242231r242232
29912991   init_blending(raiden_blended_colors);
29922992   static const int spri[5] = { 0, 1, 2, 3, -1 };
29932993   cur_spri = spri;
2994   membank("mainbank1")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000);
2995   membank("mainbank2")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000);
2994   membank("mainbank1")->configure_entries(0, 4, memregion("maincpu")->base(), 0x10000);
2995   membank("mainbank2")->configure_entries(0, 4, memregion("maincpu")->base(), 0x10000);
29962996   raiden2_decrypt_sprites(machine());
29972997}
29982998
r242231r242232
30013001   init_blending(raiden_blended_colors);
30023002   static const int spri[5] = { 0, 1, 2, 3, -1 };
30033003   cur_spri = spri;
3004   membank("mainbank1")->configure_entries(0, 0x20, memregion("mainprg")->base(), 0x10000);
3005   membank("mainbank2")->configure_entries(0, 0x20, memregion("mainprg")->base(), 0x10000);
3004   membank("mainbank1")->configure_entries(0, 0x20, memregion("maincpu")->base(), 0x10000);
3005   membank("mainbank2")->configure_entries(0, 0x20, memregion("maincpu")->base(), 0x10000);
30063006   raiden2_decrypt_sprites(machine());
30073007}
30083008
r242231r242232
30373037   init_blending(zeroteam_blended_colors);
30383038   static const int spri[5] = { -1, 0, 1, 2, 3 };
30393039   cur_spri = spri;
3040   membank("mainbank1")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000);
3041   membank("mainbank2")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000);
3040   membank("mainbank1")->configure_entries(0, 4, memregion("maincpu")->base(), 0x10000);
3041   membank("mainbank2")->configure_entries(0, 4, memregion("maincpu")->base(), 0x10000);
30423042   zeroteam_decrypt_sprites(machine());
30433043}
30443044
trunk/src/mame/drivers/re900.c
r242231r242232
4545
4646    How to play...
4747
48    This Roulette allow up to 6 players. To start the machine, turn the Operator Key
49    (the the Operator Key light will turn green). Whilest this key is turned ON, you
48    This Roulette allows up to 6 players. To start the machine, turn the Operator Key
49    (the Operator Key light will turn green). Whilst this key is turned ON, you
5050    can insert credits, play, and payout. Once the key is turned OFF (red light), you
5151    can play, but credits can't be entered/taken.
5252
trunk/src/mame/drivers/relief.c
r242231r242232
5050{
5151   atarigen_state::machine_reset();
5252
53   m_oki->set_bank_base(0);
53   m_adpcm_bank = 0;
54   m_okibank->set_entry(m_adpcm_bank);
5455   m_ym2413_volume = 15;
5556   m_overall_volume = 127;
56   m_adpcm_bank_base = 0;
5757}
5858
5959
r242231r242232
8585   {
8686      m_ym2413_volume = (data >> 1) & 15;
8787      set_ym2413_volume((m_ym2413_volume * m_overall_volume * 100) / (127 * 15));
88      m_adpcm_bank_base = (0x040000 * ((data >> 6) & 3)) | (m_adpcm_bank_base & 0x100000);
88      m_adpcm_bank = ((data >> 6) & 3) | (m_adpcm_bank & 4);
8989   }
9090   if (ACCESSING_BITS_8_15)
91      m_adpcm_bank_base = (0x100000 * ((data >> 8) & 1)) | (m_adpcm_bank_base & 0x0c0000);
91      m_adpcm_bank = (((data >> 8) & 1)<<2) | (m_adpcm_bank & 3);
9292
93   m_oki->set_bank_base(m_adpcm_bank_base);
93   m_okibank->set_entry(m_adpcm_bank);
9494}
9595
9696
r242231r242232
104104   }
105105}
106106
107static ADDRESS_MAP_START( oki_map, AS_0, 8, relief_state )
108   AM_RANGE(0x00000, 0x1ffff) AM_ROMBANK("okibank")
109   AM_RANGE(0x20000, 0x3ffff) AM_ROM
110ADDRESS_MAP_END
107111
108112
109113/*************************************
r242231r242232
295299
296300   MCFG_OKIM6295_ADD("oki", ATARI_CLOCK_14MHz/4/3, OKIM6295_PIN7_LOW)
297301   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
302   MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
298303
299304   MCFG_SOUND_ADD("ymsnd", YM2413, ATARI_CLOCK_14MHz/4)
300305   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
r242231r242232
324329   ROM_LOAD( "136093-0028a.10d",       0x180000, 0x80000, CRC(55fb9111) SHA1(a95508f0831842fa79ca2fc168cfadc8c6d3fbd4) )
325330   ROM_LOAD16_BYTE( "136093-0029a.4d", 0x200001, 0x40000, CRC(e4593ff4) SHA1(7360ec7a65aabc90aa787dc30f39992e342495dd) )
326331
327   ROM_REGION( 0x200000, "oki", 0 )    /* 2MB for ADPCM data */
328   ROM_LOAD( "136093-0030a.9b",  0x100000, 0x80000, CRC(f4c567f5) SHA1(7e8c1d54d918b0b41625eacbaf6dcb5bd99d1949) )
329   ROM_LOAD( "136093-0031a.10b", 0x180000, 0x80000, CRC(ba908d73) SHA1(a83afd86f4c39394cf624b728a87b8d8b6de1944) )
332   ROM_REGION( 0x100000, "oki", 0 )    /* 2MB for ADPCM data */
333   ROM_LOAD( "136093-0030a.9b",  0x000000, 0x80000, CRC(f4c567f5) SHA1(7e8c1d54d918b0b41625eacbaf6dcb5bd99d1949) )
334   ROM_LOAD( "136093-0031a.10b", 0x080000, 0x80000, CRC(ba908d73) SHA1(a83afd86f4c39394cf624b728a87b8d8b6de1944) )
330335
331336   ROM_REGION( 0x800, "eeprom:eeprom", 0 )
332337   ROM_LOAD( "relief-eeprom.bin", 0x0000, 0x800, CRC(66069f60) SHA1(fac3797888f7ffe972f642aca44c6ca7d208c814) )
r242231r242232
359364   ROM_LOAD( "136093-0028a.10d",      0x180000, 0x80000, CRC(55fb9111) SHA1(a95508f0831842fa79ca2fc168cfadc8c6d3fbd4) )
360365   ROM_LOAD16_BYTE( "136093-0029.4d", 0x200001, 0x40000, CRC(e4593ff4) SHA1(7360ec7a65aabc90aa787dc30f39992e342495dd) )
361366
362   ROM_REGION( 0x200000, "oki", 0 )    /* 2MB for ADPCM data */
363   ROM_LOAD( "136093-0030a.9b",  0x100000, 0x80000, CRC(f4c567f5) SHA1(7e8c1d54d918b0b41625eacbaf6dcb5bd99d1949) )
364   ROM_LOAD( "136093-0031a.10b", 0x180000, 0x80000, CRC(ba908d73) SHA1(a83afd86f4c39394cf624b728a87b8d8b6de1944) )
367   ROM_REGION( 0x100000, "oki", 0 )    /* 2MB for ADPCM data */
368   ROM_LOAD( "136093-0030a.9b",  0x000000, 0x80000, CRC(f4c567f5) SHA1(7e8c1d54d918b0b41625eacbaf6dcb5bd99d1949) )
369   ROM_LOAD( "136093-0031a.10b", 0x080000, 0x80000, CRC(ba908d73) SHA1(a83afd86f4c39394cf624b728a87b8d8b6de1944) )
365370
366371   ROM_REGION( 0x800, "eeprom:eeprom", 0 )
367372   ROM_LOAD( "relief2-eeprom.bin", 0x0000, 0x800, CRC(2131fc40) SHA1(72a9f5f6647fbc74e645b6639db2fdbfbe6456e2) )
r242231r242232
393398   ROM_LOAD( "136093-0028a.10d",      0x180000, 0x80000, CRC(55fb9111) SHA1(a95508f0831842fa79ca2fc168cfadc8c6d3fbd4) )
394399   ROM_LOAD16_BYTE( "136093-0029.4d", 0x200001, 0x40000, CRC(e4593ff4) SHA1(7360ec7a65aabc90aa787dc30f39992e342495dd) )
395400
396   ROM_REGION( 0x200000, "oki", 0 )    /* 2MB for ADPCM data */
397   ROM_LOAD( "136093-0030a.9b",  0x100000, 0x80000, CRC(f4c567f5) SHA1(7e8c1d54d918b0b41625eacbaf6dcb5bd99d1949) )
398   ROM_LOAD( "136093-0031a.10b", 0x180000, 0x80000, CRC(ba908d73) SHA1(a83afd86f4c39394cf624b728a87b8d8b6de1944) )
401   ROM_REGION( 0x100000, "oki", 0 )    /* 2MB for ADPCM data */
402   ROM_LOAD( "136093-0030a.9b",  0x000000, 0x80000, CRC(f4c567f5) SHA1(7e8c1d54d918b0b41625eacbaf6dcb5bd99d1949) )
403   ROM_LOAD( "136093-0031a.10b", 0x080000, 0x80000, CRC(ba908d73) SHA1(a83afd86f4c39394cf624b728a87b8d8b6de1944) )
399404
400405   ROM_REGION( 0x800, "eeprom:eeprom", 0 )
401406   ROM_LOAD( "relief3-eeprom.bin", 0x0000, 0x800, CRC(2131fc40) SHA1(72a9f5f6647fbc74e645b6639db2fdbfbe6456e2) )
r242231r242232
421426
422427DRIVER_INIT_MEMBER(relief_state,relief)
423428{
424   UINT8 *sound_base = memregion("oki")->base();
425
426   /* expand the ADPCM data to avoid lots of memcpy's during gameplay */
427   /* the upper 128k is fixed, the lower 128k is bankswitched */
428   memcpy(&sound_base[0x000000], &sound_base[0x100000], 0x20000);
429   memcpy(&sound_base[0x040000], &sound_base[0x100000], 0x20000);
430   memcpy(&sound_base[0x080000], &sound_base[0x140000], 0x20000);
431   memcpy(&sound_base[0x0c0000], &sound_base[0x160000], 0x20000);
432   memcpy(&sound_base[0x100000], &sound_base[0x180000], 0x20000);
433   memcpy(&sound_base[0x140000], &sound_base[0x1a0000], 0x20000);
434   memcpy(&sound_base[0x180000], &sound_base[0x1c0000], 0x20000);
435   memcpy(&sound_base[0x1c0000], &sound_base[0x1e0000], 0x20000);
436
437   memcpy(&sound_base[0x020000], &sound_base[0x120000], 0x20000);
438   memcpy(&sound_base[0x060000], &sound_base[0x120000], 0x20000);
439   memcpy(&sound_base[0x0a0000], &sound_base[0x120000], 0x20000);
440   memcpy(&sound_base[0x0e0000], &sound_base[0x120000], 0x20000);
441   memcpy(&sound_base[0x160000], &sound_base[0x120000], 0x20000);
442   memcpy(&sound_base[0x1a0000], &sound_base[0x120000], 0x20000);
443   memcpy(&sound_base[0x1e0000], &sound_base[0x120000], 0x20000);
429   m_okibank->configure_entries(0, 8, memregion("oki")->base(), 0x20000);
430   m_okibank->set_entry(0);
444431}
445432
446433
434     
447435
448436/*************************************
449437 *
trunk/src/mame/drivers/renegade.c
r242231r242232
108108#include "includes/renegade.h"
109109
110110
111/********************************************************************************************/
111/**************************************************************************/
112/*  ADPCM sound
113**
114**  Inferred from the 6809 code and analogy with ddragon
115**  NMI at end of sample is not needed in order for
116**  playback to work, but seems to be what the code expects
117*/
112118
113const device_type RENEGADE_ADPCM = &device_creator<renegade_adpcm_device>;
114
115renegade_adpcm_device::renegade_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
116   : device_t(mconfig, RENEGADE_ADPCM, "Renegade ADPCM Custom", tag, owner, clock, "renegade_adpcm", __FILE__),
117      device_sound_interface(mconfig, *this),
118      m_stream(NULL),
119      m_current(0),
120      m_end(0),
121      m_nibble(0),
122      m_playing(0),
123      m_base(NULL)
119WRITE8_MEMBER(renegade_state::adpcm_start_w)
124120{
121   m_msm->reset_w(0);
122   m_adpcm_playing = true;
125123}
126124
127//-------------------------------------------------
128//  device_config_complete - perform any
129//  operations now that the configuration is
130//  complete
131//-------------------------------------------------
132
133void renegade_adpcm_device::device_config_complete()
125WRITE8_MEMBER(renegade_state::adpcm_addr_w)
134126{
127   // table at $CB52 in audiocpu program:
128   // 38 38 39 3A 3B 34 35 36 37 2C 2D 2E 2F
129   //
130   // bits 2-4 are active-low chip select; bit 5 is always set
131   // (chip select for an unpopulated fourth ROM?)
132   switch (data & 0x1c)
133   {
134      case 0x18: m_adpcm_pos = 0 * 0x8000 * 2; break;      // 110 -> ic33
135      case 0x14: m_adpcm_pos = 1 * 0x8000 * 2; break;      // 101 -> ic32
136      case 0x0c: m_adpcm_pos = 2 * 0x8000 * 2; break;      // 011 -> ic31
137      default: m_adpcm_pos = m_adpcm_end = 0; return;   // doesn't happen
138   }
139   // bits 0-1 are a13-a14
140   m_adpcm_pos |= (data & 0x03) * 0x2000 * 2;
141   // a0-a12 are driven by a binary counter; playback ends when it rolls over
142   m_adpcm_end = m_adpcm_pos + 0x2000 * 2;
135143}
136144
137//-------------------------------------------------
138//  device_start - device-specific startup
139//-------------------------------------------------
140
141void renegade_adpcm_device::device_start()
145WRITE8_MEMBER(renegade_state::adpcm_stop_w)
142146{
143   m_playing = 0;
144   m_stream = machine().sound().stream_alloc(*this, 0, 1, clock());
145   m_base = machine().root_device().memregion("adpcm")->base();
146   m_adpcm.reset();
147
148   save_item(NAME(m_current));
149   save_item(NAME(m_end));
150   save_item(NAME(m_nibble));
151   save_item(NAME(m_playing));
147   m_msm->reset_w(1);
148   m_adpcm_playing = false;
152149}
153150
154//-------------------------------------------------
155//  sound_stream_update - handle a stream update
156//-------------------------------------------------
157
158void renegade_adpcm_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
151WRITE_LINE_MEMBER(renegade_state::adpcm_int)
159152{
160   stream_sample_t *dest = outputs[0];
153   if (!m_adpcm_playing) return;
161154
162   while (m_playing && samples > 0)
155   if (m_adpcm_pos >= m_adpcm_end)
163156   {
164      int val = (m_base[m_current] >> m_nibble) & 15;
165
166      m_nibble ^= 4;
167      if (m_nibble == 4)
168      {
169         m_current++;
170         if (m_current >= m_end)
171            m_playing = 0;
172      }
173
174      *dest++ = m_adpcm.clock(val) << 4;
175      samples--;
157      m_msm->reset_w(1);
158      m_adpcm_playing = false;
159      m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
176160   }
177   while (samples > 0)
161   else
178162   {
179      *dest++ = 0;
180      samples--;
163      UINT8 const data = m_adpcmrom[m_adpcm_pos / 2];
164      m_msm->data_w(m_adpcm_pos & 1 ? data & 0xf : data >> 4);
165      m_adpcm_pos++;
181166   }
182167}
183168
184
185WRITE8_MEMBER(renegade_adpcm_device::play_w)
186{
187   int offs = (data - 0x2c) * 0x2000;
188   int len = 0x2000 * 2;
189
190   /* kludge to avoid reading past end of ROM */
191   if (offs + len > 0x20000)
192      len = 0x1000;
193
194   if (offs >= 0 && offs+len <= 0x20000)
195   {
196      m_stream->update();
197      m_adpcm.reset();
198
199      m_current = offs;
200      m_end = offs + len/2;
201      m_nibble = 4;
202      m_playing = 1;
203   }
204   else
205      logerror("out of range adpcm command: 0x%02x\n", data);
206}
207
208169WRITE8_MEMBER(renegade_state::sound_w)
209170{
210171   soundlatch_byte_w(space, offset, data);
211172   m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
212173}
213174
214/********************************************************************************************/
175/**************************************************************************/
215176/*  MCU Simulation
216177**
217178**  Renegade and Nekketsu Kouha Kunio Kun MCU behaviors are identical,
r242231r242232
230191   0x68, 0x60
231192};
232193
233void renegade_state::setbank()
234{
235   UINT8 *RAM = memregion("maincpu")->base();
236   membank("bank1")->set_base(&RAM[m_bank ? 0x10000 : 0x4000]);
237}
238
239194void renegade_state::machine_start()
240195{
196   m_rombank->configure_entries(0, 2, memregion("maincpu")->base(), 0x4000);
197
198   save_item(NAME(m_adpcm_pos));
199   save_item(NAME(m_adpcm_end));
200   save_item(NAME(m_adpcm_playing));
241201   save_item(NAME(m_mcu_buffer));
242202   save_item(NAME(m_mcu_input_size));
243203   save_item(NAME(m_mcu_output_byte));
244204   save_item(NAME(m_mcu_key));
245
246   save_item(NAME(m_bank));
247   machine().save().register_postload(save_prepost_delegate(FUNC(renegade_state::setbank), this));
248205}
249206
250207DRIVER_INIT_MEMBER(renegade_state,renegade)
r242231r242232
605562
606563WRITE8_MEMBER(renegade_state::bankswitch_w)
607564{
608   if ((data & 1) != m_bank)
609   {
610      m_bank = data & 1;
611      setbank();
612   }
565   m_rombank->set_entry(data & 1);
613566}
614567
615568TIMER_DEVICE_CALLBACK_MEMBER(renegade_state::renegade_interrupt)
r242231r242232
632585
633586static ADDRESS_MAP_START( renegade_map, AS_PROGRAM, 8, renegade_state )
634587   AM_RANGE(0x0000, 0x17ff) AM_RAM
635   AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE(renegade_videoram2_w) AM_SHARE("videoram2")
588   AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE(fg_videoram_w) AM_SHARE("fg_videoram")
636589   AM_RANGE(0x2000, 0x27ff) AM_RAM AM_SHARE("spriteram")
637   AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(renegade_videoram_w) AM_SHARE("videoram")
590   AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(bg_videoram_w) AM_SHARE("bg_videoram")
638591   AM_RANGE(0x3000, 0x30ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
639592   AM_RANGE(0x3100, 0x31ff) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
640   AM_RANGE(0x3800, 0x3800) AM_READ_PORT("IN0") AM_WRITE(renegade_scroll0_w)       /* Player#1 controls, P1,P2 start */
641   AM_RANGE(0x3801, 0x3801) AM_READ_PORT("IN1") AM_WRITE(renegade_scroll1_w)       /* Player#2 controls, coin triggers */
593   AM_RANGE(0x3800, 0x3800) AM_READ_PORT("IN0") AM_WRITE(scroll_lsb_w)       /* Player#1 controls, P1,P2 start */
594   AM_RANGE(0x3801, 0x3801) AM_READ_PORT("IN1") AM_WRITE(scroll_msb_w)       /* Player#2 controls, coin triggers */
642595   AM_RANGE(0x3802, 0x3802) AM_READ_PORT("DSW2") AM_WRITE(sound_w) /* DIP2  various IO ports */
643596   AM_RANGE(0x3803, 0x3803) AM_READ_PORT("DSW1") AM_WRITE(renegade_flipscreen_w)   /* DIP1 */
644597   AM_RANGE(0x3804, 0x3804) AM_READWRITE(mcu_r, mcu_w)
645598   AM_RANGE(0x3805, 0x3805) AM_READWRITE(mcu_reset_r, bankswitch_w)
646599   AM_RANGE(0x3806, 0x3806) AM_WRITENOP // ?? watchdog
647600   AM_RANGE(0x3807, 0x3807) AM_WRITE(renegade_coin_counter_w)
648   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
601   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("rombank")
649602   AM_RANGE(0x8000, 0xffff) AM_ROM
650603ADDRESS_MAP_END
651604
652605static ADDRESS_MAP_START( renegade_sound_map, AS_PROGRAM, 8, renegade_state )
653606   AM_RANGE(0x0000, 0x0fff) AM_RAM
654607   AM_RANGE(0x1000, 0x1000) AM_READ(soundlatch_byte_r)
655   AM_RANGE(0x1800, 0x1800) AM_WRITENOP // this gets written the same values as 0x2000
656   AM_RANGE(0x2000, 0x2000) AM_DEVWRITE("adpcm", renegade_adpcm_device, play_w)
608   AM_RANGE(0x1800, 0x1800) AM_WRITE(adpcm_start_w)
609   AM_RANGE(0x2000, 0x2000) AM_WRITE(adpcm_addr_w)
657610   AM_RANGE(0x2800, 0x2801) AM_DEVREADWRITE("ymsnd", ym3526_device, read, write)
658   AM_RANGE(0x3000, 0x3000) AM_WRITENOP /* adpcm related? stereo pan? */
611   AM_RANGE(0x3000, 0x3000) AM_WRITE(adpcm_stop_w)
659612   AM_RANGE(0x8000, 0xffff) AM_ROM
660613ADDRESS_MAP_END
661614
r242231r242232
866819
867820void renegade_state::machine_reset()
868821{
869   m_bank = 0;
870   setbank();
822   m_rombank->set_entry(0);
823   m_msm->reset_w(1);
824   m_adpcm_playing = 0;
871825}
872826
873827
r242231r242232
905859   MCFG_YM3526_IRQ_HANDLER(DEVWRITELINE("audiocpu", m6809_device, firq_line))
906860   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
907861
908   MCFG_SOUND_ADD("adpcm", RENEGADE_ADPCM, 8000)
862   MCFG_SOUND_ADD("msm", MSM5205, 12000000/32)
863   MCFG_MSM5205_VCLK_CB(WRITELINE(renegade_state, adpcm_int))
864   MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B)  /* 8kHz */
909865   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
910866MACHINE_CONFIG_END
911867
r242231r242232
916872
917873
918874ROM_START( renegade )
919   ROM_REGION( 0x14000, "maincpu", 0 ) /* 64k for code + bank switched ROM */
875   ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for code + bank switched ROM */
876   ROM_LOAD( "na-5.ic52",     0x00000, 0x8000, CRC(de7e7df4) SHA1(7d26ac29e0b5858d9a0c0cdc86c864e464145260) )
920877   ROM_LOAD( "nb-5.ic51",     0x08000, 0x8000, CRC(ba683ddf) SHA1(7516fac1c4fd14cbf43481e94c0c26c662c4cd28) )
921   ROM_LOAD( "na-5.ic52",     0x04000, 0x4000, CRC(de7e7df4) SHA1(7d26ac29e0b5858d9a0c0cdc86c864e464145260) )
922   ROM_CONTINUE(         0x10000, 0x4000 )
923878
924879   ROM_REGION( 0x10000, "audiocpu", 0 )
925880   ROM_LOAD( "n0-5.ic13",     0x8000, 0x8000, CRC(3587de3b) SHA1(f82e758254b21eb0c5a02469c72adb86d9577065) )
r242231r242232
952907   ROM_LOAD( "ng-5.bin",     0x50000, 0x8000, CRC(a8ee3720) SHA1(df3d40015b16fa7a9bf05f0ed5741c22f7f152c7) )
953908   ROM_LOAD( "nm-5.bin",     0x58000, 0x8000, CRC(c100258e) SHA1(0e2124e642b9742a9a0045f460974025048bc2dd) )
954909
955   ROM_REGION( 0x20000, "adpcm", 0 )
956   ROM_LOAD( "n5-5.ic31",    0x00000, 0x8000, CRC(7ee43a3c) SHA1(36b14b886096177cdd0bd0c99cbcfcc362b2bc30) )
957   ROM_LOAD( "n4-5.ic32",    0x10000, 0x8000, CRC(6557564c) SHA1(b3142be9d48eacb43786079a7ae012010f6afabb) )
958   ROM_LOAD( "n3-5.ic33",    0x18000, 0x8000, CRC(78fd6190) SHA1(995df0e88f5c34946e0634b50bda8c1cc621afaa) )
910   ROM_REGION( 0x18000, "adpcm", 0 )
911   ROM_LOAD( "n3-5.ic33",    0x00000, 0x8000, CRC(78fd6190) SHA1(995df0e88f5c34946e0634b50bda8c1cc621afaa) )
912   ROM_LOAD( "n4-5.ic32",    0x08000, 0x8000, CRC(6557564c) SHA1(b3142be9d48eacb43786079a7ae012010f6afabb) )
913   ROM_LOAD( "n5-5.ic31",    0x10000, 0x8000, CRC(7ee43a3c) SHA1(36b14b886096177cdd0bd0c99cbcfcc362b2bc30) )
959914ROM_END
960915
961916ROM_START( kuniokun )
962   ROM_REGION( 0x14000, "maincpu", 0 ) /* 64k for code + bank switched ROM */
917   ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for code + bank switched ROM */
918   ROM_LOAD( "ta18-11.bin",  0x00000, 0x8000, CRC(f240f5cd) SHA1(ed6875e8ad2988e88389d4f63ff448d0823c195f) )
963919   ROM_LOAD( "nb-01.bin",    0x08000, 0x8000, CRC(93fcfdf5) SHA1(51cdb9377544ae17895e427f21d150ce195ab8e7) ) // original
964   ROM_LOAD( "ta18-11.bin",  0x04000, 0x4000, CRC(f240f5cd) SHA1(ed6875e8ad2988e88389d4f63ff448d0823c195f) )
965   ROM_CONTINUE(         0x10000, 0x4000 )
966920
967921   ROM_REGION( 0x10000, "audiocpu", 0 )
968922   ROM_LOAD( "n0-5.bin",     0x8000, 0x8000, CRC(3587de3b) SHA1(f82e758254b21eb0c5a02469c72adb86d9577065) )
r242231r242232
995949   ROM_LOAD( "ta18-21.bin",  0x50000, 0x8000, CRC(c95e009b) SHA1(d45a247d4ebf8587a2cd30c83444cc7bd17a3534) )
996950   ROM_LOAD( "ta18-15.bin",  0x58000, 0x8000, CRC(a5d61d01) SHA1(9bf1f0b8296667db31ff1c34e28c8eda3ce9f7c3) )
997951
998   ROM_REGION( 0x20000, "adpcm", 0 )
999   ROM_LOAD( "ta18-07.bin",  0x00000, 0x8000, CRC(02e3f3ed) SHA1(ab09b3af2c4ab9a36eb1273bcc7c788350048554) )
1000   ROM_LOAD( "ta18-08.bin",  0x10000, 0x8000, CRC(c9312613) SHA1(fbbdf7c56c34cbee42984e41fcf2a21da2b87a31) )
1001   ROM_LOAD( "ta18-09.bin",  0x18000, 0x8000, CRC(07ed4705) SHA1(6fd4b78ca846fa602504f06f3105b2da03bcd00c) )
952   ROM_REGION( 0x18000, "adpcm", 0 )
953   ROM_LOAD( "ta18-09.bin",  0x00000, 0x8000, CRC(07ed4705) SHA1(6fd4b78ca846fa602504f06f3105b2da03bcd00c) )
954   ROM_LOAD( "ta18-08.bin",  0x08000, 0x8000, CRC(c9312613) SHA1(fbbdf7c56c34cbee42984e41fcf2a21da2b87a31) )
955   ROM_LOAD( "ta18-07.bin",  0x10000, 0x8000, CRC(02e3f3ed) SHA1(ab09b3af2c4ab9a36eb1273bcc7c788350048554) )
1002956ROM_END
1003957
1004958ROM_START( kuniokunb )
1005   ROM_REGION( 0x14000, "maincpu", 0 ) /* 64k for code + bank switched ROM */
959   ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for code + bank switched ROM */
960   ROM_LOAD( "ta18-11.bin",  0x00000, 0x8000, CRC(f240f5cd) SHA1(ed6875e8ad2988e88389d4f63ff448d0823c195f) )
1006961   ROM_LOAD( "ta18-10.bin",  0x08000, 0x8000, CRC(a90cf44a) SHA1(6d63d9c29da7b8c5bc391e074b6b8fe6ae3892ae) ) // bootleg
1007   ROM_LOAD( "ta18-11.bin",  0x04000, 0x4000, CRC(f240f5cd) SHA1(ed6875e8ad2988e88389d4f63ff448d0823c195f) )
1008   ROM_CONTINUE(         0x10000, 0x4000 )
1009962
1010963   ROM_REGION( 0x10000, "audiocpu", 0 )
1011964   ROM_LOAD( "n0-5.bin",     0x8000, 0x8000, CRC(3587de3b) SHA1(f82e758254b21eb0c5a02469c72adb86d9577065) )
r242231r242232
1035988   ROM_LOAD( "ta18-21.bin",  0x50000, 0x8000, CRC(c95e009b) SHA1(d45a247d4ebf8587a2cd30c83444cc7bd17a3534) )
1036989   ROM_LOAD( "ta18-15.bin",  0x58000, 0x8000, CRC(a5d61d01) SHA1(9bf1f0b8296667db31ff1c34e28c8eda3ce9f7c3) )
1037990
1038   ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm */
1039   ROM_LOAD( "ta18-07.bin",  0x00000, 0x8000, CRC(02e3f3ed) SHA1(ab09b3af2c4ab9a36eb1273bcc7c788350048554) )
1040   ROM_LOAD( "ta18-08.bin",  0x10000, 0x8000, CRC(c9312613) SHA1(fbbdf7c56c34cbee42984e41fcf2a21da2b87a31) )
1041   ROM_LOAD( "ta18-09.bin",  0x18000, 0x8000, CRC(07ed4705) SHA1(6fd4b78ca846fa602504f06f3105b2da03bcd00c) )
991   ROM_REGION( 0x18000, "adpcm", 0 ) /* adpcm */
992   ROM_LOAD( "ta18-09.bin",  0x00000, 0x8000, CRC(07ed4705) SHA1(6fd4b78ca846fa602504f06f3105b2da03bcd00c) )
993   ROM_LOAD( "ta18-08.bin",  0x08000, 0x8000, CRC(c9312613) SHA1(fbbdf7c56c34cbee42984e41fcf2a21da2b87a31) )
994   ROM_LOAD( "ta18-07.bin",  0x10000, 0x8000, CRC(02e3f3ed) SHA1(ab09b3af2c4ab9a36eb1273bcc7c788350048554) )
1042995ROM_END
1043996
1044997
trunk/src/mame/drivers/starwars.c
r242231r242232
383383 *
384384 *************************************/
385385
386
387ROM_START( starwars )
388   ROM_REGION( 0x12000, "maincpu", 0 )     /* 2 64k ROM spaces */
389   ROM_LOAD( "136021.105",   0x3000, 0x1000, CRC(538e7d2f) SHA1(032c933fd94a6b0b294beee29159a24494ae969b) ) /* 3000-3fff is 4k vector rom */
390   ROM_LOAD( "136021.214.1f",   0x6000, 0x2000, CRC(04f1876e) SHA1(c1d3637cb31ece0890c25f6122d6bcd27e6ffe0c) )   /* ROM 0 bank pages 0 and 1 */
391   ROM_CONTINUE(               0x10000, 0x2000 )
392   ROM_LOAD( "136021.102.1hj",  0x8000, 0x2000, CRC(f725e344) SHA1(f8943b67f2ea032ab9538084756ba86f892be5ca) ) /*  8k ROM 1 bank */
393   ROM_LOAD( "136021.203.1jk",  0xa000, 0x2000, CRC(f6da0a00) SHA1(dd53b643be856787bbc4da63e5eb132f98f623c3) ) /*  8k ROM 2 bank */
394   ROM_LOAD( "136021.104.1kl",  0xc000, 0x2000, CRC(7e406703) SHA1(981b505d6e06d7149f8bcb3e81e4d0c790f2fc86) ) /*  8k ROM 3 bank */
395   ROM_LOAD( "136021.206.1m",   0xe000, 0x2000, CRC(c7e51237) SHA1(4960f4446271316e3f730eeb2531dbc702947395) ) /*  8k ROM 4 bank */
396
397   /* Sound ROMS */
398   ROM_REGION( 0x10000, "audiocpu", 0 )
399   ROM_LOAD( "136021.107",   0x4000, 0x2000, CRC(dbf3aea2) SHA1(c38661b2b846fe93487eef09ca3cda19c44f08a0) ) /* Sound ROM 0 */
400   ROM_RELOAD(               0xc000, 0x2000 )
401   ROM_LOAD( "136021.208",   0x6000, 0x2000, CRC(e38070a8) SHA1(c858ae1702efdd48615453ab46e488848891d139) ) /* Sound ROM 0 */
402   ROM_RELOAD(               0xe000, 0x2000 )
403
404   ROM_REGION( 0x100, "user1", 0)
405   ROM_LOAD( "136021-105.1l",   0x0000, 0x0100, CRC(82fc3eb2) SHA1(184231c7baef598294860a7d2b8a23798c5c7da6) ) /* AVG PROM */
406
407   /* Mathbox PROMs */
408   ROM_REGION( 0x1000, "user2", 0 )
409   ROM_LOAD( "136021.110",   0x0000, 0x0400, CRC(810e040e) SHA1(d247cbb0afb4538d5161f8ce9eab337cdb3f2da4) ) /* PROM 0 */
410   ROM_LOAD( "136021.111",   0x0400, 0x0400, CRC(ae69881c) SHA1(f3420c6e15602956fd94982a5d8d4ddd015ed977) ) /* PROM 1 */
411   ROM_LOAD( "136021.112",   0x0800, 0x0400, CRC(ecf22628) SHA1(4dcf5153221feca329b8e8d199bd4fc00b151d9c) ) /* PROM 2 */
412   ROM_LOAD( "136021.113",   0x0c00, 0x0400, CRC(83febfde) SHA1(e13541b09d1724204fdb171528e9a1c83c799c1c) ) /* PROM 3 */
413ROM_END
414
386415ROM_START( starwars1 )
387416   ROM_REGION( 0x12000, "maincpu", 0 )     /* 2 64k ROM spaces */
388417   ROM_LOAD( "136021.105",   0x3000, 0x1000, CRC(538e7d2f) SHA1(032c933fd94a6b0b294beee29159a24494ae969b) ) /* 3000-3fff is 4k vector rom */
389   ROM_LOAD( "136021.114",   0x6000, 0x2000, CRC(e75ff867) SHA1(3a40de920c31ffa3c3e67f3edf653b79fcc5ddd7) )   /* ROM 0 bank pages 0 and 1 */
390   ROM_CONTINUE(            0x10000, 0x2000 )
391   ROM_LOAD( "136021.102",   0x8000, 0x2000, CRC(f725e344) SHA1(f8943b67f2ea032ab9538084756ba86f892be5ca) ) /*  8k ROM 1 bank */
392   ROM_LOAD( "136021.203",   0xa000, 0x2000, CRC(f6da0a00) SHA1(dd53b643be856787bbc4da63e5eb132f98f623c3) ) /*  8k ROM 2 bank */
393   ROM_LOAD( "136021.104",   0xc000, 0x2000, CRC(7e406703) SHA1(981b505d6e06d7149f8bcb3e81e4d0c790f2fc86) ) /*  8k ROM 3 bank */
394   ROM_LOAD( "136021.206",   0xe000, 0x2000, CRC(c7e51237) SHA1(4960f4446271316e3f730eeb2531dbc702947395) ) /*  8k ROM 4 bank */
418   ROM_LOAD( "136021.114.1f",   0x6000, 0x2000, CRC(e75ff867) SHA1(3a40de920c31ffa3c3e67f3edf653b79fcc5ddd7) )   /* ROM 0 bank pages 0 and 1 */
419   ROM_CONTINUE(               0x10000, 0x2000 )
420   ROM_LOAD( "136021.102.1hj",  0x8000, 0x2000, CRC(f725e344) SHA1(f8943b67f2ea032ab9538084756ba86f892be5ca) ) /*  8k ROM 1 bank */
421   ROM_LOAD( "136021.203.1jk",  0xa000, 0x2000, CRC(f6da0a00) SHA1(dd53b643be856787bbc4da63e5eb132f98f623c3) ) /*  8k ROM 2 bank */
422   ROM_LOAD( "136021.104.1kl",  0xc000, 0x2000, CRC(7e406703) SHA1(981b505d6e06d7149f8bcb3e81e4d0c790f2fc86) ) /*  8k ROM 3 bank */
423   ROM_LOAD( "136021.206.1m",   0xe000, 0x2000, CRC(c7e51237) SHA1(4960f4446271316e3f730eeb2531dbc702947395) ) /*  8k ROM 4 bank */
395424
396425   /* Sound ROMS */
397426   ROM_REGION( 0x10000, "audiocpu", 0 )
r242231r242232
411440   ROM_LOAD( "136021.113",   0x0c00, 0x0400, CRC(83febfde) SHA1(e13541b09d1724204fdb171528e9a1c83c799c1c) ) /* PROM 3 */
412441ROM_END
413442
414
415ROM_START( starwars )
443ROM_START( starwarso )
416444   ROM_REGION( 0x12000, "maincpu", 0 )     /* 2 64k ROM spaces */
417445   ROM_LOAD( "136021.105",   0x3000, 0x1000, CRC(538e7d2f) SHA1(032c933fd94a6b0b294beee29159a24494ae969b) ) /* 3000-3fff is 4k vector rom */
418   ROM_LOAD( "136021.214",   0x6000, 0x2000, CRC(04f1876e) SHA1(c1d3637cb31ece0890c25f6122d6bcd27e6ffe0c) )   /* ROM 0 bank pages 0 and 1 */
446   ROM_LOAD( "136021-114.1f",   0x6000, 0x2000, CRC(e75ff867) SHA1(3a40de920c31ffa3c3e67f3edf653b79fcc5ddd7) )   /* ROM 0 bank pages 0 and 1 */
419447   ROM_CONTINUE(            0x10000, 0x2000 )
420   ROM_LOAD( "136021.102",   0x8000, 0x2000, CRC(f725e344) SHA1(f8943b67f2ea032ab9538084756ba86f892be5ca) ) /*  8k ROM 1 bank */
421   ROM_LOAD( "136021.203",   0xa000, 0x2000, CRC(f6da0a00) SHA1(dd53b643be856787bbc4da63e5eb132f98f623c3) ) /*  8k ROM 2 bank */
422   ROM_LOAD( "136021.104",   0xc000, 0x2000, CRC(7e406703) SHA1(981b505d6e06d7149f8bcb3e81e4d0c790f2fc86) ) /*  8k ROM 3 bank */
423   ROM_LOAD( "136021.206",   0xe000, 0x2000, CRC(c7e51237) SHA1(4960f4446271316e3f730eeb2531dbc702947395) ) /*  8k ROM 4 bank */
448   ROM_LOAD( "136021-102.1hj",  0x8000, 0x2000, CRC(f725e344) SHA1(f8943b67f2ea032ab9538084756ba86f892be5ca) ) /*  8k ROM 1 bank */
449   ROM_LOAD( "136021-103.1jk",  0xa000, 0x2000, CRC(3fde9ccb) SHA1(8d88fc7a28ac8f189f8aba08598732ac8c5491aa) ) /*  8k ROM 2 bank */
450   ROM_LOAD( "136021-104.1kl",  0xc000, 0x2000, CRC(7e406703) SHA1(981b505d6e06d7149f8bcb3e81e4d0c790f2fc86) ) /*  8k ROM 3 bank */
451   ROM_LOAD( "136021-206.1m",   0xe000, 0x2000, CRC(c7e51237) SHA1(4960f4446271316e3f730eeb2531dbc702947395) ) /*  8k ROM 4 bank */
424452
425453   /* Sound ROMS */
426454   ROM_REGION( 0x10000, "audiocpu", 0 )
r242231r242232
440468   ROM_LOAD( "136021.113",   0x0c00, 0x0400, CRC(83febfde) SHA1(e13541b09d1724204fdb171528e9a1c83c799c1c) ) /* PROM 3 */
441469ROM_END
442470
471
472
443473ROM_START( tomcatsw )
444474   ROM_REGION( 0x12000, "maincpu", 0 )
445475   ROM_LOAD( "tcavg3.1l",    0x3000, 0x1000, CRC(27188aa9) SHA1(5d9a978a7ac1913b57586e81045a1b955db27b48) )
r242231r242232
564594 *
565595 *************************************/
566596
567GAME( 1983, starwars, 0,        starwars, starwars, starwars_state, starwars, ROT0, "Atari", "Star Wars (rev 2)", 0 )
568GAME( 1983, starwars1,starwars, starwars, starwars, starwars_state, starwars, ROT0, "Atari", "Star Wars (rev 1)", 0 )
597GAME( 1983, starwars, 0,        starwars, starwars, starwars_state, starwars, ROT0, "Atari", "Star Wars (set 1)", 0 ) // newest
598GAME( 1983, starwars1,starwars, starwars, starwars, starwars_state, starwars, ROT0, "Atari", "Star Wars (set 2)", 0 )
599GAME( 1983, starwarso,starwars, starwars, starwars, starwars_state, starwars, ROT0, "Atari", "Star Wars (set 3)", 0 ) // oldest
600// is there an even older starwars set with 136021-106.1m ?
601
569602GAME( 1983, tomcatsw, tomcat,   starwars, starwars, starwars_state, starwars, ROT0, "Atari", "TomCat (Star Wars hardware, prototype)", GAME_NO_SOUND )
603
570604GAME( 1985, esb,      0,        starwars, esb, starwars_state,      esb,      ROT0, "Atari Games", "The Empire Strikes Back", 0 )
trunk/src/mame/drivers/supduck.c
r242231r242232
2424#include "cpu/m68000/m68000.h"
2525#include "sound/okim6295.h"
2626#include "video/bufsprite.h"
27#include "video/tigeroad_spr.h"
2728
2829class supduck_state : public driver_device
2930{
r242231r242232
3637         m_text_videoram(*this, "textvideoram"),
3738         m_fore_videoram(*this, "forevideoram"),
3839         m_back_videoram(*this, "backvideoram"),
39         m_paletteram(*this, "paletteram"),
4040         m_gfxdecode(*this, "gfxdecode"),
41         m_palette(*this, "palette")
41         m_palette(*this, "palette"),
42         m_spritegen(*this, "spritegen")
4243   { }
4344
4445   // devices
r242231r242232
5051   required_shared_ptr<UINT16> m_text_videoram;
5152   required_shared_ptr<UINT16> m_fore_videoram;
5253   required_shared_ptr<UINT16> m_back_videoram;
53   required_shared_ptr<UINT16> m_paletteram;
5454
5555   required_device<gfxdecode_device> m_gfxdecode;
5656   required_device<palette_device> m_palette;
57   required_device<tigeroad_spr_device> m_spritegen;
5758
5859   tilemap_t     *m_text_tilemap;
5960   tilemap_t     *m_fore_tilemap;
r242231r242232
6869
6970   DECLARE_WRITE16_MEMBER(supduck_4000_w);
7071   DECLARE_WRITE16_MEMBER(supduck_4002_w);
71   DECLARE_WRITE16_MEMBER(supduck_paletteram_w);
7272
7373   TILEMAP_MAPPER_MEMBER(supduk_tilemap_scan);
7474
r242231r242232
8282
8383   virtual void video_start();
8484
85   void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority);
8685   TILE_GET_INFO_MEMBER(get_text_tile_info);
8786   TILE_GET_INFO_MEMBER(get_fore_tile_info);
8887   TILE_GET_INFO_MEMBER(get_back_tile_info);
r242231r242232
127126   m_back_tilemap->draw(screen, bitmap, cliprect, 0, 0);
128127   m_fore_tilemap->draw(screen, bitmap, cliprect, 0, 0);
129128
129   m_spritegen->draw_sprites(bitmap, cliprect, m_gfxdecode, 3, m_spriteram->buffer(), m_spriteram->bytes(), flip_screen(), 1 );
130130
131   draw_sprites(bitmap, cliprect, 0);
132   draw_sprites(bitmap, cliprect, 1); //draw priority sprites?
133
134131   m_text_tilemap->draw(screen, bitmap, cliprect, 0, 0);
135132   return 0;
136133}
r242231r242232
200197}
201198
202199
203void supduck_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority )
204{
205   UINT16 *source = &m_spriteram->buffer()[m_spriteram->bytes()/2] - 4;
206   UINT16 *finish = m_spriteram->buffer();
207200
208   while (source >= finish)
209   {
210      int tile_number = source[0];
211
212      if (tile_number != 0xfff) {
213         int attr = source[1];
214         int sy = source[2] & 0x1ff;
215         int sx = source[3] & 0x1ff;
216
217         int flipx = attr & 0x02;
218         int flipy = attr & 0x01;
219         int color = (attr >> 2) & 0x0f;
220
221         if (sx > 0x100) sx -= 0x200;
222         if (sy > 0x100) sy -= 0x200;
223
224         if (flip_screen())
225         {
226            sx = 240 - sx;
227            sy = 240 - sy;
228            flipx = !flipx;
229            flipy = !flipy;
230         }
231
232
233            m_gfxdecode->gfx(3)->transpen(bitmap,cliprect,
234            tile_number,
235            color,
236            flipx, flipy,
237            sx, 240 - sy, 15);
238      }
239
240      source -= 4;
241   }
242}
243
244201WRITE16_MEMBER(supduck_state::supduck_4000_w)
245202{
246203}
247204
248WRITE16_MEMBER(supduck_state::supduck_paletteram_w)
249{
250   int r, g, b;
251   data = COMBINE_DATA(&m_paletteram[offset]);
252205
253   r = ((data >> 8) & 0x0f);
254   if (data & 0x4000) r |= 0x10;
255
256   g = ((data >> 4 ) & 0x0f);
257   if (data & 0x2000) g |= 0x10;
258
259   b = ((data >> 0 ) & 0x0f);
260   if (data & 0x1000) b |= 0x10;
261
262   m_palette->set_pen_color (offset, rgb_t(r<<3, g<<3, b<<3));
263}
264
265206WRITE16_MEMBER(supduck_state::supduck_4002_w)
266207{
267208   data &= mem_mask;
r242231r242232
308249   AM_RANGE(0xfec000, 0xfecfff) AM_RAM_WRITE(text_videoram_w) AM_SHARE("textvideoram")
309250   AM_RANGE(0xff0000, 0xff3fff) AM_RAM_WRITE(back_videoram_w) AM_SHARE("backvideoram")
310251   AM_RANGE(0xff4000, 0xff7fff) AM_RAM_WRITE(fore_videoram_w) AM_SHARE("forevideoram")
311   AM_RANGE(0xff8000, 0xff87ff) AM_RAM_WRITE(supduck_paletteram_w) AM_SHARE("paletteram") // AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
252   AM_RANGE(0xff8000, 0xff87ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
312253   AM_RANGE(0xffc000, 0xffffff) AM_RAM /* working RAM */
313254ADDRESS_MAP_END
314255
r242231r242232
509450
510451   MCFG_GFXDECODE_ADD("gfxdecode", "palette", supduck)
511452
453   MCFG_DEVICE_ADD("spritegen", TIGEROAD_SPRITE, 0)
454
512455   MCFG_PALETTE_ADD("palette", 0x800/2)
513//  MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB) // can't use this, the RGB bits are the lowest bits with this format, for this game they're the highest bits
456   MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit4)
514457
515458   /* sound hardware */
516459   MCFG_SPEAKER_STANDARD_MONO("mono")
trunk/src/mame/drivers/system16.c
r242231r242232
3535     - Tetris
3636     - E-Swat
3737
38    These appear to be a variation no the encrypted / protected bootlegs, but without the encryption
38    These appear to be a variation on the encrypted / protected bootlegs, but without the encryption
3939    or protection
4040
4141    - Golden Axe (set 2)
r242231r242232
566566   int scroll = data & 0x1ff;
567567
568568   scroll+= 0x200;
569   scroll+= 1; // so that the background fo the select screen is properly aligned
569   scroll+= 1; // so that the background of the select screen is properly aligned
570570   m_bg_scrollx = -scroll;
571571}
572572
trunk/src/mame/drivers/thedeep.c
r242231r242232
8787         m_rombank = new_rombank;
8888         rom = memregion("maincpu")->base();
8989         membank("bank1")->set_base(rom + 0x10000 + m_rombank * 0x4000);
90         /* there's code which falls through from the fixed ROM to bank #1, I have to */
91         /* copy it there otherwise the CPU bank switching support will not catch it. */
92         memcpy(rom + 0x08000, rom + 0x10000 + m_rombank * 0x4000, 0x4000);
90
9391      }
9492      break;
9593
r242231r242232
197195   m_rombank = new_rombank;
198196   rom = memregion("maincpu")->base();
199197   membank("bank1")->set_base(rom + 0x10000 + m_rombank * 0x4000);
200   /* there's code which falls through from the fixed ROM to bank #1, I have to */
201   /* copy it there otherwise the CPU bank switching support will not catch it. */
202   memcpy(rom + 0x08000, rom + 0x10000 + m_rombank * 0x4000, 0x4000);
203198
204199}
205200
trunk/src/mame/drivers/tigeroad.c
r242231r242232
619619   MCFG_SCREEN_PALETTE("palette")
620620
621621   MCFG_GFXDECODE_ADD("gfxdecode", "palette", tigeroad)
622   
623   MCFG_DEVICE_ADD("spritegen", TIGEROAD_SPRITE, 0)
622624
623625   MCFG_PALETTE_ADD("palette", 1024)
624626   MCFG_PALETTE_FORMAT(xxxxRRRRGGGGBBBB)
r242231r242232
680682
681683   MCFG_GFXDECODE_ADD("gfxdecode", "palette", tigeroad)
682684
685   MCFG_DEVICE_ADD("spritegen", TIGEROAD_SPRITE, 0)
686
683687   MCFG_PALETTE_ADD("palette", 1024)
684688   MCFG_PALETTE_FORMAT(xxxxRRRRGGGGBBBB)
685689
trunk/src/mame/drivers/vsnes.c
r242231r242232
364364   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )            /* bit 1 of dsw goes here */
365365   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1)
366366   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(1)
367   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )            /* this bit masks irqs - dont change */
367   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )            /* this bit masks irqs - don't change */
368368
369369   /* Right Side Controls */
370370   PORT_START("IN2")
r242231r242232
395395   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )            /* bit 1 of dsw goes here */
396396   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN3 ) PORT_IMPULSE(1)
397397   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN4 ) PORT_IMPULSE(1)
398   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )            /* this bit masks irqs - dont change */
398   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )            /* this bit masks irqs - don't change */
399399
400400   /* Both sides also have a DSW (#0 & #1) which are defined per game, below */
401401INPUT_PORTS_END
trunk/src/mame/drivers/wallc.c
r242231r242232
363363   ROM_LOAD( "74s288.c2",  0x0000, 0x0020, CRC(83e3e293) SHA1(a98c5e63b688de8d175adb6539e0cdc668f313fd) )
364364ROM_END
365365
366ROM_START( brkblast )
367   ROM_REGION( 0x10000, "maincpu", 0 )
368   ROM_LOAD( "fadesa-r0.6m",     0x0000, 0x4000, CRC(4e96ca15) SHA1(87f1a3538712aa3d6c3713b845679dd42a4ba5a4) )
369
370   ROM_REGION( 0x3000, "gfx1", 0 )
371   ROM_LOAD( "rom3.rom",     0x0800, 0x0800, CRC(6634db73) SHA1(fe6104f974495a250e0cd14c0745eec8e44b8d3a) )
372   ROM_LOAD( "rom2.rom",     0x1800, 0x0800, CRC(79f49c2c) SHA1(485fdba5ebdb4c01306f3ef26c992a513aa6b5dc) )
373   ROM_LOAD( "rom1.rom",     0x2800, 0x0800, CRC(3884fd4f) SHA1(47254c8828128ac48fc15f05b52fe4d42d4919e7) )
374
375   ROM_REGION( 0x0020, "proms", 0 )
376   ROM_LOAD( "74s288.c2",  0x0000, 0x0020, CRC(83e3e293) SHA1(a98c5e63b688de8d175adb6539e0cdc668f313fd) )
377ROM_END
378
379
380
366381/*
367382
368383It use a epoxy brick like wallc
r242231r242232
474489
475490GAME( 1984, wallc,  0,      wallc,  wallc, wallc_state, wallc,  ROT0, "Midcoin", "Wall Crash (set 1)", 0 )
476491GAME( 1984, wallca, wallc,  wallc,  wallc, wallc_state, wallca, ROT0, "Midcoin", "Wall Crash (set 2)", 0 )
492GAME( 1984, brkblast,wallc, wallc,  wallc, wallc_state, wallca, ROT0, "bootleg (Fadesa)", "Brick Blast (bootleg of Wall Crash)", 0 ) // Spanish bootleg board, Fadesa stickers / text on various components
493
477494GAME( 1984, sidampkr,0,     wallc,  wallc, wallc_state, sidam,  ROT270, "Sidam", "unknown Sidam Poker", GAME_NOT_WORKING )
trunk/src/mame/drivers/wc90b.c
r242231r242232
6262sometimes it seems colors are not entirely correct, this is only due
6363to the crappy artwork of the person that did the bootleg.
6464
65Dip switches are not complete and they dont seem to differ from
65Dip switches are not complete and they don't seem to differ from
6666the original machine.
6767
6868Last but not least, the set of ROMs i have for Euro League seem to have
trunk/src/mame/drivers/yunsun16.c
r242231r242232
101101
102102***************************************************************************/
103103
104WRITE16_MEMBER(yunsun16_state::yunsun16_sound_bank_w)
104WRITE8_MEMBER(yunsun16_state::sound_bank_w)
105105{
106   if (ACCESSING_BITS_0_7)
107   {
108      int bank = data & 3;
109      UINT8 *dst  = memregion("oki")->base();
110      UINT8 *src  = dst + 0x80000 + 0x20000 * bank;
111      memcpy(dst + 0x20000, src, 0x20000);
112   }
106   membank("okibank")->set_entry(data & 3);
113107}
114108
115109static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, yunsun16_state )
r242231r242232
126120   AM_RANGE(0x80010c, 0x80010f) AM_RAM AM_SHARE("scrollram_1") // Scrolling
127121   AM_RANGE(0x800114, 0x800117) AM_RAM AM_SHARE("scrollram_0") // Scrolling
128122   AM_RANGE(0x800154, 0x800155) AM_RAM AM_SHARE("priorityram") // Priority
129   AM_RANGE(0x800180, 0x800181) AM_WRITE(yunsun16_sound_bank_w)    // Sound
123   AM_RANGE(0x800180, 0x800181) AM_WRITE8(sound_bank_w, 0x00ff)    // Sound
130124   AM_RANGE(0x800188, 0x800189) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)  // Sound
131125   AM_RANGE(0x8001fe, 0x8001ff) AM_WRITENOP    // ? 0 (during int)
132126   AM_RANGE(0x900000, 0x903fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")    // Palette
133   AM_RANGE(0x908000, 0x90bfff) AM_RAM_WRITE(yunsun16_vram_1_w) AM_SHARE("vram_1") // Layer 1
134   AM_RANGE(0x90c000, 0x90ffff) AM_RAM_WRITE(yunsun16_vram_0_w) AM_SHARE("vram_0") // Layer 0
127   AM_RANGE(0x908000, 0x90bfff) AM_RAM_WRITE(vram_1_w) AM_SHARE("vram_1") // Layer 1
128   AM_RANGE(0x90c000, 0x90ffff) AM_RAM_WRITE(vram_0_w) AM_SHARE("vram_0") // Layer 0
135129   AM_RANGE(0x910000, 0x910fff) AM_RAM AM_SHARE("spriteram")   // Sprites
136130   AM_RANGE(0xff0000, 0xffffff) AM_RAM
137131ADDRESS_MAP_END
r242231r242232
155149
156150DRIVER_INIT_MEMBER(yunsun16_state,magicbub)
157151{
158//  remove_mem_write16_handler (0, 0x800180, 0x800181 );
159   m_maincpu->space(AS_PROGRAM).install_write_handler(0x800188, 0x800189, write16_delegate(FUNC(yunsun16_state::magicbub_sound_command_w),this));
152   m_maincpu->space(AS_PROGRAM).unmap_write(0x800180, 0x800181);
153   m_maincpu->space(AS_PROGRAM).install_write_handler(0x800188, 0x800189, write16_delegate(FUNC(yunsun16_state::magicbub_sound_command_w), this));
160154}
161155
162156/***************************************************************************
r242231r242232
179173   AM_RANGE(0x1c, 0x1c) AM_DEVREADWRITE("oki", okim6295_device, read, write)       // M6295
180174ADDRESS_MAP_END
181175
176static ADDRESS_MAP_START( oki_map, AS_0, 8, yunsun16_state )
177   AM_RANGE(0x00000, 0x1ffff) AM_ROM
178   AM_RANGE(0x20000, 0x3ffff) AM_ROMBANK("okibank")
179   ADDRESS_MAP_END
182180
181
183182/***************************************************************************
184183
185184
r242231r242232
566565   m_sprites_scrolldy = -0x0f;
567566}
568567
568MACHINE_START_MEMBER(yunsun16_state, shocking)
569{
570   machine_start();
571   membank("okibank")->configure_entries(0, 0x80000 / 0x20000, memregion("oki")->base(), 0x20000);
572   membank("okibank")->set_entry(0);
573}
574
575MACHINE_RESET_MEMBER(yunsun16_state, shocking)
576{
577   machine_reset();
578   membank("okibank")->set_entry(0);
579}
580
569581/***************************************************************************
570582                                Magic Bubble
571583***************************************************************************/
r242231r242232
622634   MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz)
623635   MCFG_CPU_PROGRAM_MAP(main_map)
624636   MCFG_CPU_VBLANK_INT_DRIVER("screen", yunsun16_state,  irq2_line_hold)
637   
638   MCFG_MACHINE_START_OVERRIDE(yunsun16_state, shocking)
639   MCFG_MACHINE_RESET_OVERRIDE(yunsun16_state, shocking)
625640
626
627641   /* video hardware */
628642   MCFG_SCREEN_ADD("screen", RASTER)
629643   MCFG_SCREEN_RAW_PARAMS(XTAL_16MHz/2, 512, 0, 0x180-4, 260, 0, 0xe0) /* TODO: completely inaccurate */
r242231r242232
640654   MCFG_OKIM6295_ADD("oki", XTAL_16MHz/16, OKIM6295_PIN7_HIGH)
641655   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
642656   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
657   MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
643658MACHINE_CONFIG_END
644659
645660
r242231r242232
786801   ROM_LOAD( "u22.bin", 0x040000, 0x020000, CRC(7c68df7a) SHA1(88acf9dd43892a790415b418f77d88c747aa84f5) )
787802   ROM_LOAD( "u23.bin", 0x060000, 0x020000, CRC(c7763fc1) SHA1(ed68b3c3c5155073afb7b55d6d92d3057e40df6c) )
788803
789   ROM_REGION( 0x080000 * 2, "oki", 0 )    /* Samples */
804   ROM_REGION( 0x080000, "oki", 0 )    /* Samples */
790805   ROM_LOAD( "u131", 0x000000, 0x040000, CRC(9bdb08e4) SHA1(4d8bdeb9b503b0959a6ae3f3fb3574350b01b1a1) )
791   ROM_RELOAD(       0x040000, 0x040000 )
792   ROM_RELOAD(       0x080000, 0x040000 )
793   ROM_RELOAD(       0x0c0000, 0x040000 )
794806
795807ROM_END
796808
r242231r242232
862874   ROM_LOAD( "u22.bin", 0x080000, 0x040000, CRC(436499c7) SHA1(ec1390b6d5656c99d91cf6425d319f4796bcb28a) )
863875   ROM_LOAD( "u23.bin", 0x0c0000, 0x040000, CRC(358280fe) SHA1(eac3cb65fe75bc2da14896734f4a339480b54a2c) )
864876
865   ROM_REGION( 0x080000 * 2, "oki", 0 )    /* Samples */
877   ROM_REGION( 0x080000, "oki", 0 )    /* Samples */
866878   ROM_LOAD( "u131.bin", 0x000000, 0x080000, CRC(bcf7aa12) SHA1(f7bf5258396ed0eb7e85eccf250c6d0a333a4d61) )
867   ROM_RELOAD(           0x080000, 0x080000 )
868
879   
869880ROM_END
870881
871882/***************************************************************************
r242231r242232
892903   ROM_LOAD( "yunsun16.u22", 0x080000, 0x040000, CRC(d6db0388) SHA1(f5d8f7740b602c402a8dd6c4ebd357cf15a0dfac) )
893904   ROM_LOAD( "yunsun16.u23", 0x0c0000, 0x040000, CRC(1fa33b2e) SHA1(4aa0dee8d34aac19cf6b7ba3f79ca022ad8d7760) )
894905
895   ROM_REGION( 0x080000 * 2, "oki", 0 )    /* Samples */
906   ROM_REGION( 0x080000, "oki", 0 )    /* Samples */
896907   ROM_LOAD( "yunsun16.131", 0x000000, 0x080000, CRC(d0a1bb8c) SHA1(10f33521bd6031ed73ee5c7be1382165925aa8f8) )
897   ROM_RELOAD(               0x080000, 0x080000 )
898
908   
899909ROM_END
900910
901911ROM_START( shockingk )
r242231r242232
916926   ROM_LOAD( "u22.bin", 0x080000, 0x040000, CRC(59260de1) SHA1(2dd2d7ab93fa751cb9142400a3ff91391477d555) )
917927   ROM_LOAD( "u23.bin", 0x0c0000, 0x040000, CRC(00e4af23) SHA1(a4d23f16748385dd8c87cae3e16593e5a0195c24) )
918928
919   ROM_REGION( 0x080000 * 2, "oki", 0 )    /* Samples */
929   ROM_REGION( 0x080000, "oki", 0 )    /* Samples */
920930   ROM_LOAD( "yunsun16.131", 0x000000, 0x080000, CRC(d0a1bb8c) SHA1(10f33521bd6031ed73ee5c7be1382165925aa8f8) )
921   ROM_RELOAD(               0x080000, 0x080000 )
922
931   
923932ROM_END
924933
925934
r242231r242232
949958   ROM_LOAD( "bk_u22", 0x080000, 0x040000, CRC(9538c46c) SHA1(d7d0e167d5abc2ee81eae6fde152b2f5cc716c0e) )
950959   ROM_LOAD( "bk_u23", 0x0c0000, 0x040000, CRC(e3831f3d) SHA1(096658ee5a7b83d774b671c0a38113533c8751d1) )
951960
952   ROM_REGION( 0x080000 * 2, "oki", 0 )    /* Samples */
961   ROM_REGION( 0x080000, "oki", 0 )    /* Samples */
953962   ROM_LOAD( "bk_u131", 0x000000, 0x080000, CRC(22cc5732) SHA1(38aefa4e543ea54e004eee428ee087121eb20905) )
954   ROM_RELOAD(          0x080000, 0x080000 )
955
963   
956964ROM_END
957965
958966ROM_START( bombkicka ) // marked 'Bomb Kick 98'
r242231r242232
973981   ROM_LOAD( "bk_u22", 0x080000, 0x040000, CRC(9538c46c) SHA1(d7d0e167d5abc2ee81eae6fde152b2f5cc716c0e) )
974982   ROM_LOAD( "bk_u23", 0x0c0000, 0x040000, CRC(e3831f3d) SHA1(096658ee5a7b83d774b671c0a38113533c8751d1) )
975983
976   ROM_REGION( 0x080000 * 2, "oki", 0 )    /* Samples */
984   ROM_REGION( 0x080000, "oki", 0 )    /* Samples */
977985   ROM_LOAD( "bk_u131", 0x000000, 0x080000, CRC(22cc5732) SHA1(38aefa4e543ea54e004eee428ee087121eb20905) )
978   ROM_RELOAD(          0x080000, 0x080000 )
979
986   
980987ROM_END
981988
982989/***************************************************************************
trunk/src/mame/includes/bionicc.h
r242231r242232
55***************************************************************************/
66
77#include "video/bufsprite.h"
8#include "video/tigeroad_spr.h"
89
910class bionicc_state : public driver_device
1011{
r242231r242232
1819      m_paletteram(*this, "paletteram"),
1920      m_maincpu(*this, "maincpu"),
2021      m_gfxdecode(*this, "gfxdecode"),
21      m_palette(*this, "palette") { }
22      m_palette(*this, "palette"),
23      m_spritegen(*this, "spritegen")   
24   { }
2225
2326   /* memory pointers */
2427   required_device<buffered_spriteram16_device> m_spriteram;
r242231r242232
5558   virtual void video_start();
5659   UINT32 screen_update_bionicc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
5760   TIMER_DEVICE_CALLBACK_MEMBER(bionicc_scanline);
58   void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
5961   required_device<cpu_device> m_maincpu;
6062   required_device<gfxdecode_device> m_gfxdecode;
6163   required_device<palette_device> m_palette;
64   required_device<tigeroad_spr_device> m_spritegen;
6265};
trunk/src/mame/includes/chihiro.h
r0r242232
1/*
2 * geforce 3d (NV2A) vertex program disassembler
3 */
4class vertex_program_disassembler {
5   static const char *srctypes[];
6   static const char *scaops[];
7   static const int scapar2[];
8   static const char *vecops[];
9   static const int vecpar2[];
10   static const char *vecouts[];
11   static const char compchar[];
12   int o[6];
13   int state;
14
15   struct sourcefields
16   {
17      int Sign;
18      int SwizzleX;
19      int SwizzleY;
20      int SwizzleZ;
21      int SwizzleW;
22      int TempIndex;
23      int ParameterType;
24   };
25
26   struct fields
27   {
28      int ScaOperation;
29      int VecOperation;
30      int SourceConstantIndex;
31      int InputIndex;
32      sourcefields src[3];
33      int VecTempWriteMask;
34      int VecTempIndex;
35      int ScaTempWriteMask;
36      int OutputWriteMask;
37      int OutputSelect;
38      int OutputIndex;
39      int MultiplexerControl;
40      int Usea0x;
41      int EndOfProgram;
42   };
43   fields f;
44
45   void decodefields(unsigned int *dwords, int offset, fields &decoded);
46   int disassemble_mask(int mask, char *s);
47   int disassemble_swizzle(sourcefields f, char *s);
48   int disassemble_source(sourcefields f, fields fi, char *s);
49   int disassemble_output(fields f, char *s);
50   int output_types(fields f, int *o);
51public:
52   vertex_program_disassembler() { state = 0; }
53   int disassemble(unsigned int *instruction, char *line);
54};
55
56/*
57 * geforce 3d (NV2A) vertex structure
58 */
59struct vertex_nv {
60   union {
61      float fv[4];
62      UINT32 iv[4];
63   } attribute[16];
64};
65
66/*
67 * geforce 3d (NV2A) vertex program simulator
68 */
69class vertex_program_simulator {
70public:
71   vertex_program_simulator();
72   // input vertex
73   vertex_nv *input;
74   // input parameters
75   union constant {
76      float fv[4];
77      unsigned int iv[4];
78   } c_constant[192];
79   union temp {
80      float fv[4];
81      unsigned int iv[4];
82   } r_temp[32];
83   // output vertex
84   vertex_nv *output;
85   // instructions
86   struct instruction {
87      unsigned int i[4];
88      int modified;
89      struct decoded {
90         int SwizzleA[4], SignA, ParameterTypeA, TempIndexA;
91         int SwizzleB[4], SignB, ParameterTypeB, TempIndexB;
92         int SwizzleC[4], SignC, ParameterTypeC, TempIndexC;
93         int VecOperation, ScaOperation;
94         int OutputWriteMask, MultiplexerControl;
95         int VecTempWriteMask, ScaTempWriteMask;
96         int VecTempIndex, OutputIndex;
97         int InputIndex;
98         int SourceConstantIndex;
99         int OutputSelect;
100         int Usea0x;
101         int EndOfProgram;
102      } d;
103   } op[256];
104public:
105   void set_data(vertex_nv *in, vertex_nv *out);
106   void reset();
107   int step();
108   void decode_instruction(int address);
109   void execute();
110   void jump(int address);
111   void process(int address, vertex_nv *in, vertex_nv *out, int count);
112   int status();
113private:
114   void initialize_outputs();
115   void initialize_temps();
116   void initialize_constants();
117   void generate_input(float t[4], int sign, int type, int temp, int swizzle[4]);
118   void compute_vectorial_operation(float t[4], int instruction, float par[3 * 4]);
119   void compute_scalar_operation(float t[4], int instruction, float par[3 * 4]);
120
121   int ip;
122   int a0x;
123};
124
125class nv2a_renderer; // forward declaration
126struct nvidia_object_data
127{
128   nv2a_renderer *data;
129};
130
131/*
132 * geforce 3d (NV2A) accellerator
133 */
134/* very simplified view
135there is a set of context objects
136
137context objects are stored in RAMIN
138each context object is identified by an handle stored in RAMHT
139
140each context object can be assigned to a channel
141to assign you give to the channel an handle for the object
142
143offset in ramht=(((((handle >> 11) xor handle) >> 11) xor handle) & 0x7ff)*8
144offset in ramht contains the handle itself
145offset in ramht+4 contains in the lower 16 bits the offset in RAMIN divided by 16
146
147objects have methods used to do drawing
148most methods set parameters, others actually draw
149*/
150class nv2a_renderer : public poly_manager<float, nvidia_object_data, 12, 8192>
151{
152public:
153   nv2a_renderer(running_machine &machine) : poly_manager<float, nvidia_object_data, 12, 8192>(machine)
154   {
155      memset(channel, 0, sizeof(channel));
156      memset(pfifo, 0, sizeof(pfifo));
157      memset(pcrtc, 0, sizeof(pcrtc));
158      memset(pmc, 0, sizeof(pmc));
159      memset(ramin, 0, sizeof(ramin));
160      computedilated();
161      fb.allocate(640, 480);
162      objectdata = &(object_data_alloc());
163      objectdata->data = this;
164      combiner.used = 0;
165      combiner.lock = osd_lock_alloc();
166      enabled_vertex_attributes = 0;
167      indexesleft_count = 0;
168      vertex_pipeline = 4;
169      alpha_test_enabled = false;
170      alpha_reference = 0;
171      alpha_func = nv2a_renderer::ALWAYS;
172      blending_enabled = false;
173      blend_equation = nv2a_renderer::FUNC_ADD;
174      blend_color = 0;
175      blend_function_destination = nv2a_renderer::ZERO;
176      blend_function_source = nv2a_renderer::ONE;
177      logical_operation_enabled = false;
178      logical_operation = nv2a_renderer::COPY;
179      debug_grab_texttype = -1;
180      debug_grab_textfile = NULL;
181      memset(vertex_attribute_words, 0, sizeof(vertex_attribute_words));
182      memset(vertex_attribute_offset, 0, sizeof(vertex_attribute_offset));
183   }
184   DECLARE_READ32_MEMBER(geforce_r);
185   DECLARE_WRITE32_MEMBER(geforce_w);
186   bool vblank_callback(screen_device &screen, bool state);
187   UINT32 screen_update_callback(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
188
189   void render_texture_simple(INT32 scanline, const extent_t &extent, const nvidia_object_data &extradata, int threadid);
190   void render_color(INT32 scanline, const extent_t &extent, const nvidia_object_data &extradata, int threadid);
191   void render_register_combiners(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid);
192
193   int geforce_commandkind(UINT32 word);
194   UINT32 geforce_object_offset(UINT32 handle);
195   void geforce_read_dma_object(UINT32 handle, UINT32 &offset, UINT32 &size);
196   void geforce_exec_method(address_space &space, UINT32 channel, UINT32 subchannel, UINT32 method, UINT32 address, int &countlen);
197   UINT32 texture_get_texel(int number, int x, int y);
198   void write_pixel(int x, int y, UINT32 color);
199   void combiner_initialize_registers(UINT32 argb8[6]);
200   void combiner_initialize_stage(int stage_number);
201   void combiner_initialize_final();
202   void combiner_map_input(int stage_number); // map combiner registers to variables A..D
203   void combiner_map_output(int stage_number); // map combiner calculation results to combiner registers
204   void combiner_map_final_input(); // map final combiner registers to variables A..F
205   void combiner_final_output(); // generate final combiner output
206   float combiner_map_input_select(int code, int index); // get component index in register code
207   float *combiner_map_input_select3(int code); // get pointer to register code
208   float *combiner_map_output_select3(int code); // get pointer to register code for output
209   float combiner_map_input_function(int code, float value); // apply input mapping function code to value
210   void combiner_map_input_function3(int code, float *data); // apply input mapping function code to data
211   void combiner_function_AB(float result[4]);
212   void combiner_function_AdotB(float result[4]);
213   void combiner_function_CD(float result[4]);
214   void combiner_function_CdotD(float result[4]);
215   void combiner_function_ABmuxCD(float result[4]);
216   void combiner_function_ABsumCD(float result[4]);
217   void combiner_compute_rgb_outputs(int index);
218   void combiner_compute_a_outputs(int index);
219   void combiner_argb8_float(UINT32 color, float reg[4]);
220   UINT32 combiner_float_argb8(float reg[4]);
221   UINT32 dilate0(UINT32 value, int bits);
222   UINT32 dilate1(UINT32 value, int bits);
223   void computedilated(void);
224   void putpixtex(int xp, int yp, int up, int vp);
225   int toggle_register_combiners_usage();
226   void debug_grab_texture(int type, const char *filename);
227   void debug_grab_vertex_program_slot(int slot, UINT32 *instruction);
228   void savestate_items();
229
230   void read_vertex(address_space & space, offs_t address, vertex_nv &vertex, int attrib);
231   int read_vertices_0x1810(address_space & space, vertex_nv *destination, int offset, int limit);
232   int read_vertices_0x1800(address_space & space, vertex_nv *destination, UINT32 address, int limit);
233   int read_vertices_0x1818(address_space & space, vertex_nv *destination, UINT32 address, int limit);
234   void convert_vertices_poly(vertex_nv *source, vertex_t *destination, int count);
235
236   struct {
237      UINT32 regs[0x80 / 4];
238      struct {
239         UINT32 objhandle;
240         UINT32 objclass;
241         UINT32 method[0x2000 / 4];
242      } object;
243   } channel[32][8];
244   UINT32 pfifo[0x2000 / 4];
245   UINT32 pcrtc[0x1000 / 4];
246   UINT32 pmc[0x1000 / 4];
247   UINT32 ramin[0x100000 / 4];
248   UINT32 dma_offset[2];
249   UINT32 dma_size[2];
250   UINT32 vertexbuffer_address[16];
251   int vertexbuffer_stride[16];
252   int vertexbuffer_kind[16];
253   int vertexbuffer_size[16];
254   struct {
255      int enabled;
256      int sizeu;
257      int sizev;
258      int sizew;
259      int dilate;
260      int format;
261      int rectangle_pitch;
262      void *buffer;
263   } texture[4];
264   int primitives_count;
265   int indexesleft_count;
266   int indexesleft_first;
267   UINT32 indexesleft[8];
268   struct {
269      float variable_A[4]; // 0=R 1=G 2=B 3=A
270      float variable_B[4];
271      float variable_C[4];
272      float variable_D[4];
273      float variable_E[4];
274      float variable_F[4];
275      float variable_G;
276      float variable_EF[4];
277      float variable_sumclamp[4];
278      float function_RGBop1[4]; // 0=R 1=G 2=B
279      float function_RGBop2[4];
280      float function_RGBop3[4];
281      float function_Aop1;
282      float function_Aop2;
283      float function_Aop3;
284      float register_primarycolor[4]; // rw
285      float register_secondarycolor[4];
286      float register_texture0color[4];
287      float register_texture1color[4];
288      float register_texture2color[4];
289      float register_texture3color[4];
290      float register_color0[4];
291      float register_color1[4];
292      float register_spare0[4];
293      float register_spare1[4];
294      float register_fogcolor[4]; // ro
295      float register_zero[4];
296      float output[4];
297      struct {
298         float register_constantcolor0[4];
299         float register_constantcolor1[4];
300         int mapin_aA_input;
301         int mapin_aA_component;
302         int mapin_aA_mapping;
303         int mapin_aB_input;
304         int mapin_aB_component;
305         int mapin_aB_mapping;
306         int mapin_aC_input;
307         int mapin_aC_component;
308         int mapin_aC_mapping;
309         int mapin_aD_input;
310         int mapin_aD_component;
311         int mapin_aD_mapping;
312         int mapin_rgbA_input;
313         int mapin_rgbA_component;
314         int mapin_rgbA_mapping;
315         int mapin_rgbB_input;
316         int mapin_rgbB_component;
317         int mapin_rgbB_mapping;
318         int mapin_rgbC_input;
319         int mapin_rgbC_component;
320         int mapin_rgbC_mapping;
321         int mapin_rgbD_input;
322         int mapin_rgbD_component;
323         int mapin_rgbD_mapping;
324         int mapout_aCD_output;
325         int mapout_aAB_output;
326         int mapout_aSUM_output;
327         int mapout_aCD_dotproduct;
328         int mapout_aAB_dotproduct;
329         int mapout_a_muxsum;
330         int mapout_a_bias;
331         int mapout_a_scale;
332         int mapout_rgbCD_output;
333         int mapout_rgbAB_output;
334         int mapout_rgbSUM_output;
335         int mapout_rgbCD_dotproduct;
336         int mapout_rgbAB_dotproduct;
337         int mapout_rgb_muxsum;
338         int mapout_rgb_bias;
339         int mapout_rgb_scale;
340      } stage[8];
341      struct {
342         float register_constantcolor0[4];
343         float register_constantcolor1[4];
344         int color_sum_clamp;
345         int mapin_rgbA_input;
346         int mapin_rgbA_component;
347         int mapin_rgbA_mapping;
348         int mapin_rgbB_input;
349         int mapin_rgbB_component;
350         int mapin_rgbB_mapping;
351         int mapin_rgbC_input;
352         int mapin_rgbC_component;
353         int mapin_rgbC_mapping;
354         int mapin_rgbD_input;
355         int mapin_rgbD_component;
356         int mapin_rgbD_mapping;
357         int mapin_rgbE_input;
358         int mapin_rgbE_component;
359         int mapin_rgbE_mapping;
360         int mapin_rgbF_input;
361         int mapin_rgbF_component;
362         int mapin_rgbF_mapping;
363         int mapin_aG_input;
364         int mapin_aG_component;
365         int mapin_aG_mapping;
366      } final;
367      int stages;
368      int used;
369      osd_lock *lock;
370   } combiner;
371   bool alpha_test_enabled;
372   int alpha_func;
373   int alpha_reference;
374   bool blending_enabled;
375   int blend_equation;
376   int blend_function_source;
377   int blend_function_destination;
378   UINT32 blend_color;
379   bool logical_operation_enabled;
380   int logical_operation;
381   struct {
382      float modelview[16];
383      float modelview_inverse[16];
384      float projection[16];
385      float translate[4];
386      float scale[4];
387   } matrix;
388   struct {
389      vertex_program_simulator exec;
390      int instructions;
391      int upload_instruction_index;
392      int upload_instruction_component;
393      int start_instruction;
394      int upload_parameter_index;
395      int upload_parameter_component;
396   } vertexprogram;
397   int vertex_pipeline;
398   int enabled_vertex_attributes;
399   int vertex_attribute_words[16];
400   int vertex_attribute_offset[16];
401   bitmap_rgb32 fb;
402   UINT32 dilated0[16][2048];
403   UINT32 dilated1[16][2048];
404   int dilatechose[256];
405   nvidia_object_data *objectdata;
406   int debug_grab_texttype;
407   char *debug_grab_textfile;
408
409   enum NV2A_BEGIN_END {
410      STOP = 0,
411      POINTS = 1,
412      LINES = 2,
413      LINE_LOOP = 3,
414      LINE_STRIP = 4,
415      TRIANGLES = 5,
416      TRIANGLE_STRIP = 6,
417      TRIANGLE_FAN = 7,
418      QUADS = 8,
419      QUAD_STRIP = 9,
420      POLYGON = 10
421   };
422   enum NV2A_VERTEX_ATTR {
423      POS = 0,
424      WEIGHT = 1,
425      NORMAL = 2,
426      COLOR0 = 3, // diffuse
427      COLOR1 = 4, // specular
428      FOG = 5,
429      BACKCOLOR0 = 7, // diffuse
430      BACKCOLOR1 = 8, // specular
431      TEX0 = 9,
432      TEX1 = 10,
433      TEX2 = 11,
434      TEX3 = 12
435   };
436   enum NV2A_VTXBUF_TYPE {
437      NV2A_VTXBUF_TYPE_UNKNOWN_0 = 0, // used for vertex color ?
438      NV2A_VTXBUF_TYPE_FLOAT = 2,
439      NV2A_VTXBUF_TYPE_UBYTE = 4,
440      NV2A_VTXBUF_TYPE_USHORT = 5,
441      NV2A_VTXBUF_TYPE_UNKNOWN_6 = 6 // used for vertex color
442   };
443   enum NV2A_TEX_FORMAT {
444      L8 = 0x0,
445      I8 = 0x1,
446      A1R5G5B5 = 0x2,
447      A4R4G4B4 = 0x4,
448      R5G6B5 = 0x5,
449      A8R8G8B8 = 0x6,
450      X8R8G8B8 = 0x7,
451      INDEX8 = 0xb,
452      DXT1 = 0xc,
453      DXT3 = 0xe,
454      DXT5 = 0xf,
455      A1R5G5B5_RECT = 0x10,
456      R5G6B5_RECT = 0x11,
457      A8R8G8B8_RECT = 0x12,
458      L8_RECT = 0x13,
459      DSDT8_RECT = 0x17,
460      A8L8 = 0x1a,
461      I8_RECT = 0x1b,
462      A4R4G4B4_RECT = 0x1d,
463      R8G8B8_RECT = 0x1e,
464      A8L8_RECT = 0x20,
465      Z24 = 0x2a,
466      Z24_RECT = 0x2b,
467      Z16 = 0x2c,
468      Z16_RECT = 0x2d,
469      DSDT8 = 0x28,
470      HILO16 = 0x33,
471      HILO16_RECT = 0x36,
472      HILO8 = 0x44,
473      SIGNED_HILO8 = 0x45,
474      HILO8_RECT = 0x46,
475      SIGNED_HILO8_RECT = 0x47
476   };
477   enum NV2A_LOGIC_OP {
478      CLEAR = 0x1500,
479      AND = 0x1501,
480      AND_REVERSE = 0x1502,
481      COPY = 0x1503,
482      AND_INVERTED = 0x1504,
483      NOOP = 0x1505,
484      XOR = 0x1506,
485      OR = 0x1507,
486      NOR = 0x1508,
487      EQUIV = 0x1509,
488      INVERT = 0x150a,
489      OR_REVERSE = 0x150b,
490      COPY_INVERTED = 0x150c,
491      OR_INVERTED = 0x150d,
492      NAND = 0x150e,
493      SET = 0x150f
494   };
495   enum NV2A_BLEND_EQUATION {
496      FUNC_ADD = 0x8006,
497      MIN = 0x8007,
498      MAX = 0x8008,
499      FUNC_SUBTRACT = 0x800a,
500      FUNC_REVERSE_SUBTRACT = 0x80b
501   };
502   enum NV2A_BLEND_FACTOR {
503      ZERO = 0x0000,
504      ONE = 0x0001,
505      SRC_COLOR = 0x0300,
506      ONE_MINUS_SRC_COLOR = 0x0301,
507      SRC_ALPHA = 0x0302,
508      ONE_MINUS_SRC_ALPHA = 0x0303,
509      DST_ALPHA = 0x0304,
510      ONE_MINUS_DST_ALPHA = 0x0305,
511      DST_COLOR = 0x0306,
512      ONE_MINUS_DST_COLOR = 0x0307,
513      SRC_ALPHA_SATURATE = 0x0308,
514      CONSTANT_COLOR = 0x8001,
515      ONE_MINUS_CONSTANT_COLOR = 0x8002,
516      CONSTANT_ALPHA = 0x8003,
517      ONE_MINUS_CONSTANT_ALPHA = 0x8004
518   };
519   enum NV2A_COMPARISON_OP {
520      NEVER = 0x0200,
521      LESS = 0x0201,
522      EQUAL = 0x0202,
523      LEQUAL = 0x0203,
524      GREATER = 0x0204,
525      NOTEQUAL = 0x0205,
526      GEQUAL = 0x0206,
527      ALWAYS = 0x0207
528   };
529   enum NV2A_STENCIL_OP {
530      ZEROOP = 0x0000,
531      INVERTOP = 0x150a,
532      KEEP = 0x1e00,
533      REPLACE = 0x1e01,
534      INCR = 0x1e02,
535      DECR = 0x1e03,
536      INCR_WRAP = 0x8507,
537      DECR_WRAP = 0x8508
538   };
539};
trunk/src/mame/includes/galpani2.h
r242231r242232
1414      m_bg15(*this, "bg15"),
1515      m_ram(*this, "ram"),
1616      m_ram2(*this, "ram2"),
17      m_rombank(*this, "rombank"),
1817      m_maincpu(*this,"maincpu"),
1918      m_subcpu(*this,"sub"),
2019      m_kaneko_spr(*this, "kan_spr"),
2120      m_spriteram(*this, "spriteram"),
2221      m_oki2(*this, "oki2"),
2322      m_eeprom(*this, "eeprom"),
24      m_palette(*this, "palette")
25      { }
23      m_palette(*this, "palette"),
24      m_bg15palette(*this, "bgpalette"),
25      m_bg8palette(*this, "bg8palette")
26   { }
2627
2728   required_shared_ptr_array<UINT16, 2> m_bg8;
2829   optional_shared_ptr_array<UINT16, 2> m_palette_val;
r242231r242232
3435   required_shared_ptr<UINT16> m_ram2;
3536   UINT16 m_old_mcu_nmi1;
3637   UINT16 m_old_mcu_nmi2;
37   required_shared_ptr<UINT16> m_rombank;
38   bitmap_ind16 *m_bg8_bitmap[2];
39   bitmap_ind16 *m_bg15_bitmap;
4038
4139   required_device<cpu_device> m_maincpu;
4240   required_device<cpu_device> m_subcpu;
r242231r242232
4745   DECLARE_WRITE8_MEMBER(galpani2_mcu_nmi1_w);
4846   DECLARE_WRITE8_MEMBER(galpani2_mcu_nmi2_w);
4947   DECLARE_WRITE8_MEMBER(galpani2_coin_lockout_w);
50   DECLARE_READ16_MEMBER(galpani2_bankedrom_r);
5148   DECLARE_READ16_MEMBER(galpani2_eeprom_r);
5249   DECLARE_WRITE16_MEMBER(galpani2_eeprom_w);
5350   DECLARE_WRITE8_MEMBER(galpani2_oki1_bank_w);
5451   DECLARE_WRITE8_MEMBER(galpani2_oki2_bank_w);
52   DECLARE_WRITE16_MEMBER(subdatabank_select_w);
53   virtual void machine_start();
5554   virtual void machine_reset();
5655   virtual void video_start();
5756   DECLARE_PALETTE_INIT(galpani2);
58   UINT32 screen_update_galpani2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
57   UINT32 screen_update_galpani2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
58   void copybg8(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int layer);
59   void copybg15(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
60
5961   TIMER_DEVICE_CALLBACK_MEMBER(galpani2_interrupt1);
6062   TIMER_DEVICE_CALLBACK_MEMBER(galpani2_interrupt2);
6163   void galpani2_mcu_nmi1();
6264   void galpani2_mcu_nmi2();
6365   /*----------- defined in video/galpani2.c -----------*/
64   inline void galpani2_bg8_w(offs_t offset, UINT16 data, UINT16 mem_mask, int _n_);
65   inline void galpani2_palette_w(offs_t offset, UINT16 data, UINT16 mem_mask, int _n_);
6666
67   DECLARE_WRITE16_MEMBER( galpani2_palette_0_w );
68   DECLARE_WRITE16_MEMBER( galpani2_palette_1_w );
69
70   DECLARE_WRITE16_MEMBER( galpani2_bg8_0_w );
71   DECLARE_WRITE16_MEMBER( galpani2_bg8_1_w );
72
73   DECLARE_WRITE16_MEMBER( galpani2_bg15_w );
7467   required_device<okim6295_device> m_oki2;
7568   required_device<eeprom_serial_93cxx_device> m_eeprom;
7669   required_device<palette_device> m_palette;
70   required_device<palette_device> m_bg15palette;
71   required_device<palette_device> m_bg8palette;
72
7773};
trunk/src/mame/includes/mjkjidai.h
r242231r242232
11#include "machine/nvram.h"
2#include "sound/okiadpcm.h"
2#include "sound/msm5205.h"
33
4class mjkjidai_adpcm_device;
5
64class mjkjidai_state : public driver_device
75{
86public:
97   mjkjidai_state(const machine_config &mconfig, device_type type, const char *tag)
108      : driver_device(mconfig, type, tag),
11      m_spriteram1(*this, "spriteram1"),
12      m_spriteram2(*this, "spriteram2"),
13      m_spriteram3(*this, "spriteram3"),
14      m_videoram(*this, "videoram"),
159      m_maincpu(*this, "maincpu"),
16      m_mjk_adpcm(*this, "adpcm"),
10      m_msm(*this, "msm"),
1711      m_nvram(*this, "nvram"),
1812      m_gfxdecode(*this, "gfxdecode"),
19      m_palette(*this, "palette") { }
13      m_palette(*this, "palette"),
14      m_adpcmrom(*this, "adpcm"),
15      m_videoram(*this, "videoram"),
16      m_row(*this, "ROW") { }
2017
21   required_shared_ptr<UINT8> m_spriteram1;
22   required_shared_ptr<UINT8> m_spriteram2;
23   required_shared_ptr<UINT8> m_spriteram3;
24   required_shared_ptr<UINT8> m_videoram;
25
2618   required_device<cpu_device> m_maincpu;
27   required_device<mjkjidai_adpcm_device> m_mjk_adpcm;
19   required_device<msm5205_device> m_msm;
2820   required_device<nvram_device> m_nvram;
2921   required_device<gfxdecode_device> m_gfxdecode;
3022   required_device<palette_device> m_palette;
3123
24   required_region_ptr<UINT8> m_adpcmrom;
25   required_shared_ptr<UINT8> m_videoram;
26
27   required_ioport_array<12> m_row;
28
29   int m_adpcm_pos;
30   int m_adpcm_end;
3231   int m_keyb;
33   int m_nvram_init_count;
34   int m_display_enable;
32   bool m_nmi_enable;
33   bool m_display_enable;
3534   tilemap_t *m_bg_tilemap;
3635
37   UINT8 m_nmi_mask;
38   DECLARE_READ8_MEMBER(keyboard_r);
36   DECLARE_CUSTOM_INPUT_MEMBER(keyboard_r);
3937   DECLARE_WRITE8_MEMBER(keyboard_select_w);
4038   DECLARE_WRITE8_MEMBER(mjkjidai_videoram_w);
4139   DECLARE_WRITE8_MEMBER(mjkjidai_ctrl_w);
4240   DECLARE_WRITE8_MEMBER(adpcm_w);
41   DECLARE_WRITE_LINE_MEMBER(adpcm_int);
4342   TILE_GET_INFO_MEMBER(get_tile_info);
43   virtual void machine_start();
44   virtual void machine_reset();
4445   virtual void video_start();
4546   UINT32 screen_update_mjkjidai(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
4647   INTERRUPT_GEN_MEMBER(vblank_irq);
4748   void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect);
4849};
49
50class mjkjidai_adpcm_device : public device_t,
51                           public device_sound_interface
52{
53public:
54   mjkjidai_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
55   ~mjkjidai_adpcm_device() {}
56
57   void mjkjidai_adpcm_play (int offset, int length);
58
59protected:
60   // device-level overrides
61   virtual void device_config_complete();
62   virtual void device_start();
63
64   // sound stream update overrides
65   virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
66private:
67   // internal state
68   oki_adpcm_state m_adpcm;
69   sound_stream *m_stream;
70   UINT32 m_current;
71   UINT32 m_end;
72   UINT8 m_nibble;
73   UINT8 m_playing;
74   UINT8 *m_base;
75};
76
77extern const device_type MJKJIDAI;
trunk/src/mame/includes/relief.h
r242231r242232
1414public:
1515   relief_state(const machine_config &mconfig, device_type type, const char *tag)
1616      : atarigen_state(mconfig, type, tag),
17         m_vad(*this, "vad") { }
17         m_vad(*this, "vad"),
18         m_okibank(*this, "okibank")
19         { }
1820
1921   required_device<atari_vad_device> m_vad;
22   required_memory_bank m_okibank;
2023
2124   UINT8           m_ym2413_volume;
2225   UINT8           m_overall_volume;
23   UINT32          m_adpcm_bank_base;
26   UINT8          m_adpcm_bank;
2427   virtual void update_interrupts();
2528   DECLARE_READ16_MEMBER(special_port2_r);
2629   DECLARE_WRITE16_MEMBER(audio_control_w);
trunk/src/mame/includes/renegade.h
r242231r242232
1#include "sound/okiadpcm.h"
1#include "sound/msm5205.h"
22
33#define MCU_BUFFER_MAX 6
44
5class renegade_adpcm_device;
6
75class renegade_state : public driver_device
86{
97public:
108   renegade_state(const machine_config &mconfig, device_type type, const char *tag)
119      : driver_device(mconfig, type, tag),
12      m_videoram(*this, "videoram"),
13      m_videoram2(*this, "videoram2"),
14      m_spriteram(*this, "spriteram"),
1510      m_maincpu(*this,"maincpu"),
1611      m_audiocpu(*this, "audiocpu"),
1712      m_mcu(*this, "mcu"),
13      m_msm(*this, "msm"),
1814      m_gfxdecode(*this, "gfxdecode"),
19      m_palette(*this, "palette") { }
15      m_rombank(*this, "rombank"),
16      m_adpcmrom(*this, "adpcm"),
17      m_fg_videoram(*this, "fg_videoram"),
18      m_bg_videoram(*this, "bg_videoram"),
19      m_spriteram(*this, "spriteram") { }
2020
21   UINT8 m_bank;
21   required_device<cpu_device> m_maincpu;
22   required_device<cpu_device> m_audiocpu;
23   optional_device<cpu_device> m_mcu;
24   required_device<msm5205_device> m_msm;
25   required_device<gfxdecode_device> m_gfxdecode;
26   required_memory_bank m_rombank;
27   required_region_ptr<UINT8> m_adpcmrom;
28   required_shared_ptr<UINT8> m_fg_videoram;
29   required_shared_ptr<UINT8> m_bg_videoram;
30   required_shared_ptr<UINT8> m_spriteram;
31
32   UINT32 m_adpcm_pos;
33   UINT32 m_adpcm_end;
34   bool m_adpcm_playing;
35
2236   int m_mcu_sim;
2337   int m_from_main;
2438   int m_from_mcu;
r242231r242232
4054   int m_mcu_checksum;
4155   const UINT8 *m_mcu_encrypt_table;
4256   int m_mcu_encrypt_table_len;
43   int m_coin;
44   required_shared_ptr<UINT8> m_videoram;
45   required_shared_ptr<UINT8> m_videoram2;
4657   INT32 m_scrollx;
4758   tilemap_t *m_bg_tilemap;
4859   tilemap_t *m_fg_tilemap;
49   required_shared_ptr<UINT8> m_spriteram;
5060
51   required_device<cpu_device> m_maincpu;
5261   DECLARE_WRITE8_MEMBER(sound_w);
5362   DECLARE_READ8_MEMBER(mcu_reset_r);
5463   DECLARE_WRITE8_MEMBER(mcu_w);
r242231r242232
6574   DECLARE_READ8_MEMBER(renegade_68705_port_c_r);
6675   DECLARE_WRITE8_MEMBER(renegade_68705_port_c_w);
6776   DECLARE_WRITE8_MEMBER(renegade_68705_ddr_c_w);
68   DECLARE_WRITE8_MEMBER(renegade_videoram_w);
69   DECLARE_WRITE8_MEMBER(renegade_videoram2_w);
77   DECLARE_WRITE8_MEMBER(fg_videoram_w);
78   DECLARE_WRITE8_MEMBER(bg_videoram_w);
7079   DECLARE_WRITE8_MEMBER(renegade_flipscreen_w);
71   DECLARE_WRITE8_MEMBER(renegade_scroll0_w);
72   DECLARE_WRITE8_MEMBER(renegade_scroll1_w);
80   DECLARE_WRITE8_MEMBER(scroll_lsb_w);
81   DECLARE_WRITE8_MEMBER(scroll_msb_w);
7382   DECLARE_CUSTOM_INPUT_MEMBER(mcu_status_r);
74   DECLARE_WRITE8_MEMBER(adpcm_play_w);
83   DECLARE_WRITE8_MEMBER(adpcm_start_w);
84   DECLARE_WRITE8_MEMBER(adpcm_addr_w);
85   DECLARE_WRITE8_MEMBER(adpcm_stop_w);
86   DECLARE_WRITE_LINE_MEMBER(adpcm_int);
87   
7588   DECLARE_DRIVER_INIT(kuniokun);
7689   DECLARE_DRIVER_INIT(kuniokunb);
7790   DECLARE_DRIVER_INIT(renegade);
r242231r242232
8295   virtual void video_start();
8396   UINT32 screen_update_renegade(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
8497   TIMER_DEVICE_CALLBACK_MEMBER(renegade_interrupt);
85   void setbank();
8698   void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
87   required_device<cpu_device> m_audiocpu;
88   optional_device<cpu_device> m_mcu;
89   required_device<gfxdecode_device> m_gfxdecode;
90   required_device<palette_device> m_palette;
9199};
92
93class renegade_adpcm_device : public device_t,
94                           public device_sound_interface
95{
96public:
97   renegade_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
98   ~renegade_adpcm_device() {}
99
100   DECLARE_WRITE8_MEMBER(play_w);
101
102protected:
103   // device-level overrides
104   virtual void device_config_complete();
105   virtual void device_start();
106
107   // sound stream update overrides
108   virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
109
110private:
111   // internal state
112   oki_adpcm_state m_adpcm;
113   sound_stream *m_stream;
114   UINT32 m_current;
115   UINT32 m_end;
116   UINT8 m_nibble;
117   UINT8 m_playing;
118   UINT8 *m_base;
119};
120
121extern const device_type RENEGADE_ADPCM;
trunk/src/mame/includes/tigeroad.h
r242231r242232
55#include "sound/2203intf.h"
66#include "sound/msm5205.h"
77#include "cpu/m6805/m6805.h"
8#include "video/tigeroad_spr.h"
89
910class tigeroad_state : public driver_device
1011{
r242231r242232
2021      m_gfxdecode(*this, "gfxdecode"),
2122      m_palette(*this, "palette"),
2223      m_mcu(*this, "mcu"),
24      m_spritegen(*this, "spritegen"),
2325      m_has_coinlock(1)
2426   { }
2527
r242231r242232
4345   TILEMAP_MAPPER_MEMBER(tigeroad_tilemap_scan);
4446   virtual void video_start();
4547   UINT32 screen_update_tigeroad(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
46   void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority );
4748   void f1dream_protection_w(address_space &space);
4849   DECLARE_WRITE_LINE_MEMBER(irqhandler);
4950   required_device<cpu_device> m_maincpu;
r242231r242232
5253   required_device<gfxdecode_device> m_gfxdecode;
5354   required_device<palette_device> m_palette;
5455   optional_device<cpu_device> m_mcu;
56   required_device<tigeroad_spr_device> m_spritegen;
5557
5658   UINT16     m_control[2];
5759
trunk/src/mame/includes/toaplan1.h
r242231r242232
2727
2828   optional_shared_ptr<UINT8> m_sharedram;
2929
30   int m_coin_count; /* coin count increments on startup ? , so dont count it */
30   int m_coin_count; /* coin count increments on startup ? , so don't count it */
3131   int m_intenable;
3232
3333   /* Demon world */
trunk/src/mame/includes/yunsun16.h
r242231r242232
99public:
1010   yunsun16_state(const machine_config &mconfig, device_type type, const char *tag)
1111      : driver_device(mconfig, type, tag),
12      m_maincpu(*this, "maincpu"),
13      m_audiocpu(*this, "audiocpu"),
14      m_gfxdecode(*this, "gfxdecode"),
15      m_screen(*this, "screen"),
16      m_palette(*this, "palette"),
1217      m_vram_0(*this, "vram_0"),
1318      m_vram_1(*this, "vram_1"),
1419      m_scrollram_0(*this, "scrollram_0"),
1520      m_scrollram_1(*this, "scrollram_1"),
1621      m_priorityram(*this, "priorityram"),
17      m_spriteram(*this, "spriteram"),
18      m_audiocpu(*this, "audiocpu"),
19      m_maincpu(*this, "maincpu"),
20      m_gfxdecode(*this, "gfxdecode"),
21      m_screen(*this, "screen"),
22      m_palette(*this, "palette") { }
22      m_spriteram(*this, "spriteram") { }
2323
24   /* devices */
25   required_device<cpu_device> m_maincpu;
26   optional_device<cpu_device> m_audiocpu;
27   required_device<gfxdecode_device> m_gfxdecode;
28   required_device<screen_device> m_screen;
29   required_device<palette_device> m_palette;
30   
2431   /* memory pointers */
2532   required_shared_ptr<UINT16> m_vram_0;
2633   required_shared_ptr<UINT16> m_vram_1;
r242231r242232
3643   int         m_sprites_scrolldx;
3744   int         m_sprites_scrolldy;
3845
39   /* devices */
40   optional_device<cpu_device> m_audiocpu;
41   DECLARE_WRITE16_MEMBER(yunsun16_sound_bank_w);
46   DECLARE_WRITE8_MEMBER(sound_bank_w);
4247   DECLARE_WRITE16_MEMBER(magicbub_sound_command_w);
43   DECLARE_WRITE16_MEMBER(yunsun16_vram_0_w);
44   DECLARE_WRITE16_MEMBER(yunsun16_vram_1_w);
48   DECLARE_WRITE16_MEMBER(vram_0_w);
49   DECLARE_WRITE16_MEMBER(vram_1_w);
4550   DECLARE_DRIVER_INIT(magicbub);
46   TILEMAP_MAPPER_MEMBER(yunsun16_tilemap_scan_pages);
51   DECLARE_MACHINE_START(shocking);
52   DECLARE_MACHINE_RESET(shocking);
53   TILEMAP_MAPPER_MEMBER(tilemap_scan_pages);
4754   TILE_GET_INFO_MEMBER(get_tile_info_0);
4855   TILE_GET_INFO_MEMBER(get_tile_info_1);
4956   virtual void machine_start();
r242231r242232
5259   UINT32 screen_update_yunsun16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
5360   void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect );
5461   DECLARE_WRITE_LINE_MEMBER(soundirq);
55   required_device<cpu_device> m_maincpu;
56   required_device<gfxdecode_device> m_gfxdecode;
57   required_device<screen_device> m_screen;
58   required_device<palette_device> m_palette;
5962};
trunk/src/mame/layout/gts1.lay
r0r242232
1<!-- gts1 copied from gts3.lay -->
2
3<!-- 2014-12-06: Initial version. -->
4
5<mamelayout version="2">
6
7   <element name="digit" defstate="0">
8      <led8seg>
9         <color red="0.0" green="0.75" blue="1.0" />
10      </led8seg>
11   </element>
12   <element name="background">
13      <rect>
14         <bounds left="0" top="0" right="1" bottom="1" />
15         <color red="0.0" green="0.0" blue="0.0" />
16      </rect>
17   </element>
18   <element name="P3"><text string="Player 1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
19   <element name="P4"><text string="Player 2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
20   <element name="P5"><text string="Player 3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
21   <element name="P6"><text string="Player 4"><color red="1.0" green="1.0" blue="1.0" /></text></element>
22
23   <view name="Default Layout">
24
25      <!-- Background -->
26      <backdrop element="background">
27         <bounds left="0" top="25" right="325" bottom="179" />
28      </backdrop>
29
30      <!-- Top Row -->
31      <bezel name="digit0_0" element="digit">
32         <bounds left="10" top="45" right="30" bottom="84" />
33      </bezel>
34      <bezel name="digit0_1" element="digit">
35         <bounds left="34" top="45" right="54" bottom="84" />
36      </bezel>
37      <bezel name="digit0_2" element="digit">
38         <bounds left="58" top="45" right="78" bottom="84" />
39      </bezel>
40      <bezel name="digit0_3" element="digit">
41         <bounds left="87" top="45" right="107" bottom="84" />
42      </bezel>
43      <bezel name="digit0_4" element="digit">
44         <bounds left="111" top="45" right="131" bottom="84" />
45      </bezel>
46      <bezel name="digit0_5" element="digit">
47         <bounds left="135" top="45" right="155" bottom="84" />
48      </bezel>
49      <bezel name="digit1_0" element="digit">
50         <bounds left="170" top="45" right="190" bottom="84" />
51      </bezel>
52      <bezel name="digit1_1" element="digit">
53         <bounds left="194" top="45" right="214" bottom="84" />
54      </bezel>
55      <bezel name="digit1_2" element="digit">
56         <bounds left="218" top="45" right="238" bottom="84" />
57      </bezel>
58      <bezel name="digit1_3" element="digit">
59         <bounds left="247" top="45" right="267" bottom="84" />
60      </bezel>
61      <bezel name="digit1_4" element="digit">
62         <bounds left="271" top="45" right="291" bottom="84" />
63      </bezel>
64      <bezel name="digit1_5" element="digit">
65         <bounds left="295" top="45" right="315" bottom="84" />
66      </bezel>
67
68      <!-- Bottom Row -->
69      <bezel name="digit2_0" element="digit">
70         <bounds left="10" top="100" right="30" bottom="139" />
71      </bezel>
72      <bezel name="digit2_1" element="digit">
73         <bounds left="34" top="100" right="54" bottom="139" />
74      </bezel>
75      <bezel name="digit2_2" element="digit">
76         <bounds left="58" top="100" right="78" bottom="139" />
77      </bezel>
78      <bezel name="digit2_3" element="digit">
79         <bounds left="87" top="100" right="107" bottom="139" />
80      </bezel>
81      <bezel name="digit2_4" element="digit">
82         <bounds left="111" top="100" right="131" bottom="139" />
83      </bezel>
84      <bezel name="digit2_5" element="digit">
85         <bounds left="135" top="100" right="155" bottom="139" />
86      </bezel>
87      <bezel name="digit3_0" element="digit">
88         <bounds left="170" top="100" right="190" bottom="139" />
89      </bezel>
90      <bezel name="digit3_1" element="digit">
91         <bounds left="194" top="100" right="214" bottom="139" />
92      </bezel>
93      <bezel name="digit3_2" element="digit">
94         <bounds left="218" top="100" right="238" bottom="139" />
95      </bezel>
96      <bezel name="digit3_3" element="digit">
97         <bounds left="247" top="100" right="267" bottom="139" />
98      </bezel>
99      <bezel name="digit3_4" element="digit">
100         <bounds left="271" top="100" right="291" bottom="139" />
101      </bezel>
102      <bezel name="digit3_5" element="digit">
103         <bounds left="295" top="100" right="315" bottom="139" />
104      </bezel>
105   </view>
106</mamelayout>
trunk/src/mame/machine/mie.c
r242231r242232
357357
358358void mie_device::maple_reset()
359359{
360   // ignoring reset maple pattern is HUGE HACK
361   // current implementation works only because of in such case procedure of firmware upload by games will be skipped at all
362   // so in better case - inputs doesnt work if game uses very different firmware version than already uploaded by BIOS, in worst case - game hang/reboot
363   // TODO: figure out why game code doesn't wait long enough for internal firmware's RAM test completed in the case of proper reset
360364}
trunk/src/mame/machine/naomicrypt.c
r242231r242232
5454   { "samba",           0x000a8b5d }, // 840-0020    1999
5555   { "sambap",          0x000a8b5d }, // 840-0020    1999
5656   { "virnbao",         0x00068b58 }, // 840-0021    2000
57   { "tduno2",          0x2f6f0f8d }, // 840-0022    2000
5857   { "18wheelr",        0x0007cf54 }, // 840-0023    2000
5958   { "marstv",          0x000b8ef5 }, // 840-0025    1999
6059   { "vonot",           0x00010715 }, // 840-0028    2000
r242231r242232
8988   { "zerogu2",         0x0007c010 }, // 841-0020    2001
9089   { "hmgeo",           0x00038510 }, // HMG016007   2001
9190// M1
91   { "tduno2",          0x2f6f0f8d }, // 840-0022    2000
9292   { "qmegamis",        0x96489bcd }, // 840-0030    2000
9393   { "gram2000",        0x3f5c807f }, // 840-0039    2000
9494   { "vtenis2c",        0x43472d2d }, // 840-0084    2001
r242231r242232
9999   { "kick4csh",        0xc9570882 }, // 840-0140    2004
100100   { "mtkob2",          0x3892fb3a }, // 840-0150    2003
101101   { "mvsc2",           0x7c6e8bc1 }, // 841-0007-02 2000
102// M4
103   { "pokasuka",        0x4792bcde }, // 840-0170    2007
104   { "asndynmt",        0x00008784 }, // 840-0175    2007
105   { "sl2007",          0x88c274c7 }, // 841-0057    2007
106   { "ausfache",        0x092b6007 }, // 841-0058    2008
107   { "illvelo",         0xf3a5982c }, // 841-0059    2008
108   { "mbaa",            0xab0f2aba }, // 841-0061    2008
109102   { NULL, 0 }    // end of table
110103};
111104
trunk/src/mame/machine/naomim4.c
r242231r242232
6060{
6161   naomi_board::device_start();
6262
63#if USE_NAOMICRYPT
64   UINT32 tempkey = get_naomi_key(machine());
65   iv = (tempkey >> 16) &0xffff;
66   key = tempkey & 0xffff;
67#else
6863   const UINT8 *key_data = memregion(key_tag)->base();
69   subkey1 = (key_data[17] << 8) | key_data[16];
70   subkey2 = (key_data[19] << 8) | key_data[18];
71#endif
64   subkey1 = (key_data[0x5e2] << 8) | key_data[0x5e0];
65   subkey2 = (key_data[0x5e6] << 8) | key_data[0x5e4];
66
7267   buffer = auto_alloc_array(machine(), UINT8, BUFFER_SIZE);
7368   enc_init();
7469
trunk/src/mame/machine/pgmprot_igs027a_type3.c
r242231r242232
498498   temp16[(base) /2] = 0xff1e; base += 2;
499499   temp16[(base) /2] = 0xe12f; base += 2;
500500
501   // the non-EO area starts in the middle of a function that seems similar to those  at 000037E4 / 000037D4 in killbldp.. by setting this up we allow the intro to run
502   // it sets '0x10000038' to a value ot 1
501   // the non-EO area starts in the middle of a function that seems similar to those at 000037E4 / 000037D4 in killbldp. by setting this up we allow the intro to run
502   // it sets '0x10000038' to a value of 1
503503   base = 0x184;
504504   temp16[(base) /2] = 0x105c; base += 2;
505505   temp16[(base) /2] = 0xE59F; base += 2;
trunk/src/mame/machine/raiden2cop.c
r242231r242232
14851485*/
14861486void raiden2cop_device::LEGACY_execute_d104(address_space &space, int offset, UINT16 data)
14871487{
1488   UINT8 *ROM = space.machine().root_device().memregion("maincpu")->base();
1489   UINT32 rom_addr = (m_cop_rom_addr_hi << 16 | m_cop_rom_addr_lo) & ~1;
1490   UINT16 rom_data = (ROM[rom_addr + 0]) | (ROM[rom_addr + 1] << 8);
1488   UINT16 *ROM = (UINT16 *)space.machine().root_device().memregion("maincpu")->base();
1489   UINT32 rom_addr = (m_cop_rom_addr_hi << 16 | m_cop_rom_addr_lo);
1490   UINT16 rom_data = ROM[rom_addr / 2];
14911491
14921492   /* writes to some unemulated COP registers, then puts the result in here, adding a parameter taken from ROM */
14931493   //space.write_word(cop_regs[0]+(0x44 + offset * 4), rom_data);
trunk/src/mame/mame.lst
r242231r242232
51025102
51035103// Sega Lindbergh games
51045104lindbios
5105hotd4
5106vf5
5107abclimax
5108letsgoju
5109outr2sdx
5110psmash3
5111vtennis3
51122spicy
5113ghostsev
5114initiad4
5115initiad4c
5116segartv
5117hotdex
5118primevah
5119rambo
5120hummerxt
5121lbvbiosu
51055122
5106
51075123// Deniam games
51085124// they run on Sega System 16 video hardware
51095125logicpro        // (c) 1996 Deniam
r242231r242232
69316947bwidow          // 136017           (c) 1982
69326948starwars        // 136021           (c) 1983
69336949starwars1       // 136021           (c) 1983
6950starwarso       // 136021           (c) 1983
69346951tomcatsw        // (proto)          (c) 1983
69356952mhavoc          // 136025           (c) 1983
69366953mhavoc2         // 136025           (c) 1983
r242231r242232
1033910356rundeep         // (c) 1988 Cream (bootleg?)
1034010357wallc           // (c) 1984 Midcoin
1034110358wallca          // (c) 1984 Midcoin
10359brkblast      // bootleg (Fadesa)
1034210360sidampkr        //
1034310361wink            // (c) 1985 Midcoin
1034410362winka           // (c) 1985 Midcoin
trunk/src/mame/mame.mak
r242231r242232
988988   $(DRIVERS)/alien.o \
989989   $(DRIVERS)/bionicc.o $(VIDEO)/bionicc.o \
990990   $(DRIVERS)/supduck.o \
991   $(VIDEO)/tigeroad_spr.o \
991992   $(DRIVERS)/blktiger.o $(VIDEO)/blktiger.o \
992993   $(DRIVERS)/cbasebal.o $(VIDEO)/cbasebal.o \
993994   $(DRIVERS)/commando.o $(VIDEO)/commando.o \
r242231r242232
16941695   $(DRIVERS)/bingoc.o \
16951696   $(DRIVERS)/blockade.o $(AUDIO)/blockade.o $(VIDEO)/blockade.o \
16961697   $(DRIVERS)/calorie.o \
1697   $(DRIVERS)/chihiro.o \
1698   $(DRIVERS)/chihiro.o $(VIDEO)/chihiro.o  \
16981699   $(DRIVERS)/coolridr.o \
16991700   $(DRIVERS)/deniam.o $(VIDEO)/deniam.o \
17001701   $(DRIVERS)/dotrikun.o \
r242231r242232
26492650         $(LAYOUT)/pmpoker.lh \
26502651         $(LAYOUT)/upndown.lh
26512652
2653$(DRIVERS)/gts1.o:      $(LAYOUT)/gts1.lh
26522654$(DRIVERS)/gts3.o:      $(LAYOUT)/gts3.lh
26532655$(DRIVERS)/gts80.o:     $(LAYOUT)/gts80.lh
26542656$(DRIVERS)/gts80a.o:    $(LAYOUT)/gts80a.lh
trunk/src/mame/video/bionicc.c
r242231r242232
185185
186186***************************************************************************/
187187
188void bionicc_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
189{
190   UINT16 *buffered_spriteram = m_spriteram->buffer();
191   int offs;
192   gfx_element *gfx = m_gfxdecode->gfx(3);
193188
194   for (offs = (m_spriteram->bytes() - 8) / 2; offs >= 0; offs -= 4)
195   {
196      int tile_number = buffered_spriteram[offs] & 0x7ff;
197      if( tile_number != 0x7ff )
198      {
199         int attr = buffered_spriteram[offs + 1];
200         int color = (attr & 0x3c) >> 2;
201         int flipx = attr & 0x02;
202         int flipy = 0;
203         int sx = (INT16)buffered_spriteram[offs + 3];   /* signed */
204         int sy = (INT16)buffered_spriteram[offs + 2];   /* signed */
205189
206         if (sy > 512 - 16)
207            sy -= 512;
208
209         if (flip_screen())
210         {
211            sx = 240 - sx;
212            sy = 240 - sy;
213            flipx = !flipx;
214            flipy = !flipy;
215         }
216
217         gfx->transpen(bitmap,cliprect,
218            tile_number,
219            color,
220            flipx,flipy,
221            sx,sy,15);
222      }
223   }
224}
225
226190UINT32 bionicc_state::screen_update_bionicc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
227191{
228192   bitmap.fill(m_palette->black_pen(), cliprect);
229193   m_fg_tilemap->draw(screen, bitmap, cliprect, 1 | TILEMAP_DRAW_LAYER1, 0);   /* nothing in FRONT */
230194   m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
231195   m_fg_tilemap->draw(screen, bitmap, cliprect, 0 | TILEMAP_DRAW_LAYER1, 0);
232   draw_sprites(bitmap, cliprect);
196   m_spritegen->draw_sprites(bitmap, cliprect, m_gfxdecode, 3, m_spriteram->buffer(), m_spriteram->bytes(), flip_screen(), 0 );
233197   m_fg_tilemap->draw(screen, bitmap, cliprect, 0 | TILEMAP_DRAW_LAYER0, 0);
234198   m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
235199   return 0;
trunk/src/mame/video/bosco.c
r242231r242232
248248            x = (m_star_seed_tab[star_cntr].x + m_stars_scrollx) % 256;
249249            y = (m_star_seed_tab[star_cntr].y + m_stars_scrolly) % 256;
250250
251            /* dont draw the stars that are off the screen */
251            /* don't draw the stars that are off the screen */
252252            if ( x < 224 )
253253            {
254254               if (flip) x += 64;
trunk/src/mame/video/btime.c
r242231r242232
303303
304304      if (flip_screen())
305305      {
306         x = 31 + 16 - x;
307         y = 33 - y;
306         x = 31 - x;
307         y = 31 - y;
308308      }
309309
310310      m_gfxdecode->gfx(0)->transpen(bitmap,cliprect,
r242231r242232
339339
340340      if (flip_screen())
341341      {
342         x = 240 + 128 - x;
343         y = 256 - y + sprite_y_adjust_flip_screen;
342         x = 240 - x;
343         y = 240 - y + sprite_y_adjust_flip_screen;
344344
345345         flipx = !flipx;
346346         flipy = !flipy;
r242231r242232
391391
392392         if (flip_screen())
393393         {
394            x = 240 + 128 - x;
395            y = 256 - y;
394            x = 240 - x;
395            y = 240 - y;
396396         }
397397
398398         m_gfxdecode->gfx(2)->opaque(bitmap,cliprect,
r242231r242232
488488         if (flip_screen())
489489         {
490490            sx = 496 - sx;
491            sy = 256 - sy;
491            sy = 240 - sy;
492492         }
493493
494494         m_gfxdecode->gfx(2)->opaque(*m_background_bitmap,m_background_bitmap->cliprect(),
r242231r242232
534534      if (flip_screen())
535535      {
536536         sx = 31 - sx;
537         sy = 33 - sy;
537         sy = 31 - sy;
538538      }
539539
540540      m_gfxdecode->gfx(2)->opaque(bitmap,cliprect,
trunk/src/mame/video/chihiro.c
r0r242232
1#include "emu.h"
2#include "video/poly.h"
3#include "bitmap.h"
4#include "includes/chihiro.h"
5
6//#define LOG_NV2A
7
8const char *vertex_program_disassembler::srctypes[] = { "??", "Rn", "Vn", "Cn" };
9const char *vertex_program_disassembler::scaops[] = { "NOP", "IMV", "RCP", "RCC", "RSQ", "EXP", "LOG", "LIT", "???", "???", "???", "???", "???", "???", "???", "???", "???" };
10const int vertex_program_disassembler::scapar2[] = { 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
11const char *vertex_program_disassembler::vecops[] = { "NOP", "MOV", "MUL", "ADD", "MAD", "DP3", "DPH", "DP4", "DST", "MIN", "MAX", "SLT", "SGE", "ARL", "???", "???", "???" };
12const int vertex_program_disassembler::vecpar2[] = { 0, 4, 6, 5, 7, 6, 6, 6, 6, 6, 6, 6, 6, 4, 0, 0, 0 };
13const char *vertex_program_disassembler::vecouts[] = { "oPos", "???", "???", "oD0", "oD1", "oFog", "oPts", "oB0", "oB1", "oT0", "oT1", "oT2", "oT3" };
14const char vertex_program_disassembler::compchar[] = { 'x', 'y', 'z', 'w' };
15
16/*
17Each vertex program instruction is a 128 bit word made of the fields:
18d         f
19w   b     i
20o   i     e
21r   t     l
22d   s     d
23+-+-----+-------
24|0|31-0 |not used
25+-+-----+-------
26| |31-29|not used
27| +-----+-------
28| |28-25|scalar operation
29| +-----+-------
30| |24-21|vectorial operation
31| +-----+-------
32| |20-13|index for source constant C[]
33| +-----+-------
34| |12-9 |input vector index
35| +-----+-------
36|1|  8  |parameter A:sign
37| +-----+-------
38| | 7-6 |parameter A:swizzle x
39| +-----+-------
40| | 5-4 |parameter A:swizzle y
41| +-----+-------
42| | 3-2 |parameter A:swizzle z
43| +-----+-------
44| | 1-0 |parameter A:swizzle w
45|-+-----+-------
46| |31-28|parameter A:parameter Rn index
47| +-----+-------
48| |27-26|parameter A:input type 1:Rn 2:Vn 3:C[n]
49| +-----+-------
50| | 25  |parameter B:sign
51| +-----+-------
52| |24-23|parameter B:swizzle x
53| +-----+-------
54| |22-21|parameter B:swizzle y
55| +-----+-------
56| |20-19|parameter B:swizzle z
57| +-----+-------
58|2|18-17|parameter B:swizzle w
59| +-----+-------
60| |16-13|parameter B:parameter Rn index
61| +-----+-------
62| |12-11|parameter B:input type 1:Rn 2:Vn 3:C[n]
63| +-----+-------
64| | 10  |parameter C:sign
65| +-----+-------
66| | 9-8 |parameter C:swizzle x
67| +-----+-------
68| | 7-6 |parameter C:swizzle y
69| +-----+-------
70| | 5-4 |parameter C:swizzle z
71| +-----+-------
72| | 3-2 |parameter C:swizzle w
73| +-----+-------
74| | 1-0 |
75|-+     |parameter C:parameter Rn index
76| |31-30|
77| +-----+-------
78| |29-28|parameter C:input type 1:Rn 2:Vn 3:C[n]
79| +-----+-------
80| |27-24|output Rn mask from vectorial operation
81| +-----+-------
82| |23-20|output Rn index from vectorial operation
83| +-----+-------
84| |19-16|output Rn mask from scalar operation
85| +-----+-------
86|3|15-12|output vector write mask
87| +-----+-------
88| | 11  |1:output is output vector 0:output is constant C[]
89| +-----+-------
90| |10-3 |output vector/constant index
91| +-----+-------
92| |  2  |0:output Rn from vectorial operation 1:output Rn from scalar operation
93| +-----+-------
94| |  1  |1:add a0x to index for source constant C[]
95| +-----+-------
96| |  0  |1:end of program
97+-+-----+-------
98Each vertex program instruction can generate up to three destination values using up to three source values.
99The first possible destination is to Rn from a vectorial operation.
100The second possible destination is to a vertex shader output or C[n] from a vectorial or scalar operation.
101The third possible destination is to Rn from a scalar operation.
102*/
103void vertex_program_disassembler::decodefields(unsigned int *dwords, int offset, fields &decoded)
104{
105   unsigned int srcbits[3];
106   int a;
107
108   srcbits[0] = ((dwords[1 + offset] & 0x1ff) << 6) | (dwords[2 + offset] >> 26);
109   srcbits[1] = (dwords[2 + offset] >> 11) & 0x7fff;
110   srcbits[2] = ((dwords[2 + offset] & 0x7ff) << 4) | (dwords[3 + offset] >> 28);
111   decoded.ScaOperation = (int)(dwords[1 + offset] >> 25) & 0xf;
112   decoded.VecOperation = (int)(dwords[1 + offset] >> 21) & 0xf;
113   decoded.SourceConstantIndex = (int)(dwords[1 + offset] >> 13) & 0xff;
114   decoded.InputIndex = (int)(dwords[1 + offset] >> 9) & 0xf;
115   for (a = 0; a < 3; a++)
116   {
117      decoded.src[a].Sign = (int)(srcbits[a] >> 14) & 1;
118      decoded.src[a].SwizzleX = (int)(srcbits[a] >> 12) & 3;
119      decoded.src[a].SwizzleY = (int)(srcbits[a] >> 10) & 3;
120      decoded.src[a].SwizzleZ = (int)(srcbits[a] >> 8) & 3;
121      decoded.src[a].SwizzleW = (int)(srcbits[a] >> 6) & 3;
122      decoded.src[a].TempIndex = (int)(srcbits[a] >> 2) & 0xf;
123      decoded.src[a].ParameterType = (int)(srcbits[a] >> 0) & 3;
124   }
125
126   decoded.VecTempWriteMask = (int)(dwords[3 + offset] >> 24) & 0xf;
127   decoded.VecTempIndex = (int)(dwords[3 + offset] >> 20) & 0xf;
128   decoded.ScaTempWriteMask = (int)(dwords[3 + offset] >> 16) & 0xf;
129   decoded.OutputWriteMask = (int)(dwords[3 + offset] >> 12) & 0xf;
130   decoded.OutputSelect = (int)(dwords[3 + offset] >> 11) & 0x1;
131   decoded.OutputIndex = (int)(dwords[3 + offset] >> 3) & 0xff;
132   decoded.MultiplexerControl = (int)(dwords[3 + offset] >> 2) & 0x1;
133   decoded.Usea0x = (int)(dwords[3 + offset] >> 1) & 0x1;
134   decoded.EndOfProgram = (int)(dwords[3 + offset] >> 0) & 0x1;
135}
136
137int vertex_program_disassembler::disassemble_mask(int mask, char *s)
138{
139   int l;
140
141   *s = 0;
142   if (mask == 15)
143      return 0;
144   s[0] = '.';
145   l = 1;
146   if ((mask & 8) != 0) {
147      s[l] = 'x';
148      l++;
149   }
150   if ((mask & 4) != 0){
151      s[l] = 'y';
152      l++;
153   }
154   if ((mask & 2) != 0){
155      s[l] = 'z';
156      l++;
157   }
158   if ((mask & 1) != 0){
159      s[l] = 'w';
160      l++;
161   }
162   s[l] = 0;
163   return l;
164}
165
166int vertex_program_disassembler::disassemble_swizzle(sourcefields f, char *s)
167{
168   int t, l;
169
170   t = 4;
171   if (f.SwizzleW == 3)
172   {
173      t = t - 1;
174      if (f.SwizzleZ == 2)
175      {
176         t = t - 1;
177         if (f.SwizzleY == 1)
178         {
179            t = t - 1;
180            if (f.SwizzleX == 0)
181            {
182               t = t - 1;
183            }
184         }
185      }
186   }
187   *s = 0;
188   if (t == 0)
189      return 0;
190   s[0] = '.';
191   l = 1;
192   if (t > 0)
193   {
194      s[l] = compchar[f.SwizzleX];
195      l++;
196   }
197   if (t > 1)
198   {
199      s[l] = compchar[f.SwizzleY];
200      l++;
201   }
202   if (t > 2)
203   {
204      s[l] = compchar[f.SwizzleZ];
205      l++;
206   }
207   if (t > 3)
208   {
209      s[l] = compchar[f.SwizzleW];
210      l++;
211   }
212   s[l] = 0;
213   return l;
214}
215
216int vertex_program_disassembler::disassemble_source(sourcefields f, fields fi, char *s)
217{
218   int l;
219
220   if (f.ParameterType == 0) {
221      strcpy(s, ",???");
222      return 4;
223   }
224   l = 0;
225   if (f.Sign != 0) {
226      s[l] = '-';
227      l++;
228   }
229   if (f.ParameterType == 1) {
230      s[l] = 'r';
231      l = l + 1 + sprintf(s + l + 1, "%d", f.TempIndex);
232   }
233   else if (f.ParameterType == 2){
234      s[l] = 'v';
235      l = l + 1 + sprintf(s + l + 1, "%d", fi.InputIndex);
236   }
237   else
238   {
239      if (fi.Usea0x != 0)
240      {
241         if (fi.SourceConstantIndex >= 96) {
242            strcpy(s + l, "c[");
243            l = l + 2;
244            l = l + sprintf(s + l, "%d", fi.SourceConstantIndex - 96);
245            strcpy(s + l, "+a0.x]");
246            l = l + 6;
247         }
248         else {
249            strcpy(s + l, "c[a0.x");
250            l = l + 6;
251            l = l + sprintf(s + l, "%d", fi.SourceConstantIndex - 96);
252            s[l] = ']';
253            l++;
254         }
255      }
256      else {
257         strcpy(s + l, "c[");
258         l = l + 2;
259         l = l + sprintf(s + l, "%d", fi.SourceConstantIndex - 96);
260         s[l] = ']';
261         l++;
262      }
263   }
264   l = l + disassemble_swizzle(f, s + l);
265   s[l] = 0;
266   return l;
267}
268
269int vertex_program_disassembler::disassemble_output(fields f, char *s)
270{
271   int l;
272
273   if (f.OutputSelect == 1) {
274      strcpy(s, vecouts[f.OutputIndex]);
275      return strlen(s);
276   }
277   else {
278      strcpy(s, "c[");
279      l = 2;
280      l = l + sprintf(s + l, "%d", f.OutputIndex - 96);
281      s[l] = ']';
282      l++;
283   }
284   s[l] = 0;
285   return l;
286}
287
288int vertex_program_disassembler::output_types(fields f, int *o)
289{
290   o[0] = o[1] = o[2] = o[3] = o[4] = o[5] = 0;
291   if ((f.VecOperation > 0) && (f.VecTempWriteMask != 0))
292      o[0] = 1;
293   if ((f.VecOperation > 0) && (f.OutputWriteMask != 0) && (f.MultiplexerControl == 0))
294      o[1] = 1;
295   if ((f.ScaOperation > 0) && (f.OutputWriteMask != 0) && (f.MultiplexerControl == 1))
296      o[2] = 1;
297   if ((f.ScaOperation > 0) && (f.ScaTempWriteMask != 0))
298      o[3] = 1;
299   if (f.VecOperation == 13)
300      o[4] = 1;
301   if (f.EndOfProgram == 1)
302      o[5] = 1;
303   return o[0] + o[1] + o[2] + o[3] + o[4] + o[5];
304}
305
306int vertex_program_disassembler::disassemble(unsigned int *instruction, char *line)
307{
308   int b, p;
309   char *c;
310
311   if (state == 0) {
312      decodefields(instruction, 0, f);
313      output_types(f, o);
314      state = 1;
315   }
316   if (o[0] != 0)
317   {
318      o[0] = 0;
319      c = line;
320      strcpy(c, vecops[f.VecOperation]);
321      c = c + strlen(c);
322      strcpy(c, " r");
323      c = c + 2;
324      c = c + sprintf(c, "%d", f.VecTempIndex);
325      c = c + disassemble_mask(f.VecTempWriteMask, c);
326      b = 0;
327      for (p = 4; p != 0; p = p >> 1)
328      {
329         if ((vecpar2[f.VecOperation] & p) != 0) {
330            c[0] = ',';
331            c++;
332            c = c + disassemble_source(f.src[b], f, c);
333         }
334         b++;
335      }
336      *c = 0;
337      return 1;
338   }
339   if (o[1] != 0)
340   {
341      o[1] = 0;
342      c = line;
343      strcpy(c, vecops[f.VecOperation]);
344      c = c + strlen(c);
345      *c = ' ';
346      c++;
347      c = c + disassemble_output(f, c);
348      c = c + disassemble_mask(f.OutputWriteMask, c);
349      b = 0;
350      for (p = 4; p != 0; p = p >> 1)
351      {
352         if ((vecpar2[f.VecOperation] & p) != 0) {
353            *c = ',';
354            c++;
355            c = c + disassemble_source(f.src[b], f, c);
356         }
357         b++;
358      }
359      *c = 0;
360      return 1;
361   }
362   if (o[2] != 0)
363   {
364      o[2] = 0;
365      c = line;
366      strcpy(c, scaops[f.ScaOperation]);
367      c = c + strlen(c);
368      *c = ' ';
369      c++;
370      c = c + disassemble_output(f, c);
371      c = c + disassemble_mask(f.OutputWriteMask, c);
372      b = 0;
373      for (p = 4; p != 0; p = p >> 1)
374      {
375         if ((scapar2[f.ScaOperation] & p) != 0) {
376            *c = ',';
377            c++;
378            c = c + disassemble_source(f.src[b], f, c);
379         }
380         b++;
381      }
382      *c = 0;
383      return 1;
384   }
385   if (o[3] != 0)
386   {
387      if (f.VecOperation > 0)
388         b = 1;
389      else
390         b = f.VecTempIndex;
391      o[3] = 0;
392      c = line;
393      strcpy(c, scaops[f.ScaOperation]);
394      c = c + strlen(c);
395      strcpy(c, " r");
396      c = c + 2;
397      c = c + sprintf(c, "%d", b);
398      c = c + disassemble_mask(f.ScaTempWriteMask, c);
399      b = 0;
400      for (p = 4; p != 0; p = p >> 1)
401      {
402         if ((scapar2[f.ScaOperation] & p) != 0) {
403            *c = ',';
404            c++;
405            c = c + disassemble_source(f.src[b], f, c);
406         }
407         b++;
408      }
409      *c = 0;
410      return 1;
411   }
412   if (o[4] != 0)
413   {
414      o[4] = 0;
415      c = line;
416      c = c + sprintf(c, "MOV a0.x,");
417      c = c + disassemble_source(f.src[0], f, c);
418      *c = 0;
419      return 1;
420   }
421   if (o[5] != 0)
422   {
423      o[5] = 0;
424      strcpy(line, "END");
425      return 1;
426   }
427   state = 0;
428   return 0;
429}
430
431vertex_program_simulator::vertex_program_simulator()
432{
433   for (int i = 0; i < 256; i++)
434      op[i].modified = 0;
435   initialize_constants();
436}
437
438void vertex_program_simulator::set_data(vertex_nv *in, vertex_nv *out)
439{
440   input = in;
441   output = out;
442}
443
444void vertex_program_simulator::reset()
445{
446   ip = 0;
447   a0x = 0;
448   initialize_outputs();
449   initialize_temps();
450}
451
452void vertex_program_simulator::decode_instruction(int address)
453{
454   instruction *i;
455
456   i = &op[address];
457   i->d.SignA = i->i[1] & (1 << 8);
458   i->d.ParameterTypeA = (i->i[2] >> 26) & 3;
459   i->d.TempIndexA = (i->i[2] >> 28) & 15;
460   i->d.SwizzleA[0] = (i->i[1] >> 6) & 3;
461   i->d.SwizzleA[1] = (i->i[1] >> 4) & 3;
462   i->d.SwizzleA[2] = (i->i[1] >> 2) & 3;
463   i->d.SwizzleA[3] = (i->i[1] >> 0) & 3;
464   i->d.SignB = i->i[2] & (1 << 25);
465   i->d.ParameterTypeB = (i->i[2] >> 11) & 3;
466   i->d.TempIndexB = (i->i[2] >> 13) & 15;
467   i->d.SwizzleB[0] = (i->i[2] >> 23) & 3;
468   i->d.SwizzleB[1] = (i->i[2] >> 21) & 3;
469   i->d.SwizzleB[2] = (i->i[2] >> 19) & 3;
470   i->d.SwizzleB[3] = (i->i[2] >> 17) & 3;
471   i->d.SignC = i->i[2] & (1 << 10);
472   i->d.ParameterTypeC = (i->i[3] >> 28) & 3;
473   i->d.TempIndexC = ((i->i[2] & 3) << 2) + (i->i[3] >> 30);
474   i->d.SwizzleC[0] = (i->i[2] >> 8) & 3;
475   i->d.SwizzleC[1] = (i->i[2] >> 6) & 3;
476   i->d.SwizzleC[2] = (i->i[2] >> 4) & 3;
477   i->d.SwizzleC[3] = (i->i[2] >> 2) & 3;
478   i->d.VecOperation = (i->i[1] >> 21) & 15;
479   i->d.ScaOperation = (i->i[1] >> 25) & 15;
480   i->d.OutputWriteMask = ((i->i[3] >> 12) & 15);
481   i->d.MultiplexerControl = i->i[3] & 4; // 0 : output Rn from vectorial operation 4 : output Rn from scalar operation
482   i->d.VecTempIndex = (i->i[3] >> 20) & 15;
483   i->d.OutputIndex = (i->i[3] >> 3) & 255;
484   i->d.OutputSelect = i->i[3] & 0x800;
485   i->d.VecTempWriteMask = (i->i[3] >> 24) & 15;
486   i->d.ScaTempWriteMask = (i->i[3] >> 16) & 15;
487   i->d.InputIndex = (i->i[1] >> 9) & 15;
488   i->d.SourceConstantIndex = (i->i[1] >> 13) & 255;
489   i->d.Usea0x = i->i[3] & 2;
490   i->d.EndOfProgram = i->i[3] & 1;
491}
492
493int vertex_program_simulator::step()
494{
495   int p1, p2;
496   float tmp[3 * 4];
497   float tmpv[4];
498   float tmps[4];
499   instruction::decoded *d;
500
501#if 0 // useful while debugging to see what instrucion is being executed
502   static int debugvpi = 0;
503   char disbuffer[256];
504   if (debugvpi) {
505      char *pp;
506      vertex_program_disassembler vdis;
507
508      pp = disbuffer;
509      while (vdis.disassemble(op[ip].i, pp) != 0) {
510         pp = pp + strlen(pp);
511         *pp = '\n';
512         pp++;
513         *pp = 0;
514      }
515   }
516#endif
517
518   if (op[ip].modified)
519      decode_instruction(ip);
520   d = &(op[ip].d);
521   // prepare inputs
522   //  input A
523   generate_input(&tmp[0], d->SignA, d->ParameterTypeA, d->TempIndexA, d->SwizzleA);
524   //  input B
525   generate_input(&tmp[4], d->SignB, d->ParameterTypeB, d->TempIndexB, d->SwizzleB);
526   //  input C
527   generate_input(&tmp[8], d->SignC, d->ParameterTypeC, d->TempIndexC, d->SwizzleC);
528   // compute 2 instructions
529   //  vectorial
530   compute_vectorial_operation(tmpv, d->VecOperation, tmp);
531   //  scalar
532   compute_scalar_operation(tmps, d->ScaOperation, tmp);
533   // assign destinations
534   if (d->VecOperation > 0) {
535      if (d->VecOperation == 13)
536         //o[4] = 1;
537         a0x = (int)tmpv[0];
538      else {
539         if (d->VecTempWriteMask != 0) { // assign to Rn
540            //o[0] = 1;
541            int wm = d->VecTempWriteMask;
542            for (p1 = 0; p1 < 4; p1++) {
543               if (wm & 8)
544                  r_temp[d->VecTempIndex].fv[p1] = tmpv[p1];
545               wm = wm << 1;
546            }
547         }
548         if ((d->OutputWriteMask != 0) && (d->MultiplexerControl == 0)) {
549            //o[1] = 1;
550            if (d->OutputSelect) { // assign to output
551               int wm = d->OutputWriteMask;
552               for (p1 = 0; p1 < 4; p1++) {
553                  if (wm & 8)
554                     output->attribute[d->OutputIndex].fv[p1] = tmpv[p1];
555                  wm = wm << 1;
556               }
557               // remeber, output position == r12
558               if (d->OutputIndex == 0)
559                  for (p1 = 0; p1 < 4; p1++) {
560                     r_temp[12].fv[p1] = output->attribute[d->OutputIndex].fv[p1];
561                  }
562            }
563            else { // assign to constant
564               int wm = d->OutputWriteMask;
565               for (p1 = 0; p1 < 4; p1++) {
566                  if (wm & 8)
567                     c_constant[d->OutputIndex].fv[p1] = tmpv[p1];
568                  wm = wm << 1;
569               }
570            }
571         }
572      }
573   }
574   if (d->ScaOperation > 0) {
575      if (d->ScaTempWriteMask != 0) { // assign to Rn
576         //o[3] = 1;
577         if (d->VecOperation > 0)
578            p2 = 1;
579         else
580            p2 = d->VecTempIndex;
581         int wm = d->ScaTempWriteMask;
582         for (p1 = 0; p1 < 4; p1++) {
583            if (wm & 8)
584               r_temp[p2].fv[p1] = tmps[p1];
585            wm = wm << 1;
586         }
587      }
588      if ((d->OutputWriteMask != 0) && (d->MultiplexerControl != 0)) { // assign to output
589         //o[2] = 1;
590         int wm = d->OutputWriteMask;
591         for (p1 = 0; p1 < 4; p1++) {
592            if (wm & 8)
593               output->attribute[d->OutputIndex].fv[p1] = tmps[p1];
594            wm = wm << 1;
595         }
596         // remeber, output position == r12
597         if (d->OutputIndex == 0) {
598            for (p1 = 0; p1 < 4; p1++) {
599               r_temp[12].fv[p1] = output->attribute[d->OutputIndex].fv[p1];
600            }
601         }
602      }
603   }
604   return d->EndOfProgram;
605}
606
607void vertex_program_simulator::execute()
608{
609   int c;
610
611   c = 0;
612   do {
613      c = step();
614      ip++;
615   } while (c == 0);
616}
617
618void vertex_program_simulator::jump(int address)
619{
620   ip = address;
621}
622
623void vertex_program_simulator::process(int address, vertex_nv *in, vertex_nv *out, int count)
624{
625#if 0 // useful while debugging to see what is being executed
626   static int debugvps = 0;
627   if (debugvps) {
628      char *pp;
629      vertex_program_disassembler vdis;
630      char disbuffer[128];
631
632      jump(address);
633      debugvps--;
634      for (int t = 0; t < 128; t++) {
635         pp = disbuffer;
636         while (vdis.disassemble(op[ip + t].i, pp) != 0) {
637            pp = pp + strlen(pp);
638            *pp = '\n';
639            pp++;
640            *pp = 0;
641         }
642         printf("%08X %08X %08X %s", op[ip + t].i[1], op[ip + t].i[2], op[ip + t].i[3], disbuffer);
643         if (op[ip + t].i[3] & 1)
644            break;
645      }
646   }
647#endif
648   set_data(in, out);
649   while (count > 0) {
650      reset();
651      jump(address);
652      execute();
653      input++;
654      output++;
655      count--;
656   }
657}
658
659int vertex_program_simulator::status()
660{
661   return ip;
662}
663
664void vertex_program_simulator::initialize_outputs()
665{
666   for (int n = 0; n < 16; n++) {
667      output->attribute[n].fv[0] = output->attribute[n].fv[1] = output->attribute[n].fv[2] = 0;
668      output->attribute[n].fv[3] = 1;
669   }
670}
671
672void vertex_program_simulator::initialize_temps()
673{
674   for (int n = 0; n < 32; n++) {
675      for (int m = 0; m < 4; m++)
676         r_temp[n].fv[m] = 0;
677   }
678}
679
680void vertex_program_simulator::initialize_constants()
681{
682   for (int n = 0; n < 192; n++) {
683      for (int m = 0; m < 4;m++)
684         c_constant[n].fv[m] = 0;
685   }
686}
687
688void vertex_program_simulator::generate_input(float t[4], int sign, int type, int temp, int swizzle[4])
689{
690   float sgn = 1;
691
692   if (sign)
693      sgn = -1;
694   if (type == 1) {
695      t[0] = sgn*r_temp[temp].fv[swizzle[0]];
696      t[1] = sgn*r_temp[temp].fv[swizzle[1]];
697      t[2] = sgn*r_temp[temp].fv[swizzle[2]];
698      t[3] = sgn*r_temp[temp].fv[swizzle[3]];
699   }
700   else if (type == 2) {
701      int InputIndex = op[ip].d.InputIndex;
702      t[0] = sgn*input->attribute[InputIndex].fv[swizzle[0]];
703      t[1] = sgn*input->attribute[InputIndex].fv[swizzle[1]];
704      t[2] = sgn*input->attribute[InputIndex].fv[swizzle[2]];
705      t[3] = sgn*input->attribute[InputIndex].fv[swizzle[3]];
706   }
707   else if (type == 3) {
708      int SourceConstantIndex = op[ip].d.SourceConstantIndex;
709      if (op[ip].d.Usea0x)
710         SourceConstantIndex = SourceConstantIndex + a0x;
711      t[0] = sgn*c_constant[SourceConstantIndex].fv[swizzle[0]];
712      t[1] = sgn*c_constant[SourceConstantIndex].fv[swizzle[1]];
713      t[2] = sgn*c_constant[SourceConstantIndex].fv[swizzle[2]];
714      t[3] = sgn*c_constant[SourceConstantIndex].fv[swizzle[3]];
715   }
716}
717
718void vertex_program_simulator::compute_vectorial_operation(float t_out[4], int instruction, float par_in[3 * 4])
719{
720   const int p1_A = 0;
721   const int p2_B = 4;
722   const int p3_C = 8;
723
724   // t_out <= instruction(par_in)
725   switch (instruction) {
726   case 0: // "NOP"
727      break;
728   case 1: // "MOV"
729      t_out[0] = par_in[p1_A + 0];
730      t_out[1] = par_in[p1_A + 1];
731      t_out[2] = par_in[p1_A + 2];
732      t_out[3] = par_in[p1_A + 3];
733      break;
734   case 2: // "MUL"
735      t_out[0] = par_in[p1_A + 0] * par_in[p2_B + 0];
736      t_out[1] = par_in[p1_A + 1] * par_in[p2_B + 1];
737      t_out[2] = par_in[p1_A + 2] * par_in[p2_B + 2];
738      t_out[3] = par_in[p1_A + 3] * par_in[p2_B + 3];
739      break;
740   case 3: // "ADD"
741      t_out[0] = par_in[p1_A + 0] + par_in[p3_C + 0];
742      t_out[1] = par_in[p1_A + 1] + par_in[p3_C + 1];
743      t_out[2] = par_in[p1_A + 2] + par_in[p3_C + 2];
744      t_out[3] = par_in[p1_A + 3] + par_in[p3_C + 3];
745      break;
746   case 4: // "MAD"
747      t_out[0] = par_in[p1_A + 0] * par_in[p2_B + 0] + par_in[p3_C + 0];
748      t_out[1] = par_in[p1_A + 1] * par_in[p2_B + 1] + par_in[p3_C + 1];
749      t_out[2] = par_in[p1_A + 2] * par_in[p2_B + 2] + par_in[p3_C + 2];
750      t_out[3] = par_in[p1_A + 3] * par_in[p2_B + 3] + par_in[p3_C + 3];
751      break;
752   case 5: // "DP3"
753      t_out[0] = par_in[p1_A + 0] * par_in[p2_B + 0] + par_in[p1_A + 1] * par_in[p2_B + 1] + par_in[p1_A + 2] * par_in[p2_B + 2];
754      t_out[1] = t_out[2] = t_out[3] = t_out[0];
755      break;
756   case 6: // "DPH"
757      t_out[0] = par_in[p1_A + 0] * par_in[p2_B + 0] + par_in[p1_A + 1] * par_in[p2_B + 1] + par_in[p1_A + 2] * par_in[p2_B + 2] + par_in[p2_B + 3];
758      t_out[1] = t_out[2] = t_out[3] = t_out[0];
759      break;
760   case 7: // "DP4"
761      t_out[0] = par_in[p1_A + 0] * par_in[p2_B + 0] + par_in[p1_A + 1] * par_in[p2_B + 1] + par_in[p1_A + 2] * par_in[p2_B + 2] + par_in[p1_A + 3] * par_in[p2_B + 3];
762      t_out[1] = t_out[2] = t_out[3] = t_out[0];
763      break;
764   case 8: // "DST"
765      t_out[0] = 1.0;
766      t_out[1] = par_in[p1_A + 1] * par_in[p2_B + 1];
767      t_out[2] = par_in[p1_A + 2];
768      t_out[3] = par_in[p2_B + 3];
769      break;
770   case 9: // "MIN"
771      t_out[0] = fmin(par_in[p1_A + 0], par_in[p2_B + 0]);
772      t_out[1] = fmin(par_in[p1_A + 1], par_in[p2_B + 1]);
773      t_out[2] = fmin(par_in[p1_A + 2], par_in[p2_B + 2]);
774      t_out[3] = fmin(par_in[p1_A + 3], par_in[p2_B + 3]);
775      break;
776   case 10: // "MAX"
777      t_out[0] = fmax(par_in[p1_A + 0], par_in[p2_B + 0]);
778      t_out[1] = fmax(par_in[p1_A + 1], par_in[p2_B + 1]);
779      t_out[2] = fmax(par_in[p1_A + 2], par_in[p2_B + 2]);
780      t_out[3] = fmax(par_in[p1_A + 3], par_in[p2_B + 3]);
781      break;
782   case 11: // "SLT"
783      t_out[0] = (par_in[p1_A + 0] < par_in[p2_B + 0]) ? 1.0 : 0;
784      t_out[1] = (par_in[p1_A + 1] < par_in[p2_B + 1]) ? 1.0 : 0;
785      t_out[2] = (par_in[p1_A + 2] < par_in[p2_B + 2]) ? 1.0 : 0;
786      t_out[3] = (par_in[p1_A + 3] < par_in[p2_B + 3]) ? 1.0 : 0;
787      break;
788   case 12: // "SGE"
789      t_out[0] = (par_in[p1_A + 0] >= par_in[p2_B + 0]) ? 1.0 : 0;
790      t_out[1] = (par_in[p1_A + 1] >= par_in[p2_B + 1]) ? 1.0 : 0;
791      t_out[2] = (par_in[p1_A + 2] >= par_in[p2_B + 2]) ? 1.0 : 0;
792      t_out[3] = (par_in[p1_A + 3] >= par_in[p2_B + 3]) ? 1.0 : 0;
793      break;
794   case 13: // "ARL"
795      t_out[0] = par_in[p1_A + 0];
796   }
797}
798
799void vertex_program_simulator::compute_scalar_operation(float t_out[4], int instruction, float par_in[3 * 4])
800{
801   //const int p1_A = 0;
802   //const int p2_B = 4;
803   const int p3_C = 8;
804   union {
805      float f;
806      unsigned int i;
807   } t;
808   int e;
809
810   // t_out <= instruction(par_in)
811   switch (instruction) {
812   case 0: // "NOP"
813      break;
814   case 1: // "IMV"
815      t_out[0] = par_in[p3_C + 0];
816      t_out[1] = par_in[p3_C + 1];
817      t_out[2] = par_in[p3_C + 2];
818      t_out[3] = par_in[p3_C + 3];
819      break;
820   case 2:   // "RCP"
821      t_out[0] = t_out[1] = t_out[2] = t_out[3] = 1.0 / par_in[p3_C + 0];
822      break;
823   case 3:   // "RCC"
824      t_out[0] = t_out[1] = t_out[2] = t_out[3] = 1.0 / par_in[p3_C + 0]; // ?
825      break;
826   case 4: // "RSQ"
827      t_out[0] = t_out[1] = t_out[2] = t_out[3] = 1.0 / sqrt(abs(par_in[p3_C + 0]));
828      break;
829   case 5: // "EXP"
830      t_out[0] = pow(2, floor(par_in[p3_C + 0]));
831      t_out[1] = par_in[p3_C + 0] - floor(par_in[p3_C + 0]);
832      t.f = pow(2, par_in[p3_C + 0]);
833      t.i = t.i & 0xffffff00;
834      t_out[2] = t.f;
835      t_out[3] = 1.0;
836      break;
837   case 6: // "LOG"
838      t_out[1] = frexp(par_in[p3_C + 0], &e)*2.0; // frexp gives mantissa as 0.5....1
839      t_out[0] = e - 1;
840      t.f = log2(abs(par_in[p3_C + 0]));
841      t.i = t.i & 0xffffff00;
842      t_out[2] = t.f;
843      t_out[3] = 1.0;
844      break;
845   case 7: // "LIT"
846      t_out[0] = 1.0;
847      t_out[1] = fmax(0, fmin(par_in[p3_C + 0], 1.0f));
848      t_out[2] = par_in[p3_C + 0] > 0 ? pow(fmax(par_in[p3_C + 1], 0), par_in[p3_C + 3]) : 0;
849      t_out[3] = 1.0;
850      break;
851   }
852}
853
854/*
855 * Graphics
856 */
857
858UINT32 nv2a_renderer::dilate0(UINT32 value, int bits) // dilate first "bits" bits in "value"
859{
860   UINT32 x, m1, m2, m3;
861   int a;
862
863   x = value;
864   for (a = 0; a < bits; a++)
865   {
866      m2 = 1 << (a << 1);
867      m1 = m2 - 1;
868      m3 = (~m1) << 1;
869      x = (x & m1) + (x & m2) + ((x & m3) << 1);
870   }
871   return x;
872}
873
874UINT32 nv2a_renderer::dilate1(UINT32 value, int bits) // dilate first "bits" bits in "value"
875{
876   UINT32 x, m1, m2, m3;
877   int a;
878
879   x = value;
880   for (a = 0; a < bits; a++)
881   {
882      m2 = 1 << (a << 1);
883      m1 = m2 - 1;
884      m3 = (~m1) << 1;
885      x = (x & m1) + ((x & m2) << 1) + ((x & m3) << 1);
886   }
887   return x;
888}
889
890void nv2a_renderer::computedilated(void)
891{
892   int a, b;
893
894   for (b = 0; b < 16; b++)
895      for (a = 0; a < 2048; a++) {
896      dilated0[b][a] = dilate0(a, b);
897      dilated1[b][a] = dilate1(a, b);
898      }
899   for (b = 0; b < 16; b++)
900      for (a = 0; a < 16; a++)
901         dilatechose[(b << 4) + a] = (a < b ? a : b);
902}
903
904int nv2a_renderer::geforce_commandkind(UINT32 word)
905{
906   if ((word & 0x00000003) == 0x00000002)
907      return 7; // call
908   if ((word & 0x00000003) == 0x00000001)
909      return 6; // jump
910   if ((word & 0xE0030003) == 0x40000000)
911      return 5; // non increasing
912   if ((word & 0xE0000003) == 0x20000000)
913      return 4; // old jump
914   if ((word & 0xFFFF0003) == 0x00030000)
915      return 3; // long non icreasing
916   if ((word & 0xFFFFFFFF) == 0x00020000)
917      return 2; // return
918   if ((word & 0xFFFF0003) == 0x00010000)
919      return 1; // sli conditional
920   if ((word & 0xE0030003) == 0x00000000)
921      return 0; // increasing
922   return -1;
923}
924
925UINT32 nv2a_renderer::geforce_object_offset(UINT32 handle)
926{
927   UINT32 h = ((((handle >> 11) ^ handle) >> 11) ^ handle) & 0x7ff;
928   UINT32 o = (pfifo[0x210 / 4] & 0x1f) << 8; // or 12 ?
929   UINT32 e = o + h * 8; // at 0xfd000000+0x00700000
930   UINT32 w;
931
932   if (ramin[e / 4] != handle)
933      e = 0;
934   w = ramin[e / 4 + 1];
935   return (w & 0xffff) * 0x10;
936}
937
938void nv2a_renderer::geforce_read_dma_object(UINT32 handle, UINT32 &offset, UINT32 &size)
939{
940   //UINT32 objclass,pt_present,pt_linear,access,target,rorw;
941   UINT32 dma_adjust, dma_frame;
942   UINT32 o = geforce_object_offset(handle);
943
944   o = o / 4;
945   //objclass=ramin[o] & 0xfff;
946   //pt_present=(ramin[o] >> 12) & 1;
947   //pt_linear=(ramin[o] >> 13) & 1;
948   //access=(ramin[o] >> 14) & 3;
949   //target=(ramin[o] >> 16) & 3;
950   dma_adjust = (ramin[o] >> 20) & 0xfff;
951   size = ramin[o + 1];
952   //rorw=ramin[o+2] & 1;
953   dma_frame = ramin[o + 2] & 0xfffff000;
954   offset = dma_frame + dma_adjust;
955}
956
957/*void myline(bitmap_rgb32 &bmp,float x1,float y1,float x2,float y2)
958{
959int xx1,yy1,xx2,yy2;
960
961   xx1=x1;
962   xx2=x2;
963   yy1=y1;
964   yy2=y2;
965   if (xx1 == xx2) {
966      if (yy1 > yy2) {
967         int t=yy1;
968         yy1=yy2;
969         yy2=t;
970      }
971      for (int y=yy1;y <= yy2;y++)
972         *((UINT32 *)bmp.raw_pixptr(y,xx1))= -1;
973      } else if (yy1 == yy2) {
974      if (xx1 > xx2) {
975         int t=xx1;
976         xx1=xx2;
977         xx2=t;
978      }
979      for (int x=xx1;x <= xx2;x++)
980         *((UINT32 *)bmp.raw_pixptr(yy1,x))= -1;
981   }
982}*/
983
984inline UINT32 convert_a4r4g4b4_a8r8g8b8(UINT32 a4r4g4b4)
985{
986   UINT32 a8r8g8b8;
987   int ca, cr, cg, cb;
988
989   cb = pal4bit(a4r4g4b4 & 0x000f);
990   cg = pal4bit((a4r4g4b4 & 0x00f0) >> 4);
991   cr = pal4bit((a4r4g4b4 & 0x0f00) >> 8);
992   ca = pal4bit((a4r4g4b4 & 0xf000) >> 12);
993   a8r8g8b8 = (ca << 24) | (cr << 16) | (cg << 8) | (cb); // color converted to 8 bits per component
994   return a8r8g8b8;
995}
996
997inline UINT32 convert_a1r5g5b5_a8r8g8b8(UINT32 a1r5g5b5)
998{
999   UINT32 a8r8g8b8;
1000   int ca, cr, cg, cb;
1001
1002   cb = pal5bit(a1r5g5b5 & 0x001f);
1003   cg = pal5bit((a1r5g5b5 & 0x03e0) >> 5);
1004   cr = pal5bit((a1r5g5b5 & 0x7c00) >> 10);
1005   ca = a1r5g5b5 & 0x8000 ? 0xff : 0;
1006   a8r8g8b8 = (ca << 24) | (cr << 16) | (cg << 8) | (cb); // color converted to 8 bits per component
1007   return a8r8g8b8;
1008}
1009
1010inline UINT32 convert_r5g6b5_r8g8b8(UINT32 r5g6b5)
1011{
1012   UINT32 r8g8b8;
1013   int cr, cg, cb;
1014
1015   cb = pal5bit(r5g6b5 & 0x001f);
1016   cg = pal6bit((r5g6b5 & 0x07e0) >> 5);
1017   cr = pal5bit((r5g6b5 & 0xf800) >> 11);
1018   r8g8b8 = (cr << 16) | (cg << 8) | (cb); // color converted to 8 bits per component
1019   return r8g8b8;
1020}
1021
1022UINT32 nv2a_renderer::texture_get_texel(int number, int x, int y)
1023{
1024   UINT32 to, s, c, sa, ca;
1025   UINT32 a4r4g4b4, a1r5g5b5, r5g6b5;
1026   int bx, by;
1027   int color0, color1, color0m2, color1m2, alpha0, alpha1;
1028   UINT32 codes;
1029   UINT64 alphas;
1030   int cr, cg, cb;
1031
1032   // force to [0,size-1]
1033   x = (unsigned int)x & (texture[number].sizeu - 1);
1034   y = (unsigned int)y & (texture[number].sizev - 1);
1035   switch (texture[number].format) {
1036   case A8R8G8B8:
1037      to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
1038      return *(((UINT32 *)texture[number].buffer) + to); // get texel color
1039   case DXT1:
1040      bx = x >> 2;
1041      by = y >> 2;
1042      x = x & 3;
1043      y = y & 3;
1044      to = bx + by*(texture[number].sizeu >> 2);
1045      color0 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 0);
1046      color1 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 1);
1047      codes = *((UINT32 *)(((UINT64 *)texture[number].buffer) + to) + 1);
1048      s = (y << 3) + (x << 1);
1049      c = (codes >> s) & 3;
1050      c = c + (color0 > color1 ? 0 : 4);
1051      color0m2 = color0 << 1;
1052      color1m2 = color1 << 1;
1053      switch (c) {
1054      case 0:
1055         return 0xff000000 + convert_r5g6b5_r8g8b8(color0);
1056      case 1:
1057         return 0xff000000 + convert_r5g6b5_r8g8b8(color1);
1058      case 2:
1059         cb = pal5bit(((color0m2 & 0x003e) + (color1 & 0x001f)) / 3);
1060         cg = pal6bit(((color0m2 & 0x0fc0) + (color1 & 0x07e0)) / 3 >> 5);
1061         cr = pal5bit(((color0m2 & 0x1f000) + color1) / 3 >> 11);
1062         return 0xff000000 | (cr << 16) | (cg << 8) | (cb);
1063      case 3:
1064         cb = pal5bit(((color1m2 & 0x003e) + (color0 & 0x001f)) / 3);
1065         cg = pal6bit(((color1m2 & 0x0fc0) + (color0 & 0x07e0)) / 3 >> 5);
1066         cr = pal5bit(((color1m2 & 0x1f000) + color0) / 3 >> 11);
1067         return 0xff000000 | (cr << 16) | (cg << 8) | (cb);
1068      case 4:
1069         return 0xff000000 + convert_r5g6b5_r8g8b8(color0);
1070      case 5:
1071         return 0xff000000 + convert_r5g6b5_r8g8b8(color1);
1072      case 6:
1073         cb = pal5bit(((color0 & 0x001f) + (color1 & 0x001f)) / 2);
1074         cg = pal6bit(((color0 & 0x07e0) + (color1 & 0x07e0)) / 2 >> 5);
1075         cr = pal5bit(((color0 & 0xf800) + (color1 & 0xf800)) / 2 >> 11);
1076         return 0xff000000 | (cr << 16) | (cg << 8) | (cb);
1077      default:
1078         return 0xff000000;
1079      }
1080   case DXT3:
1081      bx = x >> 2;
1082      by = y >> 2;
1083      x = x & 3;
1084      y = y & 3;
1085      to = (bx + by*(texture[number].sizeu >> 2)) << 1;
1086      color0 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 4);
1087      color1 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 5);
1088      codes = *((UINT32 *)(((UINT64 *)texture[number].buffer) + to) + 3);
1089      alphas = *(((UINT64 *)texture[number].buffer) + to);
1090      s = (y << 3) + (x << 1);
1091      sa = ((y << 2) + x) << 2;
1092      c = (codes >> s) & 3;
1093      ca = (alphas >> sa) & 15;
1094      switch (c) {
1095      case 0:
1096         return ((ca + (ca << 4)) << 24) + convert_r5g6b5_r8g8b8(color0);
1097      case 1:
1098         return ((ca + (ca << 4)) << 24) + convert_r5g6b5_r8g8b8(color1);
1099      case 2:
1100         cb = pal5bit((2 * (color0 & 0x001f) + (color1 & 0x001f)) / 3);
1101         cg = pal6bit((2 * (color0 & 0x07e0) + (color1 & 0x07e0)) / 3 >> 5);
1102         cr = pal5bit((2 * (color0 & 0xf800) + (color1 & 0xf800)) / 3 >> 11);
1103         return ((ca + (ca << 4)) << 24) | (cr << 16) | (cg << 8) | (cb);
1104      default:
1105         cb = pal5bit(((color0 & 0x001f) + 2 * (color1 & 0x001f)) / 3);
1106         cg = pal6bit(((color0 & 0x07e0) + 2 * (color1 & 0x07e0)) / 3 >> 5);
1107         cr = pal5bit(((color0 & 0xf800) + 2 * (color1 & 0xf800)) / 3 >> 11);
1108         return ((ca + (ca << 4)) << 24) | (cr << 16) | (cg << 8) | (cb);
1109      }
1110   case A4R4G4B4:
1111      to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
1112      a4r4g4b4 = *(((UINT16 *)texture[number].buffer) + to); // get texel color
1113      return convert_a4r4g4b4_a8r8g8b8(a4r4g4b4);
1114   case A1R5G5B5:
1115      to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
1116      a1r5g5b5 = *(((UINT16 *)texture[number].buffer) + to); // get texel color
1117      return convert_a1r5g5b5_a8r8g8b8(a1r5g5b5);
1118   case R5G6B5:
1119      to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
1120      r5g6b5 = *(((UINT16 *)texture[number].buffer) + to); // get texel color
1121      return 0xff000000 + convert_r5g6b5_r8g8b8(r5g6b5);
1122   case R8G8B8_RECT:
1123      to = texture[number].rectangle_pitch*y + (x << 2);
1124      return *((UINT32 *)(((UINT8 *)texture[number].buffer) + to));
1125   case A8R8G8B8_RECT:
1126      to = texture[number].rectangle_pitch*y + (x << 2);
1127      return *((UINT32 *)(((UINT8 *)texture[number].buffer) + to));
1128   case DXT5:
1129      bx = x >> 2;
1130      by = y >> 2;
1131      x = x & 3;
1132      y = y & 3;
1133      to = (bx + by*(texture[number].sizeu >> 2)) << 1;
1134      color0 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 4);
1135      color1 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 5);
1136      codes = *((UINT32 *)(((UINT64 *)texture[number].buffer) + to) + 3);
1137      alpha0 = *((UINT8 *)(((UINT64 *)texture[number].buffer) + to) + 0);
1138      alpha1 = *((UINT8 *)(((UINT64 *)texture[number].buffer) + to) + 1);
1139      alphas = *(((UINT64 *)texture[number].buffer) + to);
1140      s = (y << 3) + (x << 1);
1141      sa = ((y << 2) + x) * 3;
1142      c = (codes >> s) & 3;
1143      ca = (alphas >> sa) & 7;
1144      ca = ca + (alpha0 > alpha1 ? 0 : 8);
1145      switch (ca) {
1146      case 0:
1147         ca = alpha0;
1148         break;
1149      case 1:
1150         ca = alpha1;
1151         break;
1152      case 2:
1153         ca = (6 * alpha0 + 1 * alpha1) / 7;
1154         break;
1155      case 3:
1156         ca = (5 * alpha0 + 2 * alpha1) / 7;
1157         break;
1158      case 4:
1159         ca = (4 * alpha0 + 3 * alpha1) / 7;
1160         break;
1161      case 5:
1162         ca = (3 * alpha0 + 4 * alpha1) / 7;
1163         break;
1164      case 6:
1165         ca = (2 * alpha0 + 5 * alpha1) / 7;
1166         break;
1167      case 7:
1168         ca = (1 * alpha0 + 6 * alpha1) / 7;
1169         break;
1170      case 8:
1171         ca = alpha0;
1172         break;
1173      case 9:
1174         ca = alpha1;
1175         break;
1176      case 10:
1177         ca = (4 * alpha0 + 1 * alpha1) / 5;
1178         break;
1179      case 11:
1180         ca = (3 * alpha0 + 2 * alpha1) / 5;
1181         break;
1182      case 12:
1183         ca = (2 * alpha0 + 3 * alpha1) / 5;
1184         break;
1185      case 13:
1186         ca = (1 * alpha0 + 4 * alpha1) / 5;
1187         break;
1188      case 14:
1189         ca = 0;
1190         break;
1191      case 15:
1192         ca = 255;
1193         break;
1194      }
1195      switch (c) {
1196      case 0:
1197         return (ca << 24) + convert_r5g6b5_r8g8b8(color0);
1198      case 1:
1199         return (ca << 24) + convert_r5g6b5_r8g8b8(color1);
1200      case 2:
1201         cb = pal5bit((2 * (color0 & 0x001f) + (color1 & 0x001f)) / 3);
1202         cg = pal6bit((2 * (color0 & 0x07e0) + (color1 & 0x07e0)) / 3 >> 5);
1203         cr = pal5bit((2 * (color0 & 0xf800) + (color1 & 0xf800)) / 3 >> 11);
1204         return (ca << 24) | (cr << 16) | (cg << 8) | (cb);
1205      default:
1206         cb = pal5bit(((color0 & 0x001f) + 2 * (color1 & 0x001f)) / 3);
1207         cg = pal6bit(((color0 & 0x07e0) + 2 * (color1 & 0x07e0)) / 3 >> 5);
1208         cr = pal5bit(((color0 & 0xf800) + 2 * (color1 & 0xf800)) / 3 >> 11);
1209         return (ca << 24) | (cr << 16) | (cg << 8) | (cb);
1210      }
1211   default:
1212      return 0xff00ff00;
1213   }
1214}
1215
1216void nv2a_renderer::write_pixel(int x, int y, UINT32 color)
1217{
1218   void *addr;
1219   UINT32 fbcolor;
1220   UINT32 c[4], fb[4], s[4], d[4], cc[4];
1221
1222   addr = this->fb.raw_pixptr(y, x);
1223   fbcolor = *((UINT32 *)addr);
1224   c[3] = color >> 24;
1225   c[2] = (color >> 16) & 255;
1226   c[1] = (color >> 8) & 255;
1227   c[0] = color & 255;
1228   fb[3] = fbcolor >> 24;
1229   fb[2] = (fbcolor >> 16) & 255;
1230   fb[1] = (fbcolor >> 8) & 255;
1231   fb[0] = fbcolor & 255;
1232   cc[3] = blend_color >> 24;
1233   cc[2] = (blend_color >> 16) & 255;
1234   cc[1] = (blend_color >> 8) & 255;
1235   cc[0] = blend_color & 255;
1236   // ownership test and scissor test not done
1237   // alpha test
1238   if (alpha_test_enabled) {
1239      switch (alpha_func) {
1240      case nv2a_renderer::NEVER:
1241         return;
1242      case nv2a_renderer::ALWAYS:
1243      default:
1244         break;
1245      case nv2a_renderer::LESS:
1246         if (c[3] >= alpha_reference)
1247            return;
1248         break;
1249      case nv2a_renderer::LEQUAL:
1250         if (c[3] > alpha_reference)
1251            return;
1252         break;
1253      case nv2a_renderer::EQUAL:
1254         if (c[3] != alpha_reference)
1255            return;
1256         break;
1257      case nv2a_renderer::GEQUAL:
1258         if (c[3] < alpha_reference)
1259            return;
1260         break;
1261      case nv2a_renderer::GREATER:
1262         if (c[3] <= alpha_reference)
1263            return;
1264         break;
1265      case nv2a_renderer::NOTEQUAL:
1266         if (c[3] == alpha_reference)
1267            return;
1268         break;
1269      }
1270   }
1271   // stencil test not done
1272   // depth buffer test not done
1273   // blending
1274   if (blending_enabled) {
1275      switch (blend_function_source) {
1276      case nv2a_renderer::ZERO:
1277         s[3] = s[2] = s[1] = s[0] = 0;
1278         break;
1279      case nv2a_renderer::ONE:
1280      default:
1281         s[3] = s[2] = s[1] = s[0] = 255;
1282         break;
1283      case nv2a_renderer::DST_COLOR:
1284         s[3] = fb[3];
1285         s[2] = fb[2];
1286         s[1] = fb[1];
1287         s[0] = fb[0];
1288         break;
1289      case nv2a_renderer::ONE_MINUS_DST_COLOR:
1290         s[3] = fb[3] ^ 255;
1291         s[2] = fb[2] ^ 255;
1292         s[1] = fb[1] ^ 255;
1293         s[0] = fb[0] ^ 255;
1294         break;
1295      case nv2a_renderer::SRC_ALPHA:
1296         s[3] = s[2] = s[1] = s[0] = c[3];
1297         break;
1298      case nv2a_renderer::ONE_MINUS_SRC_ALPHA:
1299         s[3] = s[2] = s[1] = s[0] = c[3] ^ 255;
1300         break;
1301      case nv2a_renderer::DST_ALPHA:
1302         s[3] = s[2] = s[1] = s[0] = fb[3];
1303         break;
1304      case nv2a_renderer::ONE_MINUS_DST_ALPHA:
1305         s[3] = s[2] = s[1] = s[0] = fb[3] ^ 255;
1306         break;
1307      case nv2a_renderer::CONSTANT_COLOR:
1308         s[3] = cc[3];
1309         s[2] = cc[2];
1310         s[1] = cc[1];
1311         s[0] = cc[0];
1312         break;
1313      case nv2a_renderer::ONE_MINUS_CONSTANT_COLOR:
1314         s[3] = cc[3] ^ 255;
1315         s[2] = cc[2] ^ 255;
1316         s[1] = cc[1] ^ 255;
1317         s[0] = cc[0] ^ 255;
1318         break;
1319      case nv2a_renderer::CONSTANT_ALPHA:
1320         s[3] = s[2] = s[1] = s[0] = cc[3];
1321         break;
1322      case nv2a_renderer::ONE_MINUS_CONSTANT_ALPHA:
1323         s[3] = s[2] = s[1] = s[0] = cc[3] ^ 255;
1324         break;
1325      case nv2a_renderer::SRC_ALPHA_SATURATE:
1326         s[3] = 255;
1327         if (c[3] < (fb[3] ^ 255))
1328            s[2] = c[3];
1329         else
1330            s[2] = fb[3];
1331         s[1] = s[0] = s[2];
1332         break;
1333      }
1334      switch (blend_function_destination) {
1335      case nv2a_renderer::ZERO:
1336      default:
1337         d[3] = d[2] = d[1] = d[0] = 0;
1338         break;
1339      case nv2a_renderer::ONE:
1340         d[3] = d[2] = d[1] = d[0] = 255;
1341         break;
1342      case nv2a_renderer::SRC_COLOR:
1343         d[3] = c[3];
1344         d[2] = c[2];
1345         d[1] = c[1];
1346         d[0] = c[0];
1347         break;
1348      case nv2a_renderer::ONE_MINUS_SRC_COLOR:
1349         d[3] = c[3] ^ 255;
1350         d[2] = c[2] ^ 255;
1351         d[1] = c[1] ^ 255;
1352         d[0] = c[0] ^ 255;
1353         break;
1354      case nv2a_renderer::SRC_ALPHA:
1355         d[3] = d[2] = d[1] = d[0] = c[3];
1356         break;
1357      case nv2a_renderer::ONE_MINUS_SRC_ALPHA:
1358         d[3] = d[2] = d[1] = d[0] = c[3] ^ 255;
1359         break;
1360      case nv2a_renderer::DST_ALPHA:
1361         d[3] = d[2] = d[1] = d[0] = fb[3];
1362         break;
1363      case nv2a_renderer::ONE_MINUS_DST_ALPHA:
1364         d[3] = d[2] = d[1] = d[0] = fb[3] ^ 255;
1365         break;
1366      case nv2a_renderer::CONSTANT_COLOR:
1367         d[3] = cc[3];
1368         d[2] = cc[2];
1369         d[1] = cc[1];
1370         d[0] = cc[0];
1371         break;
1372      case nv2a_renderer::ONE_MINUS_CONSTANT_COLOR:
1373         d[3] = cc[3] ^ 255;
1374         d[2] = cc[2] ^ 255;
1375         d[1] = cc[1] ^ 255;
1376         d[0] = cc[0] ^ 255;
1377         break;
1378      case nv2a_renderer::CONSTANT_ALPHA:
1379         d[3] = d[2] = d[1] = d[0] = cc[3];
1380         break;
1381      case nv2a_renderer::ONE_MINUS_CONSTANT_ALPHA:
1382         d[3] = d[2] = d[1] = d[0] = cc[3] ^ 255;
1383         break;
1384      }
1385      switch (blend_equation) {
1386      case nv2a_renderer::FUNC_ADD:
1387         c[3] = (c[3] * s[3] + fb[3] * d[3]) / 255;
1388         if (c[3] > 255)
1389            c[3] = 255;
1390         c[2] = (c[2] * s[2] + fb[2] * d[2]) / 255;
1391         if (c[2] > 255)
1392            c[2] = 255;
1393         c[1] = (c[1] * s[1] + fb[1] * d[1]) / 255;
1394         if (c[1] > 255)
1395            c[1] = 255;
1396         c[0] = (c[0] * s[0] + fb[0] * d[0]) / 255;
1397         if (c[0] > 255)
1398            c[0] = 255;
1399         break;
1400      case nv2a_renderer::FUNC_SUBTRACT:
1401         c[3] = (c[3] * s[3] - fb[3] * d[3]) / 255;
1402         if (c[3] < 0)
1403            c[3] = 255;
1404         c[2] = (c[2] * s[2] - fb[2] * d[2]) / 255;
1405         if (c[2] < 0)
1406            c[2] = 255;
1407         c[1] = (c[1] * s[1] - fb[1] * d[1]) / 255;
1408         if (c[1] < 0)
1409            c[1] = 255;
1410         c[0] = (c[0] * s[0] - fb[0] * d[0]) / 255;
1411         if (c[0] < 0)
1412            c[0] = 255;
1413         break;
1414      case nv2a_renderer::FUNC_REVERSE_SUBTRACT:
1415         c[3] = (fb[3] * d[3] - c[3] * s[3]) / 255;
1416         if (c[3] < 0)
1417            c[3] = 255;
1418         c[2] = (fb[2] * d[2] - c[2] * s[2]) / 255;
1419         if (c[2] < 0)
1420            c[2] = 255;
1421         c[1] = (fb[1] * d[1] - c[1] * s[1]) / 255;
1422         if (c[1] < 0)
1423            c[1] = 255;
1424         c[0] = (fb[0] * d[0] - c[0] * s[0]) / 255;
1425         if (c[0] < 0)
1426            c[0] = 255;
1427         break;
1428      case nv2a_renderer::MIN:
1429         c[3] = s[3];
1430         if (d[3] < c[3])
1431            c[3] = d[3];
1432         c[2] = s[2];
1433         if (d[2] < c[2])
1434            c[2] = d[2];
1435         c[1] = s[1];
1436         if (d[1] < c[1])
1437            c[1] = d[1];
1438         c[0] = s[0];
1439         if (d[0] < c[0])
1440            c[0] = d[0];
1441         break;
1442      case nv2a_renderer::MAX:
1443         c[3] = s[3];
1444         if (d[3] > c[3])
1445            c[3] = d[3];
1446         c[2] = s[2];
1447         if (d[2] > c[2])
1448            c[2] = d[2];
1449         c[1] = s[1];
1450         if (d[1] > c[1])
1451            c[1] = d[1];
1452         c[0] = s[0];
1453         if (d[0] > c[0])
1454            c[0] = d[0];
1455         break;
1456      }
1457   }
1458   // dithering not done
1459   // logical operation
1460   if (logical_operation_enabled) {
1461      switch (logical_operation) {
1462      case  nv2a_renderer::CLEAR:
1463         c[3] = 0;
1464         c[2] = 0;
1465         c[1] = 0;
1466         c[0] = 0;
1467         break;
1468      case  nv2a_renderer::AND:
1469         c[3] = c[3] & fb[3];
1470         c[2] = c[2] & fb[2];
1471         c[1] = c[1] & fb[1];
1472         c[0] = c[0] & fb[0];
1473         break;
1474      case  nv2a_renderer::AND_REVERSE:
1475         c[3] = c[3] & (fb[3] ^ 255);
1476         c[2] = c[2] & (fb[2] ^ 255);
1477         c[1] = c[1] & (fb[1] ^ 255);
1478         c[0] = c[0] & (fb[0] ^ 255);
1479         break;
1480      case  nv2a_renderer::COPY:
1481      default:
1482         break;
1483      case  nv2a_renderer::AND_INVERTED:
1484         c[3] = (c[3] ^ 255) & fb[3];
1485         c[2] = (c[2] ^ 255) & fb[2];
1486         c[1] = (c[1] ^ 255) & fb[1];
1487         c[0] = (c[0] ^ 255) & fb[0];
1488         break;
1489      case  nv2a_renderer::NOOP:
1490         c[3] = fb[3];
1491         c[2] = fb[2];
1492         c[1] = fb[1];
1493         c[0] = fb[0];
1494         break;
1495      case  nv2a_renderer::XOR:
1496         c[3] = c[3] ^ fb[3];
1497         c[2] = c[2] ^ fb[2];
1498         c[1] = c[1] ^ fb[1];
1499         c[0] = c[0] ^ fb[0];
1500         break;
1501      case  nv2a_renderer::OR:
1502         c[3] = c[3] | fb[3];
1503         c[2] = c[2] | fb[2];
1504         c[1] = c[1] | fb[1];
1505         c[0] = c[0] | fb[0];
1506         break;
1507      case  nv2a_renderer::NOR:
1508         c[3] = (c[3] | fb[3]) ^ 255;
1509         c[2] = (c[2] | fb[2]) ^ 255;
1510         c[1] = (c[1] | fb[1]) ^ 255;
1511         c[0] = (c[0] | fb[0]) ^ 255;
1512         break;
1513      case  nv2a_renderer::EQUIV:
1514         c[3] = (c[3] ^ fb[3]) ^ 255;
1515         c[2] = (c[2] ^ fb[2]) ^ 255;
1516         c[1] = (c[1] ^ fb[1]) ^ 255;
1517         c[0] = (c[0] ^ fb[0]) ^ 255;
1518         break;
1519      case  nv2a_renderer::INVERT:
1520         c[3] = fb[3] ^ 255;
1521         c[2] = fb[2] ^ 255;
1522         c[1] = fb[1] ^ 255;
1523         c[0] = fb[0] ^ 255;
1524         break;
1525      case  nv2a_renderer::OR_REVERSE:
1526         c[3] = c[3] | (fb[3] ^ 255);
1527         c[2] = c[2] | (fb[2] ^ 255);
1528         c[1] = c[1] | (fb[1] ^ 255);
1529         c[0] = c[0] | (fb[0] ^ 255);
1530         break;
1531      case  nv2a_renderer::COPY_INVERTED:
1532         c[3] = c[3] ^ 255;
1533         c[2] = c[2] ^ 255;
1534         c[1] = c[1] ^ 255;
1535         c[0] = c[0] ^ 255;
1536         break;
1537      case  nv2a_renderer::OR_INVERTED:
1538         c[3] = (c[3] ^ 255) | fb[3];
1539         c[2] = (c[2] ^ 255) | fb[2];
1540         c[1] = (c[1] ^ 255) | fb[1];
1541         c[0] = (c[0] ^ 255) | fb[0];
1542         break;
1543      case  nv2a_renderer::NAND:
1544         c[3] = (c[3] & fb[3]) ^ 255;
1545         c[2] = (c[2] & fb[2]) ^ 255;
1546         c[1] = (c[1] & fb[1]) ^ 255;
1547         c[0] = (c[0] & fb[0]) ^ 255;
1548         break;
1549      case  nv2a_renderer::SET:
1550         c[3] = 255;
1551         c[2] = 255;
1552         c[1] = 255;
1553         c[0] = 255;
1554         break;
1555      }
1556   }
1557   fbcolor = (c[3] << 24) | (c[2] << 16) | (c[1] << 8) | c[0];
1558   *((UINT32 *)addr) = fbcolor;
1559}
1560
1561void nv2a_renderer::render_color(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid)
1562{
1563   int x;
1564
1565   if ((extent.startx < 0) || (extent.stopx > 640))
1566      return;
1567   x = extent.stopx - extent.startx - 1; // number of pixels to draw
1568   while (x >= 0) {
1569      UINT32 a8r8g8b8;
1570      int ca, cr, cg, cb;
1571      int xp = extent.startx + x; // x coordinate of current pixel
1572
1573      cb = ((extent.param[0].start + (float)x*extent.param[0].dpdx))*255.0;
1574      cg = ((extent.param[1].start + (float)x*extent.param[1].dpdx))*255.0;
1575      cr = ((extent.param[2].start + (float)x*extent.param[2].dpdx))*255.0;
1576      ca = ((extent.param[3].start + (float)x*extent.param[3].dpdx))*255.0;
1577      a8r8g8b8 = (ca << 24) + (cr << 16) + (cg << 8) + cb; // pixel color obtained by interpolating the colors of the vertices
1578      write_pixel(xp, scanline, a8r8g8b8);
1579      x--;
1580   }
1581}
1582
1583void nv2a_renderer::render_texture_simple(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid)
1584{
1585   int x;
1586   UINT32 a8r8g8b8;
1587
1588   if (!objectdata.data->texture[0].enabled) {
1589      return;
1590   }
1591   if ((extent.startx < 0) || (extent.stopx > 640))
1592      return;
1593   x = extent.stopx - extent.startx - 1;
1594   while (x >= 0) {
1595      int up, vp;
1596      int xp = extent.startx + x; // x coordinate of current pixel
1597
1598      up = (extent.param[4].start + (float)x*extent.param[4].dpdx)*(float)(objectdata.data->texture[0].sizeu - 1); // x coordinate of texel in texture
1599      vp = extent.param[5].start*(float)(objectdata.data->texture[0].sizev - 1); // y coordinate of texel in texture
1600      a8r8g8b8 = texture_get_texel(0, up, vp);
1601      write_pixel(xp, scanline, a8r8g8b8);
1602      x--;
1603   }
1604}
1605
1606void nv2a_renderer::render_register_combiners(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid)
1607{
1608   int x, xp;
1609   int up, vp;
1610   int ca, cr, cg, cb;
1611   UINT32 color[6];
1612   UINT32 a8r8g8b8;
1613   int n;//,m,i,j,k;
1614
1615   color[0] = color[1] = color[2] = color[3] = color[4] = color[5] = 0;
1616
1617   if ((extent.startx < 0) || (extent.stopx > 640))
1618      return;
1619   osd_lock_acquire(combiner.lock); // needed since multithreading is not supported yet
1620   x = extent.stopx - extent.startx - 1; // number of pixels to draw
1621   while (x >= 0) {
1622      xp = extent.startx + x;
1623      // 1: fetch data
1624      // 1.1: interpolated color from vertices
1625      cb = ((extent.param[0].start + (float)x*extent.param[0].dpdx))*255.0;
1626      cg = ((extent.param[1].start + (float)x*extent.param[1].dpdx))*255.0;
1627      cr = ((extent.param[2].start + (float)x*extent.param[2].dpdx))*255.0;
1628      ca = ((extent.param[3].start + (float)x*extent.param[3].dpdx))*255.0;
1629      color[0] = (ca << 24) + (cr << 16) + (cg << 8) + cb; // pixel color obtained by interpolating the colors of the vertices
1630      color[1] = 0; // lighting not yet
1631      // 1.2: color for each of the 4 possible textures
1632      for (n = 0; n < 4; n++) {
1633         if (texture[n].enabled) {
1634            up = (extent.param[4 + n * 2].start + (float)x*extent.param[4 + n * 2].dpdx)*(float)(objectdata.data->texture[n].sizeu - 1);
1635            vp = extent.param[5 + n * 2].start*(float)(objectdata.data->texture[n].sizev - 1);
1636            color[n + 2] = texture_get_texel(n, up, vp);
1637         }
1638      }
1639      // 2: compute
1640      // 2.1: initialize
1641      combiner_initialize_registers(color);
1642      // 2.2: general cmbiner stages
1643      for (n = 0; n < combiner.stages; n++) {
1644         // 2.2.1 initialize
1645         combiner_initialize_stage(n);
1646         // 2.2.2 map inputs
1647         combiner_map_input(n);
1648         // 2.2.3 compute possible outputs
1649         combiner_compute_rgb_outputs(n);
1650         combiner_compute_a_outputs(n);
1651         // 2.2.4 map outputs to registers
1652         combiner_map_output(n);
1653      }
1654      // 2.3: final cmbiner stage
1655      combiner_initialize_final();
1656      combiner_map_final_input();
1657      combiner_final_output();
1658      a8r8g8b8 = combiner_float_argb8(combiner.output);
1659      // 3: write pixel
1660      write_pixel(xp, scanline, a8r8g8b8);
1661      x--;
1662   }
1663   osd_lock_release(combiner.lock);
1664}
1665
1666#if 0
1667const char *rc_mapping_str[] = {
1668   "UNSIGNED_IDENTITY",
1669   "UNSIGNED_INVERT",
1670   "EXPAND_NORMAL",
1671   "EXPAND_NEGATE",
1672   "HALF_BIAS_NORMAL",
1673   "HALF_BIAS_NEGATE",
1674   "SIGNED_IDENTITY",
1675   "SIGNED_NEGATE"
1676};
1677
1678const char *rc_usage_rgb_str[] = {
1679   "RGB",
1680   "ALPHA"
1681};
1682
1683const char *rc_usage_alpha_str[] = {
1684   "BLUE",
1685   "ALPHA"
1686};
1687
1688const char *rc_variable_str[] = {
1689   "ZERO",
1690   "CONSTANT_COLOR0",
1691   "CONSTANT_COLOR1",
1692   "FOG",
1693   "PRIMARY_COLOR",
1694   "SECONDARY_COLOR",
1695   "???",
1696   "???",
1697   "TEXTURE0",
1698   "TEXTURE1",
1699   "TEXTURE2",
1700   "TEXTURE3",
1701   "SPARE0",
1702   "SPARE1",
1703   "SPARE0_PLUS_SECONDARY_COLOR",
1704   "E_TIMES_F"
1705};
1706
1707const char *rc_bias_str[] = {
1708   "NONE",
1709   "BIAS_BY_NEGATIVE_ONE_HALF"
1710};
1711
1712const char *rc_scale_str[] = {
1713   "NONE",
1714   "SCALE_BY_TWO",
1715   "SCALE_BY_FOUR",
1716   "SCALE_BY_ONE_HALF"
1717};
1718
1719/* Dump the current setup of the register combiners */
1720void dumpcombiners(UINT32 *m)
1721{
1722   int a, b, n, v;
1723
1724   n = m[0x1e60 / 4] & 0xf;
1725   printf("Combiners active: %d\n\r", n);
1726   for (a = 0; a < n; a++) {
1727      printf("Combiner %d\n\r", a + 1);
1728      printf(" RC_IN_ALPHA %08X\n\r", m[0x0260 / 4 + a]);
1729      for (b = 24; b >= 0; b = b - 8) {
1730         v = (m[0x0260 / 4 + a] >> b) & 0xf;
1731         printf("  %c_INPUT %s\n\r", 'A' + 3 - b / 8, rc_variable_str[v]);
1732         v = (m[0x0260 / 4 + a] >> (b + 4)) & 1;
1733         printf("  %c_COMPONENT_USAGE %s\n\r", 'A' + 3 - b / 8, rc_usage_alpha_str[v]);
1734         v = (m[0x0260 / 4 + a] >> (b + 5)) & 7;
1735         printf("  %c_MAPPING %s\n\r", 'A' + 3 - b / 8, rc_mapping_str[v]);
1736      }
1737      printf(" RC_IN_RGB %08X\n\r", m[0x0ac0 / 4 + a]);
1738      for (b = 24; b >= 0; b = b - 8) {
1739         v = (m[0x0ac0 / 4 + a] >> b) & 0xf;
1740         printf("  %c_INPUT %s\n\r", 'A' + 3 - b / 8, rc_variable_str[v]);
1741         v = (m[0x0ac0 / 4 + a] >> (b + 4)) & 1;
1742         printf("  %c_COMPONENT_USAGE %s\n\r", 'A' + 3 - b / 8, rc_usage_rgb_str[v]);
1743         v = (m[0x0ac0 / 4 + a] >> (b + 5)) & 7;
1744         printf("  %c_MAPPING %s\n\r", 'A' + 3 - b / 8, rc_mapping_str[v]);
1745      }
1746      printf(" RC_OUT_ALPHA %08X\n\r", m[0x0aa0 / 4 + a]);
1747      v = m[0x0aa0 / 4 + a] & 0xf;
1748      printf("  CD_OUTPUT %s\n\r", rc_variable_str[v]);
1749      v = (m[0x0aa0 / 4 + a] >> 4) & 0xf;
1750      printf("  AB_OUTPUT %s\n\r", rc_variable_str[v]);
1751      v = (m[0x0aa0 / 4 + a] >> 8) & 0xf;
1752      printf("  SUM_OUTPUT %s\n\r", rc_variable_str[v]);
1753      v = (m[0x0aa0 / 4 + a] >> 12) & 1;
1754      printf("  CD_DOT_PRODUCT %d\n\r", v);
1755      v = (m[0x0aa0 / 4 + a] >> 13) & 1;
1756      printf("  AB_DOT_PRODUCT %d\n\r", v);
1757      v = (m[0x0aa0 / 4 + a] >> 14) & 1;
1758      printf("  MUX_SUM %d\n\r", v);
1759      v = (m[0x0aa0 / 4 + a] >> 15) & 1;
1760      printf("  BIAS %s\n\r", rc_bias_str[v]);
1761      v = (m[0x0aa0 / 4 + a] >> 16) & 3;
1762      printf("  SCALE %s\n\r", rc_scale_str[v]);
1763      //v=(m[0x0aa0/4+a] >> 27) & 7;
1764      printf(" RC_OUT_RGB %08X\n\r", m[0x1e40 / 4 + a]);
1765      v = m[0x1e40 / 4 + a] & 0xf;
1766      printf("  CD_OUTPUT %s\n\r", rc_variable_str[v]);
1767      v = (m[0x1e40 / 4 + a] >> 4) & 0xf;
1768      printf("  AB_OUTPUT %s\n\r", rc_variable_str[v]);
1769      v = (m[0x1e40 / 4 + a] >> 8) & 0xf;
1770      printf("  SUM_OUTPUT %s\n\r", rc_variable_str[v]);
1771      v = (m[0x1e40 / 4 + a] >> 12) & 1;
1772      printf("  CD_DOT_PRODUCT %d\n\r", v);
1773      v = (m[0x1e40 / 4 + a] >> 13) & 1;
1774      printf("  AB_DOT_PRODUCT %d\n\r", v);
1775      v = (m[0x1e40 / 4 + a] >> 14) & 1;
1776      printf("  MUX_SUM %d\n\r", v);
1777      v = (m[0x1e40 / 4 + a] >> 15) & 1;
1778      printf("  BIAS %s\n\r", rc_bias_str[v]);
1779      v = (m[0x1e40 / 4 + a] >> 16) & 3;
1780      printf("  SCALE %s\n\r", rc_scale_str[v]);
1781      //v=(m[0x1e40/4+a] >> 27) & 7;
1782      printf("\n\r");
1783   }
1784   printf("Combiner final %08X %08X\n\r", m[0x0288 / 4], m[0x028c / 4]);
1785   for (a = 24; a >= 0; a = a - 8) {
1786      n = (m[0x0288 / 4] >> a) & 0xf;
1787      printf("  %c_INPUT %s\n\r", 'A' + 3 - a / 8, rc_variable_str[n]);
1788      n = (m[0x0288 / 4] >> (a + 4)) & 1;
1789      printf("  %c_COMPONENT_USAGE %s\n\r", 'A' + 3 - a / 8, rc_usage_rgb_str[n]);
1790      n = (m[0x0288 / 4] >> (a + 5)) & 7;
1791      printf("  %c_MAPPING %s\n\r", 'A' + 3 - a / 8, rc_mapping_str[n]);
1792   }
1793   for (a = 24; a >= 8; a = a - 8) {
1794      n = (m[0x028c / 4] >> a) & 0xf;
1795      printf("  %c_INPUT %s\n\r", 'E' + 3 - a / 8, rc_variable_str[n]);
1796      n = (m[0x028c / 4] >> (a + 4)) & 1;
1797      printf("  %c_COMPONENT_USAGE %s\n\r", 'E' + 3 - a / 8, rc_usage_rgb_str[n]);
1798      n = (m[0x028c / 4] >> (a + 5)) & 7;
1799      printf("  %c_MAPPING %s\n\r", 'E' + 3 - a / 8, rc_mapping_str[n]);
1800   }
1801   n = (m[0x028c / 4] >> 7) & 1;
1802   printf(" color sum clamp: %d\n\r", n);
1803}
1804#endif
1805
1806void nv2a_renderer::read_vertex(address_space & space, offs_t address, vertex_nv &vertex, int attrib)
1807{
1808   UINT32 u;
1809   int c, d, l;
1810
1811   l = vertexbuffer_size[attrib];
1812   switch (vertexbuffer_kind[attrib]) {
1813   case NV2A_VTXBUF_TYPE_FLOAT:
1814   default:
1815      vertex.attribute[attrib].fv[0] = 0;
1816      vertex.attribute[attrib].fv[1] = 0;
1817      vertex.attribute[attrib].fv[2] = 0;
1818      vertex.attribute[attrib].fv[3] = 1.0;
1819      for (c = d = 0; c < l; c++) {
1820         vertex.attribute[attrib].iv[c] = space.read_dword(address + d);
1821         d = d + 4;
1822      }
1823      break;
1824   case NV2A_VTXBUF_TYPE_UBYTE:
1825      break;
1826   case  NV2A_VTXBUF_TYPE_UNKNOWN_0:
1827      u = space.read_dword(address + 0);
1828      for (c = 0; c < l; c++) {
1829         vertex.attribute[attrib].fv[c] = (u & 0xff) / 255.0;
1830         u = u >> 8;
1831      }
1832      break;
1833   case NV2A_VTXBUF_TYPE_UNKNOWN_6: // ???
1834      u = space.read_dword(address + 0);
1835      vertex.attribute[attrib].fv[0] = (u & 0xff) / 255.0; // b
1836      vertex.attribute[attrib].fv[1] = ((u & 0xff00) >> 8) / 255.0;  // g
1837      vertex.attribute[attrib].fv[2] = ((u & 0xff0000) >> 16) / 255.0;  // r
1838      vertex.attribute[attrib].fv[3] = ((u & 0xff000000) >> 24) / 255.0;  // a
1839      break;
1840   }
1841}
1842
1843/* Read vertices data from system memory. Method 0x1810 */
1844int nv2a_renderer::read_vertices_0x1810(address_space & space, vertex_nv *destination, int offset, int limit)
1845{
1846   UINT32 m;
1847   int a, b;
1848
1849#ifdef MAME_DEBUG
1850   memset(destination, 0, sizeof(vertex_nv)*limit);
1851#endif
1852   for (m = 0; m < limit; m++) {
1853      b = enabled_vertex_attributes;
1854      for (a = 0; a < 16; a++) {
1855         if (b & 1) {
1856            read_vertex(space, vertexbuffer_address[a] + (m + offset)*vertexbuffer_stride[a], destination[m], a);
1857         }
1858         b = b >> 1;
1859      }
1860   }
1861   return m;
1862}
1863
1864/* Read vertices data from system memory. Method 0x1800 */
1865int nv2a_renderer::read_vertices_0x1800(address_space & space, vertex_nv *destination, UINT32 address, int limit)
1866{
1867   UINT32 data;
1868   UINT32 m, i, c;
1869   int a, b;
1870
1871#ifdef MAME_DEBUG
1872   memset(destination, 0, sizeof(vertex_nv)*limit);
1873#endif
1874   c = 0;
1875   for (m = 0; m < limit; m++) {
1876      if (indexesleft_count == 0) {
1877         data = space.read_dword(address);
1878         i = (indexesleft_first + indexesleft_count) & 7;
1879         indexesleft[i] = data & 0xffff;
1880         indexesleft[(i + 1) & 7] = (data >> 16) & 0xffff;
1881         indexesleft_count = indexesleft_count + 2;
1882         address += 4;
1883         c++;
1884      }
1885      b = enabled_vertex_attributes;
1886      for (a = 0; a < 16; a++) {
1887         if (b & 1) {
1888            read_vertex(space, vertexbuffer_address[a] + indexesleft[indexesleft_first] * vertexbuffer_stride[a], destination[m], a);
1889         }
1890         b = b >> 1;
1891      }
1892      indexesleft_first = (indexesleft_first + 1) & 7;
1893      indexesleft_count--;
1894   }
1895   return (int)c;
1896}
1897
1898/* Read vertices data from system memory. Method 0x1818 */
1899int nv2a_renderer::read_vertices_0x1818(address_space & space, vertex_nv *destination, UINT32 address, int limit)
1900{
1901   UINT32 m, vwords;
1902   int a, b;
1903
1904#ifdef MAME_DEBUG
1905   memset(destination, 0, sizeof(vertex_nv)*limit);
1906#endif
1907   vwords = vertex_attribute_words[15] + vertex_attribute_offset[15];
1908   for (m = 0; m < limit; m++) {
1909      b = enabled_vertex_attributes;
1910      for (a = 0; a < 16; a++) {
1911         if (b & 1) {
1912            read_vertex(space, address + vertex_attribute_offset[a] * 4, destination[m], a);
1913         }
1914         b = b >> 1;
1915      }
1916      address = address + vwords * 4;
1917   }
1918   return (int)(m*vwords);
1919}
1920
1921void nv2a_renderer::convert_vertices_poly(vertex_nv *source, vertex_t *destination, int count)
1922{
1923   int m, u;
1924
1925   // take each vertex with its attributes and obtain data for drawing
1926   // should use either the vertex program or transformation matrices
1927   if (vertex_pipeline == 4) {
1928      // transformation matrices
1929      // it is not implemented, so we pretend its always using screen coordinates
1930      for (m = 0; m < count; m++) {
1931         destination[m].x = source[m].attribute[0].fv[0];
1932         destination[m].y = source[m].attribute[0].fv[1];
1933         for (u = 0; u < 4; u++) // 0=b 1=g 2=r 3=a
1934            destination[m].p[u] = source[m].attribute[3].fv[u];
1935         for (u = 0; u < 4; u++) {
1936            destination[m].p[4 + u * 2] = source[m].attribute[9 + u].fv[0];
1937            destination[m].p[5 + u * 2] = source[m].attribute[9 + u].fv[1];
1938         }
1939      }
1940   }
1941   else {
1942      // vertex program
1943      vertex_nv vert[4];
1944      // run vertex program
1945      vertexprogram.exec.process(vertexprogram.start_instruction, source, vert, count);
1946      // copy data for poly.c
1947      for (m = 0; m < count; m++) {
1948         destination[m].x = vert[m].attribute[0].fv[0];
1949         destination[m].y = vert[m].attribute[0].fv[1];
1950         for (u = 0; u < 4; u++) // 0=b 1=g 2=r 3=a
1951            destination[m].p[u] = vert[m].attribute[3].fv[u];
1952         for (u = 0; u < 4; u++) {
1953            destination[m].p[4 + u * 2] = vert[m].attribute[9 + u].fv[0];
1954            destination[m].p[5 + u * 2] = vert[m].attribute[9 + u].fv[1];
1955         }
1956      }
1957   }
1958}
1959
1960void nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UINT32 subchannel, UINT32 method, UINT32 address, int &countlen)
1961{
1962   UINT32 maddress;
1963   UINT32 data;
1964
1965   maddress = method * 4;
1966   data = space.read_dword(address);
1967   channel[chanel][subchannel].object.method[method] = data;
1968   if (maddress == 0x17fc) {
1969      indexesleft_count = 0;
1970      indexesleft_first = 0;
1971      primitives_count = 0;
1972      countlen--;
1973   }
1974   if (maddress == 0x1810) {
1975      // draw vertices
1976      int offset, count, type;
1977      UINT32 n;
1978      render_delegate renderspans;
1979
1980      offset = data & 0xffffff;
1981      count = (data >> 24) & 0xff;
1982      type = channel[chanel][subchannel].object.method[0x17fc / 4];
1983      if (((channel[chanel][subchannel].object.method[0x1e60 / 4] & 7) > 0) && (combiner.used != 0)) {
1984         renderspans = render_delegate(FUNC(nv2a_renderer::render_register_combiners), this);
1985      }
1986      else if (texture[0].enabled) {
1987         renderspans = render_delegate(FUNC(nv2a_renderer::render_texture_simple), this);
1988      }
1989      else
1990         renderspans = render_delegate(FUNC(nv2a_renderer::render_color), this);
1991#ifdef LOG_NV2A
1992      printf("vertex %d %d %d\n\r", type, offset, count);
1993#endif
1994      if (type == nv2a_renderer::QUADS) {
1995         for (n = 0; n <= count; n += 4) {
1996            vertex_nv vert[4];
1997            vertex_t xy[4];
1998
1999            read_vertices_0x1810(space, vert, n + offset, 4);
2000            convert_vertices_poly(vert, xy, 4);
2001            render_polygon<4>(fb.cliprect(), renderspans, 4 + 4 * 2, xy); // 4 rgba, 4 texture units 2 uv
2002         }
2003         wait();
2004      }
2005      else if (type == nv2a_renderer::TRIANGLE_STRIP) {
2006         vertex_nv vert[4];
2007         vertex_t xy[4];
2008
2009         read_vertices_0x1810(space, vert, offset, 2);
2010         convert_vertices_poly(vert, xy, 2);
2011         count = count - 2;
2012         offset = offset + 2;
2013         for (n = 0; n <= count; n++) {
2014            read_vertices_0x1810(space, vert + ((n + 2) & 3), offset + n, 1);
2015            convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 1);
2016            render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[((n & 1) + n) & 3], xy[((~n & 1) + n) & 3], xy[(2 + n) & 3]);
2017         }
2018         wait();
2019      }
2020      else {
2021         logerror("Unsupported primitive %d for method 0x1810\n", type);
2022      }
2023      countlen--;
2024   }
2025   if (maddress == 0x1800) {
2026      UINT32 type, n;
2027      render_delegate renderspans;
2028
2029      if (((channel[chanel][subchannel].object.method[0x1e60 / 4] & 7) > 0) && (combiner.used != 0)) {
2030         renderspans = render_delegate(FUNC(nv2a_renderer::render_register_combiners), this);
2031      }
2032      else if (texture[0].enabled) {
2033         renderspans = render_delegate(FUNC(nv2a_renderer::render_texture_simple), this);
2034      }
2035      else
2036         renderspans = render_delegate(FUNC(nv2a_renderer::render_color), this);
2037      // vertices are selected from the vertex buffer using an array of indexes
2038      // each dword after 1800 contains two 16 bit index values to select the vartices
2039      type = channel[chanel][subchannel].object.method[0x17fc / 4];
2040#ifdef LOG_NV2A
2041      printf("vertex %d %d %d\n\r", type, offset, count);
2042#endif
2043      if (type == nv2a_renderer::QUADS) {
2044         while (1) {
2045            vertex_nv vert[4];
2046            vertex_t xy[4];
2047            int c;
2048
2049            if ((countlen * 2 + indexesleft_count) < 4)
2050               break;
2051            c = read_vertices_0x1800(space, vert, address, 4);
2052            address = address + c * 4;
2053            countlen = countlen - c;
2054            convert_vertices_poly(vert, xy, 4);
2055            render_polygon<4>(fb.cliprect(), renderspans, 4 + 4 * 2, xy); // 4 rgba, 4 texture units 2 uv
2056         }
2057         while (countlen > 0) {
2058            data = space.read_dword(address);
2059            n = (indexesleft_first + indexesleft_count) & 7;
2060            indexesleft[n] = data & 0xffff;
2061            indexesleft[(n + 1) & 7] = (data >> 16) & 0xffff;
2062            indexesleft_count = indexesleft_count + 2;
2063            address += 4;
2064            countlen--;
2065         }
2066         wait();
2067      }
2068      else if (type == nv2a_renderer::TRIANGLES) {
2069         while (1) {
2070            vertex_nv vert[3];
2071            vertex_t xy[3];
2072            int c;
2073
2074            if ((countlen * 2 + indexesleft_count) < 3)
2075               break;
2076            c = read_vertices_0x1800(space, vert, address, 3);
2077            address = address + c * 4;
2078            countlen = countlen - c;
2079            convert_vertices_poly(vert, xy, 3);
2080            render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[0], xy[1], xy[2]); // 4 rgba, 4 texture units 2 uv
2081         }
2082         while (countlen > 0) {
2083            data = space.read_dword(address);
2084            n = (indexesleft_first + indexesleft_count) & 7;
2085            indexesleft[n] = data & 0xffff;
2086            indexesleft[(n + 1) & 7] = (data >> 16) & 0xffff;
2087            indexesleft_count = indexesleft_count + 2;
2088            address += 4;
2089            countlen--;
2090         }
2091         wait();
2092      }
2093      else if (type == nv2a_renderer::TRIANGLE_STRIP) {
2094         if ((countlen * 2 + indexesleft_count) >= 3) {
2095            vertex_nv vert[4];
2096            vertex_t xy[4];
2097            int c, count;
2098
2099            c = read_vertices_0x1800(space, vert, address, 2);
2100            convert_vertices_poly(vert, xy, 2);
2101            address = address + c * 4;
2102            countlen = countlen - c;
2103            count = countlen * 2 + indexesleft_count;
2104            for (n = 0; n < count; n++) { // <=
2105               c = read_vertices_0x1800(space, vert + ((n + 2) & 3), address, 1);
2106               address = address + c * 4;
2107               countlen = countlen - c;
2108               convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 1);
2109               if (xy[(n + 2) & 3].y > 293800000.0)
2110                  xy[(n + 2) & 3].y = xy[(n + 2) & 3].y + 1.0;
2111               render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[((n & 1) + n) & 3], xy[((~n & 1) + n) & 3], xy[(2 + n) & 3]);
2112            }
2113         }
2114         while (countlen > 0) {
2115            data = space.read_dword(address);
2116            n = (indexesleft_first + indexesleft_count) & 7;
2117            indexesleft[n] = data & 0xffff;
2118            indexesleft[(n + 1) & 7] = (data >> 16) & 0xffff;
2119            indexesleft_count = indexesleft_count + 2;
2120            address += 4;
2121            countlen--;
2122         }
2123         wait();
2124      }
2125      else {
2126         logerror("Unsupported primitive %d for method 0x1800\n", type);
2127         countlen = 0;
2128      }
2129   }
2130   if (maddress == 0x1818) {
2131      int n;
2132      int type;
2133      render_delegate renderspans;
2134
2135      if (((channel[chanel][subchannel].object.method[0x1e60 / 4] & 7) > 0) && (combiner.used != 0)) {
2136         renderspans = render_delegate(FUNC(nv2a_renderer::render_register_combiners), this);
2137      }
2138      else if (texture[0].enabled) {
2139         renderspans = render_delegate(FUNC(nv2a_renderer::render_texture_simple), this);
2140      }
2141      else
2142         renderspans = render_delegate(FUNC(nv2a_renderer::render_color), this);
2143      // vertices are taken from the next words, not from a vertex buffer
2144      // first send primitive type with 17fc
2145      // then countlen number of dwords with 1818
2146      // end with 17fc primitive type 0
2147      // at 1760 16 words specify the vertex format:for each possible vertex attribute the number of components (0=not present) and type of each
2148      type = channel[chanel][subchannel].object.method[0x17fc / 4];
2149      if (type == nv2a_renderer::TRIANGLE_FAN) {
2150         vertex_nv vert[3];
2151         vertex_t xy[3];
2152         int c;
2153
2154         c = read_vertices_0x1818(space, vert, address, 2);
2155         convert_vertices_poly(vert, xy, 2);
2156         countlen = countlen - c;
2157         if (countlen < 0) {
2158            logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
2159            countlen = 0;
2160            return;
2161         }
2162         address = address + c * 4;
2163         for (n = 1; countlen > 0; n++) {
2164            c = read_vertices_0x1818(space, vert + ((n & 1) + 1), address, 1);
2165            countlen = countlen - c;
2166            if (countlen < 0) {
2167               logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
2168               countlen = 0;
2169               break;
2170            }
2171            address = address + c * 4;
2172            convert_vertices_poly(vert + ((n & 1) + 1), xy + ((n & 1) + 1), 1);
2173            render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[0], xy[(~n & 1) + 1], xy[(n & 1) + 1]);
2174         }
2175         wait();
2176      }
2177      else if (type == nv2a_renderer::TRIANGLE_STRIP) {
2178         vertex_nv vert[4];
2179         vertex_t xy[4];
2180         int c;
2181
2182         c = read_vertices_0x1818(space, vert, address, 2);
2183         convert_vertices_poly(vert, xy, 2);
2184         countlen = countlen - c;
2185         if (countlen < 0) {
2186            logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
2187            countlen = 0;
2188            return;
2189         }
2190         address = address + c * 4;
2191         for (n = 0; countlen > 0; n++) {
2192            c = read_vertices_0x1818(space, vert + ((n + 2) & 3), address, 1);
2193            convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 1);
2194            countlen = countlen - c;
2195            if (countlen < 0) {
2196               logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
2197               countlen = 0;
2198               break;
2199            }
2200            address = address + c * 4;
2201            render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[((n & 1) + n) & 3], xy[((~n & 1) + n) & 3], xy[(2 + n) & 3]);
2202         }
2203         wait();
2204      }
2205      else if (type == nv2a_renderer::QUADS) {
2206         while (countlen > 0) {
2207            vertex_nv vert[4];
2208            vertex_t xy[4];
2209            int c;
2210
2211            c = read_vertices_0x1818(space, vert, address, 4);
2212            convert_vertices_poly(vert, xy, 4);
2213            countlen = countlen - c;
2214            if (countlen < 0) {
2215               logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
2216               countlen = 0;
2217               break;
2218            }
2219            address = address + c * 4;
2220            render_polygon<4>(fb.cliprect(), renderspans, 4 + 4 * 2, xy); // 4 rgba, 4 texture units 2 uv
2221         }
2222         wait();
2223      }
2224      else if (type == nv2a_renderer::QUAD_STRIP) {
2225         vertex_nv vert[4];
2226         vertex_t xy[4];
2227         int c;
2228
2229         c = read_vertices_0x1818(space, vert, address, 2);
2230         convert_vertices_poly(vert, xy, 2);
2231         countlen = countlen - c;
2232         if (countlen < 0) {
2233            logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
2234            countlen = 0;
2235            return;
2236         }
2237         address = address + c * 4;
2238         for (n = 0; countlen > 0; n += 2) {
2239            c = read_vertices_0x1818(space, vert + ((n + 2) & 3), address + ((n + 2) & 3), 2);
2240            convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 2);
2241            countlen = countlen - c;
2242            if (countlen < 0) {
2243               logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
2244               countlen = 0;
2245               return;
2246            }
2247            address = address + c * 4;
2248            render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[n & 3], xy[(n + 1) & 3], xy[(n + 2) & 3]);
2249            render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[(n + 2) & 3], xy[(n + 1) & 3], xy[(n + 3) & 3]);
2250         }
2251         wait();
2252      }
2253      else {
2254         logerror("Unsupported primitive %d for method 0x1818\n", type);
2255         countlen = 0;
2256      }
2257   }
2258   if ((maddress >= 0x1720) && (maddress < 0x1760)) {
2259      int bit = method - 0x1720 / 4;
2260
2261      if (data & 0x80000000)
2262         vertexbuffer_address[bit] = (data & 0x0fffffff) + dma_offset[1];
2263      else
2264         vertexbuffer_address[bit] = (data & 0x0fffffff) + dma_offset[0];
2265   }
2266   if ((maddress >= 0x1760) && (maddress < 0x17A0)) {
2267      int bit = method - 0x1760 / 4;
2268
2269      vertexbuffer_stride[bit] = (data >> 8) & 255;
2270      vertexbuffer_kind[bit] = data & 15;
2271      vertexbuffer_size[bit] = (data >> 4) & 15;
2272      switch (vertexbuffer_kind[bit]) {
2273      case NV2A_VTXBUF_TYPE_UNKNOWN_0:
2274         vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 1) >> 2;
2275         break;
2276      case NV2A_VTXBUF_TYPE_FLOAT:
2277         vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 4) >> 2;
2278         break;
2279      case NV2A_VTXBUF_TYPE_UBYTE:
2280         vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 1) >> 2;
2281         break;
2282      case NV2A_VTXBUF_TYPE_USHORT:
2283         vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 2) >> 2;
2284         break;
2285      case NV2A_VTXBUF_TYPE_UNKNOWN_6:
2286         vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 4) >> 2;
2287         break;
2288      default:
2289         vertex_attribute_words[bit] = 0;
2290      }
2291      if (vertexbuffer_size[bit] > 0)
2292         enabled_vertex_attributes |= (1 << bit);
2293      else
2294         enabled_vertex_attributes &= ~(1 << bit);
2295      for (int n = bit + 1; n < 16; n++) {
2296         if ((enabled_vertex_attributes & (1 << (n - 1))) != 0)
2297            vertex_attribute_offset[n] = vertex_attribute_offset[n - 1] + vertex_attribute_words[n - 1];
2298         else
2299            vertex_attribute_offset[n] = vertex_attribute_offset[n - 1];
2300      }
2301      countlen--;
2302   }
2303   if ((maddress == 0x1d6c) || (maddress == 0x1d70) || (maddress == 0x1a4))
2304      countlen--;
2305   if (maddress == 0x019c) {
2306      geforce_read_dma_object(data, dma_offset[0], dma_size[0]);
2307   }
2308   if (maddress == 0x01a0) {
2309      geforce_read_dma_object(data, dma_offset[1], dma_size[1]);
2310   }
2311   if (maddress == 0x1d70) {
2312      // with 1d70 write the value at offest [1d6c] inside dma object [1a4]
2313      UINT32 offset, base;
2314      UINT32 dmahand, dmaoff, smasiz;
2315
2316      offset = channel[chanel][subchannel].object.method[0x1d6c / 4];
2317      dmahand = channel[chanel][subchannel].object.method[0x1a4 / 4];
2318      geforce_read_dma_object(dmahand, dmaoff, smasiz);
2319      base = dmaoff;
2320      space.write_dword(base + offset, data);
2321      countlen--;
2322   }
2323   if (maddress == 0x1d94) {
2324      // possible buffers: color, depth, stencil, and accumulation
2325      // clear framebuffer
2326      if (data & 0xf0) {
2327         // clear colors
2328         UINT32 color = channel[chanel][subchannel].object.method[0x1d90 / 4];
2329         fb.fill(color);
2330         //printf("clearscreen\n\r");
2331      }
2332      if (data & 0x03) {
2333         // clear stencil+zbuffer
2334      }
2335      countlen--;
2336   }
2337   if (maddress == 0x0210) {
2338      // framebuffer offset ?
2339      countlen--;
2340   }
2341   if (maddress == 0x0214) {
2342      // zbuffer offset ?
2343      countlen--;
2344   }
2345   if (maddress == 0x0300) {
2346      alpha_test_enabled = data != 0;
2347   }
2348   if (maddress == 0x033c) {
2349      alpha_func = data;
2350   }
2351   if (maddress == 0x0340) {
2352      alpha_reference = data;
2353   }
2354   if (maddress == 0x0304) {
2355      if (logical_operation_enabled)
2356         blending_enabled = false;
2357      else
2358         blending_enabled = data != 0;
2359   }
2360   if (maddress == 0x0344) {
2361      blend_function_source = data;
2362   }
2363   if (maddress == 0x0348) {
2364      blend_function_destination = data;
2365   }
2366   if (maddress == 0x034c) {
2367      blend_color = data;
2368   }
2369   if (maddress == 0x0350) {
2370      blend_equation = data;
2371   }
2372   if (maddress == 0x0d40) {
2373      if (data != 0)
2374         blending_enabled = false;
2375      else
2376         blending_enabled = channel[chanel][subchannel].object.method[0x0304 / 4] != 0;
2377      logical_operation_enabled = data != 0;
2378   }
2379   if (maddress == 0x0d44) {
2380      logical_operation = data;
2381   }
2382   // Texture Units
2383   if ((maddress >= 0x1b00) && (maddress < 0x1c00)) {
2384      int unit;//,off;
2385
2386      unit = (maddress >> 6) & 3;
2387      //off=maddress & 0xc0;
2388      maddress = maddress & ~0xc0;
2389      if (maddress == 0x1b00) {
2390         UINT32 offset;//,base;
2391         //UINT32 dmahand,dmaoff,dmasiz;
2392
2393         offset = data;
2394         texture[unit].buffer = space.get_read_ptr(offset);
2395         /*if (dma0 != 0) {
2396         dmahand=channel[channel][subchannel].object.method[0x184/4];
2397         geforce_read_dma_object(dmahand,dmaoff,smasiz);
2398         } else if (dma1 != 0) {
2399         dmahand=channel[channel][subchannel].object.method[0x188/4];
2400         geforce_read_dma_object(dmahand,dmaoff,smasiz);
2401         }*/
2402      }
2403      if (maddress == 0x1b04) {
2404         //int dma0,dma1,cubic,noborder,dims,mipmap;
2405         int basesizeu, basesizev, basesizew, format;
2406
2407         //dma0=(data >> 0) & 1;
2408         //dma1=(data >> 1) & 1;
2409         //cubic=(data >> 2) & 1;
2410         //noborder=(data >> 3) & 1;
2411         //dims=(data >> 4) & 15;
2412         //mipmap=(data >> 19) & 1;
2413         format = (data >> 8) & 255;
2414         basesizeu = (data >> 20) & 15;
2415         basesizev = (data >> 24) & 15;
2416         basesizew = (data >> 28) & 15;
2417         texture[unit].sizeu = 1 << basesizeu;
2418         texture[unit].sizev = 1 << basesizev;
2419         texture[unit].sizew = 1 << basesizew;
2420         texture[unit].dilate = dilatechose[(basesizeu << 4) + basesizev];
2421         texture[unit].format = format;
2422         if (debug_grab_texttype == format) {
2423            FILE *f;
2424            int written;
2425
2426            debug_grab_texttype = -1;
2427            f = fopen(debug_grab_textfile, "wb");
2428            if (f) {
2429               written = (int)fwrite(texture[unit].buffer, texture[unit].sizeu*texture[unit].sizev * 4, 1, f);
2430               fclose(f);
2431               logerror("Written %d bytes of texture to specified file\n", written);
2432            }
2433            else
2434               logerror("Unable to save texture to specified file\n");
2435         }
2436      }
2437      if (maddress == 0x1b0c) {
2438         // enable texture
2439         int enable;
2440
2441         enable = (data >> 30) & 1;
2442         texture[unit].enabled = enable;
2443      }
2444      if (maddress == 0x1b10) {
2445         texture[unit].rectangle_pitch = data >> 16;
2446      }
2447      countlen--;
2448   }
2449   // modelview matrix
2450   if ((maddress >= 0x0480) && (maddress < 0x04c0)) {
2451      maddress = (maddress - 0x0480) / 4;
2452      *(UINT32 *)(&matrix.modelview[maddress]) = data;
2453      countlen--;
2454   }
2455   // inverse modelview matrix
2456   if ((maddress >= 0x0580) && (maddress < 0x05c0)) {
2457      maddress = (maddress - 0x0580) / 4;
2458      *(UINT32 *)(&matrix.modelview_inverse[maddress]) = data;
2459      countlen--;
2460   }
2461   // projection matrix
2462   if ((maddress >= 0x0680) && (maddress < 0x06c0)) {
2463      maddress = (maddress - 0x0680) / 4;
2464      *(UINT32 *)(&matrix.projection[maddress]) = data;
2465      countlen--;
2466   }
2467   // viewport translate
2468   if ((maddress >= 0x0a20) && (maddress < 0x0a30)) {
2469      maddress = (maddress - 0x0a20) / 4;
2470      *(UINT32 *)(&matrix.translate[maddress]) = data;
2471      // set corresponding vertex shader constant too
2472      vertexprogram.exec.c_constant[59].iv[maddress] = data; // constant -37
2473      countlen--;
2474   }
2475   // viewport scale
2476   if ((maddress >= 0x0af0) && (maddress < 0x0b00)) {
2477      maddress = (maddress - 0x0af0) / 4;
2478      *(UINT32 *)(&matrix.scale[maddress]) = data;
2479      // set corresponding vertex shader constant too
2480      vertexprogram.exec.c_constant[58].iv[maddress] = data; // constant -38
2481      countlen--;
2482   }
2483   // Vertex program (shader)
2484   if (maddress == 0x1e94) {
2485      /*if (data == 2)
2486      logerror("Enabled vertex program\n");
2487      else if (data == 4)
2488      logerror("Enabled fixed function pipeline\n");
2489      else if (data == 6)
2490      logerror("Enabled both fixed function pipeline and vertex program ?\n");
2491      else
2492      logerror("Unknown value %d to method 0x1e94\n",data);*/
2493      vertex_pipeline = data & 6;
2494      countlen--;
2495   }
2496   if (maddress == 0x1e9c) {
2497      //logerror("VP_UPLOAD_FROM_ID %d\n",data);
2498      vertexprogram.upload_instruction_index = data;
2499      vertexprogram.upload_instruction_component = 0;
2500      countlen--;
2501   }
2502   if (maddress == 0x1ea0) {
2503      //logerror("VP_START_FROM_ID %d\n",data);
2504      vertexprogram.instructions = vertexprogram.upload_instruction_index;
2505      vertexprogram.start_instruction = data;
2506      countlen--;
2507   }
2508   if (maddress == 0x1ea4) {
2509      //logerror("VP_UPLOAD_CONST_ID %d\n",data);
2510      vertexprogram.upload_parameter_index = data;
2511      vertexprogram.upload_parameter_component = 0;
2512      countlen--;
2513   }
2514   if ((maddress >= 0x0b00) && (maddress < 0x0b80)) {
2515      //logerror("VP_UPLOAD_INST\n");
2516      if (vertexprogram.upload_instruction_index < 192) {
2517         vertexprogram.exec.op[vertexprogram.upload_instruction_index].i[vertexprogram.upload_instruction_component] = data;
2518         vertexprogram.exec.op[vertexprogram.upload_instruction_index].modified |= (1 << vertexprogram.upload_instruction_component);
2519      }
2520      else
2521         logerror("Need to increase size of vertexprogram.instruction to %d\n\r", vertexprogram.upload_instruction_index);
2522      if (vertexprogram.exec.op[vertexprogram.upload_instruction_index].modified == 15) {
2523         vertexprogram.exec.op[vertexprogram.upload_instruction_index].modified = 0;
2524         vertexprogram.exec.decode_instruction(vertexprogram.upload_instruction_index);
2525      }
2526      vertexprogram.upload_instruction_component++;
2527      if (vertexprogram.upload_instruction_component >= 4) {
2528         vertexprogram.upload_instruction_component = 0;
2529         vertexprogram.upload_instruction_index++;
2530      }
2531   }
2532   if ((maddress >= 0x0b80) && (maddress < 0x0c00)) {
2533      //logerror("VP_UPLOAD_CONST\n");
2534      if (vertexprogram.upload_parameter_index < 256)
2535         vertexprogram.exec.c_constant[vertexprogram.upload_parameter_index].iv[vertexprogram.upload_parameter_component] = data;
2536      else
2537         logerror("Need to increase size of vertexprogram.parameter to %d\n\r", vertexprogram.upload_parameter_index);
2538      vertexprogram.upload_parameter_component++;
2539      if (vertexprogram.upload_parameter_component >= 4) {
2540         vertexprogram.upload_parameter_component = 0;
2541         vertexprogram.upload_parameter_index++;
2542      }
2543   }
2544   // Register combiners
2545   if (maddress == 0x1e60) {
2546      combiner.stages = data & 15;
2547      countlen--;
2548   }
2549   if (maddress == 0x0288) {
2550      combiner.final.mapin_rgbD_input = data & 15;
2551      combiner.final.mapin_rgbD_component = (data >> 4) & 1;
2552      combiner.final.mapin_rgbD_mapping = (data >> 5) & 7;
2553      combiner.final.mapin_rgbC_input = (data >> 8) & 15;
2554      combiner.final.mapin_rgbC_component = (data >> 12) & 1;
2555      combiner.final.mapin_rgbC_mapping = (data >> 13) & 7;
2556      combiner.final.mapin_rgbB_input = (data >> 16) & 15;
2557      combiner.final.mapin_rgbB_component = (data >> 20) & 1;
2558      combiner.final.mapin_rgbB_mapping = (data >> 21) & 7;
2559      combiner.final.mapin_rgbA_input = (data >> 24) & 15;
2560      combiner.final.mapin_rgbA_component = (data >> 28) & 1;
2561      combiner.final.mapin_rgbA_mapping = (data >> 29) & 7;
2562      countlen--;
2563   }
2564   if (maddress == 0x028c) {
2565      combiner.final.color_sum_clamp = (data >> 7) & 1;
2566      combiner.final.mapin_aG_input = (data >> 8) & 15;
2567      combiner.final.mapin_aG_component = (data >> 12) & 1;
2568      combiner.final.mapin_aG_mapping = (data >> 13) & 7;
2569      combiner.final.mapin_rgbF_input = (data >> 16) & 15;
2570      combiner.final.mapin_rgbF_component = (data >> 20) & 1;
2571      combiner.final.mapin_rgbF_mapping = (data >> 21) & 7;
2572      combiner.final.mapin_rgbE_input = (data >> 24) & 15;
2573      combiner.final.mapin_rgbE_component = (data >> 28) & 1;
2574      combiner.final.mapin_rgbE_mapping = (data >> 29) & 7;
2575      countlen--;
2576   }
2577   if (maddress == 0x1e20) {
2578      combiner_argb8_float(data, combiner.final.register_constantcolor0);
2579      countlen--;
2580   }
2581   if (maddress == 0x1e24) {
2582      combiner_argb8_float(data, combiner.final.register_constantcolor1);
2583      countlen--;
2584   }
2585   if ((maddress >= 0x0260) && (maddress < 0x0280)) {
2586      int n;
2587
2588      n = (maddress - 0x0260) >> 2;
2589      combiner.stage[n].mapin_aD_input = data & 15;
2590      combiner.stage[n].mapin_aD_component = (data >> 4) & 1;
2591      combiner.stage[n].mapin_aD_mapping = (data >> 5) & 7;
2592      combiner.stage[n].mapin_aC_input = (data >> 8) & 15;
2593      combiner.stage[n].mapin_aC_component = (data >> 12) & 1;
2594      combiner.stage[n].mapin_aC_mapping = (data >> 13) & 7;
2595      combiner.stage[n].mapin_aB_input = (data >> 16) & 15;
2596      combiner.stage[n].mapin_aB_component = (data >> 20) & 1;
2597      combiner.stage[n].mapin_aB_mapping = (data >> 21) & 7;
2598      combiner.stage[n].mapin_aA_input = (data >> 24) & 15;
2599      combiner.stage[n].mapin_aA_component = (data >> 28) & 1;
2600      combiner.stage[n].mapin_aA_mapping = (data >> 29) & 7;
2601      countlen--;
2602   }
2603   if ((maddress >= 0x0ac0) && (maddress < 0x0ae0)) {
2604      int n;
2605
2606      n = (maddress - 0x0ac0) >> 2;
2607      combiner.stage[n].mapin_rgbD_input = data & 15;
2608      combiner.stage[n].mapin_rgbD_component = (data >> 4) & 1;
2609      combiner.stage[n].mapin_rgbD_mapping = (data >> 5) & 7;
2610      combiner.stage[n].mapin_rgbC_input = (data >> 8) & 15;
2611      combiner.stage[n].mapin_rgbC_component = (data >> 12) & 1;
2612      combiner.stage[n].mapin_rgbC_mapping = (data >> 13) & 7;
2613      combiner.stage[n].mapin_rgbB_input = (data >> 16) & 15;
2614      combiner.stage[n].mapin_rgbB_component = (data >> 20) & 1;
2615      combiner.stage[n].mapin_rgbB_mapping = (data >> 21) & 7;
2616      combiner.stage[n].mapin_rgbA_input = (data >> 24) & 15;
2617      combiner.stage[n].mapin_rgbA_component = (data >> 28) & 1;
2618      combiner.stage[n].mapin_rgbA_mapping = (data >> 29) & 7;
2619      countlen--;
2620   }
2621   if ((maddress >= 0x0a60) && (maddress < 0x0a80)) {
2622      int n;
2623
2624      n = (maddress - 0x0a60) >> 2;
2625      combiner_argb8_float(data, combiner.stage[n].register_constantcolor0);
2626      countlen--;
2627   }
2628   if ((maddress >= 0x0a80) && (maddress < 0x0aa0)) {
2629      int n;
2630
2631      n = (maddress - 0x0a80) >> 2;
2632      combiner_argb8_float(data, combiner.stage[n].register_constantcolor1);
2633      countlen--;
2634   }
2635   if ((maddress >= 0x0aa0) && (maddress < 0x0ac0)) {
2636      int n;
2637
2638      n = (maddress - 0x0aa0) >> 2;
2639      combiner.stage[n].mapout_aCD_output = data & 15;
2640      combiner.stage[n].mapout_aAB_output = (data >> 4) & 15;
2641      combiner.stage[n].mapout_aSUM_output = (data >> 8) & 15;
2642      combiner.stage[n].mapout_aCD_dotproduct = (data >> 12) & 1;
2643      combiner.stage[n].mapout_aAB_dotproduct = (data >> 13) & 1;
2644      combiner.stage[n].mapout_a_muxsum = (data >> 14) & 1;
2645      combiner.stage[n].mapout_a_bias = (data >> 15) & 1;
2646      combiner.stage[n].mapout_a_scale = (data >> 16) & 3;
2647      //combiner.=(data >> 27) & 7;
2648      countlen--;
2649   }
2650   if ((maddress >= 0x1e40) && (maddress < 0x1e60)) {
2651      int n;
2652
2653      n = (maddress - 0x1e40) >> 2;
2654      combiner.stage[n].mapout_rgbCD_output = data & 15;
2655      combiner.stage[n].mapout_rgbAB_output = (data >> 4) & 15;
2656      combiner.stage[n].mapout_rgbSUM_output = (data >> 8) & 15;
2657      combiner.stage[n].mapout_rgbCD_dotproduct = (data >> 12) & 1;
2658      combiner.stage[n].mapout_rgbAB_dotproduct = (data >> 13) & 1;
2659      combiner.stage[n].mapout_rgb_muxsum = (data >> 14) & 1;
2660      combiner.stage[n].mapout_rgb_bias = (data >> 15) & 1;
2661      combiner.stage[n].mapout_rgb_scale = (data >> 16) & 3;
2662      //combiner.=(data >> 27) & 7;
2663      countlen--;
2664   }
2665}
2666
2667int nv2a_renderer::toggle_register_combiners_usage()
2668{
2669   combiner.used = 1 - combiner.used;
2670   return combiner.used;
2671}
2672
2673void nv2a_renderer::debug_grab_texture(int type, const char *filename)
2674{
2675   debug_grab_texttype = type;
2676   if (debug_grab_textfile == NULL)
2677      debug_grab_textfile = (char *)malloc(128);
2678   strncpy(debug_grab_textfile, filename, 127);
2679}
2680
2681void nv2a_renderer::debug_grab_vertex_program_slot(int slot, UINT32 *instruction)
2682{
2683   if (slot >= 1024 / 4)
2684      return;
2685   instruction[0] = vertexprogram.exec.op[slot].i[0];
2686   instruction[1] = vertexprogram.exec.op[slot].i[1];
2687   instruction[2] = vertexprogram.exec.op[slot].i[2];
2688   instruction[3] = vertexprogram.exec.op[slot].i[3];
2689}
2690
2691void nv2a_renderer::savestate_items()
2692{
2693}
2694
2695void nv2a_renderer::combiner_argb8_float(UINT32 color, float reg[4])
2696{
2697   reg[0] = (float)(color & 0xff) / 255.0;
2698   reg[1] = (float)((color >> 8) & 0xff) / 255.0;
2699   reg[2] = (float)((color >> 16) & 0xff) / 255.0;
2700   reg[3] = (float)((color >> 24) & 0xff) / 255.0;
2701}
2702
2703UINT32 nv2a_renderer::combiner_float_argb8(float reg[4])
2704{
2705   UINT32 r, g, b, a;
2706
2707   a = reg[3] * 255.0;
2708   b = reg[2] * 255.0;
2709   g = reg[1] * 255.0;
2710   r = reg[0] * 255.0;
2711   return (a << 24) | (r << 16) | (g << 8) | b;
2712}
2713
2714float nv2a_renderer::combiner_map_input_select(int code, int index)
2715{
2716   switch (code) {
2717   case 0:
2718   default:
2719      return combiner.register_zero[index];
2720   case 1:
2721      return combiner.register_color0[index];
2722   case 2:
2723      return combiner.register_color1[index];
2724   case 3:
2725      return combiner.register_fogcolor[index];
2726   case 4:
2727      return combiner.register_primarycolor[index];
2728   case 5:
2729      return combiner.register_secondarycolor[index];
2730   case 8:
2731      return combiner.register_texture0color[index];
2732   case 9:
2733      return combiner.register_texture1color[index];
2734   case 10:
2735      return combiner.register_texture2color[index];
2736   case 11:
2737      return combiner.register_texture3color[index];
2738   case 12:
2739      return combiner.register_spare0[index];
2740   case 13:
2741      return combiner.register_spare1[index];
2742   case 14:
2743      return combiner.variable_sumclamp[index];
2744   case 15:
2745      return combiner.variable_EF[index];
2746   }
2747
2748   // never executed
2749   //return 0;
2750}
2751
2752float *nv2a_renderer::combiner_map_input_select3(int code)
2753{
2754   switch (code) {
2755   case 0:
2756   default:
2757      return combiner.register_zero;
2758   case 1:
2759      return combiner.register_color0;
2760   case 2:
2761      return combiner.register_color1;
2762   case 3:
2763      return combiner.register_fogcolor;
2764   case 4:
2765      return combiner.register_primarycolor;
2766   case 5:
2767      return combiner.register_secondarycolor;
2768   case 8:
2769      return combiner.register_texture0color;
2770   case 9:
2771      return combiner.register_texture1color;
2772   case 10:
2773      return combiner.register_texture2color;
2774   case 11:
2775      return combiner.register_texture3color;
2776   case 12:
2777      return combiner.register_spare0;
2778   case 13:
2779      return combiner.register_spare1;
2780   case 14:
2781      return combiner.variable_sumclamp;
2782   case 15:
2783      return combiner.variable_EF;
2784   }
2785
2786   // never executed
2787   //return 0;
2788}
2789
2790float *nv2a_renderer::combiner_map_output_select3(int code)
2791{
2792   switch (code) {
2793   case 0:
2794      return 0;
2795   case 1:
2796      return 0;
2797   case 2:
2798      return 0;
2799   case 3:
2800      return 0;
2801   case 4:
2802      return combiner.register_primarycolor;
2803   case 5:
2804      return combiner.register_secondarycolor;
2805   case 8:
2806      return combiner.register_texture0color;
2807   case 9:
2808      return combiner.register_texture1color;
2809   case 10:
2810      return combiner.register_texture2color;
2811   case 11:
2812      return combiner.register_texture3color;
2813   case 12:
2814      return combiner.register_spare0;
2815   case 13:
2816      return combiner.register_spare1;
2817   case 14:
2818      return 0;
2819   case 15:
2820   default:
2821      return 0;
2822   }
2823}
2824
2825float nv2a_renderer::combiner_map_input_function(int code, float value)
2826{
2827   float t;
2828
2829   switch (code) {
2830   case 0:
2831      return MAX(0.0, value);
2832   case 1:
2833      t = MAX(value, 0.0);
2834      return 1.0 - MIN(t, 1.0);
2835   case 2:
2836      return 2.0 * MAX(0.0, value) - 1.0;
2837   case 3:
2838      return -2.0 * MAX(0.0, value) + 1.0;
2839   case 4:
2840      return MAX(0.0, value) - 0.5;
2841   case 5:
2842      return -MAX(0.0, value) + 0.5;
2843   case 6:
2844      return value;
2845   case 7:
2846   default:
2847      return -value;
2848   }
2849
2850   // never executed
2851   //return 0;
2852}
2853
2854void nv2a_renderer::combiner_map_input_function3(int code, float *data)
2855{
2856   float t;
2857
2858   switch (code) {
2859   case 0:
2860      data[0] = MAX(0.0, data[0]);
2861      data[1] = MAX(0.0, data[1]);
2862      data[2] = MAX(0.0, data[2]);
2863      break;
2864   case 1:
2865      t = MAX(data[0], 0.0);
2866      data[0] = 1.0 - MIN(t, 1.0);
2867      t = MAX(data[1], 0.0);
2868      data[1] = 1.0 - MIN(t, 1.0);
2869      t = MAX(data[2], 0.0);
2870      data[2] = 1.0 - MIN(t, 1.0);
2871      break;
2872   case 2:
2873      data[0] = 2.0 * MAX(0.0, data[0]) - 1.0;
2874      data[1] = 2.0 * MAX(0.0, data[1]) - 1.0;
2875      data[2] = 2.0 * MAX(0.0, data[2]) - 1.0;
2876      break;
2877   case 3:
2878      data[0] = -2.0 * MAX(0.0, data[0]) + 1.0;
2879      data[1] = -2.0 * MAX(0.0, data[1]) + 1.0;
2880      data[2] = -2.0 * MAX(0.0, data[2]) + 1.0;
2881      break;
2882   case 4:
2883      data[0] = MAX(0.0, data[0]) - 0.5;
2884      data[1] = MAX(0.0, data[1]) - 0.5;
2885      data[2] = MAX(0.0, data[2]) - 0.5;
2886      break;
2887   case 5:
2888      data[0] = -MAX(0.0, data[0]) + 0.5;
2889      data[1] = -MAX(0.0, data[1]) + 0.5;
2890      data[2] = -MAX(0.0, data[2]) + 0.5;
2891      break;
2892   case 6:
2893      return;
2894   case 7:
2895   default:
2896      data[0] = -data[0];
2897      data[1] = -data[1];
2898      data[2] = -data[2];
2899      break;
2900   }
2901}
2902
2903void nv2a_renderer::combiner_initialize_registers(UINT32 argb8[6])
2904{
2905   combiner_argb8_float(argb8[0], combiner.register_primarycolor);
2906   combiner_argb8_float(argb8[1], combiner.register_secondarycolor);
2907   combiner_argb8_float(argb8[2], combiner.register_texture0color);
2908   combiner_argb8_float(argb8[3], combiner.register_texture1color);
2909   combiner_argb8_float(argb8[4], combiner.register_texture2color);
2910   combiner_argb8_float(argb8[5], combiner.register_texture3color);
2911   combiner.register_spare0[3] = combiner.register_texture0color[3];
2912   combiner.register_zero[0] = combiner.register_zero[1] = combiner.register_zero[2] = combiner.register_zero[3] = 0;
2913}
2914
2915void nv2a_renderer::combiner_initialize_stage(int stage_number)
2916{
2917   int n = stage_number;
2918
2919   // put register_constantcolor0 in register_color0
2920   combiner.register_color0[0] = combiner.stage[n].register_constantcolor0[0];
2921   combiner.register_color0[1] = combiner.stage[n].register_constantcolor0[1];
2922   combiner.register_color0[2] = combiner.stage[n].register_constantcolor0[2];
2923   combiner.register_color0[3] = combiner.stage[n].register_constantcolor0[3];
2924   // put register_constantcolor1 in register_color1
2925   combiner.register_color1[0] = combiner.stage[n].register_constantcolor1[0];
2926   combiner.register_color1[1] = combiner.stage[n].register_constantcolor1[1];
2927   combiner.register_color1[2] = combiner.stage[n].register_constantcolor1[2];
2928   combiner.register_color1[3] = combiner.stage[n].register_constantcolor1[3];
2929}
2930
2931void nv2a_renderer::combiner_initialize_final()
2932{
2933   // put register_constantcolor0 in register_color0
2934   combiner.register_color0[0] = combiner.final.register_constantcolor0[0];
2935   combiner.register_color0[1] = combiner.final.register_constantcolor0[1];
2936   combiner.register_color0[2] = combiner.final.register_constantcolor0[2];
2937   combiner.register_color0[3] = combiner.final.register_constantcolor0[3];
2938   // put register_constantcolor1 in register_color1
2939   combiner.register_color1[0] = combiner.final.register_constantcolor1[0];
2940   combiner.register_color1[1] = combiner.final.register_constantcolor1[1];
2941   combiner.register_color1[2] = combiner.final.register_constantcolor1[2];
2942   combiner.register_color1[3] = combiner.final.register_constantcolor1[3];
2943}
2944
2945void nv2a_renderer::combiner_map_input(int stage_number)
2946{
2947   int n = stage_number;
2948   int c, d, i;
2949   float v, *pv;
2950
2951   // A
2952   v = combiner_map_input_select(combiner.stage[n].mapin_aA_input, 2 + combiner.stage[n].mapin_aA_component);
2953   combiner.variable_A[3] = combiner_map_input_function(combiner.stage[n].mapin_aA_mapping, v);
2954   // B
2955   v = combiner_map_input_select(combiner.stage[n].mapin_aB_input, 2 + combiner.stage[n].mapin_aB_component);
2956   combiner.variable_B[3] = combiner_map_input_function(combiner.stage[n].mapin_aB_mapping, v);
2957   // C
2958   v = combiner_map_input_select(combiner.stage[n].mapin_aC_input, 2 + combiner.stage[n].mapin_aC_component);
2959   combiner.variable_C[3] = combiner_map_input_function(combiner.stage[n].mapin_aC_mapping, v);
2960   // D
2961   v = combiner_map_input_select(combiner.stage[n].mapin_aD_input, 2 + combiner.stage[n].mapin_aD_component);
2962   combiner.variable_D[3] = combiner_map_input_function(combiner.stage[n].mapin_aD_mapping, v);
2963
2964   // A
2965   pv = combiner_map_input_select3(combiner.stage[n].mapin_rgbA_input);
2966   c = combiner.stage[n].mapin_rgbA_component * 3;
2967   i = ~combiner.stage[n].mapin_rgbA_component & 1;
2968   for (d = 0; d < 3; d++) {
2969      combiner.variable_A[d] = pv[c];
2970      c = c + i;
2971   }
2972   combiner_map_input_function3(combiner.stage[n].mapin_rgbA_mapping, combiner.variable_A);
2973   // B
2974   pv = combiner_map_input_select3(combiner.stage[n].mapin_rgbB_input);
2975   c = combiner.stage[n].mapin_rgbB_component * 3;
2976   i = ~combiner.stage[n].mapin_rgbB_component & 1;
2977   for (d = 0; d < 3; d++) {
2978      combiner.variable_B[d] = pv[c];
2979      c = c + i;
2980   }
2981   combiner_map_input_function3(combiner.stage[n].mapin_rgbB_mapping, combiner.variable_B);
2982   // C
2983   pv = combiner_map_input_select3(combiner.stage[n].mapin_rgbC_input);
2984   c = combiner.stage[n].mapin_rgbC_component * 3;
2985   i = ~combiner.stage[n].mapin_rgbC_component & 1;
2986   for (d = 0; d < 3; d++) {
2987      combiner.variable_C[d] = pv[c];
2988      c = c + i;
2989   }
2990   combiner_map_input_function3(combiner.stage[n].mapin_rgbC_mapping, combiner.variable_C);
2991   // D
2992   pv = combiner_map_input_select3(combiner.stage[n].mapin_rgbD_input);
2993   c = combiner.stage[n].mapin_rgbD_component * 3;
2994   i = ~combiner.stage[n].mapin_rgbD_component & 1;
2995   for (d = 0; d < 3; d++) {
2996      combiner.variable_D[d] = pv[c];
2997      c = c + i;
2998   }
2999   combiner_map_input_function3(combiner.stage[n].mapin_rgbD_mapping, combiner.variable_D);
3000}
3001
3002void nv2a_renderer::combiner_map_output(int stage_number)
3003{
3004   int n = stage_number;
3005   float *f;
3006
3007   // rgb
3008   f = combiner_map_output_select3(combiner.stage[n].mapout_rgbAB_output);
3009   if (f) {
3010      f[0] = combiner.function_RGBop1[0];
3011      f[1] = combiner.function_RGBop1[1];
3012      f[2] = combiner.function_RGBop1[2];
3013   }
3014   f = combiner_map_output_select3(combiner.stage[n].mapout_rgbCD_output);
3015   if (f) {
3016      f[0] = combiner.function_RGBop2[0];
3017      f[1] = combiner.function_RGBop2[1];
3018      f[2] = combiner.function_RGBop2[2];
3019   }
3020   if ((combiner.stage[n].mapout_rgbAB_dotproduct | combiner.stage[n].mapout_rgbCD_dotproduct) == 0) {
3021      f = combiner_map_output_select3(combiner.stage[n].mapout_rgbSUM_output);
3022      if (f) {
3023         f[0] = combiner.function_RGBop3[0];
3024         f[1] = combiner.function_RGBop3[1];
3025         f[2] = combiner.function_RGBop3[2];
3026      }
3027   }
3028   // a
3029   f = combiner_map_output_select3(combiner.stage[n].mapout_aAB_output);
3030   if (f)
3031      f[3] = combiner.function_Aop1;
3032   f = combiner_map_output_select3(combiner.stage[n].mapout_aCD_output);
3033   if (f)
3034      f[3] = combiner.function_Aop2;
3035   f = combiner_map_output_select3(combiner.stage[n].mapout_aSUM_output);
3036   if (f)
3037      f[3] = combiner.function_Aop3;
3038}
3039
3040void nv2a_renderer::combiner_map_final_input()
3041{
3042   int i, c, d;
3043   float *pv;
3044
3045   // E
3046   pv = combiner_map_input_select3(combiner.final.mapin_rgbE_input);
3047   c = combiner.final.mapin_rgbE_component * 3;
3048   i = ~combiner.final.mapin_rgbE_component & 1;
3049   for (d = 0; d < 3; d++) {
3050      combiner.variable_E[d] = pv[c];
3051      c = c + i;
3052   }
3053   combiner_map_input_function3(combiner.final.mapin_rgbE_mapping, combiner.variable_E);
3054   // F
3055   pv = combiner_map_input_select3(combiner.final.mapin_rgbF_input);
3056   c = combiner.final.mapin_rgbF_component * 3;
3057   i = ~combiner.final.mapin_rgbF_component & 1;
3058   for (d = 0; d < 3; d++) {
3059      combiner.variable_F[d] = pv[c];
3060      c = c + i;
3061   }
3062   combiner_map_input_function3(combiner.final.mapin_rgbF_mapping, combiner.variable_F);
3063   // EF
3064   combiner.variable_EF[0] = combiner.variable_E[0] * combiner.variable_F[0];
3065   combiner.variable_EF[1] = combiner.variable_E[1] * combiner.variable_F[1];
3066   combiner.variable_EF[2] = combiner.variable_E[2] * combiner.variable_F[2];
3067   // sumclamp
3068   combiner.variable_sumclamp[0] = MAX(0, combiner.register_spare0[0]) + MAX(0, combiner.register_secondarycolor[0]);
3069   combiner.variable_sumclamp[1] = MAX(0, combiner.register_spare0[1]) + MAX(0, combiner.register_secondarycolor[1]);
3070   combiner.variable_sumclamp[2] = MAX(0, combiner.register_spare0[2]) + MAX(0, combiner.register_secondarycolor[2]);
3071   if (combiner.final.color_sum_clamp != 0) {
3072      combiner.variable_sumclamp[0] = MIN(combiner.variable_sumclamp[0], 1.0);
3073      combiner.variable_sumclamp[1] = MIN(combiner.variable_sumclamp[1], 1.0);
3074      combiner.variable_sumclamp[2] = MIN(combiner.variable_sumclamp[2], 1.0);
3075   }
3076   // A
3077   pv = combiner_map_input_select3(combiner.final.mapin_rgbA_input);
3078   c = combiner.final.mapin_rgbA_component * 3;
3079   i = ~combiner.final.mapin_rgbA_component & 1;
3080   for (d = 0; d < 3; d++) {
3081      combiner.variable_A[d] = pv[c];
3082      c = c + i;
3083   }
3084   combiner_map_input_function3(combiner.final.mapin_rgbA_mapping, combiner.variable_A);
3085   // B
3086   pv = combiner_map_input_select3(combiner.final.mapin_rgbB_input);
3087   c = combiner.final.mapin_rgbB_component * 3;
3088   i = ~combiner.final.mapin_rgbB_component & 1;
3089   for (d = 0; d < 3; d++) {
3090      combiner.variable_B[d] = pv[c];
3091      c = c + i;
3092   }
3093   combiner_map_input_function3(combiner.final.mapin_rgbB_mapping, combiner.variable_B);
3094   // C
3095   pv = combiner_map_input_select3(combiner.final.mapin_rgbC_input);
3096   c = combiner.final.mapin_rgbC_component * 3;
3097   i = ~combiner.final.mapin_rgbC_component & 1;
3098   for (d = 0; d < 3; d++) {
3099      combiner.variable_C[d] = pv[c];
3100      c = c + i;
3101   }
3102   combiner_map_input_function3(combiner.final.mapin_rgbC_mapping, combiner.variable_C);
3103   // D
3104   pv = combiner_map_input_select3(combiner.final.mapin_rgbD_input);
3105   c = combiner.final.mapin_rgbD_component * 3;
3106   i = ~combiner.final.mapin_rgbD_component & 1;
3107   for (d = 0; d < 3; d++) {
3108      combiner.variable_D[d] = pv[c];
3109      c = c + i;
3110   }
3111   combiner_map_input_function3(combiner.final.mapin_rgbD_mapping, combiner.variable_D);
3112   // G
3113   combiner.variable_G = combiner_map_input_select(combiner.final.mapin_aG_input, 2 + combiner.final.mapin_aG_component);
3114}
3115
3116void nv2a_renderer::combiner_final_output()
3117{
3118   // rgb
3119   combiner.output[0] = combiner.variable_A[0] * combiner.variable_B[0] + (1.0 - combiner.variable_A[0])*combiner.variable_C[0] + combiner.variable_D[0];
3120   combiner.output[1] = combiner.variable_A[1] * combiner.variable_B[1] + (1.0 - combiner.variable_A[1])*combiner.variable_C[1] + combiner.variable_D[1];
3121   combiner.output[2] = combiner.variable_A[2] * combiner.variable_B[2] + (1.0 - combiner.variable_A[2])*combiner.variable_C[2] + combiner.variable_D[2];
3122   combiner.output[0] = MIN(combiner.output[0], 1.0);
3123   combiner.output[1] = MIN(combiner.output[1], 1.0);
3124   combiner.output[2] = MIN(combiner.output[2], 1.0);
3125   // a
3126   combiner.output[3] = combiner_map_input_function(combiner.final.mapin_aG_mapping, combiner.variable_G);
3127}
3128
3129void nv2a_renderer::combiner_function_AB(float result[4])
3130{
3131   result[0] = combiner.variable_A[0] * combiner.variable_B[0];
3132   result[1] = combiner.variable_A[1] * combiner.variable_B[1];
3133   result[2] = combiner.variable_A[2] * combiner.variable_B[2];
3134}
3135
3136void nv2a_renderer::combiner_function_AdotB(float result[4])
3137{
3138   result[0] = combiner.variable_A[0] * combiner.variable_B[0] + combiner.variable_A[1] * combiner.variable_B[1] + combiner.variable_A[2] * combiner.variable_B[2];
3139   result[1] = result[0];
3140   result[2] = result[0];
3141}
3142
3143void nv2a_renderer::combiner_function_CD(float result[4])
3144{
3145   result[0] = combiner.variable_C[0] * combiner.variable_D[0];
3146   result[1] = combiner.variable_C[1] * combiner.variable_D[1];
3147   result[2] = combiner.variable_C[2] * combiner.variable_D[2];
3148}
3149
3150void nv2a_renderer::combiner_function_CdotD(float result[4])
3151{
3152   result[0] = combiner.variable_C[0] * combiner.variable_D[0] + combiner.variable_C[1] * combiner.variable_D[1] + combiner.variable_C[2] * combiner.variable_D[2];
3153   result[1] = result[0];
3154   result[2] = result[0];
3155}
3156
3157void nv2a_renderer::combiner_function_ABmuxCD(float result[4])
3158{
3159   if (combiner.register_spare0[3] >= 0.5)
3160      combiner_function_AB(result);
3161   else
3162      combiner_function_CD(result);
3163}
3164
3165void nv2a_renderer::combiner_function_ABsumCD(float result[4])
3166{
3167   result[0] = combiner.variable_A[0] * combiner.variable_B[0] + combiner.variable_C[0] * combiner.variable_D[0];
3168   result[1] = combiner.variable_A[1] * combiner.variable_B[1] + combiner.variable_C[1] * combiner.variable_D[1];
3169   result[2] = combiner.variable_A[2] * combiner.variable_B[2] + combiner.variable_C[2] * combiner.variable_D[2];
3170}
3171
3172void nv2a_renderer::combiner_compute_rgb_outputs(int stage_number)
3173{
3174   int n = stage_number;
3175   int m;
3176   float biasrgb, scalergb;
3177
3178   if (combiner.stage[n].mapout_rgb_bias)
3179      biasrgb = -0.5;
3180   else
3181      biasrgb = 0;
3182   switch (combiner.stage[n].mapout_rgb_scale) {
3183   case 0:
3184   default:
3185      scalergb = 1.0;
3186      break;
3187   case 1:
3188      scalergb = 2.0;
3189      break;
3190   case 2:
3191      scalergb = 4.0;
3192      break;
3193   case 3:
3194      scalergb = 0.5;
3195      break;
3196   }
3197   if (combiner.stage[n].mapout_rgbAB_dotproduct) {
3198      m = 1;
3199      combiner_function_AdotB(combiner.function_RGBop1);
3200   }
3201   else {
3202      m = 0;
3203      combiner_function_AB(combiner.function_RGBop1);
3204   }
3205   combiner.function_RGBop1[0] = MAX(MIN((combiner.function_RGBop1[0] + biasrgb) * scalergb, 1.0), -1.0);
3206   combiner.function_RGBop1[1] = MAX(MIN((combiner.function_RGBop1[1] + biasrgb) * scalergb, 1.0), -1.0);
3207   combiner.function_RGBop1[2] = MAX(MIN((combiner.function_RGBop1[2] + biasrgb) * scalergb, 1.0), -1.0);
3208   if (combiner.stage[n].mapout_rgbCD_dotproduct) {
3209      m = m | 1;
3210      combiner_function_CdotD(combiner.function_RGBop2);
3211   }
3212   else
3213      combiner_function_CD(combiner.function_RGBop2);
3214   combiner.function_RGBop2[0] = MAX(MIN((combiner.function_RGBop2[0] + biasrgb) * scalergb, 1.0), -1.0);
3215   combiner.function_RGBop2[1] = MAX(MIN((combiner.function_RGBop2[1] + biasrgb) * scalergb, 1.0), -1.0);
3216   combiner.function_RGBop2[2] = MAX(MIN((combiner.function_RGBop2[2] + biasrgb) * scalergb, 1.0), -1.0);
3217   if (m == 0) {
3218      if (combiner.stage[n].mapout_rgb_muxsum)
3219         combiner_function_ABmuxCD(combiner.function_RGBop3);
3220      else
3221         combiner_function_ABsumCD(combiner.function_RGBop3);
3222      combiner.function_RGBop3[0] = MAX(MIN((combiner.function_RGBop3[0] + biasrgb) * scalergb, 1.0), -1.0);
3223      combiner.function_RGBop3[1] = MAX(MIN((combiner.function_RGBop3[1] + biasrgb) * scalergb, 1.0), -1.0);
3224      combiner.function_RGBop3[2] = MAX(MIN((combiner.function_RGBop3[2] + biasrgb) * scalergb, 1.0), -1.0);
3225   }
3226}
3227
3228void nv2a_renderer::combiner_compute_a_outputs(int stage_number)
3229{
3230   int n = stage_number;
3231   float biasa, scalea;
3232
3233   if (combiner.stage[n].mapout_a_bias)
3234      biasa = -0.5;
3235   else
3236      biasa = 0;
3237   switch (combiner.stage[n].mapout_a_scale) {
3238   case 0:
3239   default:
3240      scalea = 1.0;
3241      break;
3242   case 1:
3243      scalea = 2.0;
3244      break;
3245   case 2:
3246      scalea = 4.0;
3247      break;
3248   case 3:
3249      scalea = 0.5;
3250      break;
3251   }
3252   combiner.function_Aop1 = combiner.variable_A[3] * combiner.variable_B[3];
3253   combiner.function_Aop1 = MAX(MIN((combiner.function_Aop1 + biasa) * scalea, 1.0), -1.0);
3254   combiner.function_Aop2 = combiner.variable_C[3] * combiner.variable_D[3];
3255   combiner.function_Aop2 = MAX(MIN((combiner.function_Aop2 + biasa) * scalea, 1.0), -1.0);
3256   if (combiner.stage[n].mapout_a_muxsum) {
3257      if (combiner.register_spare0[3] >= 0.5)
3258         combiner.function_Aop3 = combiner.variable_A[3] * combiner.variable_B[3];
3259      else
3260         combiner.function_Aop3 = combiner.variable_C[3] * combiner.variable_D[3];
3261   }
3262   else
3263      combiner.function_Aop3 = combiner.variable_A[3] * combiner.variable_B[3] + combiner.variable_C[3] * combiner.variable_D[3];
3264   combiner.function_Aop3 = MAX(MIN((combiner.function_Aop3 + biasa) * scalea, 1.0), -1.0);
3265}
3266
3267bool nv2a_renderer::vblank_callback(screen_device &screen, bool state)
3268{
3269   //printf("vblank_callback\n\r");
3270   if (state == true)
3271      pcrtc[0x100 / 4] |= 1;
3272   else
3273      pcrtc[0x100 / 4] &= ~1;
3274   if (pcrtc[0x100 / 4] & pcrtc[0x140 / 4])
3275      pmc[0x100 / 4] |= 0x1000000;
3276   else
3277      pmc[0x100 / 4] &= ~0x1000000;
3278   if ((pmc[0x100 / 4] != 0) && (pmc[0x140 / 4] != 0)) {
3279      // send interrupt
3280      return true;
3281   }
3282   else
3283      return false;
3284}
3285
3286UINT32 nv2a_renderer::screen_update_callback(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
3287{
3288   UINT32 *dst = (UINT32 *)bitmap.raw_pixptr(0, 0);
3289   UINT32 *src = (UINT32 *)fb.raw_pixptr(0, 0);
3290
3291   //printf("updatescreen\n\r");
3292   memcpy(dst, src, bitmap.rowbytes()*bitmap.height());
3293   return 0;
3294}
3295
3296READ32_MEMBER(nv2a_renderer::geforce_r)
3297{
3298   static int x, ret;
3299
3300   ret = 0;
3301   if (offset == 0x1804f6) {
3302      x = x ^ 0x08080808;
3303      ret = x;
3304   }
3305   if ((offset >= 0x00101000 / 4) && (offset < 0x00102000 / 4)) {
3306      //logerror("NV_2A: read STRAPS[%06X] mask %08X value %08X\n",offset*4-0x00101000,mem_mask,ret);
3307   }
3308   else if ((offset >= 0x00002000 / 4) && (offset < 0x00004000 / 4)) {
3309      ret = pfifo[offset - 0x00002000 / 4];
3310      // PFIFO.CACHE1.STATUS or PFIFO.RUNOUT_STATUS
3311      if ((offset == 0x3214 / 4) || (offset == 0x2400 / 4))
3312         ret = 0x10;
3313      //logerror("NV_2A: read PFIFO[%06X] value %08X\n",offset*4-0x00002000,ret);
3314   }
3315   else if ((offset >= 0x00700000 / 4) && (offset < 0x00800000 / 4)) {
3316      ret = ramin[offset - 0x00700000 / 4];
3317      //logerror("NV_2A: read PRAMIN[%06X] value %08X\n",offset*4-0x00700000,ret);
3318   }
3319   else if ((offset >= 0x00400000 / 4) && (offset < 0x00402000 / 4)) {
3320      //logerror("NV_2A: read PGRAPH[%06X] value %08X\n",offset*4-0x00400000,ret);
3321   }
3322   else if ((offset >= 0x00600000 / 4) && (offset < 0x00601000 / 4)) {
3323      ret = pcrtc[offset - 0x00600000 / 4];
3324      //logerror("NV_2A: read PCRTC[%06X] value %08X\n",offset*4-0x00600000,ret);
3325   }
3326   else if ((offset >= 0x00000000 / 4) && (offset < 0x00001000 / 4)) {
3327      ret = pmc[offset - 0x00000000 / 4];
3328      //logerror("NV_2A: read PMC[%06X] value %08X\n",offset*4-0x00000000,ret);
3329   }
3330   else if ((offset >= 0x00800000 / 4) && (offset < 0x00900000 / 4)) {
3331      // 32 channels size 0x10000 each, 8 subchannels per channel size 0x2000 each
3332      int chanel, subchannel, suboffset;
3333
3334      suboffset = offset - 0x00800000 / 4;
3335      chanel = (suboffset >> (16 - 2)) & 31;
3336      subchannel = (suboffset >> (13 - 2)) & 7;
3337      suboffset = suboffset & 0x7ff;
3338      if (suboffset < 0x80 / 4)
3339         ret = channel[chanel][subchannel].regs[suboffset];
3340      //logerror("NV_2A: read channel[%02X,%d,%04X]=%08X\n",chanel,subchannel,suboffset*4,ret);
3341      return ret;
3342   }
3343   else;
3344   //logerror("NV_2A: read at %08X mask %08X value %08X\n",0xfd000000+offset*4,mem_mask,ret);
3345   return ret;
3346}
3347
3348WRITE32_MEMBER(nv2a_renderer::geforce_w)
3349{
3350   if ((offset >= 0x00101000 / 4) && (offset < 0x00102000 / 4)) {
3351      //logerror("NV_2A: write STRAPS[%06X] mask %08X value %08X\n",offset*4-0x00101000,mem_mask,data);
3352   }
3353   else if ((offset >= 0x00002000 / 4) && (offset < 0x00004000 / 4)) {
3354      int e = offset - 0x00002000 / 4;
3355      if (e >= (sizeof(pfifo) / sizeof(UINT32)))
3356         return;
3357      COMBINE_DATA(pfifo + e);
3358      //logerror("NV_2A: read PFIFO[%06X]=%08X\n",offset*4-0x00002000,data & mem_mask); // 2210 pfifo ramht & 1f0 << 12
3359   }
3360   else if ((offset >= 0x00700000 / 4) && (offset < 0x00800000 / 4)) {
3361      int e = offset - 0x00700000 / 4;
3362      if (e >= (sizeof(ramin) / sizeof(UINT32)))
3363         return;
3364      COMBINE_DATA(ramin + e);
3365      //logerror("NV_2A: write PRAMIN[%06X]=%08X\n",offset*4-0x00700000,data & mem_mask);
3366   }
3367   else if ((offset >= 0x00400000 / 4) && (offset < 0x00402000 / 4)) {
3368      //logerror("NV_2A: write PGRAPH[%06X]=%08X\n",offset*4-0x00400000,data & mem_mask);
3369   }
3370   else if ((offset >= 0x00600000 / 4) && (offset < 0x00601000 / 4)) {
3371      int e = offset - 0x00600000 / 4;
3372      if (e >= (sizeof(pcrtc) / sizeof(UINT32)))
3373         return;
3374      COMBINE_DATA(pcrtc + e);
3375      //logerror("NV_2A: write PCRTC[%06X]=%08X\n",offset*4-0x00600000,data & mem_mask);
3376   }
3377   else if ((offset >= 0x00000000 / 4) && (offset < 0x00001000 / 4)) {
3378      int e = offset - 0x00000000 / 4;
3379      if (e >= (sizeof(pmc) / sizeof(UINT32)))
3380         return;
3381      COMBINE_DATA(pmc + e);
3382      //logerror("NV_2A: write PMC[%06X]=%08X\n",offset*4-0x00000000,data & mem_mask);
3383   }
3384   else if ((offset >= 0x00800000 / 4) && (offset < 0x00900000 / 4)) {
3385      // 32 channels size 0x10000 each, 8 subchannels per channel size 0x2000 each
3386      int chanel, subchannel, suboffset;
3387      int method, count, handle, objclass;
3388#ifdef LOG_NV2A
3389      int subch;
3390#endif
3391
3392      suboffset = offset - 0x00800000 / 4;
3393      chanel = (suboffset >> (16 - 2)) & 31;
3394      subchannel = (suboffset >> (13 - 2)) & 7;
3395      suboffset = suboffset & 0x7ff;
3396      //logerror("NV_2A: write channel[%02X,%d,%04X]=%08X\n",chanel,subchannel,suboffset*4,data & mem_mask);
3397      if (suboffset >= 0x80 / 4)
3398         return;
3399      COMBINE_DATA(&channel[chanel][subchannel].regs[suboffset]);
3400      if ((suboffset == 0x40 / 4) || (suboffset == 0x44 / 4)) { // DMA_PUT or DMA_GET
3401         UINT32 *dmaput, *dmaget;
3402         UINT32 cmd, cmdtype;
3403         int countlen;
3404
3405         dmaput = &channel[chanel][subchannel].regs[0x40 / 4];
3406         dmaget = &channel[chanel][subchannel].regs[0x44 / 4];
3407         //printf("dmaget %08X dmaput %08X\n\r",*dmaget,*dmaput);
3408         if ((*dmaput == 0x048cf000) && (*dmaget == 0x07f4d000))
3409            *dmaget = *dmaput;
3410         while (*dmaget != *dmaput) {
3411            cmd = space.read_dword(*dmaget);
3412            *dmaget += 4;
3413            cmdtype = geforce_commandkind(cmd);
3414            switch (cmdtype)
3415            {
3416            case 6: // jump
3417#ifdef LOG_NV2A
3418               printf("jump dmaget %08X", *dmaget);
3419#endif
3420               *dmaget = cmd & 0xfffffffc;
3421#ifdef LOG_NV2A
3422               printf(" -> %08X\n\r", *dmaget);
3423#endif
3424               break;
3425            case 0: // increasing method
3426               method = (cmd >> 2) & 2047; // method*4 is address // if method >= 0x40 send it to assigned object
3427#ifdef LOG_NV2A
3428               subch = (cmd >> 13) & 7;
3429#endif
3430               count = (cmd >> 18) & 2047;
3431               if ((method == 0) && (count == 1)) {
3432                  handle = space.read_dword(*dmaget);
3433                  handle = geforce_object_offset(handle);
3434#ifdef LOG_NV2A
3435                  logerror("  assign to subchannel %d object at %d\n", subch, handle);
3436#endif
3437                  channel[chanel][subchannel].object.objhandle = handle;
3438                  handle = ramin[handle / 4];
3439                  objclass = handle & 0xff;
3440                  channel[chanel][subchannel].object.objclass = objclass;
3441                  *dmaget += 4;
3442               }
3443               else {
3444#ifdef LOG_NV2A
3445                  logerror("  subch. %d method %04x offset %04x count %d\n", subch, method, method * 4, count);
3446#endif
3447                  while (count > 0) {
3448                     countlen = 1;
3449                     geforce_exec_method(space, chanel, subchannel, method, *dmaget, countlen);
3450                     count--;
3451                     method++;
3452                     *dmaget += 4;
3453                  }
3454               }
3455               break;
3456            case 5: // non-increasing method
3457               method = (cmd >> 2) & 2047;
3458#ifdef LOG_NV2A
3459               subch = (cmd >> 13) & 7;
3460#endif
3461               count = (cmd >> 18) & 2047;
3462               if ((method == 0) && (count == 1)) {
3463#ifdef LOG_NV2A
3464                  logerror("  assign channel %d\n", subch);
3465#endif
3466                  handle = space.read_dword(*dmaget);
3467                  handle = geforce_object_offset(handle);
3468#ifdef LOG_NV2A
3469                  logerror("  assign to subchannel %d object at %d\n", subch, handle);
3470#endif
3471                  channel[chanel][subchannel].object.objhandle = handle;
3472                  handle = ramin[handle / 4];
3473                  objclass = handle & 0xff;
3474                  channel[chanel][subchannel].object.objclass = objclass;
3475                  *dmaget += 4;
3476               }
3477               else {
3478#ifdef LOG_NV2A
3479                  logerror("  subch. %d method %04x offset %04x count %d\n", subch, method, method * 4, count);
3480#endif
3481                  while (count > 0) {
3482                     countlen = count;
3483                     geforce_exec_method(space, chanel, subchannel, method, *dmaget, countlen);
3484                     *dmaget += 4 * (count - countlen);
3485                     count = countlen;
3486                  }
3487               }
3488               break;
3489            case 3: // long non-increasing method
3490               method = (cmd >> 2) & 2047;
3491#ifdef LOG_NV2A
3492               subch = (cmd >> 13) & 7;
3493#endif
3494               count = space.read_dword(*dmaget);
3495               *dmaget += 4;
3496               if ((method == 0) && (count == 1)) {
3497                  handle = space.read_dword(*dmaget);
3498                  handle = geforce_object_offset(handle);
3499#ifdef LOG_NV2A
3500                  logerror("  assign to subchannel %d object at %d\n", subch, handle);
3501#endif
3502                  channel[chanel][subchannel].object.objhandle = handle;
3503                  handle = ramin[handle / 4];
3504                  objclass = handle & 0xff;
3505                  channel[chanel][subchannel].object.objclass = objclass;
3506                  *dmaget += 4;
3507               }
3508               else {
3509#ifdef LOG_NV2A
3510                  logerror("  subch. %d method %04x offset %04x count %d\n", subch, method, method * 4, count);
3511#endif
3512                  while (count > 0) {
3513                     countlen = count;
3514                     geforce_exec_method(space, chanel, subchannel, method, *dmaget, countlen);
3515                     *dmaget += 4 * (count - countlen);
3516                     count = countlen;
3517                  }
3518               }
3519               break;
3520            default:
3521               logerror("  unimplemented command %08X\n", cmd);
3522            }
3523         }
3524      }
3525   }
3526   else;
3527   //      logerror("NV_2A: write at %08X mask %08X value %08X\n",0xfd000000+offset*4,mem_mask,data);
3528}
trunk/src/mame/video/galpani2.c
r242231r242232
5555WRITE16_MEMBER( galpani2_bg8_regs_1_w ) { galpani2_bg8_regs_w(space, offset, data, mem_mask, 1); }
5656#endif
5757
58inline void galpani2_state::galpani2_bg8_w(offs_t offset, UINT16 data, UINT16 mem_mask, int _n_)
59{
60   int x,y,pen;
61   UINT16 newword = COMBINE_DATA(&m_bg8[_n_][offset]);
62   pen =   newword & 0xff;
63   x   =   (offset % 512); /* 512 x 256 */
64   y   =   (offset / 512);
65   m_bg8_bitmap[_n_]->pix16(y, x) = 0x4000 + pen;
66}
6758
68WRITE16_MEMBER( galpani2_state::galpani2_bg8_0_w ) { galpani2_bg8_w(offset, data, mem_mask, 0); }
69WRITE16_MEMBER( galpani2_state::galpani2_bg8_1_w ) { galpani2_bg8_w(offset, data, mem_mask, 1); }
7059
71inline void galpani2_state::galpani2_palette_w(offs_t offset, UINT16 data, UINT16 mem_mask, int _n_)
72{
73   UINT16 newword = COMBINE_DATA(&m_palette_val[_n_][offset]);
74   m_palette->set_pen_color( offset + 0x4000 + _n_ * 0x100, pal5bit(newword >> 5), pal5bit(newword >> 10), pal5bit(newword >> 0) );
75}
76
77WRITE16_MEMBER( galpani2_state::galpani2_palette_0_w ) { galpani2_palette_w(offset, data, mem_mask, 0); }
78WRITE16_MEMBER( galpani2_state::galpani2_palette_1_w ) { galpani2_palette_w(offset, data, mem_mask, 1); }
79
80
8160/***************************************************************************
8261
8362
84                            xRGB  Background Layer
85
86
87***************************************************************************/
88
89/* 8 horizontal pages of 256x256 pixels? */
90WRITE16_MEMBER( galpani2_state::galpani2_bg15_w )
91{
92   UINT16 newword = COMBINE_DATA(&m_bg15[offset]);
93
94   int x = (offset % 256) + (offset / (256*256)) * 256 ;
95   int y = (offset / 256) % 256;
96
97   m_bg15_bitmap->pix16(y, x) = 0x4200 + (newword & 0x7fff);
98}
99
100
101/***************************************************************************
102
103
10463                            Video Init Functions
10564
10665
r242231r242232
11372
11473   /* initialize 555 RGB lookup */
11574   for (i = 0; i < 0x8000; i++)
116      palette.set_pen_color(0x4200+i,pal5bit(i >> 5),pal5bit(i >> 10),pal5bit(i >> 0));
75      palette.set_pen_color(i,pal5bit(i >> 5),pal5bit(i >> 10),pal5bit(i >> 0));
11776}
11877
11978void galpani2_state::video_start()
12079{
121   m_bg15_bitmap  = auto_bitmap_ind16_alloc(machine(), 256*8, 256);
122   m_bg8_bitmap[0] = auto_bitmap_ind16_alloc(machine(), 512, 256);
123   m_bg8_bitmap[1] = auto_bitmap_ind16_alloc(machine(), 512, 256);
12480}
12581
12682
r242231r242232
13288
13389***************************************************************************/
13490
135UINT32 galpani2_state::screen_update_galpani2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
91// based on videos these 8-bit layers actually get *blended* against the RGB555 layer
92// it should be noted that in the layer at 0x500000 the upper 8 bits are set too, this could be related
93void galpani2_state::copybg8(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int layer)
13694{
95   int x = - ( *m_bg8_scrollx[layer] + 0x200 - 0x0f5 );
96   int y = - ( *m_bg8_scrolly[layer] + 0x200 - 0x1be );
97   UINT16* ram = m_bg8[layer];
98
99   const pen_t *clut = &m_bg8palette->pen(0);
100   for (int xx = 0; xx < 320; xx++)
101   {
102      for (int yy = 0; yy < 240; yy++)
103      {
104         UINT16 pen = ram[(((y + yy) & 0xff) * 512) + ((x + xx) & 0x1ff)];
105         if (pen) bitmap.pix32(yy, xx) = clut[pen & 0xff];
106      }
107   }
108}
109
110// this seems to be 256x256 pages (arranged as 1024*256), but the game resolution is 320x240
111// https://www.youtube.com/watch?v=2b2SLFtC0uA is a video of the galpanic2j set, and shows the RGB pattern at
112// startup covering all screen lines - is the hardware mixing bitmaps of different resolutions or is there a
113// line select somewhere?  I should find the gal images and find what resolution they're stored at too.
114// (or is this just wrong format / layout due to protection?)
115void galpani2_state::copybg15(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
116{
117   UINT16* ram = m_bg15 + 0x40000/2;
118   
119   //int x = 0;
120   //int y = 0;
121
122   const pen_t *clut = &m_bg15palette->pen(0);
123   for (int xx = 0; xx < 320; xx++)
124   {
125      for (int yy = 0; yy < 240; yy++)
126      {
127         UINT16 pen = ram[(xx * 0x800) + yy];
128         bitmap.pix32(yy, xx) = clut[pen & 0x7fff];
129      }
130   }
131}
132
133UINT32 galpani2_state::screen_update_galpani2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
134{
137135   int layers_ctrl = -1;
138136
139#ifdef MAME_DEBUG
137#if 1 // MAME_DEBUG
140138if (machine().input().code_pressed(KEYCODE_Z))
141139{
142140   int msk = 0;
r242231r242232
151149   bitmap.fill(0, cliprect);
152150   screen.priority().fill(0, cliprect);
153151
154   if (layers_ctrl & 0x1)
155   {
156      int x = 0;
157      int y = 0;
158      copyscrollbitmap_trans(bitmap, *m_bg15_bitmap,
159                        1, &x, 1, &y,
160                        cliprect,0x4200 + 0);
161   }
162
163152/*  test mode:
164153    304000:0040 0000 0100 0000-0000 0000 0000 0000      (Sprite regs)
165154    304010:16C0 0200 16C0 0200-16C0 0200 16C0 0200
166155    16c0/40 = 5b        200/40 = 8
167156    scrollx = f5, on screen x should be 0 (f5+5b = 150) */
168157
169   if (layers_ctrl & 0x2)
170   {
171      int x = - ( *m_bg8_scrollx[0] + 0x200 - 0x0f5 );
172      int y = - ( *m_bg8_scrolly[0] + 0x200 - 0x1be );
173      copyscrollbitmap_trans(bitmap, *m_bg8_bitmap[0],
174                        1, &x, 1, &y,
175                        cliprect,0x4000 + 0);
176   }
177
178   if (layers_ctrl & 0x4)
179   {
180      int x = - ( *m_bg8_scrollx[1] + 0x200 - 0x0f5 );
181      int y = - ( *m_bg8_scrolly[1] + 0x200 - 0x1be );
182      copyscrollbitmap_trans(bitmap, *m_bg8_bitmap[1],
183                        1, &x, 1, &y,
184                        cliprect,0x4000 + 0);
185   }
186
158   if (layers_ctrl & 0x1) copybg15(screen, bitmap, cliprect);
159   if (layers_ctrl & 0x2) copybg8(screen, bitmap, cliprect, 0);
160   if (layers_ctrl & 0x4) copybg8(screen, bitmap, cliprect, 1);
187161   if (layers_ctrl & 0x8) m_kaneko_spr->kaneko16_render_sprites(bitmap, cliprect, screen.priority(), m_spriteram, m_spriteram.bytes());
188162   return 0;
189163}
trunk/src/mame/video/mjkjidai.c
r242231r242232
4545
4646WRITE8_MEMBER(mjkjidai_state::mjkjidai_ctrl_w)
4747{
48   UINT8 *rom = memregion("maincpu")->base();
49
5048//  logerror("%04x: port c0 = %02x\n",space.device().safe_pc(),data);
5149
5250   /* bit 0 = NMI enable */
53   m_nmi_mask = data & 1;
51   m_nmi_enable = data & 1;
5452
5553   /* bit 1 = flip screen */
5654   flip_screen_set(data & 0x02);
r242231r242232
6260   coin_counter_w(machine(), 0,data & 0x20);
6361
6462   /* bits 6-7 select ROM bank */
65   if (data & 0xc0)
66   {
67      membank("bank1")->set_base(rom + 0x10000-0x4000 + ((data & 0xc0) << 8));
68   }
69   else
70   {
71      /* there is code flowing from 7fff to this bank so they have to be contiguous in memory */
72      membank("bank1")->set_base(rom + 0x08000);
73   }
63   membank("bank1")->set_entry(data >> 6);
7464}
7565
7666
r242231r242232
8373
8474void mjkjidai_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect)
8575{
86   UINT8 *spriteram = m_spriteram1;
87   UINT8 *spriteram_2 = m_spriteram2;
88   UINT8 *spriteram_3 = m_spriteram3;
76   UINT8 *spriteram = &m_videoram[0];
77   UINT8 *spriteram_2 = &m_videoram[0x800];
78   UINT8 *spriteram_3 = &m_videoram[0x1000];
8979   int offs;
9080
9181   for (offs = 0x20-2;offs >= 0;offs -= 2)
trunk/src/mame/video/renegade.c
r242231r242232
88#include "includes/renegade.h"
99
1010
11WRITE8_MEMBER(renegade_state::renegade_videoram_w)
11WRITE8_MEMBER(renegade_state::bg_videoram_w)
1212{
13   UINT8 *videoram = m_videoram;
14   videoram[offset] = data;
13   m_bg_videoram[offset] = data;
1514   offset = offset % (64 * 16);
1615   m_bg_tilemap->mark_tile_dirty(offset);
1716}
1817
19WRITE8_MEMBER(renegade_state::renegade_videoram2_w)
18WRITE8_MEMBER(renegade_state::fg_videoram_w)
2019{
21   m_videoram2[offset] = data;
20   m_fg_videoram[offset] = data;
2221   offset = offset % (32 * 32);
2322   m_fg_tilemap->mark_tile_dirty(offset);
2423}
r242231r242232
2827   flip_screen_set(~data & 0x01);
2928}
3029
31WRITE8_MEMBER(renegade_state::renegade_scroll0_w)
30WRITE8_MEMBER(renegade_state::scroll_lsb_w)
3231{
3332   m_scrollx = (m_scrollx & 0xff00) | data;
3433}
3534
36WRITE8_MEMBER(renegade_state::renegade_scroll1_w)
35WRITE8_MEMBER(renegade_state::scroll_msb_w)
3736{
3837   m_scrollx = (m_scrollx & 0xff) | (data << 8);
3938}
4039
4140TILE_GET_INFO_MEMBER(renegade_state::get_bg_tilemap_info)
4241{
43   UINT8 *videoram = m_videoram;
44   const UINT8 *source = &videoram[tile_index];
42   const UINT8 *source = &m_bg_videoram[tile_index];
4543   UINT8 attributes = source[0x400]; /* CCC??BBB */
4644   SET_TILE_INFO_MEMBER(1 + (attributes & 0x7),
4745      source[0],
r242231r242232
5149
5250TILE_GET_INFO_MEMBER(renegade_state::get_fg_tilemap_info)
5351{
54   const UINT8 *source = &m_videoram2[tile_index];
52   const UINT8 *source = &m_fg_videoram[tile_index];
5553   UINT8 attributes = source[0x400];
5654   SET_TILE_INFO_MEMBER(0,
5755      (attributes & 3) * 256 + source[0],
trunk/src/mame/video/tankbust.c
r242231r242232
194194
195195      color = 0;
196196
197      //0x02 - dont know (most of the time this bit is set in tank sprite and others but not all and not always)
197      //0x02 - don't know (most of the time this bit is set in tank sprite and others but not all and not always)
198198      //0x04 - not used
199199      //0x08 - not used
200200      //0x10 - not used
trunk/src/mame/video/tigeroad.c
r242231r242232
6666   }
6767}
6868
69void tigeroad_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority )
70{
71   UINT16 *source = &m_spriteram->buffer()[m_spriteram->bytes()/2] - 4;
72   UINT16 *finish = m_spriteram->buffer();
7369
74   while (source >= finish)
75   {
76      int tile_number = source[0];
7770
78      if (tile_number != 0xfff) {
79         int attr = source[1];
80         int sy = source[2] & 0x1ff;
81         int sx = source[3] & 0x1ff;
82
83         int flipx = attr & 0x02;
84         int flipy = attr & 0x01;
85         int color = (attr >> 2) & 0x0f;
86
87         if (sx > 0x100) sx -= 0x200;
88         if (sy > 0x100) sy -= 0x200;
89
90         if (flip_screen())
91         {
92            sx = 240 - sx;
93            sy = 240 - sy;
94            flipx = !flipx;
95            flipy = !flipy;
96         }
97
98
99            m_gfxdecode->gfx(2)->transpen(bitmap,cliprect,
100            tile_number,
101            color,
102            flipx, flipy,
103            sx, 240 - sy, 15);
104      }
105
106      source -= 4;
107   }
108}
109
11071TILE_GET_INFO_MEMBER(tigeroad_state::get_bg_tile_info)
11172{
11273   UINT8 *tilerom = memregion("bgmap")->base();
r242231r242232
156117UINT32 tigeroad_state::screen_update_tigeroad(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
157118{
158119   m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 0);
159   draw_sprites(bitmap, cliprect, 0);
120   m_spritegen->draw_sprites(bitmap, cliprect, m_gfxdecode, 2, m_spriteram->buffer(), m_spriteram->bytes(), flip_screen(), 1 );
160121   m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 1);
161   //draw_sprites(bitmap, cliprect, 1); draw priority sprites?
162122   m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2);
163123   return 0;
164124}
125
trunk/src/mame/video/tigeroad_spr.c
r0r242232
1/*
2
3   very simple sprite scheme, used by some Capcom games and hardware cloned from them
4
5   bionicc.c
6   tigeroad.c
7   supduck.c
8
9   it is unknown if this is handled by a custom chip, or simple logic.
10   y positions are inverted in Bionic Commando, but it seems otherwise the same as
11   Tiger Road
12
13*/
14
15
16#include "emu.h"
17#include "tigeroad_spr.h"
18
19
20const device_type TIGEROAD_SPRITE = &device_creator<tigeroad_spr_device>;
21
22tigeroad_spr_device::tigeroad_spr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
23   : device_t(mconfig, TIGEROAD_SPRITE, "Simple Capcom (Tiger Road) Sprite", tag, owner, clock, "tigeroad_spr", __FILE__)
24{
25}
26
27
28void tigeroad_spr_device::device_start()
29{
30}
31
32
33
34void tigeroad_spr_device::device_reset()
35{
36}
37
38/*
39   4  words per sprite
40
41   0  ---- ---t tttt tttt = tile number
42   
43   1  ---- ---- --cc cc-- = colour
44   1  ---- ---- ---- --x- = flip x
45   1  ---- ---- ---- ---y = flip y
46
47   2  ---- ---x xxxx xxxx = x pos (signed)
48
49   3  ---- ---y yyyy yyyy = y pos (signed)
50
51*/
52
53
54void tigeroad_spr_device::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, gfxdecode_device *gfxdecode, int region, UINT16* ram, UINT32 size, int flip_screen, int rev_y )
55{
56   UINT16 *source = &ram[size/2] - 4;
57   UINT16 *finish = ram;
58
59   while (source >= finish)
60   {
61      int tile_number = source[0];
62
63      int attr = source[1];
64      int sy = source[2] & 0x1ff;
65      int sx = source[3] & 0x1ff;
66
67      int flipx = attr & 0x02;
68      int flipy = attr & 0x01;
69      int color = (attr >> 2) & 0x0f;
70
71      if (sx > 0x100) sx -= 0x200;
72      if (sy > 0x100) sy -= 0x200;
73
74      if (flip_screen)
75      {
76         sx = 240 - sx;
77         sy = 240 - sy;
78         flipx = !flipx;
79         flipy = !flipy;
80      }
81
82      if (rev_y)
83         sy = 240 - sy;
84
85
86      gfxdecode->gfx(region)->transpen(bitmap,cliprect,
87      tile_number,
88      color,
89      flipx, flipy,
90      sx, sy, 15);
91
92      source -= 4;
93   }
94}
trunk/src/mame/video/tigeroad_spr.h
r0r242232
1
2class tigeroad_spr_device : public device_t
3{
4public:
5   tigeroad_spr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
6
7   void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, gfxdecode_device *gfxdecode, int region, UINT16* ram, UINT32 size, int flip_screen, int rev_y);
8
9protected:
10
11   virtual void device_start();
12   virtual void device_reset();
13private:
14};
15
16extern const device_type TIGEROAD_SPRITE;
trunk/src/mame/video/yunsun16.c
r242231r242232
3838#define PAGES_PER_TMAP_X    (0x4)
3939#define PAGES_PER_TMAP_Y    (0x4)
4040
41TILEMAP_MAPPER_MEMBER(yunsun16_state::yunsun16_tilemap_scan_pages)
41TILEMAP_MAPPER_MEMBER(yunsun16_state::tilemap_scan_pages)
4242{
4343   return  (row / TILES_PER_PAGE_Y) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y * PAGES_PER_TMAP_X +
4444         (row % TILES_PER_PAGE_Y) +
r242231r242232
6767         (attr & 0x20) ? TILE_FLIPX : 0);
6868}
6969
70WRITE16_MEMBER(yunsun16_state::yunsun16_vram_0_w)
70WRITE16_MEMBER(yunsun16_state::vram_0_w)
7171{
7272   COMBINE_DATA(&m_vram_0[offset]);
7373   m_tilemap_0->mark_tile_dirty(offset / 2);
7474}
7575
76WRITE16_MEMBER(yunsun16_state::yunsun16_vram_1_w)
76WRITE16_MEMBER(yunsun16_state::vram_1_w)
7777{
7878   COMBINE_DATA(&m_vram_1[offset]);
7979   m_tilemap_1->mark_tile_dirty(offset / 2);
r242231r242232
9090
9191void yunsun16_state::video_start()
9292{
93   m_tilemap_0 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_0),this),tilemap_mapper_delegate(FUNC(yunsun16_state::yunsun16_tilemap_scan_pages),this),
93   m_tilemap_0 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_0),this),tilemap_mapper_delegate(FUNC(yunsun16_state::tilemap_scan_pages),this),
9494                        16,16, TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
95   m_tilemap_1 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_1),this),tilemap_mapper_delegate(FUNC(yunsun16_state::yunsun16_tilemap_scan_pages),this),
95   m_tilemap_1 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_1),this),tilemap_mapper_delegate(FUNC(yunsun16_state::tilemap_scan_pages),this),
9696                        16,16, TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
9797
9898   m_tilemap_0->set_scrolldx(-0x34, 0);
trunk/src/mess/audio/upd1771.c
r242231r242232
2020    it is perfectly possible to generate other sounds with different rom code and data.
2121
2222    Most upd17XXX devices are typically 4bit NEC MCUs, however based on information
23    in in "Electronic Speech Synthesis" by Geoff Bristow (ISBN 0-07-007912-9, pages 148-152)
23    in "Electronic Speech Synthesis" by Geoff Bristow (ISBN 0-07-007912-9, pages 148-152)
2424    the upd1770/1771 is not one of these 4-bit ones.
2525
2626    The uPD1770/uPD1771 SSM is a 16-bit-wide rom/ram mcu with 8kb (4kw) of rom code,
r242231r242232
138138    pin  6 is tied to the   PC3 pin of the upD7801 CPU
139139    pin 26 is tied to the  INT1 pin of the upD7801 (CPU pin 12),
140140
141    1,2,3,28,27 dont generate any digital signals
141    1,2,3,28,27 don't generate any digital signals
142142    6 seems to be lowered 2.5 ms before an audio write
143143    7  is always low.
144144    12 is always high
r242231r242232
404404            m_t_timbre = (m_packet[1] & 0xe0) >> 5;
405405            m_t_offset = (m_packet[1] & 0x1f);
406406            m_t_period = m_packet[2];
407            //smaller periods dont all equal to 0x20
407            //smaller periods don't all equal to 0x20
408408            if (m_t_period < 0x20)
409409               m_t_period = 0x20;
410410
trunk/src/mess/drivers/cnsector.c
r0r242232
1// license:BSD-3-Clause
2// copyright-holders:hap
3/***************************************************************************
4
5  Parker Brothers Code Name: Sector
6  * MP0905BNL ZA0379 (die labeled 0970F-05B)
7 
8  This is a tabletop submarine pursuit game. A grid board and small toy
9  boats are used to remember your locations (a Paint app should be ok too).
10  Refer to the official manual for more information, it is not a simple game.
11
12
13  TODO:
14  - MCU clock is unknown
15
16***************************************************************************/
17
18#include "emu.h"
19#include "cpu/tms0980/tms0980.h"
20
21#include "cnsector.lh"
22
23// master clock is unknown, the value below is an approximation
24#define MASTER_CLOCK (250000)
25
26
27class cnsector_state : public driver_device
28{
29public:
30   cnsector_state(const machine_config &mconfig, device_type type, const char *tag)
31      : driver_device(mconfig, type, tag),
32      m_maincpu(*this, "maincpu"),
33      m_button_matrix(*this, "IN")
34   { }
35
36   required_device<cpu_device> m_maincpu;
37   required_ioport_array<5> m_button_matrix;
38
39   UINT16 m_o;
40
41   UINT16 m_leds_state[0x10];
42   UINT16 m_leds_cache[0x10];
43   UINT8 m_leds_decay[0x100];
44
45   DECLARE_READ8_MEMBER(read_k);
46   DECLARE_WRITE16_MEMBER(write_o);
47   DECLARE_WRITE16_MEMBER(write_r);
48
49   TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
50   void leds_update();
51
52   virtual void machine_start();
53};
54
55
56
57/***************************************************************************
58
59  LEDs
60
61***************************************************************************/
62
63// The device strobes the outputs very fast, it is unnoticeable to the user.
64// To prevent flickering here, we need to simulate a decay.
65
66// decay time, in steps of 10ms
67#define LEDS_DECAY_TIME 4
68
69void cnsector_state::leds_update()
70{
71   UINT16 active_state[0x10];
72   
73   for (int i = 0; i < 0x10; i++)
74   {
75      active_state[i] = 0;
76     
77      for (int j = 0; j < 0x10; j++)
78      {
79         int di = j << 4 | i;
80         
81         // turn on powered leds
82         if (m_leds_state[i] >> j & 1)
83            m_leds_decay[di] = LEDS_DECAY_TIME;
84         
85         // determine active state
86         int ds = (m_leds_decay[di] != 0) ? 1 : 0;
87         active_state[i] |= (ds << j);
88      }
89   }
90   
91   // on difference, send to output
92   for (int i = 0; i < 0x10; i++)
93      if (m_leds_cache[i] != active_state[i])
94         output_set_digit_value(i, active_state[i]);
95   
96   memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
97}
98
99TIMER_DEVICE_CALLBACK_MEMBER(cnsector_state::leds_decay_tick)
100{
101   // slowly turn off unpowered leds
102   for (int i = 0; i < 0x100; i++)
103      if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
104         m_leds_decay[i]--;
105   
106   leds_update();
107}
108
109
110
111/***************************************************************************
112
113  I/O
114
115***************************************************************************/
116
117READ8_MEMBER(cnsector_state::read_k)
118{
119   UINT8 k = 0;
120
121   // read selected button rows
122   for (int i = 0; i < 5; i++)
123      if (m_o >> i & 1)
124         k |= m_button_matrix[i]->read();
125   
126   return k;
127}
128
129WRITE16_MEMBER(cnsector_state::write_r)
130{
131   // R0-R5: select digit (right-to-left)
132   for (int i = 0; i < 6; i++)
133      m_leds_state[i] = (data >> i & 1) ? m_o : 0;
134   leds_update();
135
136   // R6-R9: direction leds
137   for (int i = 6; i < 10; i++)
138      output_set_lamp_value(i - 6, data >> i & 1);
139}
140
141WRITE16_MEMBER(cnsector_state::write_o)
142{
143   // O0-O4: input mux
144   // O0-O7: digit segments
145   m_o = data;
146}
147
148
149
150/***************************************************************************
151
152  Inputs
153
154***************************************************************************/
155
156static INPUT_PORTS_START( cnsector )
157   PORT_START("IN.0") // O0
158   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Next Ship")
159   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_NAME("Left")
160   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
161   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_NAME("Range")
162
163   PORT_START("IN.1") // O1
164   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("Aim")
165   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_NAME("Right")
166   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
167   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
168
169   PORT_START("IN.2") // O2
170   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_NAME("Fire")
171   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_NAME("Evasive Sub") // expert button
172   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
173   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("Recall")
174
175   PORT_START("IN.3") // O3
176   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_NAME("Sub Finder") // expert button
177   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_NAME("Slower")
178   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
179   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
180
181   PORT_START("IN.4") // O4
182   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_NAME("Teach Mode")
183   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_NAME("Faster")
184   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
185   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_NAME("Move Ship")
186INPUT_PORTS_END
187
188
189
190/***************************************************************************
191
192  Machine Config
193
194***************************************************************************/
195
196void cnsector_state::machine_start()
197{
198   memset(m_leds_state, 0, sizeof(m_leds_state));
199   memset(m_leds_cache, 0, sizeof(m_leds_cache));
200   memset(m_leds_decay, 0, sizeof(m_leds_decay));
201   m_o = 0;
202   
203   save_item(NAME(m_leds_state));
204   save_item(NAME(m_leds_cache));
205   save_item(NAME(m_leds_decay));
206   save_item(NAME(m_o));
207}
208
209
210static MACHINE_CONFIG_START( cnsector, cnsector_state )
211
212   /* basic machine hardware */
213   MCFG_CPU_ADD("maincpu", TMS0970, MASTER_CLOCK)
214   MCFG_TMS1XXX_READ_K_CB(READ8(cnsector_state, read_k))
215   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(cnsector_state, write_o))
216   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(cnsector_state, write_r))
217   
218   MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", cnsector_state, leds_decay_tick, attotime::from_msec(10))
219
220   MCFG_DEFAULT_LAYOUT(layout_cnsector)
221
222   /* no video! */
223
224   /* no sound! */
225MACHINE_CONFIG_END
226
227
228
229/***************************************************************************
230
231  Game driver(s)
232
233***************************************************************************/
234
235ROM_START( cnsector )
236   ROM_REGION( 0x0400, "maincpu", 0 )
237   ROM_LOAD( "mp0905bnl_za0379", 0x0000, 0x0400, CRC(201036e9) SHA1(b37fef86bb2bceaf0ac8bb3745b4702d17366914) )
238
239   ROM_REGION( 782, "maincpu:ipla", 0 )
240   ROM_LOAD( "tms0970_default_ipla.pla", 0, 782, CRC(e038fc44) SHA1(dfc280f6d0a5828d1bb14fcd59ac29caf2c2d981) )
241   ROM_REGION( 860, "maincpu:mpla", 0 )
242   ROM_LOAD( "tms0970_cnsector_mpla.pla", 0, 860, CRC(059f5bb4) SHA1(2653766f9fd74d41d44013bb6f54c0973a6080c9) )
243   ROM_REGION( 352, "maincpu:opla", 0 )
244   ROM_LOAD( "tms0970_cnsector_opla.pla", 0, 352, CRC(7c0bdcd6) SHA1(dade774097e8095dca5deac7b2367d0c701aca51) )
245   ROM_REGION( 157, "maincpu:spla", 0 )
246   ROM_LOAD( "tms0970_cnsector_spla.pla", 0, 157, CRC(56c37a4f) SHA1(18ecc20d2666e89673739056483aed5a261ae927) )
247ROM_END
248
249
250CONS( 1977, cnsector, 0, 0, cnsector, cnsector, driver_device, 0, "Parker Brothers", "Code Name: Sector", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
trunk/src/mess/drivers/comp4.c
r242231r242232
44
55  Milton Bradley Comp IV
66  * TMC0904NL CP0904A (die labeled 4A0970D-04A)
7
8  This is a handheld Mastermind game; a code-breaking game where the player
7 
8  This is small tabletop Mastermind game; a code-breaking game where the player
99  needs to find out the correct sequence of colours (numbers in our case).
1010  It is known as Logic 5 in Europe, and as Pythaligoras in Japan.
11
11 
1212  Press the R key to start, followed by a set of unique numbers and E.
1313  Refer to the official manual for more information.
1414
1515
1616  TODO:
17  - write_r doesn't look right, maybe something missing in cpu emulation
18  - layout
17  - MCU clock is unknown
1918
2019***************************************************************************/
2120
2221#include "emu.h"
2322#include "cpu/tms0980/tms0980.h"
2423
25// master clock is cpu internal, the value below is an approximation
24#include "comp4.lh"
25
26// master clock is unknown, the value below is an approximation
2627#define MASTER_CLOCK (250000)
2728
2829
r242231r242232
3839   required_device<cpu_device> m_maincpu;
3940   required_ioport_array<3> m_button_matrix;
4041
41   UINT16 m_r;
4242   UINT16 m_o;
4343
44   UINT16 m_leds_state;
45   UINT8 m_leds_decay[0x10];
46
4447   DECLARE_READ8_MEMBER(read_k);
4548   DECLARE_WRITE16_MEMBER(write_o);
4649   DECLARE_WRITE16_MEMBER(write_r);
4750
51   TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
52   void leds_update();
53
4854   virtual void machine_start();
4955};
5056
5157
5258/***************************************************************************
5359
60  LEDs
61
62***************************************************************************/
63
64// The device strobes the outputs very fast, it is unnoticeable to the user.
65// To prevent flickering here, we need to simulate a decay.
66
67// decay time, in steps of 10ms
68#define LEDS_DECAY_TIME 2
69
70void comp4_state::leds_update()
71{
72   for (int i = 0; i < 0x10; i++)
73   {
74      // turn on powered leds
75      if (m_leds_state >> i & 1)
76         m_leds_decay[i] = LEDS_DECAY_TIME;
77     
78      // send to output
79      output_set_lamp_value(i, (m_leds_decay[i] != 0) ? 1 : 0);
80   }
81}
82
83TIMER_DEVICE_CALLBACK_MEMBER(comp4_state::leds_decay_tick)
84{
85   // slowly turn off unpowered leds
86   for (int i = 0; i < 0x10; i++)
87      if (!(m_leds_state >> i & 1) && m_leds_decay[i])
88         m_leds_decay[i]--;
89   
90   leds_update();
91}
92
93
94
95/***************************************************************************
96
5497  I/O
5598
5699***************************************************************************/
r242231r242232
61104
62105   // read selected button rows
63106   for (int i = 0; i < 3; i++)
64      if (m_o & (1 << (i + 1)))
107      if (m_o >> (i+1) & 1)
65108         k |= m_button_matrix[i]->read();
66
109   
67110   return k;
68111}
69112
70113WRITE16_MEMBER(comp4_state::write_r)
71114{
72   // R..: LEDs
73   m_r = data;
115   // LEDs:
116   // R4    R9
117   // R10!  R8
118   // R2    R7
119   // R1    R6
120   // R0    R5
121   m_leds_state = data;
122   leds_update();
74123}
75124
76125WRITE16_MEMBER(comp4_state::write_o)
77126{
78   // O0?: LEDs (common)
127   // O0: LEDs common (always writes 1)
79128   // O1-O3: input mux
80129   // other bits: N/C
81130   m_o = data;
r242231r242232
90139***************************************************************************/
91140
92141static INPUT_PORTS_START( comp4 )
93   PORT_START("IN.0")
94   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("R")
95   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
96   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
97   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
142   PORT_START("IN.0") // O1
143   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("R")
144   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
145   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
146   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
98147
99   PORT_START("IN.1")
100   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
101   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
102   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
103   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
148   PORT_START("IN.1") // O2
149   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
150   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
151   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
152   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
104153
105   PORT_START("IN.2")
106   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("E")
107   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
108   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
109   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
154   PORT_START("IN.2") // O3
155   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("E")
156   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
157   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
158   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
110159INPUT_PORTS_END
111160
112161
r242231r242232
119168
120169void comp4_state::machine_start()
121170{
122   m_r = 0;
171   m_leds_state = 0;
172   memset(m_leds_decay, 0, sizeof(m_leds_decay));
123173   m_o = 0;
124
125   save_item(NAME(m_r));
174   
175   save_item(NAME(m_leds_state));
176   save_item(NAME(m_leds_decay));
126177   save_item(NAME(m_o));
127178}
128179
129180
130static const UINT16 comp4_output_pla[0x20] =
131{
132   // many unused bits, only O0 is actually used as external out
133   0xda, 0x96, 0x9b, 0x97, 0x98, 0x94, 0x99, 0x95,
134   0x9a, 0xa0, 0x94, 0x02, 0x35, 0x4a, 0x41, 0x00,
135   0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00,
136   0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00
137};
138
139
140181static MACHINE_CONFIG_START( comp4, comp4_state )
141182
142183   /* basic machine hardware */
143184   MCFG_CPU_ADD("maincpu", TMS0970, MASTER_CLOCK)
144   MCFG_TMS1XXX_OUTPUT_PLA(comp4_output_pla)
145   MCFG_TMS1XXX_READ_K(READ8(comp4_state, read_k))
146   MCFG_TMS1XXX_WRITE_O(WRITE16(comp4_state, write_o))
147   MCFG_TMS1XXX_WRITE_R(WRITE16(comp4_state, write_r))
185   MCFG_TMS1XXX_READ_K_CB(READ8(comp4_state, read_k))
186   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(comp4_state, write_o))
187   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(comp4_state, write_r))
188   
189   MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", comp4_state, leds_decay_tick, attotime::from_msec(10))
148190
191   MCFG_DEFAULT_LAYOUT(layout_comp4)
192
149193   /* no video! */
150194
151195   /* no sound! */
r242231r242232
161205
162206ROM_START( comp4 )
163207   ROM_REGION( 0x0400, "maincpu", 0 )
164   ROM_LOAD( "cp0904a", 0x0000, 0x0400, CRC(c502c8a1) SHA1(f82ff1a85c4849621d32344964d8b2233fc978d0) )
208   ROM_LOAD( "tmc0904nl_cp0904a", 0x0000, 0x0400, CRC(6233ee1b) SHA1(738e109b38c97804b4ec52bed80b00a8634ad453) )
209
210   ROM_REGION( 782, "maincpu:ipla", 0 )
211   ROM_LOAD( "tms0970_default_ipla.pla", 0, 782, CRC(e038fc44) SHA1(dfc280f6d0a5828d1bb14fcd59ac29caf2c2d981) )
212   ROM_REGION( 860, "maincpu:mpla", 0 )
213   ROM_LOAD( "tms0970_comp4_mpla.pla", 0, 860, CRC(ee9d7d9e) SHA1(25484e18f6a07f7cdb21a07220e2f2a82fadfe7b) )
214   ROM_REGION( 352, "maincpu:opla", 0 )
215   ROM_LOAD( "tms0970_comp4_opla.pla", 0, 352, CRC(a0f887d1) SHA1(3c666663d484d5bed81e1014f8715aab8a3d489f) )
216   ROM_REGION( 157, "maincpu:spla", 0 )
217   ROM_LOAD( "tms0970_comp4_spla.pla", 0, 157, CRC(e5bddd90) SHA1(4b1c6512c70e5bcd23c2dbf0c88cd8aa2c632a10) )
165218ROM_END
166219
167220
168CONS( 1977, comp4, 0, 0, comp4, comp4, driver_device, 0, "Milton Bradley", "Comp IV", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
221CONS( 1977, comp4, 0, 0, comp4, comp4, driver_device, 0, "Milton Bradley", "Comp IV", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
trunk/src/mess/drivers/gamate.c
r242231r242232
11/******************************************************************************
22 PeT mess@utanet.at 2007, 2014
3 Peter Wilhelmsen peter.wilhelmsen@gmail.com
4 Morten Shearman Kirkegaard morten+gamate@afdelingp.dk
35******************************************************************************/
46
57#include "emu.h"
r242231r242232
1517      : driver_device(mconfig, type, tag)
1618      , m_maincpu(*this, "maincpu")
1719      , m_cart(*this, "cartslot")
18//      , m_gfxdecode(*this, "gfxdecode")
20//      , m_gfxdecode(*this, "gfxdecode")
1921      , m_io_joy(*this, "JOY")
20      ,   m_palette(*this, "palette")
22      ,   m_palette(*this, "palette")
23      , m_cart_rom(*this, "cart_rom")
24      , m_bios(*this, "bios")
2125   { }
2226
2327   DECLARE_PALETTE_INIT(gamate);
24   DECLARE_READ8_MEMBER(video_r);
25   DECLARE_READ8_MEMBER(pad_r);
26   DECLARE_WRITE8_MEMBER(video_w);
27   DECLARE_WRITE8_MEMBER(audio_w);
28   DECLARE_WRITE8_MEMBER(bios_w);
28   DECLARE_READ8_MEMBER(protection_r);
29   DECLARE_READ8_MEMBER(gamate_cart_protection_r);
30   DECLARE_WRITE8_MEMBER(gamate_cart_protection_w);
31   DECLARE_READ8_MEMBER(gamate_video_r);
32   DECLARE_READ8_MEMBER(gamate_pad_r);
33   DECLARE_WRITE8_MEMBER(gamate_video_w);
34   DECLARE_READ8_MEMBER(gamate_audio_r);
35   DECLARE_WRITE8_MEMBER(gamate_audio_w);
36   DECLARE_WRITE8_MEMBER(gamate_bios_w);
2937   DECLARE_DRIVER_INIT(gamate);
3038   UINT32 screen_update_gamate(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
3139   INTERRUPT_GEN_MEMBER(gamate_interrupt);
40   TIMER_CALLBACK_MEMBER(gamate_timer);
41   TIMER_CALLBACK_MEMBER(gamate_timer2);
3242
3343private:
3444   virtual void machine_start();
3545
3646   struct
3747   {
38   UINT8 reg[8];
39   struct {
40      bool write; // else tilemap
41      bool page2; // else page1
42      UINT8 data[2][0x100][0x20];
43      } bitmap;
44   struct {
45      UINT8 data[32][32];
46   } tilemap;
47   UINT8 x, y;
48     UINT8 reg[8];
49     struct {
50       bool write;
51       bool page2; // else page1
52         UINT8 ypos, xpos/*tennis*/;
53       UINT8 data[2][0x100][0x20];
54     } bitmap;
55     UINT8 x, y;
56      bool y_increment;
4857   } video;
4958
50//  UINT8 m_ports[5];
51//  UINT8 m_ram[0x4000];
59   struct {
60      int bit_shifter;
61      UINT8 cartridge_byte;
62      UINT16 address; // in reality something more like short local cartridge address offset
63      bool unprotected;
64      bool failed;
65   } card_protection;
66
5267   required_device<cpu_device> m_maincpu;
5368   required_device<generic_slot_device> m_cart;
54//  required_device<gfxdecode_device> m_gfxdecode;
69//   required_device<gfxdecode_device> m_gfxdecode;
5570   required_ioport m_io_joy;
5671   required_device<palette_device> m_palette;
72   required_shared_ptr<UINT8> m_cart_rom;
73   required_shared_ptr<UINT8> m_bios;
74   emu_timer *timer1;
75   emu_timer *timer2;
5776};
5877
59WRITE8_MEMBER( gamate_state::video_w )
78WRITE8_MEMBER( gamate_state::gamate_cart_protection_w )
6079{
61   if (m_maincpu->pc()<0xf000)
62   logerror("%.6f %04x video write %04x %02x\n", machine().time().as_double(), m_maincpu->pc(), offset,data);
63   video.reg[offset]=data;
6480   switch (offset) {
65   case 1: video.bitmap.write=data&0x40;break; // probably y increment
66   case 4: video.bitmap.page2=data&0x80;video.x=data&0x7f;break;
67   case 5: video.y=data;break;
68   case 7:
69   if (video.bitmap.write) {
70      if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/)
71      video.bitmap.data[video.bitmap.page2][video.y][video.x]=data;
72      else
73      logerror("%.6f %04x video bitmap x %x invalid\n",machine().time().as_double(), m_maincpu->pc(), video.x);
74      video.y++;
75   } else {
76      if (video.x<ARRAY_LENGTH(video.tilemap.data[0]) && (video.y&0x1f)<ARRAY_LENGTH(video.tilemap.data))
77      video.tilemap.data[video.y&0x1f][video.x]=data;
78      else
79      logerror("%.6f %04x video tilemap %x %x invalid\n",machine().time().as_double(), m_maincpu->pc(), video.x, video.y);
80      video.x++;
81   case 0:
82      card_protection.failed= card_protection.failed || ((card_protection.cartridge_byte&0x80)!=0) != ((data&4)!=0);
83      card_protection.bit_shifter++;
84      if (card_protection.bit_shifter>=8) {
85         card_protection.cartridge_byte=m_cart_rom[card_protection.address++];
86         card_protection.bit_shifter=0;
87      }
88      break;
8189   }
90}
91READ8_MEMBER( gamate_state::gamate_cart_protection_r )
92{
93   UINT8 ret=1;
94   switch (offset) {
95   case 0:
96      ret=(card_protection.cartridge_byte&0x80)?2:0;
97      card_protection.cartridge_byte<<=1;
98      card_protection.bit_shifter++;
99      if (card_protection.bit_shifter>=8) {
100         card_protection.bit_shifter=0;
101         card_protection.cartridge_byte=m_cart_rom[card_protection.address++];
102         card_protection.unprotected=true;
103         if (!card_protection.failed) {
104         } // now protection chip on cartridge activates cartridge chip select on cpu accesses
105      }
106      break;
82107   }
108   return ret;
83109}
84110
85READ8_MEMBER( gamate_state::video_r )
111READ8_MEMBER( gamate_state::protection_r ) { return 1; }
112
113WRITE8_MEMBER( gamate_state::gamate_video_w )
86114{
87   if (offset!=6) return 0;
88   UINT8 data=0;
89   if (video.bitmap.write) {
90      if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/)
91      data=video.bitmap.data[video.bitmap.page2][video.y][video.x];
92      else
93      logerror("%.6f video bitmap x %x invalid\n",machine().time().as_double(),video.x);
94   } else {
95      if (video.x<ARRAY_LENGTH(video.tilemap.data[0]) && video.y<ARRAY_LENGTH(video.tilemap.data))
96      data=video.tilemap.data[video.y][video.x];
97      else
98      logerror("%.6f video tilemap %x %x invalid\n",machine().time().as_double(),video.x, video.y);
99   }
100   if (m_maincpu->pc()<0xf000)
101   logerror("%.6f video read %04x %02x\n",machine().time().as_double(),offset, data);
102   return data;
115  video.reg[offset]=data;
116  switch (offset) {
117  case 1: video.bitmap.write=data&0xc0; // more addressing mode
118      video.y_increment=data&0x40;
119      break;
120   case 2: video.bitmap.xpos=data;break; // at least 7 bits
121   case 3: video.bitmap.ypos=data;break; // at least 7 bits
122  case 4: video.bitmap.page2=data&0x80;video.x=data&0x7f;break;
123  case 5: video.y=data;break;
124  case 7:
125    if (video.bitmap.write) {
126      if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/)
127        video.bitmap.data[video.bitmap.page2][video.y][video.x]=data;
128      else
129        logerror("%.6f %04x video bitmap x %x invalid\n",machine().time().as_double(), m_maincpu->pc(), video.x);
130    } else {
131        video.bitmap.data[0][video.y][video.x&(ARRAY_LENGTH(video.bitmap.data[0][0])-1)]=data;
132    }
133    if (video.y_increment) video.y++;
134      else video.x++;
135  }
103136}
104137
105WRITE8_MEMBER( gamate_state::audio_w )
138READ8_MEMBER( gamate_state::gamate_video_r )
106139{
107   //  logerror("%.6f audio write %04x %02x\n",timer_get_time(),offset,data);
140   if (offset!=6) return 0;
141  UINT8 data=0;
142  if (video.bitmap.write) {
143      if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/)
144        data=video.bitmap.data[video.bitmap.page2][video.y][video.x];
145      else
146        logerror("%.6f video bitmap x %x invalid\n",machine().time().as_double(),video.x);
147  } else {
148    data=video.bitmap.data[0][video.y][video.x&(ARRAY_LENGTH(video.bitmap.data[0][0])-1)];
149  }
150  if (m_maincpu->pc()<0xf000)
151    logerror("%.6f video read %04x %02x\n",machine().time().as_double(),offset, data);
152  return data;
108153}
109154
110WRITE8_MEMBER( gamate_state::bios_w )
155WRITE8_MEMBER( gamate_state::gamate_audio_w )
111156{
112   UINT8 *memory = memregion("maincpu")->base(); //memory_region (REGION_CPU1);
157  logerror("%.6f %04x audio write %04x %02x\n",machine().time().as_double(),m_maincpu->pc(),offset,data);
158}
113159
114   unsigned short stack=m_maincpu->sp();//cpu_get_reg(M6502_S)|0x100;
115   unsigned short address= memory[stack+1]|(memory[stack+2]<<8);
116   switch (offset) {
117   case 0x12:
118   logerror("%.6f bios api %04x %04x string:%04x x:%02x y:%02x\n",
119            machine().time().as_double(), offset|0xf000, address,
120            memory[0]|(memory[1]<<8), 0, 0);//cpu_get_reg(M6502_X), cpu_get_reg(M6502_Y) );
121   break;
122   case 0x15:
123   logerror("%.6f bios api %04x %04x string:%04x x:%02x y:%02x\n",
124            machine().time().as_double(), offset|0xf000, address,
125            memory[0]|(memory[1]<<8), 0, 0); //cpu_get_reg(M6502_X), cpu_get_reg(M6502_Y) );
126   break;
127   case 0x18:
128   logerror("%.6f bios api %04x %04x string:%04x\n",machine().time().as_double(), offset|0xf000, address,
129            memory[0]|(memory[1]<<8) );
130   break;
131   case 0x1b:
132   logerror("%.6f bios api %04x %04x string:%04x\n",machine().time().as_double(), offset|0xf000, address,
133            memory[0]|(memory[1]<<8) );
134   break;
135   case 0x1e:
136   logerror("%.6f bios api %04x %04x string:%04x\n",machine().time().as_double(), offset|0xf000, address,
137            memory[0]|(memory[1]<<8) );
138   break;
139   case 0x2a: // cube up menu lighting
140   logerror("%.6f bios api %04x %04x 1c1d:%04x a:%02x x:%02x y:%02x\n",
141            machine().time().as_double(), offset|0xf000, address,
142            memory[0x1c]|(memory[0x1d]<<8),
143            0,0,0);//cpu_get_reg(M6502_A), cpu_get_reg(M6502_X), cpu_get_reg(M6502_Y) );
144   break;
145   default:
146   logerror("%.6f bios api %04x %04x\n",machine().time().as_double(), offset|0xf000, address);
147   }
160READ8_MEMBER( gamate_state::gamate_audio_r )
161{
162  logerror("%.6f %04x audio read %04x \n",machine().time().as_double(),m_maincpu->pc(),offset);
163   return 0;
148164}
149165
150READ8_MEMBER( gamate_state::pad_r )
166
167READ8_MEMBER( gamate_state::gamate_pad_r )
151168{
152   UINT8 data=m_io_joy->read();//readinputport(0);
153   //  logerror("%.6f pad read %04x %02x\n",timer_get_time(),offset,data);
154   return data;
169  UINT8 data=m_io_joy->read();
170  return data;
155171}
156172
157173static ADDRESS_MAP_START( gamate_mem, AS_PROGRAM, 8, gamate_state )
158//  AM_RANGE(0x4000, 0x7fff) AM_READWRITE(gmaster_io_r, gmaster_io_w)
174    AM_RANGE(0x0000, 0x03ff) AM_RAM
175  AM_RANGE(0x4000, 0x400d) AM_READWRITE(gamate_audio_r, gamate_audio_w)
176  AM_RANGE(0x4400, 0x4400) AM_READ(gamate_pad_r)
177  AM_RANGE(0x5000, 0x5007) AM_READWRITE(gamate_video_r, gamate_video_w)
178  AM_RANGE(0x5a00, 0x5a00) AM_READ(protection_r)
159179
160   AM_RANGE(0x0000, 0x03ff) AM_RAM
161   AM_RANGE(0x4000, 0x400d) AM_WRITE(audio_w)
162   AM_RANGE(0x4400, 0x4400) AM_READ(pad_r)
163//  AM_RANGE(0x5006, 0x5006) AM_READ(video_r)
164//  AM_RANGE(0x5000, 0x5007) AM_WRITE(video_w)
165   AM_RANGE(0x5000, 0x5007) AM_READWRITE(video_r, video_w)
166
167   AM_RANGE(0x6000, 0xdfff) AM_ROM
168   AM_RANGE(0xf000, 0xffff) AM_ROM
180  AM_RANGE(0x6000, 0xdfff) AM_ROM AM_SHARE("cart_rom")
181   AM_RANGE(0x6000, 0x6002) AM_READWRITE(gamate_cart_protection_r, gamate_cart_protection_w)
182//   AM_RANGE(0x6000, 0xdfff) AM_READWRITE(gamate_cart_r, gamate_cart_w)
183  AM_RANGE(0xf000, 0xffff) AM_ROM AM_SHARE("bios")
169184ADDRESS_MAP_END
170185
171186
r242231r242232
173188   PORT_START("JOY")
174189   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP)
175190   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
176   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) // left?
177   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) // rechts?
191   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
192   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
178193   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("A")
179194   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("B")
180195   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START) PORT_NAME("start/pause")
181196   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SELECT) PORT_NAME("select")
182197INPUT_PORTS_END
183198
184#if 0
199#ifdef UNUSED_CODE
185200static const struct gfx_layout gamate_charlayout =
186201{
187      4,      /* width of object */
188      1,      /* height of object */
189      256,/* 256 characters */
190      2,      /* bits per pixel */
191      { 0,1 }, /* no bitplanes */
192      /* x offsets */
193      { 0,2,4,6 },
194      /* y offsets */
195      { 0 },
196      8*1 /* size of 1 object in bits */
202        4,      /* width of object */
203        1,      /* height of object */
204        256,/* 256 characters */
205        2,      /* bits per pixel */
206        { 0,1 }, /* no bitplanes */
207        /* x offsets */
208        { 0,2,4,6 },
209        /* y offsets */
210        { 0 },
211        8*1 /* size of 1 object in bits */
197212};
198213
199214static const unsigned short gamate_palette[4] =
200215{
201216   0,1,2,3
202217};
218
219static GFXDECODE_START( gamate_charlayout )
220        GFXDECODE_ENTRY( "gfx1", 0x0000, gamate_charlayout, 0, 0x100 )
221GFXDECODE_END
203222#endif
204223
205224/* palette in red, green, blue tribles */
206225static const unsigned char gamate_colors[4][3] =
207226{
208   { 255,255,255 },
209   { 0xa0, 0xa0, 0xa0 },
210   { 0x60, 0x60, 0x60 },
211   { 0, 0, 0 }
227  { 255,255,255 },
228  { 0xa0, 0xa0, 0xa0 },
229  { 0x60, 0x60, 0x60 },
230  { 0, 0, 0 }
212231};
213232
214#if 0
215static GFXDECODE_START( gamate_charlayout )
216      GFXDECODE_ENTRY( "gfx1", 0x0000, gamate_charlayout, 0, 0x100 )
217GFXDECODE_END
218#endif
219
220233PALETTE_INIT_MEMBER(gamate_state, gamate)
221234{
222235   int i;
r242231r242232
245258
246259UINT32 gamate_state::screen_update_gamate(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
247260{
248   int x, y, j;
249   for (y=0;y<160;y++) {
250   for (x=0, j=0;x<160;x+=8, j++) {
251//  for (y=0;y<256;y++) {
252//    for (x=0, j=0;x<256;x+=8, j++) {
253      UINT8 d1=video.bitmap.data[0][y][j];
254      UINT8 d2=video.bitmap.data[1][y][j];
255#if 0
256      UINT16 data=PLANES2_2_PACKED(d1, d2);
257      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), (data>>8)&0xff,0,0,0, x, y);
258      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), data&0xff,0,0,0, x+4, y);
259#else
261  int x, y, j;
262  for (y=0;y<160;y++) {
263    for (x=0, j=0;x<160;x+=8, j++) {
264//      UINT8 d1=video.bitmap.data[0][(y+video.bitmap.ypos)&0xff][j+video.bitmap.xpos/8];
265//      UINT8 d2=video.bitmap.data[1][(y+video.bitmap.ypos)&0xff][j+video.bitmap.xpos/8];
266      UINT8 d1=video.bitmap.data[0][(y+video.bitmap.ypos)%200][j]; // kill shot, tornade
267      UINT8 d2=video.bitmap.data[1][(y+video.bitmap.ypos)%200][j];
260268         BlitPlane(&bitmap.pix16(y, x+4), d1, d2);
261269         BlitPlane(&bitmap.pix16(y, x), d1>>4, d2>>4);
262#endif
263   }
264   }
265   for (y=0; y<32; y++) {
266   for (x=0; x<32; x++) {
267#if 0
268      UINT8 d=video.tilemap.data[y][x];
269      if (d) {
270      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8);
271      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+1);
272      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+2);
273      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+3);
274      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+4);
275      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+5);
276      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+6);
277      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+7);
278      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8);
279      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+1);
280      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+2);
281      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+3);
282      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+4);
283      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+5);
284      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+6);
285      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+7);
286      } else {
287      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8);
288      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+1);
289      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+2);
290      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+3);
291      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+4);
292      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+5);
293      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+6);
294      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+7);
295      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8);
296      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+1);
297      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+2);
298      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+3);
299      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+4);
300      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+5);
301      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+6);
302      m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+7);
303      }
304#endif
305   }
306   }
270    }
271  }
307272   return 0;
308273}
309274
310275DRIVER_INIT_MEMBER(gamate_state,gamate)
311276{
312277   memset(&video, 0, sizeof(video));/* memset(m_ram, 0, sizeof(m_ram));*/
313   UINT8 *gfx=memregion("gfx1")->base();   for (int i=0; i<256; i++) gfx[i]=i;
278   UINT8 *gfx=memregion("gfx1")->base();   for (int i=0; i<256; i++) gfx[i]=i;
279   timer1 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamate_state::gamate_timer),this));
280   timer2 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamate_state::gamate_timer2),this));
314281}
315282
316283
317284void gamate_state::machine_start()
318285{
319   if (m_cart->exists())
286   if (m_cart->exists()) {
320287      m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000, 0xdfff, read8_delegate(FUNC(generic_slot_device::read_rom),(generic_slot_device*)m_cart));
288//      m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000, 0x6000, READ8_DELEGATE(gamate_state, gamate_cart_protection_r));
289   }
290   m_bios[0xdf1]=0xea; m_bios[0xdf2]=0xea; // $47 protection readback
291   card_protection.address=0x6005-0x6001;
292   card_protection.bit_shifter=0;
293   card_protection.cartridge_byte=m_cart_rom[card_protection.address++];
294   card_protection.failed=false;
295   card_protection.unprotected=false;
296   timer2->enable(TRUE);
297   timer2->reset(m_maincpu->cycles_to_attotime(1000));
321298#if 0
322299   save_item(NAME(m_video.data));
323300   save_item(NAME(m_video.index));
r242231r242232
331308#endif
332309}
333310
311TIMER_CALLBACK_MEMBER(gamate_state::gamate_timer)
312{
313   m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
314   timer1->enable(FALSE);
315}
334316
317TIMER_CALLBACK_MEMBER(gamate_state::gamate_timer2)
318{
319   m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
320   timer1->enable(TRUE);
321   timer1->reset(m_maincpu->cycles_to_attotime(10/* cycles short enought to clear irq line early enough*/));
322   timer2->enable(TRUE);
323   timer2->reset(m_maincpu->cycles_to_attotime(40000));
324}
325
326
335327INTERRUPT_GEN_MEMBER(gamate_state::gamate_interrupt)
336328{
337//  m_maincpu->set_input_line(UPD7810_INTFE1, ASSERT_LINE);
338   static bool state=false;
339//  m_maincpu->set_input_line(M6502_IRQ_LINE, state?ASSERT_LINE: CLEAR_LINE);
340   state=!state;
341//  cpu_set_irq_line(0, M6502_INT_IRQ, PULSE_LINE);
342329}
343330
344331static MACHINE_CONFIG_START( gamate, gamate_state )
r242231r242232
348335
349336   MCFG_SCREEN_ADD("screen", LCD)
350337   MCFG_SCREEN_REFRESH_RATE(60)
351#if 0
352   MCFG_SCREEN_SIZE(512, 256)
353   MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
338#ifdef SHOW_TILEMAP
339   MCFG_SCREEN_SIZE(256, 152+256)
340   MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0, 152+256-1)
354341#else
355   MCFG_SCREEN_SIZE(160, 160)
356   MCFG_SCREEN_VISIBLE_AREA(0, 160-1, 0, 160-1)
342   MCFG_SCREEN_SIZE(160, 152)
343   MCFG_SCREEN_VISIBLE_AREA(0, 160-1, 0, 152-1)
357344#endif
358345   MCFG_SCREEN_UPDATE_DRIVER(gamate_state, screen_update_gamate)
359346   MCFG_SCREEN_PALETTE("palette")
360347
361//  MCFG_GFXDECODE_ADD("gfxdecode", "palette", gamate )
348//   MCFG_GFXDECODE_ADD("gfxdecode", "palette", gamate )
362349   MCFG_PALETTE_ADD("palette", ARRAY_LENGTH(gamate_colors))
363//  MCFG_PALETTE_INDIRECT_ENTRIES(4)
350//   MCFG_PALETTE_INDIRECT_ENTRIES(4)
364351   MCFG_PALETTE_INIT_OWNER(gamate_state, gamate)
365352   MCFG_DEFAULT_LAYOUT(layout_lcd)
366353
367354   MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_linear_slot, "gamate_cart")
368355   MCFG_GENERIC_MANDATORY
369356
370   MCFG_SOFTWARE_LIST_ADD("cart_list", "gamate")
357   MCFG_SOFTWARE_LIST_ADD("cart_list","gamate")
371358MACHINE_CONFIG_END
372359
373360
374361ROM_START(gamate)
375362   ROM_REGION(0x10000,"maincpu", 0)
376   ROM_LOAD("gamate.bin", 0xf000, 0x1000, BAD_DUMP CRC(b8bf539b) SHA1(d00cb43b8a4cb0cc7fea06bee5f08490a71f5690) )
377//  ROM_LOAD("gamate.bin", 0xf000, 0x1000, CRC(b8bf539b) SHA1(d00cb43b8a4cb0cc7fea06bee5f08490a71f5690) )
378   ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
363   ROM_LOAD("gamate_bios_umc.bin", 0xf000, 0x1000, CRC(07090415) SHA1(ea449dc607601f9a68d855ad6ab53800d2e99297) )
364 ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
379365ROM_END
380366
381367
382368/*    YEAR  NAME      PARENT  COMPAT    MACHINE   INPUT    CLASS          INIT      COMPANY    FULLNAME */
383CONS( 19??, gamate,  0,      0,        gamate,  gamate, gamate_state, gamate, "Bit Corp", "Gamate", GAME_NOT_WORKING | GAME_NO_SOUND)
369CONS( 19??, gamate,  0,      0,        gamate,  gamate, gamate_state, gamate, "Bit Corp", "Gamate", GAME_NO_SOUND)
370
371
trunk/src/mess/drivers/leapster.c
r242231r242232
207207#include "emu.h"
208208#include "bus/generic/slot.h"
209209#include "bus/generic/carts.h"
210#include "cpu/arcompact/arcompact.h"
210211
211212
212213class leapster_state : public driver_device
r242231r242232
247248{
248249   UINT32 size = m_cart->common_get_size("rom");
249250
250   m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
251   m_cart->rom_alloc(size, GENERIC_ROM32_WIDTH, ENDIANNESS_LITTLE);
251252   m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
252253
253254   return IMAGE_INIT_PASS;
r242231r242232
257258{
258259   astring region_tag;
259260   m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
261   membank("cartrom")->set_base(m_cart_rom->base());
260262}
261263
262264void leapster_state::machine_reset()
263265{
264266}
265267
268static ADDRESS_MAP_START( leapster_map, AS_PROGRAM, 32, leapster_state )
269   AM_RANGE(0x00000000, 0x001fffff) AM_ROM AM_MIRROR(0x40000000) // pointers in the bios region seem to be to the 40xxxxxx region, either we mirror there or something (real bios?) is acutally missing
270   AM_RANGE(0x80000000, 0x807fffff) AM_ROMBANK("cartrom") // game ROM pointers are all to the 80xxxxxx region, so I assume it maps here
266271
272ADDRESS_MAP_END
267273
268274static MACHINE_CONFIG_START( leapster, leapster_state )
269275   /* basic machine hardware */
270   // CPU is ArcTangent A5
276   // CPU is ArcTangent-A5 '5.1' (ARCompact core)
277   MCFG_CPU_ADD("maincpu", ARCA5, 96000000/10)
278   MCFG_CPU_PROGRAM_MAP(leapster_map)
271279
280
272281   /* video hardware */
273282   MCFG_SCREEN_ADD("screen", LCD)
274283   MCFG_SCREEN_REFRESH_RATE(60)
trunk/src/mess/drivers/mc1000.c
r242231r242232
453453   MCFG_CASSETTE_ADD("cassette")
454454   MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)
455455
456   MCFG_SOFTWARE_LIST_ADD("cass_list", "mc1000_cass")
457
456458   MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
457459   MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(mc1000_state, write_centronics_busy))
458460
trunk/src/mess/drivers/megadriv.c
r242231r242232
773773   ROM_SYSTEM_BIOS(0, "v100s", "v1.00S")
774774   ROMX_LOAD( "mpr-14088h.bin", 0x000000,  0x020000, CRC(3773d5aa) SHA1(bbf729a1aaa1667b783749299e1ad932aaf5f253), ROM_BIOS(1) | ROM_GROUPWORD | ROM_REVERSE)
775775   /* Confirmed by ElBarto */
776   ROM_SYSTEM_BIOS(1, "v100g", "v1.00g")
776   ROM_SYSTEM_BIOS(1, "v100g", "v1.00G")
777777   ROMX_LOAD( "epr-14088b.bin", 0x000000,  0x020000, CRC(69ed6ccd) SHA1(27d11c3836506f01ee81cd142c0cd8b51abebbd2), ROM_BIOS(2) | ROM_GROUPWORD | ROM_REVERSE)
778778   /* Confirmed by ElBarto */
779779   ROM_SYSTEM_BIOS(2, "v100l", "v1.00L")
780780   ROMX_LOAD( "mpr-14088c.bin", 0x000000,  0x020000, CRC(03134289) SHA1(d60cb5a53f26d6b13e354bc149217587f2301718), ROM_BIOS(3) | ROM_GROUPWORD | ROM_REVERSE)
781781   /* Confirmed by ElBarto */
782   ROM_SYSTEM_BIOS(3, "v100o", "v1.00o")
782   ROM_SYSTEM_BIOS(3, "v100o", "v1.00O")
783783   ROMX_LOAD( "epr-14088d.bin", 0x000000,  0x020000, CRC(dfa95ee9) SHA1(e13666c76fa0a2e94e2f651b26b0fd625bf55f07), ROM_BIOS(4) | ROM_GROUPWORD | ROM_REVERSE)
784   ROM_SYSTEM_BIOS(4, "v100p", "v1.00P")
785   ROMX_LOAD( "megacd_model1_bios_1_00p_j.bin", 0x000000,  0x020000, CRC(9d2da8f2) SHA1(4846f448160059a7da0215a5df12ca160f26dd69), ROM_BIOS(5) )
784   ROM_SYSTEM_BIOS(4, "v100p", "v1.00P")   // CRC: e2e70bc8 when byteswapped
785   ROMX_LOAD( "epr-14088e.bin", 0x000000,  0x020000, CRC(9d2da8f2) SHA1(4846f448160059a7da0215a5df12ca160f26dd69), ROM_BIOS(5) )
786786ROM_END
787787
788788/* Asia bios, when run in USA region will show :
trunk/src/mess/drivers/merlin.c
r242231r242232
1// license:BSD-3-Clause
2// copyright-holders:Wilbert Pol, hap
13/***************************************************************************
24
35  Parker Bros Merlin handheld computer game
r242231r242232
24  * TMS1100NLL MP3404A-N2 (has internal ROM)
3
5 
46  To start a game, press NEW GAME, followed by a number:
r242231r242232
1012  4: Blackjack 13
1113  5: Magic Square
1214  6: Mindbender
13
15 
1416  Refer to the official manual for more information on the games.
15
16
17 
18 
1719  Other handhelds assumed to be on similar hardware:
1820  - Dr. Smith - by Tomy, released in Japan (basically a white version of Merlin,
1921    let's assume for now that the ROM contents is identical)
2022  - Master Merlin
21
23 
2224  Another sequel, called Split Second, looks like different hardware.
2325
2426
r242231r242232
4547   merlin_state(const machine_config &mconfig, device_type type, const char *tag)
4648      : driver_device(mconfig, type, tag),
4749      m_maincpu(*this, "maincpu"),
48      m_button_matrix(*this, "O"),
50      m_button_matrix(*this, "IN"),
4951      m_speaker(*this, "speaker")
5052   { }
5153
r242231r242232
7072
7173***************************************************************************/
7274
73/* The keypad is a 4*4 matrix, connected like so:
74
75       +----+  +----+  +----+  +----+
76O0 o---| R0 |--| R1 |--| R2 |--| R3 |
77       +----+  +----+  +----+  +----+
78          |       |       |       |
79       +----+  +----+  +----+  +----+
80O1 o---| R4 |--| R5 |--| R6 |--| R7 |
81       +----+  +----+  +----+  +----+
82          |       |       |       |
83       +----+  +----+  +----+  +----+
84O2 o---| R8 |--| R9 |--|R10 |--| SG |
85       +----+  +----+  +----+  +----+
86          |       |       |       |
87          |    +----+  +----+  +----+
88O3 o------+----| CT |--| NG |--| HM |
89          |    +----+  +----+  +----+
90          |       |       |       |
91          o       o       o       o
92         K1      K2      K8      K4
93
94SG = same game, CT = comp turn, NG = new game, HM = hit me */
95
9675READ8_MEMBER(merlin_state::read_k)
9776{
9877   UINT8 k = 0;
99
78   
10079   // read selected button rows
10180   for (int i = 0; i < 4; i++)
102      if (m_o & (1 << i))
81      if (m_o >> i & 1)
10382         k |= m_button_matrix[i]->read();
10483
10584   return k;
r242231r242232
143122***************************************************************************/
144123
145124static INPUT_PORTS_START( merlin )
146   PORT_START("O.0")
147   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("Button 0")
148   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Button 1")
149   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Button 3")
150   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Button 2")
125   PORT_START("IN.0") // O0
126   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("Button 0")
127   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Button 1")
128   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Button 3")
129   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Button 2")
151130
152   PORT_START("O.1")
153   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Button 4")
154   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Button 5")
155   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Button 7")
156   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Button 6")
131   PORT_START("IN.1") // O1
132   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Button 4")
133   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Button 5")
134   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Button 7")
135   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Button 6")
157136
158   PORT_START("O.2")
159   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Button 8")
160   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Button 9")
161   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_S) PORT_NAME("Same Game")
162   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Button 10")
137   PORT_START("IN.2") // O2
138   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON9) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Button 8")
139   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON10) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Button 9")
140   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON12) PORT_CODE(KEYCODE_S) PORT_NAME("Same Game")
141   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON11) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Button 10")
163142
164   PORT_START("O.3")
143   PORT_START("IN.3") // O3
165144   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
166   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn")
167   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me")
168   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_N) PORT_NAME("New Game")
145   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON13) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn")
146   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON15) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me")
147   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON14) PORT_CODE(KEYCODE_N) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("New Game")
169148INPUT_PORTS_END
170149
171150
r242231r242232
200179   /* basic machine hardware */
201180   MCFG_CPU_ADD("maincpu", TMS1100, MERLIN_RC_CLOCK)
202181   MCFG_TMS1XXX_OUTPUT_PLA(merlin_output_pla)
203   MCFG_TMS1XXX_READ_K(READ8( merlin_state, read_k))
204   MCFG_TMS1XXX_WRITE_O(WRITE16( merlin_state, write_o))
205   MCFG_TMS1XXX_WRITE_R(WRITE16( merlin_state, write_r))
182   MCFG_TMS1XXX_READ_K_CB(READ8( merlin_state, read_k))
183   MCFG_TMS1XXX_WRITE_O_CB(WRITE16( merlin_state, write_o))
184   MCFG_TMS1XXX_WRITE_R_CB(WRITE16( merlin_state, write_r))
206185
207186   MCFG_DEFAULT_LAYOUT(layout_merlin)
208187
r242231r242232
230209   // 0x5E to 0x1E to make 'Music Machine' working.
231210   // The hashes below are from the manually changed dump
232211   ROM_LOAD( "mp3404", 0x0000, 0x800, BAD_DUMP CRC(7515a75d) SHA1(76ca3605d3fde1df62f79b9bb1f534c2a2ae0229) )
212
213   ROM_REGION( 867, "maincpu:mpla", 0 )
214   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified
215   ROM_REGION( 365, "maincpu:opla", 0 )
216   ROM_LOAD( "tms1100_merlin_opla.pla", 0, 365, NO_DUMP )
233217ROM_END
234218
235219
trunk/src/mess/drivers/microvsn.c
r242231r242232
655655   MCFG_CPU_IO_MAP( microvision_8021_io )
656656   MCFG_CPU_ADD("maincpu2", TMS1100, 500000)   // most games seem to be running at approximately this speed
657657   MCFG_TMS1XXX_OUTPUT_PLA( microvision_output_pla_0 )
658   MCFG_TMS1XXX_READ_K( READ8( microvision_state, tms1100_read_k ) )
659   MCFG_TMS1XXX_WRITE_O( WRITE16( microvision_state, tms1100_write_o ) )
660   MCFG_TMS1XXX_WRITE_R( WRITE16( microvision_state, tms1100_write_r ) )
658   MCFG_TMS1XXX_READ_K_CB( READ8( microvision_state, tms1100_read_k ) )
659   MCFG_TMS1XXX_WRITE_O_CB( WRITE16( microvision_state, tms1100_write_o ) )
660   MCFG_TMS1XXX_WRITE_R_CB( WRITE16( microvision_state, tms1100_write_r ) )
661661
662662   MCFG_SCREEN_ADD("screen", LCD)
663663   MCFG_SCREEN_REFRESH_RATE(60)
r242231r242232
695695ROM_START( microvsn )
696696   ROM_REGION( 0x800, "maincpu1", ROMREGION_ERASE00 )
697697   ROM_REGION( 0x800, "maincpu2", ROMREGION_ERASE00 )
698   ROM_REGION( 867, "maincpu2:mpla", 0 )
699   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // verified for: pinball, blockbuster, bowling
700
701   ROM_REGION( 365, "maincpu2:opla", ROMREGION_ERASE00 )
698702ROM_END
699703
700704
trunk/src/mess/drivers/ngen.c
r242231r242232
44
55    10-11-14 - Skeleton driver
66
7   Interrupts based on patents:
8   level 1 - SIO
9   level 3 - timer (from PIT, presumably channel 0? Patent says "channel 3")
10   level 4 - "interrupt detector" - keyboard, printer, RTC
11   level 7 - floppy/hard disk
12   
13    To get to "menu mode", press Space quickly after reset (might need good timing)
14    The bootstrap ROM version number is displayed, along with "B,D,L,M,P,T:"
15    You can press one of these keys for the following tests:
16    B: Bootstrap
17       Loads the system image file (from disk or master workstation)
18    D: Dump
19       RAM contents are dumped to a local disk drive or master workstation
20    L: Load
21       Loads the system image file, then enters the Panel Debugger.  Exiting the Panel
22       Debugger will continue execution of the system image
23    M: Memory Test
24       Continuously performs the Memory Test until the system is reset.
25    P: Panel Debugger
26       Enters the Panel Debugger
27    T: Type of Operating System
28       Gives an "OS:" prompt, at which you can enter the number of the system image to
29       load at the master workstation.
30       
31    Panel Debugger:
32    - Open/Modify RAM
33    Enter an address (seg:off) followed by a forward-slash, the contents of this word will
34    appear, you can enter a value to set it to, or just press Next (default: Enter) to leave
35    it as is.  It will then go on to the next word.  Pressing Return (scan code unknown
36    currently) will return to the debugger prompt.
37    - Open/Modify Register
38    Enter the register only, and the contents will appear, you can leave it or alter it (you
39    must enter all digits (eg: 0A03 if you're modifying DX) then press Return.
40    - I/O to or from a port
41    Input: Address (segment is ignored, and not required) followed by I, a byte is read from
42    the port defined by the offset, and the byte is displayed.
43    Output: Address followed by O, you are now prompted with an '='.  Enter the byte to send
44    to the port, and press Return.
45    - Set Haltpoint:
46    Enter an address (seg:off) followed by H.  Sets a haltpoint at the specified address.  Does
47    not work for ROM addresses.  Only one allowed at a time.  Haltpoint info is stored at
48    0000:01F0.  Uses a software interrupt (INT 7C), rather than INT 3.
49   
50    To start or continue from the current address, enter P.
51    To start from a specific address, enter the address (seg:off) followed by a G.
752*/
853
954#include "emu.h"
r242231r242232
1661#include "machine/pit8253.h"
1762#include "machine/z80dart.h"
1863#include "bus/rs232/rs232.h"
64#include "machine/ngen_kb.h"
65#include "machine/clock.h"
1966
2067class ngen_state : public driver_device
2168{
r242231r242232
3683   DECLARE_WRITE_LINE_MEMBER(pit_out0_w);
3784   DECLARE_WRITE_LINE_MEMBER(pit_out1_w);
3885   DECLARE_WRITE_LINE_MEMBER(pit_out2_w);
86   DECLARE_WRITE_LINE_MEMBER(cpu_timer_w);
87   DECLARE_WRITE_LINE_MEMBER(timer_clk_out);
3988   DECLARE_WRITE16_MEMBER(cpu_peripheral_cb);
4089   DECLARE_WRITE16_MEMBER(peripheral_w);
4190   DECLARE_READ16_MEMBER(peripheral_r);
4291   DECLARE_WRITE16_MEMBER(port00_w);
4392   DECLARE_READ16_MEMBER(port00_r);
4493   DECLARE_WRITE_LINE_MEMBER(dma_hrq_changed);
94   DECLARE_WRITE_LINE_MEMBER(dma_eop_changed);
4595   DECLARE_WRITE_LINE_MEMBER(dack0_w);
4696   DECLARE_WRITE_LINE_MEMBER(dack1_w);
4797   DECLARE_WRITE_LINE_MEMBER(dack2_w);
4898   DECLARE_WRITE_LINE_MEMBER(dack3_w);
49   DECLARE_READ8_MEMBER(dma_read_byte);
50   DECLARE_WRITE8_MEMBER(dma_write_byte);
99   DECLARE_READ8_MEMBER(dma_read_word);
100   DECLARE_WRITE8_MEMBER(dma_write_word);
51101   MC6845_UPDATE_ROW(crtc_update_row);
102   // TODO: sort out what devices use which channels
103   DECLARE_READ8_MEMBER( dma_0_dack_r ) { UINT16 ret = 0xffff; m_dma_high_byte = ret & 0xff00; return ret; }
104   DECLARE_READ8_MEMBER( dma_1_dack_r ) { UINT16 ret = 0xffff; m_dma_high_byte = ret & 0xff00; return ret; }
105   DECLARE_READ8_MEMBER( dma_2_dack_r ) { UINT16 ret = 0xffff; m_dma_high_byte = ret & 0xff00; return ret; }
106   DECLARE_READ8_MEMBER( dma_3_dack_r ) { UINT16 ret = 0xffff; m_dma_high_byte = ret & 0xff00; return ret; }
107   DECLARE_WRITE8_MEMBER( dma_0_dack_w ){ popmessage("IOW: data %02x",data); }
108   DECLARE_WRITE8_MEMBER( dma_1_dack_w ){  }
109   DECLARE_WRITE8_MEMBER( dma_2_dack_w ){  }
110   DECLARE_WRITE8_MEMBER( dma_3_dack_w ){  }
52111
53112protected:
113   virtual void machine_reset();
114
54115private:
55116   required_device<cpu_device> m_maincpu;
56117   required_device<mc6845_device> m_crtc;
r242231r242232
71132   UINT16 m_periph141;
72133   UINT8 m_dma_offset[4];
73134   INT8 m_dma_channel;
135   UINT16 m_dma_high_byte;
136   UINT16 m_control;
74137};
75138
76139WRITE_LINE_MEMBER(ngen_state::pit_out0_w)
77140{
78   //m_pic->ir0_w(state);
79   logerror("80186 Timer 1 state %i\n",state);
141   m_pic->ir3_w(state);  // Timer interrupt
142   popmessage("PIT Timer 0 state %i\n",state);
80143}
81144
82145WRITE_LINE_MEMBER(ngen_state::pit_out1_w)
83146{
84   logerror("PIT Timer 1 state %i\n",state);
147   popmessage("PIT Timer 1 state %i\n",state);
148   m_iouart->rxcb_w(state);
149   m_iouart->txcb_w(state);  // channels in the correct order?
85150}
86151
87152WRITE_LINE_MEMBER(ngen_state::pit_out2_w)
88153{
89154   m_iouart->rxca_w(state);
90   m_iouart->rxcb_w(state);
91155   m_iouart->txca_w(state);
92   m_iouart->txcb_w(state);
156   //logerror("PIT Timer 2 state %i\n",state);
93157}
94158
159WRITE_LINE_MEMBER(ngen_state::cpu_timer_w)
160{
161   logerror("80186 Timer 1 state %i\n",state);
162}
163
164WRITE_LINE_MEMBER(ngen_state::timer_clk_out)
165{
166   m_viduart->write_rxc(state);  // Keyboard UART Rx/Tx clocks
167   m_viduart->write_txc(state);
168}
169
95170WRITE16_MEMBER(ngen_state::cpu_peripheral_cb)
96171{
97172   UINT32 addr;
r242231r242232
184259         m_crtc->register_w(space,0,data & 0xff);
185260      break;
186261   case 0x146:
187      logerror("Video write offset 0x146 data %04x mask %04x\n",data,mem_mask);
262      if(mem_mask & 0x00ff)
263         m_viduart->data_w(space,0,data & 0xff);
188264      break;
189265   case 0x147:
190      //logerror("Video write offset 0x147 data %04x mask %04x\n",data,mem_mask);
266      if(mem_mask & 0x00ff)
267         m_viduart->control_w(space,0,data & 0xff);
191268      break;
192269   case 0x1a0:  // serial?
193270      logerror("(PC=%06x) Serial(?) 0x1a0 write offset %04x data %04x mask %04x\n",m_maincpu->device_t::safe_pc(),offset,data,mem_mask);
r242231r242232
257334         ret = m_crtc->register_r(space,0);
258335      break;
259336   case 0x146:
337      if(mem_mask & 0x00ff)
338         ret = m_viduart->data_r(space,0);
260339      break;
261   case 0x147:  // definitely video related, maybe UART sending data to the monitor?
262      // expects bit 0 to be set (Video ready signal?)
263      ret = 0;
264      ret |= 1;
340   case 0x147:  // keyboard UART
341      // expects bit 0 to be set (UART transmit ready)
342      if(mem_mask & 0x00ff)
343         ret = m_viduart->status_r(space,0);
265344      break;
266   case 0x1a0:  // status?
267      ret = 0;
268      ret |= 0x02;  // end of DMA transfer?
345   case 0x1a0:  // I/O control register?
346      ret = m_control;  // end of DMA transfer? (maybe a per-channel EOP?) Bit 6 is set during a transfer?
269347      break;
270348   case 0x1b1:
271349      ret = 0;
r242231r242232
299377   m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE);
300378}
301379
380WRITE_LINE_MEMBER( ngen_state::dma_eop_changed )
381{
382   if(m_dma_channel == 0)
383   {
384      if(state)
385         m_control |= 0x02;
386      else
387         m_control &= ~0x02;
388   }
389}
390
302391void ngen_state::set_dma_channel(int channel, int state)
303392{
304393   if(!state)
r242231r242232
312401WRITE_LINE_MEMBER( ngen_state::dack2_w ) { set_dma_channel(2, state); }
313402WRITE_LINE_MEMBER( ngen_state::dack3_w ) { set_dma_channel(3, state); }
314403
315READ8_MEMBER(ngen_state::dma_read_byte)
404READ8_MEMBER(ngen_state::dma_read_word)
316405{
317406   address_space& prog_space = m_maincpu->space(AS_PROGRAM); // get the right address space
318   UINT8 result;
407   UINT16 result;
319408   if(m_dma_channel == -1)
320409      return 0xff;
321   offs_t page_offset = (((offs_t) m_dma_offset[m_dma_channel]) << 16) & 0xFF0000;
410   offs_t page_offset = (((offs_t) m_dma_offset[m_dma_channel]) << 16) & 0xFE0000;
322411
323   result = prog_space.read_byte(page_offset + offset);
324   popmessage("DMA byte address %06x read %02x\n",page_offset+offset,result);
325   return result;
412   result = prog_space.read_word(page_offset + (offset << 1));
413   m_dma_high_byte = result & 0xFF00;
414   popmessage("DMA byte address %06x read %04x\n",page_offset+(offset<<1),result);
415   return result & 0xff;
326416}
327417
328418
329WRITE8_MEMBER(ngen_state::dma_write_byte)
419WRITE8_MEMBER(ngen_state::dma_write_word)
330420{
331421   address_space& prog_space = m_maincpu->space(AS_PROGRAM); // get the right address space
332422   if(m_dma_channel == -1)
333423      return;
334   offs_t page_offset = (((offs_t) m_dma_offset[m_dma_channel]) << 16) & 0xFF0000;
424   offs_t page_offset = (((offs_t) m_dma_offset[m_dma_channel]) << 16) & 0xFE0000;
335425
336   prog_space.write_byte(page_offset + offset, data);
337   popmessage("DMA byte address %06x write %02x\n",page_offset+offset,data);
426   prog_space.write_word(page_offset + (offset << 1), data);
427   popmessage("DMA byte address %06x write %04x\n",page_offset+(offset<<1), m_dma_high_byte | data);
338428}
339429
340430
r242231r242232
355445   }
356446}
357447
448void ngen_state::machine_reset()
449{
450   m_control = 0;
451   m_viduart->write_dsr(0);
452   m_viduart->write_cts(0);
453}
454
358455static ADDRESS_MAP_START( ngen_mem, AS_PROGRAM, 16, ngen_state )
359456   AM_RANGE(0x00000, 0xf7fff) AM_RAM
360457   AM_RANGE(0xf8000, 0xf9fff) AM_RAM AM_SHARE("vram")
r242231r242232
385482static INPUT_PORTS_START( ngen )
386483INPUT_PORTS_END
387484
485static SLOT_INTERFACE_START(keyboard)
486   SLOT_INTERFACE("ngen", NGEN_KEYBOARD)
487SLOT_INTERFACE_END
488
388489static MACHINE_CONFIG_START( ngen, ngen_state )
389490   // basic machine hardware
390491   MCFG_CPU_ADD("maincpu", I80186, XTAL_16MHz / 2)
391492   MCFG_CPU_PROGRAM_MAP(ngen_mem)
392493   MCFG_CPU_IO_MAP(ngen_io)
393494   MCFG_80186_CHIP_SELECT_CB(WRITE16(ngen_state, cpu_peripheral_cb))
394   MCFG_80186_TMROUT1_HANDLER(WRITELINE(ngen_state, pit_out0_w))
495   MCFG_80186_TMROUT1_HANDLER(WRITELINE(ngen_state, cpu_timer_w))
395496
396497   MCFG_PIC8259_ADD( "pic", INPUTLINE("maincpu", 0), VCC, NULL )
397498
398499   MCFG_DEVICE_ADD("pit", PIT8254, 0)
399   MCFG_PIT8253_CLK0(XTAL_14_7456MHz/8)  // correct?
400   MCFG_PIT8253_OUT0_HANDLER(WRITELINE(ngen_state, pit_out0_w))
401   MCFG_PIT8253_CLK1(XTAL_14_7456MHz/8)
402   MCFG_PIT8253_OUT1_HANDLER(WRITELINE(ngen_state, pit_out1_w))
403   MCFG_PIT8253_CLK2(XTAL_14_7456MHz/8)
500   MCFG_PIT8253_CLK0(78120/4)  // 19.53kHz, /4 of the CPU timer output?
501   MCFG_PIT8253_OUT0_HANDLER(WRITELINE(ngen_state, pit_out0_w))  // RS232 channel B baud rate
502   MCFG_PIT8253_CLK1(XTAL_14_7456MHz/12)  // correct? - based on patent
503   MCFG_PIT8253_OUT1_HANDLER(WRITELINE(ngen_state, pit_out1_w))  // RS232 channel A baud rate
504   MCFG_PIT8253_CLK2(XTAL_14_7456MHz/12)
404505   MCFG_PIT8253_OUT2_HANDLER(WRITELINE(ngen_state, pit_out2_w))
405506
406507   MCFG_DEVICE_ADD("dmac", AM9517A, XTAL_14_7456MHz / 3)  // NEC D8237A, divisor unknown
407508   MCFG_I8237_OUT_HREQ_CB(WRITELINE(ngen_state, dma_hrq_changed))
408   MCFG_I8237_IN_MEMR_CB(READ8(ngen_state, dma_read_byte))
409   MCFG_I8237_OUT_MEMW_CB(WRITE8(ngen_state, dma_write_byte))
509   MCFG_I8237_OUT_EOP_CB(WRITELINE(ngen_state, dma_eop_changed))
510   MCFG_I8237_IN_MEMR_CB(READ8(ngen_state, dma_read_word))  // DMA is always 16-bit
511   MCFG_I8237_OUT_MEMW_CB(WRITE8(ngen_state, dma_write_word))
410512   MCFG_I8237_OUT_DACK_0_CB(WRITELINE(ngen_state, dack0_w))
411513   MCFG_I8237_OUT_DACK_1_CB(WRITELINE(ngen_state, dack1_w))
412514   MCFG_I8237_OUT_DACK_2_CB(WRITELINE(ngen_state, dack2_w))
413515   MCFG_I8237_OUT_DACK_3_CB(WRITELINE(ngen_state, dack3_w))
516   MCFG_I8237_IN_IOR_0_CB(READ8(ngen_state, dma_0_dack_r))
517   MCFG_I8237_IN_IOR_1_CB(READ8(ngen_state, dma_1_dack_r))
518   MCFG_I8237_IN_IOR_2_CB(READ8(ngen_state, dma_2_dack_r))
519   MCFG_I8237_IN_IOR_3_CB(READ8(ngen_state, dma_3_dack_r))
520   MCFG_I8237_OUT_IOW_0_CB(WRITE8(ngen_state, dma_0_dack_w))
521   MCFG_I8237_OUT_IOW_1_CB(WRITE8(ngen_state, dma_1_dack_w))
522   MCFG_I8237_OUT_IOW_2_CB(WRITE8(ngen_state, dma_2_dack_w))
523   MCFG_I8237_OUT_IOW_3_CB(WRITE8(ngen_state, dma_3_dack_w))
414524
415525   // I/O board
416526   MCFG_UPD7201_ADD("iouart",0,0,0,0,0) // clocked by PIT channel 2?
r242231r242232
447557   MCFG_MC6845_UPDATE_ROW_CB(ngen_state, crtc_update_row)
448558   MCFG_VIDEO_SET_SCREEN("screen")
449559
450   MCFG_DEVICE_ADD("videouart", I8251, 19980000 / 9)  // divisor unknown
560   // keyboard UART (patent says i8251 is used for keyboard communications, it is located on the video board)
561   MCFG_DEVICE_ADD("videouart", I8251, 0)  // main clock unknown, Rx/Tx clocks are 19.53kHz
562   MCFG_I8251_TXEMPTY_HANDLER(DEVWRITELINE("pic",pic8259_device,ir4_w))
563   MCFG_I8251_TXD_HANDLER(DEVWRITELINE("keyboard", rs232_port_device, write_txd))
564   MCFG_RS232_PORT_ADD("keyboard", keyboard, "ngen")
565   MCFG_RS232_RXD_HANDLER(DEVWRITELINE("videouart", i8251_device, write_rxd))
566   
567   MCFG_DEVICE_ADD("refresh_clock", CLOCK, 19200*16)  // should be 19530Hz
568   MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(ngen_state,timer_clk_out))
451569
452570MACHINE_CONFIG_END
453571
r242231r242232
464582
465583ROM_START( ngen )
466584   ROM_REGION( 0x2000, "bios", 0)
467   ROM_LOAD16_BYTE( "72-00414_80186_cpu.bin",  0x000000, 0x001000, CRC(e1387a03) SHA1(ddca4eba67fbf8b731a8009c14f6b40edcbc3279) )
585   ROM_LOAD16_BYTE( "72-00414_80186_cpu.bin",  0x000000, 0x001000, CRC(e1387a03) SHA1(ddca4eba67fbf8b731a8009c14f6b40edcbc3279) )  // bootstrap ROM v8.4
468586   ROM_LOAD16_BYTE( "72-00415_80186_cpu.bin",  0x000001, 0x001000, CRC(a6dde7d9) SHA1(b4d15c1bce31460ab5b92ff43a68c15ac5485816) )
469587ROM_END
470588
trunk/src/mess/drivers/simon.c
r242231r242232
33/***************************************************************************
44
55  Milton Bradley Simon
6
6 
77  Revision A hardware:
88  * TMS1000 (has internal ROM), DS75494 lamp driver
9
9 
1010  Newer revisions have a smaller 16-pin MB4850 chip instead of the TMS1000.
1111  This one has been decapped too, but we couldn't find an internal ROM.
1212  It is possibly a cost-reduced custom ASIC specifically for Simon.
13
13 
1414  Other games assumed to be on similar hardware:
1515  - Pocket Simon, but there's a chance it only exists with MB4850 chip
1616  - Super Simon (TMS1100)
r242231r242232
6161READ8_MEMBER(simon_state::read_k)
6262{
6363   UINT8 k = 0;
64
64   
6565   // read selected button rows
6666   for (int i = 0; i < 4; i++)
6767   {
68      static int r[4] = { 0, 1, 2, 9 };
69      if (m_r & (1 << r[i]))
68      const int ki[4] = { 0, 1, 2, 9 };
69      if (m_r >> ki[i] & 1)
7070         k |= m_button_matrix[i]->read();
7171   }
7272
r242231r242232
8282   // R7 -> 75494 IN2 -> blue lamp
8383   for (int i = 0; i < 4; i++)
8484      output_set_lamp_value(i, data >> (4 + i) & 1);
85
85   
8686   // R8 -> 75494 IN0 -> speaker
8787   m_speaker->level_w(data >> 8 & 1);
8888
r242231r242232
106106***************************************************************************/
107107
108108static INPUT_PORTS_START( simon )
109   PORT_START("IN.0")
109   PORT_START("IN.0") // R0
110110   PORT_CONFNAME( 0x07, 0x02, "Game Select")
111111   PORT_CONFSETTING(    0x02, "1" )
112112   PORT_CONFSETTING(    0x01, "2" )
113113   PORT_CONFSETTING(    0x04, "3" )
114114   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
115115
116   PORT_START("IN.1")
116   PORT_START("IN.1") // R1
117117   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Green Button")
118118   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Red Button")
119119   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Yellow Button")
120120   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("Blue Button")
121121
122   PORT_START("IN.2")
122   PORT_START("IN.2") // R2
123123   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START ) PORT_NAME("Start")
124124   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Last")
125125   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Longest")
126126   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
127127
128   PORT_START("IN.3")
128   PORT_START("IN.3") // R9
129129   PORT_CONFNAME( 0x0f, 0x01, "Skill Level")
130130   PORT_CONFSETTING(    0x02, "1" )
131131   PORT_CONFSETTING(    0x04, "2" )
r242231r242232
148148}
149149
150150
151static const UINT16 simon_output_pla[0x20] =
152{
153   /* The output PLA just maps 1 2 4 8 and SL to O0-O4 */
154   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
155   0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
156   0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
157   0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
158};
159
160
161151static MACHINE_CONFIG_START( simon, simon_state )
162152
163153   /* basic machine hardware */
164154   MCFG_CPU_ADD("maincpu", TMS1000, SIMON_RC_CLOCK)
165   MCFG_TMS1XXX_OUTPUT_PLA(simon_output_pla)
166   MCFG_TMS1XXX_READ_K(READ8(simon_state, read_k))
167   MCFG_TMS1XXX_WRITE_O(WRITE16(simon_state, write_o))
168   MCFG_TMS1XXX_WRITE_R(WRITE16(simon_state, write_r))
155   MCFG_TMS1XXX_READ_K_CB(READ8(simon_state, read_k))
156   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(simon_state, write_o))
157   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(simon_state, write_r))
169158
170159   MCFG_DEFAULT_LAYOUT(layout_simon)
171160
r242231r242232
188177ROM_START( simon )
189178   ROM_REGION( 0x0400, "maincpu", 0 )
190179   ROM_LOAD( "tms1000.u1", 0x0000, 0x0400, CRC(9961719d) SHA1(35dddb018a8a2b31f377ab49c1f0cb76951b81c0) )
180
181   ROM_REGION( 867, "maincpu:mpla", 0 )
182   ROM_LOAD( "tms1000_simon_mpla.pla", 0, 867, CRC(52f7c1f1) SHA1(dbc2634dcb98eac173ad0209df487cad413d08a5) )
183   ROM_REGION( 365, "maincpu:opla", 0 )
184   ROM_LOAD( "tms1000_simon_opla.pla", 0, 365, CRC(2943c71b) SHA1(bd5bb55c57e7ba27e49c645937ec1d4e67506601) )
191185ROM_END
192186
193187
trunk/src/mess/drivers/starwbc.c
r0r242232
1// license:BSD-3-Clause
2// copyright-holders:hap
3/***************************************************************************
4
5  Kenner Star Wars - Electronic Battle Command
6  * TMS1100 MCU, labeled MP3438A
7 
8  This is a small tabletop space-dogfighting game. To start the game,
9  press BASIC/INTER/ADV and enter P#(number of players), then
10  START TURN. Refer to the official manual for more information.
11
12
13  TODO:
14  - MCU clock is unknown
15
16***************************************************************************/
17
18#include "emu.h"
19#include "cpu/tms0980/tms0980.h"
20#include "sound/speaker.h"
21
22#include "starwbc.lh"
23
24// master clock is unknown, the value below is an approximation
25// (patent says R=51K, C=47pf, but then it sounds too low pitched)
26#define MASTER_CLOCK (350000)
27
28
29class starwbc_state : public driver_device
30{
31public:
32   starwbc_state(const machine_config &mconfig, device_type type, const char *tag)
33      : driver_device(mconfig, type, tag),
34      m_maincpu(*this, "maincpu"),
35      m_button_matrix(*this, "IN"),
36      m_speaker(*this, "speaker")
37   { }
38
39   required_device<cpu_device> m_maincpu;
40   required_ioport_array<5> m_button_matrix;
41   required_device<speaker_sound_device> m_speaker;
42
43   UINT16 m_r;
44   UINT16 m_o;
45
46   UINT16 m_leds_state[0x10];
47   UINT16 m_leds_cache[0x10];
48   UINT8 m_leds_decay[0x100];
49
50   DECLARE_READ8_MEMBER(read_k);
51   DECLARE_WRITE16_MEMBER(write_o);
52   DECLARE_WRITE16_MEMBER(write_r);
53   
54   TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
55   void leds_update();
56   void prepare_and_update();
57
58   virtual void machine_start();
59};
60
61
62
63/***************************************************************************
64
65  LEDs
66
67***************************************************************************/
68
69// The device strobes the outputs very fast, it is unnoticeable to the user.
70// To prevent flickering here, we need to simulate a decay.
71
72// decay time, in steps of 10ms
73#define LEDS_DECAY_TIME 4
74
75void starwbc_state::leds_update()
76{
77   UINT16 active_state[0x10];
78   
79   for (int i = 0; i < 0x10; i++)
80   {
81      active_state[i] = 0;
82     
83      for (int j = 0; j < 0x10; j++)
84      {
85         int di = j << 4 | i;
86         
87         // turn on powered leds
88         if (m_leds_state[i] >> j & 1)
89            m_leds_decay[di] = LEDS_DECAY_TIME;
90         
91         // determine active state
92         int ds = (m_leds_decay[di] != 0) ? 1 : 0;
93         active_state[i] |= (ds << j);
94      }
95   }
96   
97   // on difference, send to output
98   for (int i = 0; i < 0x10; i++)
99      if (m_leds_cache[i] != active_state[i])
100      {
101         output_set_digit_value(i, active_state[i]);
102         
103         for (int j = 0; j < 8; j++)
104            output_set_lamp_value(i*10 + j, active_state[i] >> j & 1);
105      }
106   
107   memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
108}
109
110TIMER_DEVICE_CALLBACK_MEMBER(starwbc_state::leds_decay_tick)
111{
112   // slowly turn off unpowered leds
113   for (int i = 0; i < 0x100; i++)
114      if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
115         m_leds_decay[i]--;
116   
117   leds_update();
118}
119
120void starwbc_state::prepare_and_update()
121{
122   UINT8 o = (m_o << 4 & 0xf0) | (m_o >> 4 & 0x0f);
123   const UINT8 mask[5] = { 0x30, 0xff, 0xff, 0x7f, 0x7f };
124   
125   // R0,R2,R4,R6,R8
126   for (int i = 0; i < 5; i++)
127      m_leds_state[i*2] = (m_r >> (i*2) & 1) ? (o & mask[i]) : 0;
128
129   leds_update();
130}
131
132
133
134/***************************************************************************
135
136  I/O
137
138***************************************************************************/
139
140READ8_MEMBER(starwbc_state::read_k)
141{
142   UINT8 k = 0;
143
144   // read selected button rows
145   for (int i = 0; i < 5; i++)
146   {
147      const int ki[5] = { 0, 1, 3, 5, 7 };
148      if (m_r >> ki[i] & 1)
149         k |= m_button_matrix[i]->read();
150   }
151
152   return k;
153}
154
155WRITE16_MEMBER(starwbc_state::write_r)
156{
157   // R0,R2,R4: select lamp row
158   // R6,R8: select digit
159   // R0,R1,R3,R5,R7: input mux
160   // R9: piezo speaker
161   m_speaker->level_w(data >> 9 & 1);
162   
163   m_r = data;
164   prepare_and_update();
165}
166
167WRITE16_MEMBER(starwbc_state::write_o)
168{
169   // O0-O7: leds state
170   m_o = data;
171   prepare_and_update();
172}
173
174
175
176/***************************************************************************
177
178  Inputs
179
180***************************************************************************/
181
182/* physical button layout and labels is like this:
183
184    (reconnnaissance=yellow)        (tactical reaction=green)
185    [MAGNA] [ENEMY]                 [EM]       [BS]   [SCR]
186
187    [BASIC] [INTER]    [START TURN] [END TURN] [MOVE] [FIRE]
188    [ADV]   [P#]       [<]          [^]        [>]    [v]
189    (game=blue)        (maneuvers=red)                       */
190
191static INPUT_PORTS_START( starwbc )
192   PORT_START("IN.0") // R0
193   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_NAME("Basic Game")
194   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_NAME("Intermediate Game")
195   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_NAME("Advanced Game")
196   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_P) PORT_NAME("Player Number")
197
198   PORT_START("IN.1") // R1
199   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Start Turn")
200   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED)
201   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
202   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_NAME("End Turn")
203
204   PORT_START("IN.2") // R3
205   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_NAME("Magna Scan") // only used in adv. game
206   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_NAME("Enemy Scan") // only used in adv. game
207   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
208   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_NAME("Screen Up")
209
210   PORT_START("IN.3") // R5
211   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_NAME("Evasive Maneuvers")
212   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_NAME("Move")
213   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_NAME("Fire")
214   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_NAME("Battle Stations")
215
216   PORT_START("IN.4") // R7
217   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Left")
218   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_NAME("Up")
219   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Down")
220   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Right")
221INPUT_PORTS_END
222
223
224
225/***************************************************************************
226
227  Machine Config
228
229***************************************************************************/
230
231void starwbc_state::machine_start()
232{
233   memset(m_leds_state, 0, sizeof(m_leds_state));
234   memset(m_leds_cache, 0, sizeof(m_leds_cache));
235   memset(m_leds_decay, 0, sizeof(m_leds_decay));
236   m_r = 0;
237   m_o = 0;
238   
239   save_item(NAME(m_leds_state));
240   save_item(NAME(m_leds_cache));
241   save_item(NAME(m_leds_decay));
242   save_item(NAME(m_r));
243   save_item(NAME(m_o));
244}
245
246
247static MACHINE_CONFIG_START( starwbc, starwbc_state )
248
249   /* basic machine hardware */
250   MCFG_CPU_ADD("maincpu", TMS1100, MASTER_CLOCK)
251   MCFG_TMS1XXX_READ_K_CB(READ8(starwbc_state, read_k))
252   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(starwbc_state, write_o))
253   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(starwbc_state, write_r))
254
255   MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", starwbc_state, leds_decay_tick, attotime::from_msec(10))
256   
257   MCFG_DEFAULT_LAYOUT(layout_starwbc)
258
259   /* no video! */
260
261   /* sound hardware */
262   MCFG_SPEAKER_STANDARD_MONO("mono")
263   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
264   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
265MACHINE_CONFIG_END
266
267
268
269/***************************************************************************
270
271  Game driver(s)
272
273***************************************************************************/
274
275ROM_START( starwbc )
276   ROM_REGION( 0x0800, "maincpu", 0 )
277   ROM_LOAD( "mp3438a", 0x0000, 0x0800, CRC(c12b7069) SHA1(d1f39c69a543c128023ba11cc6228bacdfab04de) )
278
279   ROM_REGION( 867, "maincpu:mpla", 0 )
280   ROM_LOAD( "tms1100_starwbc_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) )
281   ROM_REGION( 365, "maincpu:opla", 0 )
282   ROM_LOAD( "tms1100_starwbc_opla.pla", 0, 365, CRC(d358a76d) SHA1(06b60b207540e9b726439141acadea9aba718013) )
283ROM_END
284
285ROM_START( starwbcp )
286   ROM_REGION( 0x0800, "maincpu", 0 )
287   ROM_LOAD( "us4270755", 0x0000, 0x0800, BAD_DUMP CRC(fb3332f2) SHA1(a79ac81e239983cd699b7cfcc55f89b203b2c9ec) ) // from patent US4270755, may have errors
288
289   ROM_REGION( 867, "maincpu:mpla", 0 )
290   ROM_LOAD( "tms1100_starwbc_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) )
291   ROM_REGION( 365, "maincpu:opla", 0 )
292   ROM_LOAD( "tms1100_starwbc_opla.pla", 0, 365, CRC(d358a76d) SHA1(06b60b207540e9b726439141acadea9aba718013) )
293ROM_END
294
295
296CONS( 1979, starwbc,  0,       0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command", GAME_SUPPORTS_SAVE )
297CONS( 1979, starwbcp, starwbc, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command (prototype)", GAME_SUPPORTS_SAVE )
trunk/src/mess/drivers/stopthie.c
r242231r242232
1// license:BSD-3-Clause
2// copyright-holders:hap
3/***************************************************************************
4
5  Parker Brothers Stop Thief
6  * TMS0980NLL MP6101B (die labeled 0980B-01A)
7 
8  Stop Thief is actually a board game, the electronic device emulated here
9  (called Electronic Crime Scanner) is an accessory. To start a game, press
10  the ON button. Otherwise, it is in test-mode where you can hear all sounds.
11
12
13  TODO:
14  - ON/OFF button callbacks
15  - MCU clock is unknown
16  - stopthiep: unable to start a game (may be intentional?)
17
18***************************************************************************/
19
120#include "emu.h"
221#include "cpu/tms0980/tms0980.h"
22#include "sound/speaker.h"
323
4/* Layout */
524#include "stopthie.lh"
625
26// master clock is unknown, the value below is an approximation
27#define MASTER_CLOCK (425000)
728
8class stopthie_state : public driver_device
29
30class stopthief_state : public driver_device
931{
1032public:
11   stopthie_state(const machine_config &mconfig, device_type type, const char *tag)
12      : driver_device(mconfig, type, tag) ,
13      m_maincpu(*this, "maincpu") { }
33   stopthief_state(const machine_config &mconfig, device_type type, const char *tag)
34      : driver_device(mconfig, type, tag),
35      m_maincpu(*this, "maincpu"),
36      m_button_matrix(*this, "IN"),
37      m_speaker(*this, "speaker")
38   { }
1439
15   DECLARE_READ8_MEMBER(stopthie_read_k);
16   DECLARE_WRITE16_MEMBER(stopthie_write_o);
17   DECLARE_WRITE16_MEMBER(stopthie_write_r);
1840   required_device<cpu_device> m_maincpu;
41   required_ioport_array<3> m_button_matrix;
42   required_device<speaker_sound_device> m_speaker;
43
44   UINT16 m_o;
45
46   UINT16 m_leds_state[0x10];
47   UINT16 m_leds_cache[0x10];
48   UINT8 m_leds_decay[0x100];
49
50   DECLARE_READ8_MEMBER(read_k);
51   DECLARE_WRITE16_MEMBER(write_o);
52   DECLARE_WRITE16_MEMBER(write_r);
53
54   TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
55   void leds_update();
56
57   virtual void machine_start();
1958};
2059
2160
2261
23#define LOG 1
62/***************************************************************************
2463
25static INPUT_PORTS_START( stopthie )
26INPUT_PORTS_END
64  LEDs
2765
66***************************************************************************/
2867
29READ8_MEMBER(stopthie_state::stopthie_read_k)
30{
31   UINT8 data = 0;
68// The device strobes the outputs very fast, it is unnoticeable to the user.
69// To prevent flickering here, we need to simulate a decay.
3270
33   if (LOG)
34      logerror( "stopthie_read_k\n" );
71// decay time, in steps of 10ms
72#define LEDS_DECAY_TIME 4
3573
36   return data;
74void stopthief_state::leds_update()
75{
76   UINT16 active_state[0x10];
77   
78   for (int i = 0; i < 0x10; i++)
79   {
80      active_state[i] = 0;
81     
82      for (int j = 0; j < 0x10; j++)
83      {
84         int di = j << 4 | i;
85         
86         // turn on powered leds
87         if (m_leds_state[i] >> j & 1)
88            m_leds_decay[di] = LEDS_DECAY_TIME;
89         
90         // determine active state
91         int ds = (m_leds_decay[di] != 0) ? 1 : 0;
92         active_state[i] |= (ds << j);
93      }
94   }
95   
96   // on difference, send to output
97   for (int i = 0; i < 0x10; i++)
98      if (m_leds_cache[i] != active_state[i])
99         output_set_digit_value(i, active_state[i]);
100   
101   memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
37102}
38103
104TIMER_DEVICE_CALLBACK_MEMBER(stopthief_state::leds_decay_tick)
105{
106   // slowly turn off unpowered leds
107   for (int i = 0; i < 0x100; i++)
108      if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
109         m_leds_decay[i]--;
110   
111   leds_update();
112}
39113
40WRITE16_MEMBER(stopthie_state::stopthie_write_o)
114
115
116/***************************************************************************
117
118  I/O
119
120***************************************************************************/
121
122READ8_MEMBER(stopthief_state::read_k)
41123{
42   if (LOG)
43      logerror( "stopthie_write_o: write %02x\n", data );
124   // the Vss row is always on
125   UINT8 k = m_button_matrix[2]->read();
126
127   // read selected button rows
128   for (int i = 0; i < 2; i++)
129   {
130      const int ki[2] = { 0, 6 };
131      if (m_o >> ki[i] & 1)
132         k |= m_button_matrix[i]->read();
133   }
134
135   return k;
44136}
45137
138WRITE16_MEMBER(stopthief_state::write_r)
139{
140   // R0-R2: select digit
141   UINT8 o = BITSWAP8(m_o,3,5,2,1,4,0,6,7) & 0x7f;
142   for (int i = 0; i < 3; i++)
143      m_leds_state[i] = (data >> i & 1) ? o : 0;
144   
145   leds_update();
146   
147   // R3-R8: speaker on
148   m_speaker->level_w((data & 0x1f8 && m_o & 8) ? 1 : 0);
149}
46150
47WRITE16_MEMBER(stopthie_state::stopthie_write_r)
151WRITE16_MEMBER(stopthief_state::write_o)
48152{
49   if (LOG)
50      logerror( "stopthie_write_r: write %04x\n", data );
153   // O0,O6: input mux
154   // O3: speaker out
155   // O0-O2,O4-O7: led segments A-G
156   m_o = data;
51157}
52158
53159
54static const UINT16 stopthie_output_pla[0x20] =
160
161/***************************************************************************
162
163  Inputs
164
165***************************************************************************/
166
167/* physical button layout and labels is like this:
168
169    [1] [2] [OFF]
170    [3] [4] [ON]
171    [5] [6] [T, TIP]
172    [7] [8] [A, ARREST]
173    [9] [0] [C, CLUE]
174*/
175
176static INPUT_PORTS_START( stopthief )
177   PORT_START("IN.0") // O0
178   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
179   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
180   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
181   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
182   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
183
184   PORT_START("IN.1") // O6
185   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
186   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
187   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
188   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
189   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
190
191   // note: even though power buttons are on the matrix, they are not CPU-controlled
192   PORT_START("IN.2") // Vss!
193   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("On")
194   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_NAME("Tip")
195   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_NAME("Arrest")
196   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_NAME("Clue")
197   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off")
198INPUT_PORTS_END
199
200
201
202/***************************************************************************
203
204  Machine Config
205
206***************************************************************************/
207
208void stopthief_state::machine_start()
55209{
56   /* O output PLA configuration currently unknown */
57   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
58   0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
59   0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
60   0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
61};
210   memset(m_leds_state, 0, sizeof(m_leds_state));
211   memset(m_leds_cache, 0, sizeof(m_leds_cache));
212   memset(m_leds_decay, 0, sizeof(m_leds_decay));
213   m_o = 0;
62214
215   save_item(NAME(m_leds_state));
216   save_item(NAME(m_leds_cache));
217   save_item(NAME(m_leds_decay));
218   save_item(NAME(m_o));
219}
63220
64static MACHINE_CONFIG_START( stopthie, stopthie_state )
65221
222static MACHINE_CONFIG_START( stopthief, stopthief_state )
223
66224   /* basic machine hardware */
67   MCFG_CPU_ADD( "maincpu", TMS0980, 500000 ) /* Clock is wrong */
68   MCFG_TMS1XXX_OUTPUT_PLA( stopthie_output_pla )
69   MCFG_TMS1XXX_READ_K( READ8( stopthie_state, stopthie_read_k ) )
70   MCFG_TMS1XXX_WRITE_O( WRITE16( stopthie_state, stopthie_write_o ) )
71   MCFG_TMS1XXX_WRITE_R( WRITE16( stopthie_state, stopthie_write_r ) )
225   MCFG_CPU_ADD("maincpu", TMS0980, MASTER_CLOCK)
226   MCFG_TMS1XXX_READ_K_CB(READ8(stopthief_state, read_k))
227   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(stopthief_state, write_o))
228   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(stopthief_state, write_r))
72229
230   MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", stopthief_state, leds_decay_tick, attotime::from_msec(10))
231   
73232   MCFG_DEFAULT_LAYOUT(layout_stopthie)
233
234   /* no video! */
235
236   /* sound hardware */
237   MCFG_SPEAKER_STANDARD_MONO("mono")
238   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
239   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
74240MACHINE_CONFIG_END
75241
76ROM_START( stopthie )
77   ROM_REGION( 0x1000, "maincpu", 0 )
78   ROM_LOAD16_WORD( "stopthie.bin", 0x0000, 0x1000, CRC(03691115) SHA1(bdcd212aa50bb1c26cb2d0ee97e5cfc04841c108) )
79ROM_END
80242
243
81244/***************************************************************************
82245
83246  Game driver(s)
84247
85248***************************************************************************/
86249
87/*    YEAR  NAME        PARENT  COMPAT  MACHINE     INPUT   INIT    COMPANY            FULLNAME      FLAGS */
88CONS( 1979, stopthie,   0,      0,      stopthie,   stopthie, driver_device,  0,      "Parker Brothers", "Stop Thief", GAME_NOT_WORKING | GAME_NO_SOUND)
250ROM_START( stopthie )
251   ROM_REGION( 0x1000, "maincpu", 0 )
252   ROM_LOAD( "tms0980nll_mp6101b", 0x0000, 0x1000, CRC(8bde5bb4) SHA1(8c318fcce67acc24c7ae361f575f28ec6f94665a) )
253
254   ROM_REGION( 1246, "maincpu:ipla", 0 )
255   ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
256   ROM_REGION( 1982, "maincpu:mpla", 0 )
257   ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
258   ROM_REGION( 352, "maincpu:opla", 0 )
259   ROM_LOAD( "tms0980_stopthie_opla.pla", 0, 352, CRC(50337a48) SHA1(4a9ea62ed797a9ac5190eec3bb6ebebb7814628c) )
260   ROM_REGION( 157, "maincpu:spla", 0 )
261   ROM_LOAD( "tms0980_stopthie_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
262ROM_END
263
264ROM_START( stopthiep )
265   ROM_REGION( 0x1000, "maincpu", 0 )
266   ROM_LOAD16_WORD( "us4341385", 0x0000, 0x1000, CRC(07aec38a) SHA1(0a3d0956495c0d6d9ea771feae6c14a473a800dc) ) // from patent US4341385, data should be correct (it included checksums)
267
268   ROM_REGION( 1246, "maincpu:ipla", 0 )
269   ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
270   ROM_REGION( 1982, "maincpu:mpla", 0 )
271   ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
272   ROM_REGION( 352, "maincpu:opla", 0 )
273   ROM_LOAD( "tms0980_stopthie_opla.pla", 0, 352, CRC(50337a48) SHA1(4a9ea62ed797a9ac5190eec3bb6ebebb7814628c) )
274   ROM_REGION( 157, "maincpu:spla", 0 )
275   ROM_LOAD( "tms0980_stopthie_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
276ROM_END
277
278
279CONS( 1979, stopthie,  0,        0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner)", GAME_SUPPORTS_SAVE )
280CONS( 1979, stopthiep, stopthie, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner) (prototype)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
trunk/src/mess/drivers/ticalc1x.c
r242231r242232
22// copyright-holders:hap
33/***************************************************************************
44
5  Texas Instruments TMS1xxx/0970/0980 handheld calculators
5  Texas Instruments TMS1xxx/0970/0980 handheld calculators (mostly single-chip)
6 
7  Refer to their official manuals on how to use them.
68
7  Texas Instruments WIZ-A-TRON
8  * TMC0907NL DP0907BS (die labeled 0970F-07B)
9
10  Other handhelds assumed to be on similar hardware:
11  - Math Magic
12  - Little Professor
13
14
9 
1510  TODO:
16  - the rom goes in an infinite loop very soon, cpu missing emulation?
11  - ON/OFF button callbacks, and support OFF callback from the 0980
12  - MCU clocks are unknown
1713
1814***************************************************************************/
1915
2016#include "emu.h"
2117#include "cpu/tms0980/tms0980.h"
2218
23// master clock is cpu internal, the value below is an approximation
24#define MASTER_CLOCK (250000)
19#include "ti1270.lh"
20#include "ti30.lh"
21#include "tisr16.lh"
22#include "wizatron.lh"
2523
2624
2725class ticalc1x_state : public driver_device
r242231r242232
3432   { }
3533
3634   required_device<cpu_device> m_maincpu;
37   required_ioport_array<4> m_button_matrix;
35   optional_ioport_array<11> m_button_matrix; // up to 11 rows
3836
3937   UINT16 m_r;
4038   UINT16 m_o;
4139
42   DECLARE_READ8_MEMBER(read_k);
43   DECLARE_WRITE16_MEMBER(write_o);
44   DECLARE_WRITE16_MEMBER(write_r);
40   UINT16 m_leds_state[0x10];
41   UINT16 m_leds_cache[0x10];
42   UINT8 m_leds_decay[0x100];
4543
44   DECLARE_READ8_MEMBER(tisr16_read_k);
45   DECLARE_WRITE16_MEMBER(tisr16_write_o);
46   DECLARE_WRITE16_MEMBER(tisr16_write_r);
47   void tisr16_leds_update();
48
49   DECLARE_READ8_MEMBER(ti1270_read_k);
50   DECLARE_WRITE16_MEMBER(ti1270_write_o);
51   DECLARE_WRITE16_MEMBER(ti1270_write_r);
52
53   DECLARE_READ8_MEMBER(wizatron_read_k);
54   DECLARE_WRITE16_MEMBER(wizatron_write_o);
55   DECLARE_WRITE16_MEMBER(wizatron_write_r);
56
57   DECLARE_READ8_MEMBER(ti30_read_k);
58   DECLARE_WRITE16_MEMBER(ti30_write_o);
59   DECLARE_WRITE16_MEMBER(ti30_write_r);
60
61   TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
62   void leds_update();
63
4664   virtual void machine_start();
4765};
4866
4967
68
5069/***************************************************************************
5170
71  LEDs
72
73***************************************************************************/
74
75// Devices with TMS09x0 strobe the outputs very fast, it is unnoticeable to the user.
76// To prevent flickering here, we need to simulate a decay.
77
78// decay time, in steps of 10ms
79#define LEDS_DECAY_TIME 4
80
81void ticalc1x_state::leds_update()
82{
83   UINT16 active_state[0x10];
84   
85   for (int i = 0; i < 0x10; i++)
86   {
87      active_state[i] = 0;
88     
89      for (int j = 0; j < 0x10; j++)
90      {
91         int di = j << 4 | i;
92         
93         // turn on powered leds
94         if (m_leds_state[i] >> j & 1)
95            m_leds_decay[di] = LEDS_DECAY_TIME;
96         
97         // determine active state
98         int ds = (m_leds_decay[di] != 0) ? 1 : 0;
99         active_state[i] |= (ds << j);
100      }
101   }
102   
103   // on difference, send to output
104   for (int i = 0; i < 0x10; i++)
105      if (m_leds_cache[i] != active_state[i])
106         output_set_digit_value(i, active_state[i]);
107   
108   memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
109}
110
111TIMER_DEVICE_CALLBACK_MEMBER(ticalc1x_state::leds_decay_tick)
112{
113   // slowly turn off unpowered leds
114   for (int i = 0; i < 0x100; i++)
115      if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
116         m_leds_decay[i]--;
117   
118   leds_update();
119}
120
121
122
123/***************************************************************************
124
52125  I/O
53126
54127***************************************************************************/
55128
56READ8_MEMBER(ticalc1x_state::read_k)
129// SR-16: TMS1000 MCU labeled TMS1001NL. die labeled 1001A
130
131void ticalc1x_state::tisr16_leds_update()
57132{
133   // update leds state
134   for (int i = 0; i < 11; i++)
135      if (m_r >> i & 1)
136         m_leds_state[i] = m_o;
137   
138   // exponent sign (not 100% sure this is correct)
139   m_leds_state[11] = (m_leds_state[0] | m_leds_state[1]) ? 0x40 : 0;
140
141   // send to output
142   for (int i = 0; i < 12; i++)
143      output_set_digit_value(i, m_leds_state[i]);
144}
145
146READ8_MEMBER(ticalc1x_state::tisr16_read_k)
147{
58148   UINT8 k = 0;
59149
60150   // read selected button rows
61   for (int i = 0; i < 4; i++)
62      if (m_o & (1 << (i + 1)))
151   for (int i = 0; i < 11; i++)
152      if (m_r >> i & 1)
63153         k |= m_button_matrix[i]->read();
64154
65155   return k;
66156}
67157
68WRITE16_MEMBER(ticalc1x_state::write_r)
158WRITE16_MEMBER(ticalc1x_state::tisr16_write_r)
69159{
70   // R..: select digit
160   // R0-R10: input mux
161   // R0-R10: select digit (right-to-left)
71162   m_r = data;
163   
164   tisr16_leds_update();
72165}
73166
74WRITE16_MEMBER(ticalc1x_state::write_o)
167WRITE16_MEMBER(ticalc1x_state::tisr16_write_o)
75168{
169   // O0-O7: digit segments
170   m_o = data;
171
172   tisr16_leds_update();
173}
174
175
176// TI-1270: TMS0970 MCU labeled TMC0974NL ZA0355, DP0974A. die labeled 0970D-74A
177
178READ8_MEMBER(ticalc1x_state::ti1270_read_k)
179{
180   UINT8 k = 0;
181
182   // read selected button rows
183   for (int i = 0; i < 7; i++)
184      if (m_o >> (i+1) & 1)
185         k |= m_button_matrix[i]->read();
186
187   return k;
188}
189
190WRITE16_MEMBER(ticalc1x_state::ti1270_write_r)
191{
192   // R0-R7: select digit (right-to-left)
193   for (int i = 0; i < 8; i++)
194      m_leds_state[i] = (data >> i & 1) ? m_o : 0;
195
196   leds_update();
197}
198
199WRITE16_MEMBER(ticalc1x_state::ti1270_write_o)
200{
201   // O1-O5,O7: input mux
202   // O0-O7: digit segments
203   m_o = data;
204}
205
206
207// WIZ-A-TRON (educational toy): TMS0970 MCU labeled TMC0907NL ZA0379, DP0907BS. die labeled 0970F-07B
208
209READ8_MEMBER(ticalc1x_state::wizatron_read_k)
210{
211   UINT8 k = 0;
212
213   // read selected button rows
214   for (int i = 0; i < 4; i++)
215      if (m_o >> (i+1) & 1)
216         k |= m_button_matrix[i]->read();
217
218   return k;
219}
220
221WRITE16_MEMBER(ticalc1x_state::wizatron_write_r)
222{
223   // R0-R8: select digit (right-to-left)
224   for (int i = 0; i < 9; i++)
225      m_leds_state[i] = (data >> i & 1) ? m_o : 0;
226   
227   // 3rd digit has more segments, for math symbols
228   // let's assume it's a 14-seg led
229   m_leds_state[6] = BITSWAP16(m_leds_state[6],15,14,2,1,6,4,3,0,5,5,11,10,9,13,12,8);
230   
231   // 6th digit only has A and G for =
232   m_leds_state[3] &= 0x41;
233
234   leds_update();
235}
236
237WRITE16_MEMBER(ticalc1x_state::wizatron_write_o)
238{
239   // O1-O4: input mux
76240   // O0-O6: digit segments A-G
77   // O1-O4: input mux
241   // O7: N/C
242   m_o = data & 0x7f;
243}
244
245
246// TI-30: TMS0980 MCU labeled TMC0981NL. die labeled 0980B-81F
247// TI Programmer: TMS0980 MCU labeled ZA0675NL, JP0983AT. die labeled 0980B-83
248// TI Business Analyst-I: TMS0980 MCU labeled TMC0982NL. die labeled 0980B-82F
249
250READ8_MEMBER(ticalc1x_state::ti30_read_k)
251{
252   // the Vss row is always on
253   UINT8 k = m_button_matrix[8]->read();
254
255   // read selected button rows
256   for (int i = 0; i < 8; i++)
257      if (m_o >> i & 1)
258         k |= m_button_matrix[i]->read();
259
260   return k;
261}
262
263WRITE16_MEMBER(ticalc1x_state::ti30_write_r)
264{
265   // R0-R8: select digit
266   UINT8 o = BITSWAP8(m_o,7,5,2,1,4,0,6,3);
267   for (int i = 0; i < 9; i++)
268      m_leds_state[i] = (data >> i & 1) ? o : 0;
269   
270   // 1st digit only has segments B,F,G,DP
271   m_leds_state[0] &= 0xe2;
272
273   leds_update();
274}
275
276WRITE16_MEMBER(ticalc1x_state::ti30_write_o)
277{
278   // O1-O5,O7: input mux
279   // O0-O7: digit segments
78280   m_o = data;
79281}
80282
r242231r242232
86288
87289***************************************************************************/
88290
291static INPUT_PORTS_START( tisr16 )
292   PORT_START("IN.0") // R0
293   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
294   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
295   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_NAME("RCL")
296   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
297
298   PORT_START("IN.1") // R1
299   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
300   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+")
301   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("CE")
302   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
303
304   PORT_START("IN.2") // R2
305   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
306   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
307   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("+/-")
308   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
309
310   PORT_START("IN.3") // R3
311   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
312   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
313   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".")
314   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
315
316   PORT_START("IN.4") // R4
317   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
318   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=")
319   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_NAME("EE")
320   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
321
322   PORT_START("IN.5") // R5
323   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
324   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME(UTF8_CAPITAL_SIGMA)
325   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_NAME("STO")
326   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
327
328   PORT_START("IN.6") // R6
329   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
330   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("1/x")
331   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_NAME("y"UTF8_POW_X)
332   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
333
334   PORT_START("IN.7") // R7
335   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
336   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("x"UTF8_POW_2)
337   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
338   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
339
340   PORT_START("IN.8") // R8
341   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
342   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_NAME("10"UTF8_POW_X)
343   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("e"UTF8_POW_X)
344   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
345
346   PORT_START("IN.9") // R9
347   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
348   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_NAME(UTF8_SQUAREROOT"x")
349   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
350   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
351
352   PORT_START("IN.10") // R10
353   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_NAME("C")
354   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_NAME("log")
355   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_NAME("ln(x)")
356   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
357INPUT_PORTS_END
358
359
360static INPUT_PORTS_START( ti1270 )
361   PORT_START("IN.0") // O1
362   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_NAME("CE/C")
363   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
364   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".")
365   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=")
366
367   PORT_START("IN.1") // O2
368   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
369   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
370   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
371   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+")
372
373   PORT_START("IN.2") // O3
374   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
375   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
376   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
377   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
378
379   PORT_START("IN.3") // O4
380   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
381   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
382   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
383   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
384
385   PORT_START("IN.4") // O5
386   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_NAME("STO")
387   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_NAME("RCL")
388   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CODE(KEYCODE_I) PORT_NAME(UTF8_SMALL_PI)
389   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
390
391   PORT_START("IN.5") // O6
392   PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED )
393
394   PORT_START("IN.6") // O7
395   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("1/x")
396   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("x"UTF8_POW_2)
397   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_NAME(UTF8_SQUAREROOT"x")
398   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("+/-")
399INPUT_PORTS_END
400
401
89402static INPUT_PORTS_START( wizatron )
90   PORT_START("IN.0")
91   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 )
92   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 )
93   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 )
94   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 )
403   PORT_START("IN.0") // O1
404   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("CLEAR")
405   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
406   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=")
407   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+")
95408
96   PORT_START("IN.1")
97   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER )
98   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER )
99   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER )
100   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER )
409   PORT_START("IN.1") // O2
410   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
411   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
412   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
413   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
101414
102   PORT_START("IN.2")
103   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER )
104   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER )
105   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER )
106   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER )
415   PORT_START("IN.2") // O3
416   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
417   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
418   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
419   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
107420
108   PORT_START("IN.3")
109   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER )
110   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER )
111   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER )
112   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER )
421   PORT_START("IN.3") // O4
422   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
423   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
424   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
425   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
113426INPUT_PORTS_END
114427
115428
429static INPUT_PORTS_START( ti30 )
430   PORT_START("IN.0") // O0
431   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_NAME("y"UTF8_POW_X)
432   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_NAME("K")
433   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_NAME("log")
434   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_NAME("EE"UTF8_DOWN)
435   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_NAME("ln(x)")
116436
437   PORT_START("IN.1") // O1
438   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
439   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_NAME("STO")
440   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
441   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
442   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
443
444   PORT_START("IN.2") // O2
445   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
446   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_NAME("RCL")
447   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
448   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
449   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
450
451   PORT_START("IN.3") // O3
452   PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_UNUSED )
453
454   PORT_START("IN.4") // O4
455   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
456   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_NAME(UTF8_SMALL_PI)
457   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("(")
458   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("%")
459   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME(")")
460
461   PORT_START("IN.5") // O5
462   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+")
463   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("SUM")
464   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
465   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
466   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
467
468   PORT_START("IN.6") // O6
469   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_NAME("DRG")
470   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_NAME("INV")
471   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_NAME("cos")
472   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_NAME("sin")
473   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_NAME("tan")
474
475   PORT_START("IN.7") // O7
476   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=")
477   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("EXC")
478   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".")
479   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
480   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("+/-")
481
482   // note: even though power buttons are on the matrix, they are not CPU-controlled
483   PORT_START("IN.8") // Vss!
484   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_CODE(KEYCODE_DEL) PORT_NAME("ON/C")
485   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("1/x")
486   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_NAME(UTF8_SQUAREROOT"x")
487   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("x"UTF8_POW_2)
488   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("OFF")
489INPUT_PORTS_END
490
491
492static INPUT_PORTS_START( tiprog )
493   PORT_START("IN.0") // O0
494   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_NAME("K")
495   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("SHF")
496   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("E")
497   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_NAME("d")
498   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_NAME("F")
499
500   PORT_START("IN.1") // O1
501   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
502   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_NAME("OR")
503   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
504   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
505   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
506
507   PORT_START("IN.2") // O2
508   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
509   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_NAME("AND")
510   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
511   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
512   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
513
514   PORT_START("IN.3") // O3
515   PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_UNUSED )
516
517   PORT_START("IN.4") // O4
518   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
519   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_NAME("1'sC")
520   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_NAME("b")
521   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_NAME("A")
522   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_NAME("C")
523
524   PORT_START("IN.5") // O5
525   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+")
526   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("XOR")
527   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
528   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
529   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
530
531   PORT_START("IN.6") // O6
532   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME(")")
533   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_NAME("STO")
534   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("SUM")
535   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_NAME("RCL")
536   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("(")
537
538   PORT_START("IN.7") // O7
539   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=")
540   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("CE")
541   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".")
542   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
543   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("+/-")
544
545   // note: even though power buttons are on the matrix, they are not CPU-controlled
546   PORT_START("IN.8") // Vss!
547   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_PGUP) PORT_NAME("C/ON")
548   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_NAME("DEC")
549   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_NAME("OCT")
550   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_NAME("HEX")
551   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("OFF")
552INPUT_PORTS_END
553
554
555static INPUT_PORTS_START( tibusan1 )
556   // PORT_NAME lists functions under [2nd] as secondaries.
557   PORT_START("IN.0") // O0
558   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_NAME("y"UTF8_POW_X"  "UTF8_POW_X""UTF8_SQUAREROOT"y") // 2nd one implies xth root of y
559   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("%  "UTF8_CAPITAL_DELTA"%")
560   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_NAME("SEL")
561   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_NAME("CST")
562   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_NAME("MAR")
563
564   PORT_START("IN.1") // O1
565   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
566   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_NAME("STO  m")
567   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
568   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
569   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
570
571   PORT_START("IN.2") // O2
572   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
573   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_NAME("RCL  b")
574   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
575   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
576   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
577
578   PORT_START("IN.3") // O3
579   PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_UNUSED )
580
581   PORT_START("IN.4") // O4
582   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
583   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME(UTF8_CAPITAL_SIGMA"+  "UTF8_CAPITAL_SIGMA"-")
584   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("(  AN-CI\"")
585   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_NAME("x<>y  L.R.")
586   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME(")  1/x")
587
588   PORT_START("IN.5") // O5
589   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+")
590   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("SUM  x"UTF8_PRIME)
591   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
592   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
593   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
594
595   PORT_START("IN.6") // O6
596   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_NAME("FV")
597   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_NAME("N")
598   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_NAME("PMT")
599   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_NAME("%i")
600   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_NAME("PV")
601
602   PORT_START("IN.7") // O7
603   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=")
604   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("EXC  x"UTF8_PRIME)
605   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".")
606   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
607   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("+/-")
608
609   // note: even though power buttons are on the matrix, they are not CPU-controlled
610   PORT_START("IN.8") // Vss!
611   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_CODE(KEYCODE_DEL) PORT_NAME("ON/C")
612   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("2nd")
613   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("x"UTF8_POW_2"  "UTF8_SQUAREROOT"x")
614   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_NAME("ln(x)  e"UTF8_POW_X)
615   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("OFF")
616INPUT_PORTS_END
617
618
619
117620/***************************************************************************
118621
119  Machine Config
622  Machine Config(s)
120623
121624***************************************************************************/
122625
123626void ticalc1x_state::machine_start()
124627{
628   memset(m_leds_state, 0, sizeof(m_leds_state));
629   memset(m_leds_cache, 0, sizeof(m_leds_cache));
630   memset(m_leds_decay, 0, sizeof(m_leds_decay));
125631   m_r = 0;
126632   m_o = 0;
127633
634   save_item(NAME(m_leds_state));
635   save_item(NAME(m_leds_cache));
636   save_item(NAME(m_leds_decay));
128637   save_item(NAME(m_r));
129638   save_item(NAME(m_o));
130639}
131640
132641
133static const UINT16 wizatron_output_pla[0x20] =
134{
135   // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, -, X, /, r
136   0x7e, 0x30, 0x6d, 0x79, 0x33, 0x5b, 0x5f, 0x70,
137   0x7f, 0x7b, 0x26, 0x02, 0x35, 0x4a, 0x05, 0x00,
138   0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00,
139   0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00
140};
642static MACHINE_CONFIG_START( tisr16, ticalc1x_state )
141643
644   /* basic machine hardware */
645   MCFG_CPU_ADD("maincpu", TMS1000, 250000)
646   MCFG_TMS1XXX_READ_K_CB(READ8(ticalc1x_state, tisr16_read_k))
647   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ticalc1x_state, tisr16_write_o))
648   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ticalc1x_state, tisr16_write_r))
142649
143static MACHINE_CONFIG_START( wizatron, ticalc1x_state )
650   MCFG_DEFAULT_LAYOUT(layout_tisr16)
651MACHINE_CONFIG_END
144652
653
654static MACHINE_CONFIG_START( t9base, ticalc1x_state )
655
145656   /* basic machine hardware */
146   MCFG_CPU_ADD("maincpu", TMS0970, MASTER_CLOCK)
147   MCFG_TMS1XXX_OUTPUT_PLA(wizatron_output_pla)
148   MCFG_TMS1XXX_READ_K(READ8(ticalc1x_state, read_k))
149   MCFG_TMS1XXX_WRITE_O(WRITE16(ticalc1x_state, write_o))
150   MCFG_TMS1XXX_WRITE_R(WRITE16(ticalc1x_state, write_r))
657   MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", ticalc1x_state, leds_decay_tick, attotime::from_msec(10))
151658
152659   /* no video! */
153660
154661   /* no sound! */
155662MACHINE_CONFIG_END
156663
664static MACHINE_CONFIG_DERIVED( ti1270, t9base )
157665
666   /* basic machine hardware */
667   MCFG_CPU_ADD("maincpu", TMS0970, 250000)
668   MCFG_TMS1XXX_READ_K_CB(READ8(ticalc1x_state, ti1270_read_k))
669   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ticalc1x_state, ti1270_write_o))
670   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ticalc1x_state, ti1270_write_r))
158671
672   MCFG_DEFAULT_LAYOUT(layout_ti1270)
673MACHINE_CONFIG_END
674
675static MACHINE_CONFIG_DERIVED( wizatron, t9base )
676
677   /* basic machine hardware */
678   MCFG_CPU_ADD("maincpu", TMS0970, 250000)
679   MCFG_TMS1XXX_READ_K_CB(READ8(ticalc1x_state, wizatron_read_k))
680   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ticalc1x_state, wizatron_write_o))
681   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ticalc1x_state, wizatron_write_r))
682
683   MCFG_DEFAULT_LAYOUT(layout_wizatron)
684MACHINE_CONFIG_END
685
686
687static MACHINE_CONFIG_DERIVED( ti30, t9base )
688
689   /* basic machine hardware */
690   MCFG_CPU_ADD("maincpu", TMS0980, 250000)
691   MCFG_TMS1XXX_READ_K_CB(READ8(ticalc1x_state, ti30_read_k))
692   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ticalc1x_state, ti30_write_o))
693   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ticalc1x_state, ti30_write_r))
694
695   MCFG_DEFAULT_LAYOUT(layout_ti30)
696MACHINE_CONFIG_END
697
698
699
159700/***************************************************************************
160701
161702  Game driver(s)
162703
163704***************************************************************************/
164705
706ROM_START( tisr16 )
707   ROM_REGION( 0x0400, "maincpu", 0 )
708   ROM_LOAD( "tms1001nl", 0x0000, 0x0400, CRC(b7ce3c1d) SHA1(95cdb0c6be31043f4fe06314ed41c0ca1337bc46) )
709
710   ROM_REGION( 867, "maincpu:mpla", 0 )
711   ROM_LOAD( "tms1000_sr16_mpla.pla", 0, 867, CRC(5b35019c) SHA1(730d3b9041ed76d57fbedd73b009477fe432b386) )
712   ROM_REGION( 365, "maincpu:opla", 0 )
713   ROM_LOAD( "tms1000_sr16_opla.pla", 0, 365, CRC(29b08739) SHA1(d55f01e40a2d493d45ea422f12e63b01bcde08fb) )
714ROM_END
715
716ROM_START( ti1270 )
717   ROM_REGION( 0x0400, "maincpu", 0 )
718   ROM_LOAD( "tms0974nl", 0x0000, 0x0400, CRC(48e09b4b) SHA1(17f27167164df223f9f06082ece4c3fc3900eda3) )
719
720   ROM_REGION( 782, "maincpu:ipla", 0 )
721   ROM_LOAD( "tms0970_ti1270_ipla.pla", 0, 782, CRC(05306ef8) SHA1(60a0a3c49ce330bce0c27f15f81d61461d0432ce) )
722   ROM_REGION( 860, "maincpu:mpla", 0 )
723   ROM_LOAD( "tms0970_ti1270_mpla.pla", 0, 860, CRC(6ff5d51d) SHA1(59d3e5de290ba57694068ddba78d21a0c1edf427) )
724   ROM_REGION( 352, "maincpu:opla", 0 )
725   ROM_LOAD( "tms0970_ti1270_opla.pla", 0, 352, CRC(f39bf0a4) SHA1(160341490043eb369720d5f487cf0f59f458a93e) )
726   ROM_REGION( 157, "maincpu:spla", 0 )
727   ROM_LOAD( "tms0970_ti1270_spla.pla", 0, 157, CRC(56c37a4f) SHA1(18ecc20d2666e89673739056483aed5a261ae927) )
728ROM_END
729
165730ROM_START( wizatron )
166731   ROM_REGION( 0x0400, "maincpu", 0 )
167732   ROM_LOAD( "dp0907bs", 0x0000, 0x0400, CRC(5a6af094) SHA1(b1f27e1f13f4db3b052dd50fb08dbf9c4d8db26e) )
733
734   ROM_REGION( 782, "maincpu:ipla", 0 )
735   ROM_LOAD( "tms0970_wizatron_ipla.pla", 0, 782, CRC(05306ef8) SHA1(60a0a3c49ce330bce0c27f15f81d61461d0432ce) )
736   ROM_REGION( 860, "maincpu:mpla", 0 )
737   ROM_LOAD( "tms0970_wizatron_mpla.pla", 0, 860, CRC(7f50ab2e) SHA1(bff3be9af0e322986f6e545b567c97d70e135c93) )
738   ROM_REGION( 352, "maincpu:opla", 0 )
739   ROM_LOAD( "tms0970_wizatron_opla.pla", 0, 352, CRC(745a3900) SHA1(031b55a0cf783c8a88eec4289d4373eb8538f374) )
740   ROM_REGION( 157, "maincpu:spla", 0 )
741   ROM_LOAD( "tms0970_wizatron_spla.pla", 0, 157, CRC(56c37a4f) SHA1(18ecc20d2666e89673739056483aed5a261ae927) )
168742ROM_END
169743
744ROM_START( ti30 )
745   ROM_REGION( 0x1000, "maincpu", 0 )
746   ROM_LOAD16_WORD( "tmc0981nl", 0x0000, 0x1000, CRC(41298a14) SHA1(06f654c70add4044a612d3a38b0c2831c188fd0c) )
170747
171CONS( 1977, wizatron, 0, 0, wizatron, wizatron, driver_device, 0, "Texas Instruments", "Wiz-A-Tron", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
748   ROM_REGION( 1246, "maincpu:ipla", 0 )
749   ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
750   ROM_REGION( 1982, "maincpu:mpla", 0 )
751   ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
752   ROM_REGION( 352, "maincpu:opla", 0 )
753   ROM_LOAD( "tms0980_ti30_opla.pla", 0, 352, CRC(38788410) SHA1(cb3d1a61190b887cd2e6d9c60b4fdb9b901f7eed) )
754   ROM_REGION( 157, "maincpu:spla", 0 )
755   ROM_LOAD( "tms0980_ti30_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
756ROM_END
757
758ROM_START( tibusan1 )
759   ROM_REGION( 0x1000, "maincpu", 0 )
760   ROM_LOAD16_WORD( "tmc0982nl", 0x0000, 0x1000, CRC(6954560a) SHA1(6c153a0c9239a811e3514a43d809964c06f8f88e) )
761
762   ROM_REGION( 1246, "maincpu:ipla", 0 )
763   ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
764   ROM_REGION( 1982, "maincpu:mpla", 0 )
765   ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
766   ROM_REGION( 352, "maincpu:opla", 0 )
767   ROM_LOAD( "tms0980_tibusan1_opla.pla", 0, 352, CRC(38788410) SHA1(cb3d1a61190b887cd2e6d9c60b4fdb9b901f7eed) )
768   ROM_REGION( 157, "maincpu:spla", 0 )
769   ROM_LOAD( "tms0980_tibusan1_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
770ROM_END
771
772ROM_START( tiprog )
773   ROM_REGION( 0x1000, "maincpu", 0 )
774   ROM_LOAD16_WORD( "za0675nl", 0x0000, 0x1000, CRC(82355854) SHA1(03fab373bce04df8ea3fe25352525e8539213626) )
775
776   ROM_REGION( 1246, "maincpu:ipla", 0 )
777   ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
778   ROM_REGION( 1982, "maincpu:mpla", 0 )
779   ROM_LOAD( "tms0980_tiprog_mpla.pla", 0, 1982, CRC(57043284) SHA1(0fa06d5865830ecdb3d870271cb92ac917bed3ca) )
780   ROM_REGION( 352, "maincpu:opla", 0 )
781   ROM_LOAD( "tms0980_tiprog_opla.pla", 0, 352, BAD_DUMP CRC(2a63956f) SHA1(26a62ca2b5973d8564e580e12230292f6d2888d9) ) // corrected by hand
782   ROM_REGION( 157, "maincpu:spla", 0 )
783   ROM_LOAD( "tms0980_tiprog_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
784ROM_END
785
786
787
788COMP( 1974, tisr16,   0, 0, tisr16,   tisr16,   driver_device, 0, "Texas Instruments", "SR-16 (Texas Instruments)", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
789
790COMP( 1976, ti1270,   0, 0, ti1270,   ti1270,   driver_device, 0, "Texas Instruments", "TI-1270", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
791COMP( 1977, wizatron, 0, 0, wizatron, wizatron, driver_device, 0, "Texas Instruments", "Wiz-A-Tron", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
792
793COMP( 1976, ti30,     0, 0, ti30,     ti30,     driver_device, 0, "Texas Instruments", "TI-30", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
794COMP( 1977, tiprog,   0, 0, ti30,     tiprog,   driver_device, 0, "Texas Instruments", "TI Programmer", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
795COMP( 1979, tibusan1, 0, 0, ti30,     tibusan1, driver_device, 0, "Texas Instruments", "TI Business Analyst-I", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
trunk/src/mess/drivers/tvc.c
r242231r242232
827827   /* Software lists */
828828   MCFG_SOFTWARE_LIST_ADD("cart_list", "tvc_cart")
829829   MCFG_SOFTWARE_LIST_ADD("cass_list", "tvc_cass")
830   MCFG_SOFTWARE_LIST_ADD("flop_list", "tvc_flop")
830831MACHINE_CONFIG_END
831832
832833/* ROM definition */
trunk/src/mess/drivers/victor9k.c
r242231r242232
1313
1414    TODO:
1515
16   - centronics
17   - expansion bus
18      - Z80 card
19      - Winchester DMA card (Xebec S1410 + Tandon TM502/TM603SE)
20      - RAM cards
21      - clock cards
1622    - floppy 8048
1723    - keyboard
1824    - hires graphics
r242231r242232
2026    - brightness/contrast
2127    - MC6852
2228    - codec sound
23    - hard disk (Tandon TM502, TM603SE)
2429
2530*/
2631
trunk/src/mess/layout/cnsector.lay
r0r242232
1<?xml version="1.0"?>
2<mamelayout version="2">
3
4<!-- define elements -->
5
6   <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
7   <element name="static_white"><rect><color red="0.95" green="0.95" blue="0.95" /></rect></element>
8   <element name="static_gray"><rect><color red="0.60" green="0.75" blue="0.63" /></rect></element>
9   <element name="static_red"><rect><color red="0.35" green="0.02" blue="0.04" /></rect></element>
10
11   <element name="digit" defstate="0">
12      <led7seg><color red="1.0" green="0.25" blue="0.20" /></led7seg>
13   </element>
14
15   <element name="lamp" defstate="0">
16      <disk state="1"><color red="1.0" green="0.25" blue="0.20" /></disk>
17      <disk state="0"><color red="0.2" green="0.0" blue="0.0" /></disk>
18   </element>
19
20   <element name="text_ship">
21      <text string="SHIP"><color red="0.95" green="0.95" blue="0.95" /></text>
22   </element>
23   <element name="text_speed">
24      <text string="SPEED"><color red="0.95" green="0.95" blue="0.95" /></text>
25   </element>
26
27   <element name="text_north">
28      <text string="NORTH" align="2"><color red="0.95" green="0.95" blue="0.95" /></text>
29   </element>
30   <element name="text_east">
31      <text string="EAST" align="1"><color red="0.95" green="0.95" blue="0.95" /></text>
32   </element>
33
34   <element name="text_depth">
35      <text string="DEPTH"><color red="0.95" green="0.95" blue="0.95" /></text>
36   </element>
37   <element name="text_range">
38      <text string="RANGE"><color red="0.95" green="0.95" blue="0.95" /></text>
39   </element>
40
41   <element name="text_n">
42      <rect><color red="0.35" green="0.02" blue="0.04" /></rect>
43      <text string="N"><color red="0.88" green="0.85" blue="0.85" /></text>
44   </element>
45   <element name="text_s">
46      <rect><color red="0.35" green="0.02" blue="0.04" /></rect>
47      <text string="S"><color red="0.88" green="0.85" blue="0.85" /></text>
48   </element>
49   <element name="text_e">
50      <rect><color red="0.35" green="0.02" blue="0.04" /></rect>
51      <text string="E"><color red="0.88" green="0.85" blue="0.85" /></text>
52   </element>
53   <element name="text_w">
54      <rect><color red="0.35" green="0.02" blue="0.04" /></rect>
55      <text string="W"><color red="0.88" green="0.85" blue="0.85" /></text>
56   </element>
57
58
59
60<!-- build screen -->
61
62   <view name="Internal Layout">
63      <bounds left="0" right="92" top="0" bottom="146" />
64      <bezel element="static_black">
65         <bounds left="0" right="92" top="0" bottom="146" />
66      </bezel>
67
68   <!-- digits -->
69
70      <bezel element="static_white"><bounds x="0" y="4" width="100" height="1" /></bezel>
71      <bezel element="static_white"><bounds x="0" y="12" width="100" height="1" /></bezel>
72
73      <bezel element="static_white"><bounds x="20" y="4.5" width="1" height="40" /></bezel>
74      <bezel element="static_white"><bounds x="41" y="4.5" width="1" height="40" /></bezel>
75
76      <bezel element="static_white"><bounds x="67" y="4.5" width="1" height="8" /></bezel>
77
78      <bezel element="static_white"><bounds x="20.5" y="36" width="80" height="1" /></bezel>
79      <bezel element="static_white"><bounds x="0" y="44" width="100" height="1" /></bezel>
80
81      <bezel element="text_ship"><bounds x="0" y="5" width="20" height="7" /></bezel>
82      <bezel element="text_speed"><bounds x="21" y="5" width="20" height="7" /></bezel>
83
84      <bezel element="text_north"><bounds x="47" y="5" width="19" height="7" /></bezel>
85      <bezel element="text_east"><bounds x="69" y="5" width="19" height="7" /></bezel>
86
87      <bezel element="text_depth"><bounds x="21" y="37" width="20" height="7" /></bezel>
88      <bezel element="text_range"><bounds x="57" y="37" width="20" height="7" /></bezel>
89
90
91      <bezel name="digit5" element="digit">
92         <bounds x="5" y="17" width="10" height="15" />
93      </bezel>
94
95      <bezel name="digit4" element="digit">
96         <bounds x="26" y="17" width="10" height="15" />
97      </bezel>
98
99      <bezel name="digit3" element="digit">
100         <bounds x="47" y="17" width="10" height="15" />
101      </bezel>
102      <bezel name="digit2" element="digit">
103         <bounds x="57" y="17" width="10" height="15" />
104      </bezel>
105      <bezel name="digit1" element="digit">
106         <bounds x="67" y="17" width="10" height="15" />
107      </bezel>
108      <bezel name="digit0" element="digit">
109         <bounds x="77" y="17" width="10" height="15" />
110      </bezel>
111
112
113   <!-- compass -->
114
115      <bezel element="static_gray"><bounds x="0" y="50" width="100" height="100" /></bezel>
116      <bezel element="static_red"><bounds x="0" y="55" width="100" height="86" /></bezel>
117
118      <bezel name="lamp0" element="lamp">
119         <bounds x="42" y="62" width="8" height="8" />
120      </bezel>
121      <bezel name="lamp1" element="lamp">
122         <bounds x="42" y="126" width="8" height="8" />
123      </bezel>
124      <bezel name="lamp2" element="lamp">
125         <bounds x="74" y="94" width="8" height="8" />
126      </bezel>
127      <bezel name="lamp3" element="lamp">
128         <bounds x="10" y="94" width="8" height="8" />
129      </bezel>
130
131      <bezel element="text_n"><bounds x="41" y="72" width="10" height="10" /></bezel>
132      <bezel element="text_s"><bounds x="41" y="114" width="10" height="10" /></bezel>
133      <bezel element="text_e"><bounds x="63" y="93" width="10" height="10" /></bezel>
134      <bezel element="text_w"><bounds x="21" y="93" width="10" height="10" /></bezel>
135
136
137   <!-- crop borders -->
138
139      <bezel element="static_black"><bounds x="92" y="0" width="10" height="160" /></bezel>
140      <bezel element="static_black"><bounds x="0" y="146" width="100" height="10" /></bezel>
141
142   </view>
143</mamelayout>
trunk/src/mess/layout/comp4.lay
r0r242232
1<?xml version="1.0"?>
2<mamelayout version="2">
3
4<!-- define elements -->
5
6   <element name="static_darkred"><rect><color red="0.20" green="0.04" blue="0.01" /></rect></element>
7
8   <element name="cg1"><rect><color red="0.85" green="0.85" blue="0.85" /></rect></element>
9   <element name="cg2"><rect><color red="0.74" green="0.76" blue="0.86" /></rect></element>
10   <element name="cg3"><rect><color red="0.63" green="0.67" blue="0.87" /></rect></element>
11   <element name="cg4"><rect><color red="0.52" green="0.58" blue="0.88" /></rect></element>
12   <element name="cg5"><rect><color red="0.41" green="0.49" blue="0.89" /></rect></element>
13
14   <element name="text_r">
15      <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
16      <text string="R" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
17   </element>
18   <element name="text_5">
19      <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
20      <text string="5" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
21   </element>
22   <element name="text_4">
23      <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
24      <text string="4" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
25   </element>
26   <element name="text_3">
27      <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
28      <text string="3" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
29   </element>
30   <element name="text_2">
31      <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
32      <text string="2" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
33   </element>
34   <element name="text_1">
35      <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
36      <text string="1" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
37   </element>
38
39   <element name="text_num">
40      <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
41      <text string="NUMBER" align="1"><color red="0.85" green="0.85" blue="0.85" /></text>
42   </element>
43   <element name="text_seq">
44      <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
45      <text string="SEQUENCE" align="2"><color red="0.85" green="0.85" blue="0.85" /></text>
46   </element>
47
48   <element name="lamp" defstate="0">
49      <rect><color red="0.85" green="0.85" blue="0.85" /></rect>
50      <rect>
51         <color red="0.20" green="0.04" blue="0.01" />
52         <bounds x="0.1" y="0.12" width="0.8" height="0.76" />
53      </rect>
54      <disk state="1">
55         <color red="1.0" green="0.20" blue="0.15" />
56         <bounds x="0.31" y="0.25" width="0.38" height="0.5" />
57      </disk>
58      <disk state="0">
59         <color red="0.3" green="0.05" blue="0.03" />
60         <bounds x="0.31" y="0.25" width="0.38" height="0.5" />
61      </disk>
62   </element>
63
64
65
66<!-- build screen -->
67
68   <view name="Internal Layout">
69      <bounds left="0" right="60" top="0" bottom="42" />
70      <bezel element="static_darkred">
71         <bounds left="0" right="60" top="0" bottom="42" />
72      </bezel>
73
74      <bezel element="cg1"><bounds x="17" y="2" width="26" height="35" /></bezel>
75      <bezel element="cg2"><bounds x="19" y="2" width="22" height="35" /></bezel>
76      <bezel element="cg3"><bounds x="21" y="2" width="18" height="35" /></bezel>
77      <bezel element="cg4"><bounds x="23" y="2" width="14" height="35" /></bezel>
78      <bezel element="cg5"><bounds x="25" y="2" width="10" height="35" /></bezel>
79
80      <bezel element="static_darkred"><bounds x="27" y="1" width="6" height="40" /></bezel>
81      <bezel element="static_darkred"><bounds x="32" y="1.5" width="20" height="7" /></bezel>
82
83      <bezel element="static_darkred"><bounds x="16" y="8" width="40" height="1" /></bezel>
84      <bezel element="static_darkred"><bounds x="16" y="15" width="40" height="1" /></bezel>
85      <bezel element="static_darkred"><bounds x="16" y="22" width="40" height="1" /></bezel>
86      <bezel element="static_darkred"><bounds x="16" y="29" width="40" height="1" /></bezel>
87      <bezel element="static_darkred"><bounds x="16" y="36" width="40" height="5" /></bezel>
88
89      <bezel element="text_r"><bounds x="36" y="1.5" width="7" height="7" /></bezel>
90
91      <bezel element="text_5"><bounds x="27" y="1.5" width="5" height="7" /></bezel>
92      <bezel element="text_4"><bounds x="27" y="8.5" width="5" height="7" /></bezel>
93      <bezel element="text_3"><bounds x="27" y="15.5" width="5" height="7" /></bezel>
94      <bezel element="text_2"><bounds x="27" y="22.5" width="5" height="7" /></bezel>
95      <bezel element="text_1"><bounds x="27" y="29.5" width="5" height="7" /></bezel>
96
97      <bezel element="text_num"><bounds x="8" y="36.5" width="22" height="3.5" /></bezel>
98      <bezel element="text_seq"><bounds x="30" y="36.5" width="22" height="3.5" /></bezel>
99
100      <bezel name="lamp4" element="lamp">
101         <bounds x="8" y="2" width="8" height="6" />
102      </bezel>
103      <bezel name="lamp10" element="lamp">
104         <bounds x="8" y="9" width="8" height="6" />
105      </bezel>
106      <bezel name="lamp2" element="lamp">
107         <bounds x="8" y="16" width="8" height="6" />
108      </bezel>
109      <bezel name="lamp1" element="lamp">
110         <bounds x="8" y="23" width="8" height="6" />
111      </bezel>
112      <bezel name="lamp0" element="lamp">
113         <bounds x="8" y="30" width="8" height="6" />
114      </bezel>
115
116      <bezel name="lamp9" element="lamp">
117         <bounds x="44" y="2" width="8" height="6" />
118      </bezel>
119      <bezel name="lamp8" element="lamp">
120         <bounds x="44" y="9" width="8" height="6" />
121      </bezel>
122      <bezel name="lamp7" element="lamp">
123         <bounds x="44" y="16" width="8" height="6" />
124      </bezel>
125      <bezel name="lamp6" element="lamp">
126         <bounds x="44" y="23" width="8" height="6" />
127      </bezel>
128      <bezel name="lamp5" element="lamp">
129         <bounds x="44" y="30" width="8" height="6" />
130      </bezel>
131
132   </view>
133</mamelayout>
trunk/src/mess/layout/merlin.lay
r242231r242232
256256      <bezel name="lamp0" element="led">
257257         <bounds x="34" y="20" width="20" height="20" />
258258      </bezel>
259      <bezel element="button" inputtag="O.0" inputmask="0x01">
259      <bezel element="button" inputtag="IN.0" inputmask="0x01">
260260         <bounds x="34" y="20" width="20" height="20" />
261261         <color alpha="0.2" />
262262      </bezel>
r242231r242232
267267      <bezel name="lamp1" element="led">
268268         <bounds x="10" y="44" width="20" height="20" />
269269      </bezel>
270      <bezel element="button" inputtag="O.0" inputmask="0x02">
270      <bezel element="button" inputtag="IN.0" inputmask="0x02">
271271         <bounds x="10" y="44" width="20" height="20" />
272272         <color alpha="0.2" />
273273      </bezel>
r242231r242232
277277      <bezel name="lamp2" element="led">
278278         <bounds x="34" y="44" width="20" height="20" />
279279      </bezel>
280      <bezel element="button" inputtag="O.0" inputmask="0x08">
280      <bezel element="button" inputtag="IN.0" inputmask="0x08">
281281         <bounds x="34" y="44" width="20" height="20" />
282282         <color alpha="0.2" />
283283      </bezel>
r242231r242232
287287      <bezel name="lamp3" element="led">
288288         <bounds x="58" y="44" width="20" height="20" />
289289      </bezel>
290      <bezel element="button" inputtag="O.0" inputmask="0x04">
290      <bezel element="button" inputtag="IN.0" inputmask="0x04">
291291         <bounds x="58" y="44" width="20" height="20" />
292292         <color alpha="0.2" />
293293      </bezel>
r242231r242232
298298      <bezel name="lamp4" element="led">
299299         <bounds x="10" y="68" width="20" height="20" />
300300      </bezel>
301      <bezel element="button" inputtag="O.1" inputmask="0x01">
301      <bezel element="button" inputtag="IN.1" inputmask="0x01">
302302         <bounds x="10" y="68" width="20" height="20" />
303303         <color alpha="0.2" />
304304      </bezel>
r242231r242232
308308      <bezel name="lamp5" element="led">
309309         <bounds x="34" y="68" width="20" height="20" />
310310      </bezel>
311      <bezel element="button" inputtag="O.1" inputmask="0x02">
311      <bezel element="button" inputtag="IN.1" inputmask="0x02">
312312         <bounds x="34" y="68" width="20" height="20" />
313313         <color alpha="0.2" />
314314      </bezel>
r242231r242232
318318      <bezel name="lamp6" element="led">
319319         <bounds x="58" y="68" width="20" height="20" />
320320      </bezel>
321      <bezel element="button" inputtag="O.1" inputmask="0x08">
321      <bezel element="button" inputtag="IN.1" inputmask="0x08">
322322         <bounds x="58" y="68" width="20" height="20" />
323323         <color alpha="0.2" />
324324      </bezel>
r242231r242232
329329      <bezel name="lamp7" element="led">
330330         <bounds x="10" y="92" width="20" height="20" />
331331      </bezel>
332      <bezel element="button" inputtag="O.1" inputmask="0x04">
332      <bezel element="button" inputtag="IN.1" inputmask="0x04">
333333         <bounds x="10" y="92" width="20" height="20" />
334334         <color alpha="0.2" />
335335      </bezel>
r242231r242232
339339      <bezel name="lamp8" element="led">
340340         <bounds x="34" y="92" width="20" height="20" />
341341      </bezel>
342      <bezel element="button" inputtag="O.2" inputmask="0x01">
342      <bezel element="button" inputtag="IN.2" inputmask="0x01">
343343         <bounds x="34" y="92" width="20" height="20" />
344344         <color alpha="0.2" />
345345      </bezel>
r242231r242232
349349      <bezel name="lamp9" element="led">
350350         <bounds x="58" y="92" width="20" height="20" />
351351      </bezel>
352      <bezel element="button" inputtag="O.2" inputmask="0x02">
352      <bezel element="button" inputtag="IN.2" inputmask="0x02">
353353         <bounds x="58" y="92" width="20" height="20" />
354354         <color alpha="0.2" />
355355      </bezel>
r242231r242232
360360      <bezel name="lamp10" element="led">
361361         <bounds x="34" y="116" width="20" height="20" />
362362      </bezel>
363      <bezel element="button" inputtag="O.2" inputmask="0x08">
363      <bezel element="button" inputtag="IN.2" inputmask="0x08">
364364         <bounds x="34" y="116" width="20" height="20" />
365365         <color alpha="0.2" />
366366      </bezel>
r242231r242232
371371      <bezel element="panel_newgame">
372372         <bounds x="21" y="156" width="20" height="20" />
373373      </bezel>
374      <bezel element="button" inputtag="O.3" inputmask="0x08">
374      <bezel element="button" inputtag="IN.3" inputmask="0x08">
375375         <bounds x="21" y="156" width="20" height="20" />
376376         <color alpha="0.2" />
377377      </bezel>
r242231r242232
379379      <bezel element="panel_samegame">
380380         <bounds x="47" y="156" width="20" height="20" />
381381      </bezel>
382      <bezel element="button" inputtag="O.2" inputmask="0x04">
382      <bezel element="button" inputtag="IN.2" inputmask="0x04">
383383         <bounds x="47" y="156" width="20" height="20" />
384384         <color alpha="0.2" />
385385      </bezel>
r242231r242232
387387      <bezel element="panel_hitme">
388388         <bounds x="21" y="182" width="20" height="20" />
389389      </bezel>
390      <bezel element="button" inputtag="O.3" inputmask="0x04">
390      <bezel element="button" inputtag="IN.3" inputmask="0x04">
391391         <bounds x="21" y="182" width="20" height="20" />
392392         <color alpha="0.2" />
393393      </bezel>
r242231r242232
395395      <bezel element="panel_compturn">
396396         <bounds x="47" y="182" width="20" height="20" />
397397      </bezel>
398      <bezel element="button" inputtag="O.3" inputmask="0x02">
398      <bezel element="button" inputtag="IN.3" inputmask="0x02">
399399         <bounds x="47" y="182" width="20" height="20" />
400400         <color alpha="0.2" />
401401      </bezel>
trunk/src/mess/layout/starwbc.lay
r0r242232
1<?xml version="1.0"?>
2<mamelayout version="2">
3
4<!-- define elements -->
5
6   <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
7   <element name="static_yellow"><rect><color red="0.67" green="0.65" blue="0.1" /></rect></element>
8   <element name="static_red"><rect><color red="0.6" green="0.05" blue="0.0" /></rect></element>
9   <element name="static_gray"><rect><color red="0.66" green="0.66" blue="0.66" /></rect></element>
10
11   <element name="digit" defstate="0">
12      <led7seg><color red="1.0" green="0.25" blue="0.23" /></led7seg>
13   </element>
14
15   <element name="lamp" defstate="0">
16      <rect><color red="0.0" green="0.0" blue="0.0" /></rect>
17      <disk state="1">
18         <color red="1.0" green="0.25" blue="0.23" />
19         <bounds x="0.4" y="0.4" width="0.2" height="0.2" />
20      </disk>
21      <disk state="0">
22         <color red="0.2" green="0.05" blue="0.04" />
23         <bounds x="0.4" y="0.4" width="0.2" height="0.2" />
24      </disk>
25   </element>
26
27   <element name="nlamp" defstate="0">
28      <disk state="1"><color red="1.0" green="0.25" blue="0.23" /></disk>
29      <disk state="0"><color red="0.2" green="0.05" blue="0.04" /></disk>
30   </element>
31
32   <element name="text_a"><text string="A"><color red="0.69" green="0.69" blue="0.69" /></text></element>
33   <element name="text_b"><text string="B"><color red="0.69" green="0.69" blue="0.69" /></text></element>
34   <element name="text_c"><text string="C"><color red="0.69" green="0.69" blue="0.69" /></text></element>
35   <element name="text_d"><text string="D"><color red="0.69" green="0.69" blue="0.69" /></text></element>
36
37   <element name="text_1"><text string="1"><color red="0.69" green="0.69" blue="0.69" /></text></element>
38   <element name="text_2"><text string="2"><color red="0.69" green="0.69" blue="0.69" /></text></element>
39   <element name="text_3"><text string="3"><color red="0.69" green="0.69" blue="0.69" /></text></element>
40   <element name="text_4"><text string="4"><color red="0.69" green="0.69" blue="0.69" /></text></element>
41
42   <element name="text_alert"><text string="ALERT"><color red="0.69" green="0.69" blue="0.69" /></text></element>
43   <element name="text_combat"><text string="COMBAT"><color red="0.69" green="0.69" blue="0.69" /></text></element>
44   <element name="text_force"><text string="FORCE UNITS"><color red="0.69" green="0.69" blue="0.69" /></text></element>
45   <element name="text_players"><text string="PLAYERS"><color red="0.69" green="0.69" blue="0.69" /></text></element>
46
47
48
49<!-- build screen -->
50
51   <view name="Internal Layout">
52      <bounds left="0" right="165" top="0" bottom="105" />
53     
54      <bezel element="static_yellow"><bounds x="3" y="17" width="10" height="83" /></bezel>
55      <bezel element="static_black"><bounds x="4" y="18" width="8" height="81" /></bezel>
56
57      <bezel element="static_red"><bounds x="17" y="3" width="83" height="10" /></bezel>
58      <bezel element="static_black"><bounds x="18" y="4" width="81" height="8" /></bezel>
59
60      <bezel element="static_yellow"><bounds x="3.5" y="38" width="9" height="1" /></bezel>
61      <bezel element="static_yellow"><bounds x="3.5" y="58" width="9" height="1" /></bezel>
62      <bezel element="static_yellow"><bounds x="3.5" y="78" width="9" height="1" /></bezel>
63
64      <bezel element="static_red"><bounds x="38" y="3.5" width="1" height="9" /></bezel>
65      <bezel element="static_red"><bounds x="58" y="3.5" width="1" height="9" /></bezel>
66      <bezel element="static_red"><bounds x="78" y="3.5" width="1" height="9" /></bezel>
67
68      <bezel element="text_a"><bounds x="4" y="24.5" width="8" height="8" /></bezel>
69      <bezel element="text_b"><bounds x="4" y="44.5" width="8" height="8" /></bezel>
70      <bezel element="text_c"><bounds x="4" y="64.5" width="8" height="8" /></bezel>
71      <bezel element="text_d"><bounds x="4" y="84.5" width="8" height="8" /></bezel>
72
73      <bezel element="text_1"><bounds x="24.5" y="4" width="8" height="8" /></bezel>
74      <bezel element="text_2"><bounds x="44.5" y="4" width="8" height="8" /></bezel>
75      <bezel element="text_3"><bounds x="64.5" y="4" width="8" height="8" /></bezel>
76      <bezel element="text_4"><bounds x="84.5" y="4" width="8" height="8" /></bezel>
77
78     
79   <!-- lamp matrix -->
80     
81      <bezel element="static_gray"><bounds x="17" y="17" width="83" height="83" /></bezel>
82
83      <bezel name="lamp20" element="lamp"><bounds x="20" y="20" width="17" height="17" /></bezel>
84      <bezel name="lamp21" element="lamp"><bounds x="40" y="20" width="17" height="17" /></bezel>
85      <bezel name="lamp22" element="lamp"><bounds x="60" y="20" width="17" height="17" /></bezel>
86      <bezel name="lamp23" element="lamp"><bounds x="80" y="20" width="17" height="17" /></bezel>
87
88      <bezel name="lamp24" element="lamp"><bounds x="20" y="40" width="17" height="17" /></bezel>
89      <bezel name="lamp25" element="lamp"><bounds x="40" y="40" width="17" height="17" /></bezel>
90      <bezel name="lamp26" element="lamp"><bounds x="60" y="40" width="17" height="17" /></bezel>
91      <bezel name="lamp27" element="lamp"><bounds x="80" y="40" width="17" height="17" /></bezel>
92
93      <bezel name="lamp40" element="lamp"><bounds x="20" y="60" width="17" height="17" /></bezel>
94      <bezel name="lamp41" element="lamp"><bounds x="40" y="60" width="17" height="17" /></bezel>
95      <bezel name="lamp42" element="lamp"><bounds x="60" y="60" width="17" height="17" /></bezel>
96      <bezel name="lamp43" element="lamp"><bounds x="80" y="60" width="17" height="17" /></bezel>
97
98      <bezel name="lamp44" element="lamp"><bounds x="20" y="80" width="17" height="17" /></bezel>
99      <bezel name="lamp45" element="lamp"><bounds x="40" y="80" width="17" height="17" /></bezel>
100      <bezel name="lamp46" element="lamp"><bounds x="60" y="80" width="17" height="17" /></bezel>
101      <bezel name="lamp47" element="lamp"><bounds x="80" y="80" width="17" height="17" /></bezel>
102
103
104   <!-- right side -->
105
106      <bezel element="static_gray"><bounds x="105" y="17" width="55" height="23" /></bezel>
107      <bezel element="static_black"><bounds x="106" y="18" width="53" height="21" /></bezel>
108      <bezel element="text_alert"><bounds x="106" y="18.5" width="53" height="8" /></bezel>
109
110      <bezel name="lamp5" element="nlamp"><bounds x="130.8" y="30.5" width="3.4" height="3.4" /></bezel>
111
112      <bezel element="static_gray"><bounds x="105" y="43" width="55" height="23" /></bezel>
113      <bezel element="static_black"><bounds x="106" y="44" width="53" height="21" /></bezel>
114      <bezel element="text_combat"><bounds x="106" y="44.5" width="53" height="8" /></bezel>
115
116      <bezel name="lamp4" element="nlamp"><bounds x="130.8" y="56.5" width="3.4" height="3.4" /></bezel>
117
118      <bezel element="static_gray"><bounds x="105" y="69" width="55" height="31" /></bezel>
119      <bezel element="static_black"><bounds x="106" y="70" width="53" height="29" /></bezel>
120      <bezel element="text_force"><bounds x="106" y="70.5" width="53" height="8" /></bezel>
121      <bezel element="text_players"><bounds x="106" y="90" width="53" height="8" /></bezel>
122
123      <bezel name="digit6" element="digit"><bounds x="126" y="79.7" width="6" height="9" /></bezel>
124      <bezel name="digit8" element="digit"><bounds x="132" y="79.7" width="6" height="9" /></bezel>
125
126   </view>
127</mamelayout>
trunk/src/mess/layout/stopthie.lay
r242231r242232
11<?xml version="1.0"?>
22<mamelayout version="2">
3   <element name="background">
4      <rect>
5         <bounds left="0" top="0" right="1" bottom="1" />
6         <color red="0.0" green="0.0" blue="0.0" />
7      </rect>
3
4<!-- define elements -->
5
6   <element name="digit" defstate="0">
7      <led7seg><color red="1.0" green="0.22" blue="0.18" /></led7seg>
88   </element>
99
10   <view name="Default Layout">
10   <element name="text_bldg"><text string="BLDG."><color red="0.7" green="0.7" blue="0.7" /></text></element>
11   <element name="text_street"><text string="STREET"><color red="0.7" green="0.7" blue="0.7" /></text></element>
12   <element name="text_loc"><text string="LOC."><color red="0.7" green="0.7" blue="0.7" /></text></element>
1113
12      <!-- Black background -->
13      <bezel element="background">
14         <bounds left="0" top="0" right="200" bottom="200" />
15      </bezel>
1614
15
16<!-- build screen -->
17
18   <view name="Internal Layout">
19      <bounds left="0" right="80" top="0" bottom="15" />
20
21      <bezel name="digit2" element="digit"><bounds x="20" y="0" width="10" height="15" /></bezel>
22      <bezel name="digit1" element="digit"><bounds x="40" y="0" width="10" height="15" /></bezel>
23      <bezel name="digit0" element="digit"><bounds x="50" y="0" width="10" height="15" /></bezel>
24
25
26      <bezel element="text_bldg"><bounds x="0" y="1.5" width="20" height="5.5" /></bezel>
27      <bezel element="text_street"><bounds x="0" y="7.5" width="20" height="5.5" /></bezel>
28
29      <bezel element="text_loc"><bounds x="60" y="4.5" width="20" height="5.5" /></bezel>
30
1731   </view>
1832</mamelayout>
trunk/src/mess/layout/ti1270.lay
r0r242232
1<?xml version="1.0"?>
2<mamelayout version="2">
3
4<!-- note: the digits were very small, wide space between them, and not the same style as (MAME's-)default -->
5
6   <element name="digit" defstate="0">
7      <led7seg><color red="1.0" green="0.15" blue="0.08" /></led7seg>
8   </element>
9
10   <view name="Internal Layout">
11      <bounds left="0" right="80" top="0" bottom="15" />
12
13      <bezel name="digit7" element="digit">
14         <bounds x="0" y="0" width="10" height="15" />
15      </bezel>
16      <bezel name="digit6" element="digit">
17         <bounds x="10" y="0" width="10" height="15" />
18      </bezel>
19      <bezel name="digit5" element="digit">
20         <bounds x="20" y="0" width="10" height="15" />
21      </bezel>
22      <bezel name="digit4" element="digit">
23         <bounds x="30" y="0" width="10" height="15" />
24      </bezel>
25      <bezel name="digit3" element="digit">
26         <bounds x="40" y="0" width="10" height="15" />
27      </bezel>
28      <bezel name="digit2" element="digit">
29         <bounds x="50" y="0" width="10" height="15" />
30      </bezel>
31      <bezel name="digit1" element="digit">
32         <bounds x="60" y="0" width="10" height="15" />
33      </bezel>
34      <bezel name="digit0" element="digit">
35         <bounds x="70" y="0" width="10" height="15" />
36      </bezel>
37
38   </view>
39</mamelayout>
trunk/src/mess/layout/ti30.lay
r0r242232
1<?xml version="1.0"?>
2<mamelayout version="2">
3
4<!-- note: the digits were very small, wide space between them, and not the same style as (MAME's-)default -->
5
6   <element name="digit" defstate="0">
7      <led7seg><color red="1.0" green="0.15" blue="0.08" /></led7seg>
8   </element>
9
10   <view name="Internal Layout">
11      <bounds left="0" right="90" top="0" bottom="15" />
12
13      <bezel name="digit0" element="digit">
14         <bounds x="0" y="0" width="10" height="15" />
15      </bezel>
16      <bezel name="digit1" element="digit">
17         <bounds x="10" y="0" width="10" height="15" />
18      </bezel>
19      <bezel name="digit2" element="digit">
20         <bounds x="20" y="0" width="10" height="15" />
21      </bezel>
22      <bezel name="digit3" element="digit">
23         <bounds x="30" y="0" width="10" height="15" />
24      </bezel>
25      <bezel name="digit4" element="digit">
26         <bounds x="40" y="0" width="10" height="15" />
27      </bezel>
28      <bezel name="digit5" element="digit">
29         <bounds x="50" y="0" width="10" height="15" />
30      </bezel>
31      <bezel name="digit6" element="digit">
32         <bounds x="60" y="0" width="10" height="15" />
33      </bezel>
34      <bezel name="digit7" element="digit">
35         <bounds x="70" y="0" width="10" height="15" />
36      </bezel>
37      <bezel name="digit8" element="digit">
38         <bounds x="80" y="0" width="10" height="15" />
39      </bezel>
40
41   </view>
42</mamelayout>
trunk/src/mess/layout/tisr16.lay
r0r242232
1<?xml version="1.0"?>
2<mamelayout version="2">
3
4<!-- note: the digits were very small, wide space between them, and not the same style as (MAME's-)default -->
5
6   <element name="digit" defstate="0">
7      <led7seg><color red="1.0" green="0.15" blue="0.08" /></led7seg>
8   </element>
9
10   <view name="Internal Layout">
11      <bounds left="0" right="120" top="0" bottom="15" />
12
13      <bezel name="digit10" element="digit">
14         <bounds x="0" y="0" width="10" height="15" />
15      </bezel>
16      <bezel name="digit9" element="digit">
17         <bounds x="10" y="0" width="10" height="15" />
18      </bezel>
19      <bezel name="digit8" element="digit">
20         <bounds x="20" y="0" width="10" height="15" />
21      </bezel>
22      <bezel name="digit7" element="digit">
23         <bounds x="30" y="0" width="10" height="15" />
24      </bezel>
25      <bezel name="digit6" element="digit">
26         <bounds x="40" y="0" width="10" height="15" />
27      </bezel>
28      <bezel name="digit5" element="digit">
29         <bounds x="50" y="0" width="10" height="15" />
30      </bezel>
31      <bezel name="digit4" element="digit">
32         <bounds x="60" y="0" width="10" height="15" />
33      </bezel>
34      <bezel name="digit3" element="digit">
35         <bounds x="70" y="0" width="10" height="15" />
36      </bezel>
37      <bezel name="digit2" element="digit">
38         <bounds x="80" y="0" width="10" height="15" />
39      </bezel>
40      <bezel name="digit11" element="digit">
41         <bounds x="90" y="0" width="10" height="15" />
42      </bezel>
43      <bezel name="digit1" element="digit">
44         <bounds x="100" y="0" width="10" height="15" />
45      </bezel>
46      <bezel name="digit0" element="digit">
47         <bounds x="110" y="0" width="10" height="15" />
48      </bezel>
49
50   </view>
51</mamelayout>
trunk/src/mess/layout/wizatron.lay
r0r242232
1<?xml version="1.0"?>
2<mamelayout version="2">
3
4<!-- note: the digits were very small, wide space between them, and not the same style as (MAME's-)default -->
5<!-- note 2: yes, the PLUS sign is supposed to be lopsided like that -->
6<!-- note 3: yes, the EQUALS sign is supposed to be that high up, but newer releases improved this -->
7
8   <element name="static_black">
9      <rect><color red="0.0" green="0.0" blue="0.0" /></rect>
10   </element>
11
12   <element name="digit" defstate="0">
13      <led7seg><color red="1.0" green="0.3" blue="0.2" /></led7seg>
14   </element>
15   <element name="digit14" defstate="0">
16      <led14seg><color red="1.0" green="0.3" blue="0.2" /></led14seg>
17   </element>
18
19
20   <view name="Internal Layout">
21      <bounds left="0" right="90" top="0" bottom="15" />
22
23      <bezel name="digit8" element="digit">
24         <bounds x="0" y="0" width="10" height="15" />
25      </bezel>
26      <bezel name="digit7" element="digit">
27         <bounds x="10" y="0" width="10" height="15" />
28      </bezel>
29      <bezel name="digit6" element="digit14">
30         <bounds x="20" y="0" width="10" height="15" />
31      </bezel>
32      <bezel name="digit5" element="digit">
33         <bounds x="30" y="0" width="10" height="15" />
34      </bezel>
35      <bezel name="digit4" element="digit">
36         <bounds x="40" y="0" width="10" height="15" />
37      </bezel>
38      <bezel name="digit3" element="digit">
39         <bounds x="50" y="0" width="10" height="15" />
40      </bezel>
41      <bezel name="digit2" element="digit">
42         <bounds x="60" y="0" width="10" height="15" />
43      </bezel>
44      <bezel name="digit1" element="digit">
45         <bounds x="70" y="0" width="10" height="15" />
46      </bezel>
47      <bezel name="digit0" element="digit">
48         <bounds x="80" y="0" width="10" height="15" />
49      </bezel>
50
51<!-- mask out DIVIDE sign -->
52
53      <bezel element="static_black">
54         <bounds x="24.5" y="1.80" width="1.8" height="2.00" />
55      </bezel>
56      <bezel element="static_black">
57         <bounds x="24.3" y="5.1" width="1.75" height="1.3" />
58      </bezel>
59
60      <bezel element="static_black">
61         <bounds x="23.75" y="11.25" width="1.8" height="2.00" />
62      </bezel>
63      <bezel element="static_black">
64         <bounds x="23.95" y="8.65" width="1.75" height="1.3" />
65      </bezel>
66
67   </view>
68</mamelayout>
trunk/src/mess/machine/ngen_kb.c
r0r242232
1// Convergent NGEN keyboard device
2
3#include "ngen_kb.h"
4
5ngen_keyboard_device::ngen_keyboard_device(const machine_config& mconfig, const char* tag, device_t* owner, UINT32 clock) :
6   serial_keyboard_device(mconfig, NGEN_KEYBOARD, "NGEN Keyboard", tag, owner, 0, "ngen_keyboard", __FILE__),
7   m_keys_down(false)
8{
9}
10
11
12void ngen_keyboard_device::write(UINT8 data)
13{
14   // To be figured out
15   logerror("KB: received character %02x\n",data);
16}
17
18UINT8 ngen_keyboard_device::row_number(UINT8 code)
19{
20   if BIT(code,0) return 0;
21   if BIT(code,1) return 1;
22   if BIT(code,2) return 2;
23   if BIT(code,3) return 3;
24   if BIT(code,4) return 4;
25   if BIT(code,5) return 5;
26   if BIT(code,6) return 6;
27   if BIT(code,7) return 7;
28   return 0;
29}
30
31UINT8 ngen_keyboard_device::keyboard_handler(UINT8 last_code, UINT8 *scan_line)
32{
33   int i;
34   UINT8 code = 0;
35   UINT8 key_code = 0;
36   UINT8 retVal = 0;
37   UINT8 shift = BIT(m_io_kbdc->read(), 1);
38   UINT8 caps  = BIT(m_io_kbdc->read(), 2);
39   UINT8 ctrl  = BIT(m_io_kbdc->read(), 0);
40   i = *scan_line;
41   {
42      if (i == 0) code = m_io_kbd0->read();
43      else
44      if (i == 1) code = m_io_kbd1->read();
45      else
46      if (i == 2) code = m_io_kbd2->read();
47      else
48      if (i == 3) code = m_io_kbd3->read();
49      else
50      if (i == 4) code = m_io_kbd4->read();
51      else
52      if (i == 5) code = m_io_kbd5->read();
53      else
54      if (i == 6) code = m_io_kbd6->read();
55      else
56      if (i == 7) code = m_io_kbd7->read();
57      else
58      if (i == 8) code = m_io_kbd8->read();
59      else
60      if (i == 9) code = m_io_kbd9->read();
61
62      if (code != 0)
63      {
64         if (i==0 && shift==0) {
65            key_code = 0x30 + row_number(code) + 8*i; // for numbers and some signs
66         }
67         if (i==0 && shift==1) {
68            key_code = 0x20 + row_number(code) + 8*i; // for shifted numbers
69         }
70         if (i==1 && shift==0) {
71            if (row_number(code) < 4) {
72               key_code = 0x30 + row_number(code) + 8*i; // for numbers and some signs
73            } else {
74               key_code = 0x20 + row_number(code) + 8*i; // for numbers and some signs
75            }
76         }
77         if (i==1 && shift==1) {
78            if (row_number(code) < 4) {
79               key_code = 0x20 + row_number(code) + 8*i; // for numbers and some signs
80            } else {
81               key_code = 0x30 + row_number(code) + 8*i; // for numbers and some signs
82            }
83         }
84         if (i>=2 && i<=4 && (shift ^ caps)==0 && ctrl==0) {
85            key_code = 0x60 + row_number(code) + (i-2)*8; // for small letters
86         }
87         if (i>=2 && i<=4 && (shift ^ caps)==1 && ctrl==0) {
88            key_code = 0x40 + row_number(code) + (i-2)*8; // for big letters
89         }
90         if (i>=2 && i<=5 && ctrl==1) {
91            key_code = 0x00 + row_number(code) + (i-2)*8; // for CTRL + letters
92         }
93         if (i==5 && shift==1 && ctrl==0) {
94            if (row_number(code)<7) {
95               if (row_number(code)<3) {
96                  key_code = (caps ? 0x60 : 0x40) + row_number(code) + (i-2)*8; // for big letters
97               } else {
98                  key_code = 0x60 + row_number(code) + (i-2)*8; // for upper symbols letters
99               }
100            } else {
101               key_code = 0x40 + row_number(code) + (i-2)*8; // for DEL it is switched
102            }
103         }
104         if (i==5 && shift==0 && ctrl==0) {
105            if (row_number(code)<7) {
106               if (row_number(code)<3) {
107                  key_code = (caps ? 0x40 : 0x60) + row_number(code) + (i-2)*8; // for small letters
108               } else {
109                  key_code = 0x40 + row_number(code) + (i-2)*8; // for lower symbols letters
110               }
111            } else {
112               key_code = 0x60 + row_number(code) + (i-2)*8; // for DEL it is switched
113            }
114         }
115
116         if (i==6) {
117            switch(row_number(code))
118            {
119/*                  case 0: key_code = 0x11; break;
120                    case 1: key_code = 0x12; break;
121                    case 2: key_code = 0x13; break;
122                    case 3: key_code = 0x14; break;*/
123               case 4: key_code = 0x20; break; // Space
124               case 5: key_code = 0x0A; break; // LineFeed
125               case 6: key_code = 0x09; break; // TAB
126               case 7: key_code = 0x0D; break; // Enter
127            }
128         }
129         if (i==7)
130         {
131            switch(row_number(code))
132            {
133               case 0: key_code = 0x1B; break; // Escape
134               case 1: key_code = 0x08; break; // Backspace
135            }
136         }
137         else
138         if (i==8)
139         {
140            key_code = row_number(code)+0x81;
141            if (ctrl) key_code+=0x10;
142            if (shift) key_code+=0x20;
143         }
144         else
145         if (i==9)
146         {
147            key_code = row_number(code)+0x89;
148            if (ctrl) key_code+=0x10;
149            if (shift) key_code+=0x20;
150         }
151         m_keys_down = true;
152         retVal = key_code;
153      }
154      else
155      {
156         *scan_line += 1;
157         if (*scan_line==10)
158            *scan_line = 0;
159         if(m_keys_down)
160         {
161            retVal = 0xc0;
162            m_keys_down = false;
163         }
164      }
165   }
166   // TODO: add scan code 0xc0 (all keys up)
167   return retVal;
168}
169
170static INPUT_PORTS_START( ngen_keyboard )
171   PORT_INCLUDE(generic_keyboard)
172
173   PORT_START("RS232_TXBAUD")
174   PORT_CONFNAME(0xff, RS232_BAUD_19200, "TX Baud") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, serial_keyboard_device, update_serial)
175   PORT_CONFSETTING( RS232_BAUD_19200, "19200") // TODO: Based on the RAM refresh timer (~78kHz) to be 19530Hz
176
177   PORT_START("RS232_STARTBITS")
178   PORT_CONFNAME(0xff, RS232_STARTBITS_1, "Start Bits") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, serial_keyboard_device, update_serial)
179   PORT_CONFSETTING( RS232_STARTBITS_1, "1")
180
181   PORT_START("RS232_DATABITS")
182   PORT_CONFNAME(0xff, RS232_DATABITS_8, "Data Bits") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, serial_keyboard_device, update_serial)
183   PORT_CONFSETTING( RS232_DATABITS_8, "8")
184
185   PORT_START("RS232_PARITY")
186   PORT_CONFNAME(0xff, RS232_PARITY_NONE, "Parity") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, serial_keyboard_device, update_serial)
187   PORT_CONFSETTING( RS232_PARITY_NONE, "None")
188
189   PORT_START("RS232_STOPBITS")
190   PORT_CONFNAME(0xff, RS232_STOPBITS_2, "Stop Bits") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, serial_keyboard_device, update_serial)
191   PORT_CONFSETTING( RS232_STOPBITS_2, "2")
192INPUT_PORTS_END
193
194
195ioport_constructor ngen_keyboard_device::device_input_ports() const
196{
197   return INPUT_PORTS_NAME(ngen_keyboard);
198}
199
200void ngen_keyboard_device::device_start()
201{
202   serial_keyboard_device::device_start();
203   set_rcv_rate(19200);
204}
205
206void ngen_keyboard_device::device_reset()
207{
208   serial_keyboard_device::device_reset();
209   m_keys_down = false;
210}
211
212void ngen_keyboard_device::rcv_complete()
213{
214   receive_register_extract();
215   write(get_received_char());
216}
217
218const device_type NGEN_KEYBOARD = &device_creator<ngen_keyboard_device>;
219
trunk/src/mess/machine/ngen_kb.h
r0r242232
1// Convergent NGEN keyboard
2
3#ifndef NGEN_KB_H_
4#define NGEN_KB_H_
5
6#include "bus/rs232/keyboard.h"
7
8class ngen_keyboard_device : public serial_keyboard_device
9{
10public:
11   ngen_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
12   virtual ioport_constructor device_input_ports() const;
13   virtual DECLARE_WRITE_LINE_MEMBER( input_txd ) {/* printf("TX: %i\n",state);*/ device_serial_interface::rx_w(state); }
14
15protected:
16   virtual void device_start();
17   virtual void device_reset();
18   virtual void rcv_complete();
19
20private:
21   virtual UINT8 keyboard_handler(UINT8 last_code, UINT8 *scan_line);
22   UINT8 row_number(UINT8 code);
23   void write(UINT8 data);
24
25   bool m_keys_down;
26};
27
28extern const device_type NGEN_KEYBOARD;
29
30#endif /* NGENKB_H_ */
trunk/src/mess/machine/victor9k_fdc.c
r242231r242232
1111
1212/*
1313
14   value   error description
15
16   01      no sync pulse detected
17   02      no header track
18   03      checksum error in header
19   04      not right track
20   05      not right sector
21   06      not a data block
22   07      data checksum error
23   08      sync too long
24   99      not a system disc
25
26*/
27
28/*
29
1430    TODO:
1531
16    - disk error 2 (cannot find block header?)
32   - communication error with SCP after loading boot sector
33      - bp ff1a8
34      - patch ff1ab=c3
35   - data block checksum errors loading header track
36      - bp ff46a (ax = checksum read from disk, dx = calculated checksum)
37      - bit stream is offset by 1 bit at some point
1738    - 8048 spindle speed control
1839    - read PLL
1940    - write logic
r242231r242232
3758#define M6522_5_TAG     "1k"
3859#define M6522_6_TAG     "1h"
3960
61// this is exactly the same decode as used in the Commodore 4040/8050 series drives
62#define GCR_DECODE(_e, _i) \
63    ((BIT(_e, 6) << 7) | (BIT(_i, 7) << 6) | (_e & 0x33) | (BIT(_e, 2) << 3) | (_i & 0x04))
4064
65// Tandon TM-100 spindle @ 300RPM, measured TACH 12VAC 256Hz
66// TACH = RPM / 60 * SPINDLE RATIO * MOTOR POLES
67// 256 = 300 / 60 * 6.4 * 8
68#define SPINDLE_RATIO    6.4
69#define MOTOR_POLES      8
4170
71// TODO wrong values here! motor speed is controlled by an LM2917, with help from the spindle TACH and a DAC0808 whose value is set by the SCP 8048
72const int victor_9000_fdc_t::rpm[] = { 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 254, 255, 257, 259, 260, 262, 264, 266, 267, 269, 271, 273, 275, 276, 278, 280, 282, 284, 286, 288, 290, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 318, 320, 322, 324, 326, 328, 330, 333, 335, 337, 339, 342, 344, 346, 348, 351, 353, 355, 358, 360, 362, 365, 367, 370, 372, 375, 377, 380, 382, 385, 387, 390, 392, 395, 398, 400, 403, 406, 408, 411, 414, 416, 419, 422, 425, 428, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 482, 485, 488, 491, 494, 498, 501, 504, 508, 511, 514, 518, 521, 525, 528, 532, 535, 539, 542, 546, 550, 553, 557, 561, 564, 568, 572, 576, 579, 583, 587, 591, 595, 599, 603, 607, 611, 615, 619, 623, 627, 631, 636, 640, 644, 648, 653, 657, 661, 666, 670, 674, 679, 683, 688, 693, 697, 702, 706, 711, 716, 721, 725, 730, 735, 740, 745, 750, 755, 760, 765, 770, 775, 780, 785, 790, 796, 801, 806, 812, 817, 822, 828, 833, 839, 844, 850, 856, 861, 867, 873, 878, 884 };
73
74
75
4276//**************************************************************************
4377//  DEVICE DEFINITIONS
4478//**************************************************************************
r242231r242232
74108//-------------------------------------------------
75109
76110static ADDRESS_MAP_START( floppy_io, AS_IO, 8, victor_9000_fdc_t )
77   AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(floppy_p1_r) AM_WRITENOP
111   AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(floppy_p1_r, floppy_p1_w)
78112   AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(floppy_p2_r, floppy_p2_w)
79113   AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(tach0_r)
80114   AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(tach1_r)
r242231r242232
88122
89123int victor_9000_fdc_t::load0_cb(floppy_image_device *device)
90124{
125   // DOOR OPEN 0
91126   m_via4->write_ca1(0);
92127
93128   return IMAGE_INIT_PASS;
r242231r242232
95130
96131void victor_9000_fdc_t::unload0_cb(floppy_image_device *device)
97132{
133   // DOOR OPEN 0
98134   m_via4->write_ca1(1);
99135}
100136
101137int victor_9000_fdc_t::load1_cb(floppy_image_device *device)
102138{
139   // DOOR OPEN 1
103140   m_via4->write_cb1(0);
104141
105142   return IMAGE_INIT_PASS;
r242231r242232
107144
108145void victor_9000_fdc_t::unload1_cb(floppy_image_device *device)
109146{
147   // DOOR OPEN 1
110148   m_via4->write_cb1(1);
111149}
112150
r242231r242232
129167   MCFG_CPU_IO_MAP(floppy_io)
130168
131169   MCFG_DEVICE_ADD(M6522_4_TAG, VIA6522, XTAL_30MHz/30)
170   MCFG_VIA6522_READPA_HANDLER(READ8(victor_9000_fdc_t, via4_pa_r))
132171   MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(victor_9000_fdc_t, via4_pa_w))
172   MCFG_VIA6522_READPB_HANDLER(READ8(victor_9000_fdc_t, via4_pb_r))
133173   MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(victor_9000_fdc_t, via4_pb_w))
134174   MCFG_VIA6522_CA2_HANDLER(WRITELINE(victor_9000_fdc_t, wrsync_w))
135175   MCFG_VIA6522_IRQ_HANDLER(WRITELINE(victor_9000_fdc_t, via4_irq_w))
r242231r242232
209249   m_via4_irq(CLEAR_LINE),
210250   m_via5_irq(CLEAR_LINE),
211251   m_via6_irq(CLEAR_LINE),
212   m_syn(0),
213   m_lbrdy(1),
214252   m_period(attotime::from_nsec(2130))
215253{
216254   cur_live.tm = attotime::never;
r242231r242232
259297   save_item(NAME(m_via4_irq));
260298   save_item(NAME(m_via5_irq));
261299   save_item(NAME(m_via6_irq));
262   save_item(NAME(m_syn));
263   save_item(NAME(m_lbrdy));
264300}
265301
266302
r242231r242232
305341      break;
306342
307343   case TM_TACH0:
308      // TODO
344      m_tach0 = !m_tach0;
345      if (LOG_SCP) logerror("TACH0 %u\n", m_tach0);
309346      break;
310347
311348   case TM_TACH1:
312      // TODO
349      m_tach1 = !m_tach1;
350      if (LOG_SCP) logerror("TACH1 %u\n", m_tach1);
313351      break;
314352   }
315353}
r242231r242232
341379
342380
343381//-------------------------------------------------
382//  floppy_p1_w -
383//-------------------------------------------------
384
385WRITE8_MEMBER( victor_9000_fdc_t::floppy_p1_w )
386{
387   /*
388
389       bit     description
390
391       0       L0MS0
392       1       L0MS1
393       2       L0MS2
394       3       L0MS3
395       4       L1MS0
396       5       L1MS1
397       6       L1MS2
398       7       L1MS3
399
400   */
401
402   m_l0ms = data & 0x0f;
403   m_l1ms = data >> 4;
404}
405
406
407//-------------------------------------------------
344408//  floppy_p2_r -
345409//-------------------------------------------------
346410
347411READ8_MEMBER( victor_9000_fdc_t::floppy_p2_r )
348412{
349   return m_p2; // TODO needed because of ORL/ANL P2, should be in mcs48.c
413   /*
414
415       bit     description
416
417       0
418       1
419       2
420       3
421       4
422       5
423       6       RDY0
424       7       RDY1
425
426   */
427
428   UINT8 data = m_p2 & 0x3f;
429
430   data |= m_rdy0 << 6;
431   data |= m_rdy1 << 7;
432
433   return data;
350434}
351435
352436
r242231r242232
393477   int sel1 = BIT(data, 4);
394478   if (m_sel1 != sel1) sync = true;
395479
396   //m_rdy0 = BIT(data, 6);
397   //m_via5->write_ca2(m_rdy0);
480   set_rdy0(BIT(data, 6));
481   set_rdy1(BIT(data, 7));
398482
399   //m_rdy1 = BIT(data, 7);
400   //m_via5->write_cb2(m_rdy1);
401
402483   if (LOG_SCP) logerror("%s %s START0/STOP0/SEL0/RDY0 %u/%u/%u/%u START1/STOP1/SEL1/RDY1 %u/%u/%u/%u\n", machine().time().as_string(), machine().describe_context(), start0, stop0, sel0, m_rdy0, start1, stop1, sel1, m_rdy1);
403484
404485   if (sync)
r242231r242232
486567   } else if (stop && !floppy->mon_r()) {
487568      if (LOG_SCP) logerror("%s: motor stop\n", floppy->tag());
488569      floppy->mon_w(1);
570      t_tach->reset();
489571   }
490572
491573   if (sel) {
492574      da = m_da;
575      if (!floppy->mon_r()) {
576         float tach = rpm[da] / 60 * SPINDLE_RATIO * MOTOR_POLES;
577
578         if (LOG_SCP) logerror("%s: motor speed %u rpm / tach %0.1f hz (DA %02x)\n", floppy->tag(), rpm[da], tach, da);
579
580         t_tach->adjust(attotime::from_hz(tach*2), 0, attotime::from_hz(tach*2));
581         floppy->set_rpm(rpm[da]);
582      }
493583   }
494584}
495585
586void victor_9000_fdc_t::set_rdy0(int state)
587{
588   //m_rdy0 = state;
589   //m_via5->write_ca2(m_rdy0);
590}
496591
592void victor_9000_fdc_t::set_rdy1(int state)
593{
594   //m_rdy1 = state;
595   //m_via5->write_cb2(m_rdy1);
596}
597
598
497599//-------------------------------------------------
498600//  da_w -
499601//-------------------------------------------------
r242231r242232
513615   }
514616}
515617
618READ8_MEMBER( victor_9000_fdc_t::via4_pa_r )
619{
620   /*
621
622       bit     description
623
624       PA0     L0MS0
625       PA1     L0MS1
626       PA2     L0MS2
627       PA3     L0MS3
628       PA4
629       PA5
630       PA6
631       PA7
632
633   */
634
635   return m_l0ms;
636}
637
516638WRITE8_MEMBER( victor_9000_fdc_t::via4_pa_w )
517639{
518640   /*
r242231r242232
553675   }
554676}
555677
678READ8_MEMBER( victor_9000_fdc_t::via4_pb_r )
679{
680   /*
681
682       bit     description
683
684       PB0     L1MS0
685       PB1     L1MS1
686       PB2     L1MS2
687       PB3     L1MS3
688       PB4
689       PB5
690       PB6
691       PB7
692
693   */
694
695   return m_l1ms;
696}
697
556698WRITE8_MEMBER( victor_9000_fdc_t::via4_pb_w )
557699{
558700   /*
r242231r242232
601743      m_wrsync = state;
602744      cur_live.wrsync = state;
603745      checkpoint();
604      if (LOG_VIA) logerror("%s %s ERASE %u\n", machine().time().as_string(), machine().describe_context(), state);
746      if (LOG_VIA) logerror("%s %s WRSYNC %u\n", machine().time().as_string(), machine().describe_context(), state);
605747      live_run();
606748   }
607749}
r242231r242232
630772
631773   */
632774
633   UINT8 e = checkpoint_live.e;
634   UINT8 i = checkpoint_live.i;
635
636   return BIT(e, 6) << 7 | BIT(i, 7) << 6 | BIT(e, 5) << 5 | BIT(e, 4) << 4 | BIT(e, 2) << 3 | BIT(i, 1) << 2 | (e & 0x03);
775   return GCR_DECODE(checkpoint_live.e, checkpoint_live.i);
637776}
638777
639778WRITE8_MEMBER( victor_9000_fdc_t::via5_pb_w )
r242231r242232
802941
803942       bit     description
804943
805       PB0
806       PB1
944       PB0     RDY0
945       PB1     RDY1
807946       PB2     _SCRESET
808947       PB3
809948       PB4
r242231r242232
813952
814953   */
815954
955   set_rdy0(BIT(data, 0));
956   set_rdy1(BIT(data, 1));
957
816958   // motor speed controller reset
817959   if (!BIT(data, 2))
818960      m_maincpu->reset();
r242231r242232
8821024
8831025READ8_MEMBER( victor_9000_fdc_t::cs7_r )
8841026{
885   if (!checkpoint_live.lbrdy)
886   {
887      live_sync();
888      cur_live.lbrdy = 1;
889      if (LOG_VIA) logerror("%s %s LBRDY 1\n", machine().time().as_string(), machine().describe_context());
890      m_lbrdy_cb(1);
891      checkpoint();
892      live_run();
893   }
1027   m_lbrdy_cb(1);
8941028
1029   if (LOG_VIA) logerror("%s %s LBRDY 1 : %02x\n", machine().time().as_string(), machine().describe_context(), m_via5->read(space, offset));
1030
8951031   return m_via5->read(space, offset);
8961032}
8971033
8981034WRITE8_MEMBER( victor_9000_fdc_t::cs7_w )
8991035{
900   if (!checkpoint_live.lbrdy)
901   {
902      live_sync();
903      cur_live.lbrdy = 1;
904      if (LOG_VIA) logerror("%s %s LBRDY 1\n", machine().time().as_string(), machine().describe_context());
905      m_lbrdy_cb(1);
906      checkpoint();
907      live_run();
908   }
1036   m_lbrdy_cb(1);
9091037
1038   if (LOG_VIA) logerror("%s %s LBRDY 1\n", machine().time().as_string(), machine().describe_context());
1039
9101040   m_via5->write(space, offset, data);
9111041}
9121042
r242231r242232
10441174   cur_live.write_start_time = attotime::never;
10451175
10461176   cur_live.brdy = 1;
1047   cur_live.lbrdy = 1;
1177   cur_live.lbrdy_changed = true;
10481178   cur_live.sync = 1;
10491179   cur_live.syn = 1;
1180   cur_live.syn_changed = true;
10501181   cur_live.gcr_err = 1;
10511182}
10521183
r242231r242232
10881219         // sync counter
10891220         if (sync) {
10901221            cur_live.sync_bit_counter = 0;
1091            cur_live.sync_byte_counter = 10;
1222            cur_live.sync_byte_counter = 9;
10921223         } else if (!cur_live.sync) {
10931224            cur_live.sync_bit_counter++;
10941225            if (cur_live.sync_bit_counter == 10) {
r242231r242232
11031234         // syn
11041235         int syn = !(cur_live.sync_byte_counter == 15);
11051236
1106         if (LOG) logerror("%s bit %u sync %u bc %u sbc %u sBC %u syn %u\n",cur_live.tm.as_string(),bit,sync,cur_live.bit_counter,cur_live.sync_bit_counter,cur_live.sync_byte_counter,syn);
1107
11081237         // GCR decoder
11091238         if (cur_live.drw) {
11101239            cur_live.i = cur_live.drw << 10 | cur_live.shift_reg;
r242231r242232
11141243
11151244         cur_live.e = m_gcr_rom->base()[cur_live.i];
11161245
1246         attotime next = cur_live.tm + m_period;
1247         if (LOG) logerror("%s:%s:%s bit %u sync %u bc %u sbc %u sBC %u syn %u i %03x e %02x\n",cur_live.tm.as_string(),next.as_string(),cur_live.edge.as_string(),bit,sync,cur_live.bit_counter,cur_live.sync_bit_counter,cur_live.sync_byte_counter,syn,cur_live.i,cur_live.e);
1248
11171249         // byte ready
11181250         int brdy = !(cur_live.bit_counter == 9);
11191251
r242231r242232
11221254
11231255         if (brdy != cur_live.brdy) {
11241256            if (LOG) logerror("%s BRDY %u\n", cur_live.tm.as_string(),brdy);
1125            if (LOG && !brdy)
1257            if (!brdy)
11261258            {
1127               UINT8 e = cur_live.e;
1128               UINT8 i = cur_live.i;
1129
1130               UINT8 data = BIT(e, 6) << 7 | BIT(i, 7) << 6 | BIT(e, 5) << 5 | BIT(e, 4) << 4 | BIT(e, 2) << 3 | BIT(i, 1) << 2 | (e & 0x03);
1131               logerror("%s BRDY %02x\n",cur_live.tm.as_string(),data);
1259               cur_live.lbrdy_changed = true;
1260               if (LOG_VIA) logerror("%s LBRDY 0 : %02x\n", cur_live.tm.as_string(), GCR_DECODE(cur_live.e, cur_live.i));
11321261            }
11331262            cur_live.brdy = brdy;
1134            if (!brdy) cur_live.lbrdy = 0;
11351263            syncpoint = true;
11361264         }
11371265
r242231r242232
11441272         if (syn != cur_live.syn) {
11451273            if (LOG) logerror("%s SYN %u\n", cur_live.tm.as_string(),syn);
11461274            cur_live.syn = syn;
1275            cur_live.syn_changed = true;
11471276            syncpoint = true;
11481277         }
11491278
r242231r242232
11661295      }
11671296
11681297      case RUNNING_SYNCPOINT: {
1169         m_lbrdy_cb(cur_live.lbrdy);
1170         m_syn_cb(cur_live.syn);
1298         if (cur_live.lbrdy_changed) {
1299            m_lbrdy_cb(0);
1300            cur_live.lbrdy_changed = false;
1301         }
11711302
1303         if (cur_live.syn_changed) {
1304            m_syn_cb(cur_live.syn);
1305            cur_live.syn_changed = false;
1306         }
1307
1308         m_via5->write_ca1(cur_live.brdy);
1309
11721310         cur_live.state = RUNNING;
11731311         checkpoint();
11741312         break;
trunk/src/mess/machine/victor9k_fdc.h
r242231r242232
6363   DECLARE_FLOPPY_FORMATS( floppy_formats );
6464
6565   DECLARE_READ8_MEMBER( floppy_p1_r );
66   DECLARE_WRITE8_MEMBER( floppy_p1_w );
6667   DECLARE_READ8_MEMBER( floppy_p2_r );
6768   DECLARE_WRITE8_MEMBER( floppy_p2_w );
6869   DECLARE_READ8_MEMBER( tach0_r );
6970   DECLARE_READ8_MEMBER( tach1_r );
7071   DECLARE_WRITE8_MEMBER( da_w );
7172
73   DECLARE_READ8_MEMBER( via4_pa_r );
7274   DECLARE_WRITE8_MEMBER( via4_pa_w );
75   DECLARE_READ8_MEMBER( via4_pb_r );
7376   DECLARE_WRITE8_MEMBER( via4_pb_w );
7477   DECLARE_WRITE_LINE_MEMBER( wrsync_w );
7578   DECLARE_WRITE_LINE_MEMBER( via4_irq_w );
r242231r242232
97100   virtual machine_config_constructor device_mconfig_additions() const;
98101
99102private:
103   static const int rpm[0x100];
104
100105   enum
101106   {
102107      TM_GEN,
r242231r242232
135140      int sync_bit_counter;
136141      int sync_byte_counter;
137142      int brdy;
138      int lbrdy;
143      bool lbrdy_changed;
139144      int sync;
140145      int syn;
146      bool syn_changed;
141147      int gcr_err;
142148
143149      // write
r242231r242232
165171
166172   void update_stepper_motor(floppy_image_device *floppy, int stp, int old_st, int st);
167173   void update_spindle_motor(floppy_image_device *floppy, emu_timer *t_tach, bool start, bool stop, bool sel, UINT8 &da);
174   void set_rdy0(int state);
175   void set_rdy1(int state);
168176
169177   int load0_cb(floppy_image_device *device);
170178   void unload0_cb(floppy_image_device *device);
r242231r242232
204212   int m_via4_irq;
205213   int m_via5_irq;
206214   int m_via6_irq;
207   int m_syn;
208   int m_lbrdy;
209215
210216   attotime m_period;
211217
trunk/src/mess/mess.lst
r242231r242232
10631063avigo_it     // 1997 Avigo (Italian)
10641064
10651065// Texas Instruments Calculators
1066tisr16    // 1974 SR-16
1067ti1270
1068ti30      // 1976 TI-30
1069tiprog
1070tibusan1
1071wizatron
10661072ti73      // 1990 TI-73
10671073ti74      // 1985 TI-74
10681074ti95      // 1986 TI-95
10691075ti81      // 1990 TI-81 (Z80 2 MHz)
1070ti81v2  // 1990 TI-81 (Z80 2 MHz)
1076ti81v2    // 1990 TI-81 (Z80 2 MHz)
10711077ti85      // 1992 TI-85 (Z80 6 MHz)
10721078ti82      // 1993 TI-82 (Z80 6 MHz)
10731079ti83      // 1996 TI-83 (Z80 6 MHz)
10741080ti86      // 1997 TI-86 (Z80 6 MHz)
1075ti83p    // 1999 TI-83 Plus (Z80 6 MHz)
1081ti83p    // 1999 TI-83 Plus (Z80 6 MHz)
10761082ti83pse   // 2001 TI-83 Plus Silver Edition
1077ti84p  // 2004 TI-84 Plus
1083ti84p     // 2004 TI-84 Plus
10781084ti84pse   // 2004 TI-84 Plus Silver Edition
10791085//ti84cse // 2013 TI-84 Plus C Silver Edition (color screen)
10801086ti89      // 1998 TI-89
10811087ti92      // 1995 TI-92
1082ti92p    // 1999 TI-92 Plus
1088ti92p    // 1999 TI-92 Plus
10831089v200      // 2002 Voyage 200 PLT
1084ti89t    // 2004 TI-89 Titanium
1085wizatron
1090ti89t     // 2004 TI-89 Titanium
10861091evmbug
10871092
10881093// Exelvision (founded by former TI employees)
r242231r242232
22312236mmd1
22322237mmd2
22332238mpf1p
2239cnsector
2240starwbc
2241starwbcp
22342242stopthie
2243stopthiep
22352244amico2k
22362245jtc
22372246jtces88
trunk/src/mess/mess.mak
r242231r242232
132132CPUS += 8X300
133133CPUS += ALTO2
134134#CPUS += W65816
135CPUS += ARC
136CPUS += ARCOMPACT
135137
136138#-------------------------------------------------
137139# specify available sound cores; some of these are
r242231r242232
730732   $(MESSOBJ)/intv.a \
731733   $(MESSOBJ)/isc.a \
732734   $(MESSOBJ)/kaypro.a \
735   $(MESSOBJ)/kenner.a \
733736   $(MESSOBJ)/koei.a \
734737   $(MESSOBJ)/kyocera.a \
735738   $(MESSOBJ)/luxor.a \
r242231r242232
13291332$(MESSOBJ)/kaypro.a:            \
13301333   $(MESS_DRIVERS)/kaypro.o $(MESS_MACHINE)/kaypro.o $(MESS_MACHINE)/kay_kbd.o $(MESS_VIDEO)/kaypro.o \
13311334
1335$(MESSOBJ)/kenner.a:            \
1336   $(MESS_DRIVERS)/starwbc.o   \
1337
13321338$(MESSOBJ)/koei.a:              \
13331339   $(MESS_DRIVERS)/pasogo.o    \
13341340
r242231r242232
14721478   $(MESS_DRIVERS)/palmz22.o   \
14731479
14741480$(MESSOBJ)/parker.a:            \
1481   $(MESS_DRIVERS)/cnsector.o  \
14751482   $(MESS_DRIVERS)/merlin.o    \
14761483   $(MESS_DRIVERS)/stopthie.o  \
14771484
r242231r242232
19461953   $(MESS_DRIVERS)/mx2178.o    \
19471954   $(MESS_DRIVERS)/mycom.o     \
19481955   $(MESS_DRIVERS)/myvision.o  \
1949   $(MESS_DRIVERS)/ngen.o      \
1956   $(MESS_DRIVERS)/ngen.o  $(MESS_MACHINE)/ngen_kb.o \
19501957   $(MESS_DRIVERS)/octopus.o   \
19511958   $(MESS_DRIVERS)/onyx.o      \
19521959   $(MESS_DRIVERS)/okean240.o  \
r242231r242232
20742081$(MESS_DRIVERS)/chessmst.o: $(MESS_LAYOUT)/chessmst.lh
20752082$(MESS_DRIVERS)/chesstrv.o: $(MESS_LAYOUT)/chesstrv.lh \
20762083                     $(MESS_LAYOUT)/borisdpl.lh
2084$(MESS_DRIVERS)/cnsector.o: $(MESS_LAYOUT)/cnsector.lh
2085$(MESS_DRIVERS)/comp4.o:    $(MESS_LAYOUT)/comp4.lh
20772086$(MESS_DRIVERS)/cp1.o:      $(MESS_LAYOUT)/cp1.lh
20782087$(MESS_DRIVERS)/cvicny.o:   $(MESS_LAYOUT)/cvicny.lh
20792088$(MESS_DRIVERS)/coco3.o:    $(MESS_LAYOUT)/coco3.lh
r242231r242232
21432152$(MESS_DRIVERS)/sitcom.o:   $(MESS_LAYOUT)/sitcom.lh
21442153$(MESS_DRIVERS)/slc1.o:     $(MESS_LAYOUT)/slc1.lh
21452154$(MESS_DRIVERS)/sms.o:      $(MESS_LAYOUT)/sms1.lh
2155$(MESS_DRIVERS)/starwbc.o:  $(MESS_LAYOUT)/starwbc.lh
21462156$(MESS_DRIVERS)/stopthie.o: $(MESS_LAYOUT)/stopthie.lh
21472157$(MESS_DRIVERS)/super80.o:  $(MESS_LAYOUT)/super80.lh
21482158$(MESS_DRIVERS)/supercon.o: $(MESS_LAYOUT)/supercon.lh
r242231r242232
21542164$(MESS_DRIVERS)/tecnbras.o: $(MESS_LAYOUT)/tecnbras.lh
21552165$(MESS_DRIVERS)/ti74.o:     $(MESS_LAYOUT)/ti74.lh \
21562166                     $(MESS_LAYOUT)/ti95.lh
2167$(MESS_DRIVERS)/ticalc1x.o: $(MESS_LAYOUT)/ti1270.lh \
2168                     $(MESS_LAYOUT)/ti30.lh \
2169                     $(MESS_LAYOUT)/tisr16.lh \
2170                     $(MESS_LAYOUT)/wizatron.lh
21572171$(MESS_DRIVERS)/tk80.o:     $(MESS_LAYOUT)/tk80.lh
21582172$(MESS_DRIVERS)/tm990189.o: $(MESS_LAYOUT)/tm990189.lh \
21592173                     $(MESS_LAYOUT)/tm990189v.lh
trunk/src/mess/tools/imgtool/modules/os9.c
r242231r242232
673673      return IMGTOOLERR_OUTOFMEMORY;
674674   memset(info->allocation_bitmap, 0, info->allocation_bitmap_bytes);
675675
676   /* sectors per track and track size dont jive? */
676   /* sectors per track and track size don't jive? */
677677   if (info->sectors_per_track != track_size_in_sectors)
678678      return IMGTOOLERR_CORRUPTIMAGE;
679679
trunk/src/mess/video/maria.c
r242231r242232
44
55
66  - some history:
7    2014-12-01 Mike Saarna, Robert Tuccitto Implemented "colorburst kill" bit
8               of the MARIA CTRL register.
79    2014-10-05 Mike Saarna, Robert Tuccitto Last Line DMA value corrected
810                to 6. GCC and Atari docs both show a difference between
911                Other Line and Last Line as +6 at the lowest part of the
r242231r242232
317319            scanline[2 * i + 1] = m_maria_palette[d];
318320            break;
319321      }
322
323      if(m_color_kill) //remove color if there's no colorburst signal
324      {
325            scanline[2 * i] &= 0x0f;
326            scanline[2 * i + 1] &= 0x0f;
327      }
320328   }
321329
322330   for (int i = 0; i < 160; i++) // buffer automaticaly cleared once displayed


Previous 199869 Revisions Next


© 1997-2024 The MAME Team