| Previous | 199869 Revisions | Next |
| r34192 Thursday 25th December, 2014 at 20:06:30 UTC by Luca Bruno |
|---|
| luaengine: add screen drawing/HUD capabilities This commit allows LUA scripts to implement HUD capabilities, by overlaying elements (lines, boxes, text) to screen. Mostly used to draw custom graphic helpers for trainings and TAS runs development. Signed-off-by: Luca Bruno <lucab@debian.org> |
| [/trunk] | makefile |
| [hash] | adam_cass.xml adam_flop.xml apollo_ctape.xml archimedes.xml gamate.xml gba.xml gbcolor.xml megacdj.xml megadriv.xml mtx_cass.xml n64.xml neogeo.xml nes.xml pc98.xml pico.xml sms.xml sol20_cass.xml timex_dock.xml vz_cass.xml |
| [src] | version.c |
| [src/build] | build.mak |
| [src/emu] | emucore.h luaengine.c luaengine.h machine.c render.c render.h rendersw.inc rendlay.c rendlay.h |
| [src/emu/bus] | bus.mak |
| [src/emu/bus/a8sio] | |
| [src/emu/bus/abckb] | abc99.c |
| [src/emu/bus/centronics] | epson_lx810l.c |
| [src/emu/bus/dmv] | k220.c |
| [src/emu/bus/gamegear] | |
| [src/emu/bus/ieee488] | c8050fdc.c |
| [src/emu/bus/isa] | cga.c sc499.h |
| [src/emu/bus/megadrive] | md_slot.c rom.c |
| [src/emu/bus/sega8] | rom.c rom.h |
| [src/emu/bus/sms_ctrl] | multitap.c sportsjp.c sportsjp.h |
| [src/emu/cpu] | cpu.mak |
| [src/emu/cpu/arc] | arc.c arcdasm.c |
| [src/emu/cpu/arcompact] | arcompact.c arcompact.h arcompact_common.c arcompact_common.h arcompact_execute.c |
| [src/emu/cpu/h8] | h8_sci.c h8_timer16.c |
| [src/emu/cpu/m68000] | m68000.h m68k_in.c m68kcpu.c m68kdasm.c m68kfpu.inc |
| [src/emu/cpu/pps4] | pps4.c pps4.h pps4dasm.c |
| [src/emu/cpu/sh2] | sh2comn.c |
| [src/emu/cpu/tms0980] | tms0980.c tms0980.h |
| [src/emu/machine] | 8530scc.c am9517a.c e05a30.c i6300esb.c i82875p.h r10696.c r10696.h r10788.c r10788.h ra17xx.c ra17xx.h smpc.c steppers.c steppers.h z80dart.c z80dma.c |
| [src/emu/netlist] | nl_base.h |
| [src/emu/netlist/analog] | nld_ms_direct.h nld_ms_gauss_seidel.h nld_opamps.c nld_solver.c nld_solver.h |
| [src/emu/netlist/devices] | net_lib.c nld_4020.c nld_cmos.h nld_system.h |
| [src/emu/sound] | pokey.c pokey.h tms5110.c |
| [src/emu/video] | 315_5124.c snes_ppu.c snes_ppu.h stvvdp2.c |
| [src/lib] | lib.mak |
| [src/lib/formats] | ap2_dsk.c ap_dsk35.c coco_cas.c cpis_dsk.c d88_dsk.c dcp_dsk.c dim_dsk.c dip_dsk.c dsk_dsk.c fdd_dsk.c imd_dsk.c m20_dsk.c nfd_dsk.c pasti_dsk.c victor9k_dsk.c |
| [src/lib/util] | chd.c chd.h coretmpl.h palette.h |
| [src/mame] | mame.lst |
| [src/mame/audio] | dkong.c |
| [src/mame/drivers] | 5clown.c aleck64.c asteroid.c atvtrack.c barata.c bfm_sc1.c bfm_sc2.c bfm_sc4.c bfm_sc4h.c bwidow.c chihiro.c cps1.c cps2.c cultures.c dreamwld.c ecoinfr.c f-32.c galpani2.c gts1.c gundealr.c igs009.c jpmimpct.c ksys573.c lindbergh.c maygay1b.c maygay1bsw.c metro.c mjkjidai.c mpu3.c mpu4.c mpu4hw.c namcops2.c overdriv.c relief.c renegade.c sbrkout.c segahang.c segas16b.c snowbros.c sprint2.c taito_f3.c tigeroad.c vicdual.c viper.c wallc.c wrally.c yunsun16.c zac2650.c zaccaria.c |
| [src/mame/includes] | asteroid.h bionicc.h chihiro.h galaxold.h renegade.h scramble.h sprint2.h yunsun16.h zac2650.h zaccaria.h |
| [src/mame/machine] | asteroid.c atarigen.c cps2crpt.c scramble.c snes.c |
| [src/mame/video] | chihiro.c galaxold.c galpani2.c k001005.c segaic16.c tigeroad.c tigeroad_spr.c zac2650.c zaccaria.c |
| [src/mess] | mess.lst mess.mak |
| [src/mess/drivers] | altos5.c |
| [src/mess/includes] | aquarius.h sms.h victor9k.h |
| [src/mess/layout] | |
| [src/mess/machine] | gamecom.c mac.c ngen_kb.c pce_cd.c sms.c trs80.c victor9k_fdc.c victor9kb.c |
| [src/mess/tools/castool] | castool.mak |
| [src/mess/tools/floptool] | floptool.mak |
| [src/mess/tools/imgtool] | imgtool.mak |
| [src/mess/video] | apple2.c aquarius.c gb_lcd.c maria.c wswan_video.c |
| [src/osd/modules/debugger] | debugosx.m |
| [src/osd/modules/debugger/qt] | debugqtdeviceswindow.c debugqtdeviceswindow.h |
| [src/osd/sdl] | blit13.h draw13.c drawogl.c drawsdl.c input.c sdl.mak sdlsync_tc.c sdlwork.c video.c video.h window.c window.h |
| [src/osd/windows] | d3dhlsl.c drawd3d.c vconv.c windows.mak winprefix.h winwork.c |
| [src/tools] | nltool.c tools.mak |
| r242703 | r242704 | |
|---|---|---|
| 968 | 968 | </software> |
| 969 | 969 | |
| 970 | 970 | <!-- |
| 971 | <software name="macadam"> | |
| 972 | <description>MacADAM (Fra)</description> | |
| 973 | <year>1984</year> | |
| 974 | <publisher>CBS Loisors - Coleco of France</publisher> | |
| 971 | <software name="macadam"> | |
| 972 | <description>MacADAM (Fra)</description> | |
| 973 | <year>1984</year> | |
| 974 | <publisher>CBS Loisors - Coleco of France</publisher> | |
| 975 | 975 | |
| 976 | <part name="cass1" interface="adam_cass"> | |
| 977 | <dataarea name="cass" size="262144"> | |
| 978 | <rom name="macadam (1984) (cbs loisors - coleco of france).ddp" size="262144" crc="2fe95d33" sha1="e27e3515644c2fcd28b94b1aed69ae0b2cb76afc" offset="0" /> | |
| 979 | </dataarea> | |
| 980 | </part> | |
| 981 | </software> | |
| 976 | <part name="cass1" interface="adam_cass"> | |
| 977 | <dataarea name="cass" size="262144"> | |
| 978 | <rom name="macadam (1984) (cbs loisors - coleco of france).ddp" size="262144" crc="2fe95d33" sha1="e27e3515644c2fcd28b94b1aed69ae0b2cb76afc" offset="0" /> | |
| 979 | </dataarea> | |
| 980 | </part> | |
| 981 | </software> | |
| 982 | 982 | |
| 983 | <software name="macadama" cloneof="macadam"> | |
| 984 | <description>MacADAM (Fra, Alt)</description> | |
| 985 | <year>1984</year> | |
| 986 | <publisher>CBS Loisors - Coleco of France</publisher> | |
| 983 | <software name="macadama" cloneof="macadam"> | |
| 984 | <description>MacADAM (Fra, Alt)</description> | |
| 985 | <year>1984</year> | |
| 986 | <publisher>CBS Loisors - Coleco of France</publisher> | |
| 987 | 987 | |
| 988 | <part name="cass1" interface="adam_cass"> | |
| 989 | <dataarea name="cass" size="262144"> | |
| 990 | <rom name="macadam (1984) (cbs loisors - coleco of france) [a1].ddp" size="262144" crc="5288e332" sha1="4c1de35afefc356db7303f8f584946bbf0f7c528" offset="0" /> | |
| 991 | </dataarea> | |
| 992 | </part> | |
| 993 | </software> | |
| 988 | <part name="cass1" interface="adam_cass"> | |
| 989 | <dataarea name="cass" size="262144"> | |
| 990 | <rom name="macadam (1984) (cbs loisors - coleco of france) [a1].ddp" size="262144" crc="5288e332" sha1="4c1de35afefc356db7303f8f584946bbf0f7c528" offset="0" /> | |
| 991 | </dataarea> | |
| 992 | </part> | |
| 993 | </software> | |
| 994 | 994 | --> |
| 995 | 995 | |
| 996 | 996 |
| r242703 | r242704 | |
|---|---|---|
| 2 | 2 | <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> |
| 3 | 3 | <softwarelist name="adam_flop" description="Coleco ADAM diskettes"> |
| 4 | 4 | |
| 5 | <!-- | |
| 5 | <!-- | |
| 6 | 6 | Thanks to SacNews.net for their very comprehensive software database! |
| 7 | ||
| 7 | ||
| 8 | 8 | TODO: |
| 9 | Add rest of images outside of TOSEC/SacNews databases | |
| 10 | Proper testing for correct info? (current info is just copy-pasted from filenames) | |
| 9 | Add rest of images outside of TOSEC/SacNews databases | |
| 10 | Proper testing for correct info? (current info is just copy-pasted from filenames) | |
| 11 | 11 | --> |
| 12 | ||
| 12 | ||
| 13 | 13 | <!-- EOS Drivers --> |
| 14 | 14 | |
| 15 | 15 | <software name="homeauto"> |
| r242703 | r242704 | |
| 841 | 841 | <dataarea name="flop" size="163840"> |
| 842 | 842 | <rom name="world geography (1985) (a-ware educational software) [a1].dsk" size="163840" crc="c7d26848" sha1="c9581253ac1de95bbb45092bf3aeaa932f4006d7" offset="0" /> |
| 843 | 843 | </dataarea> |
| 844 | </part> | |
| 844 | </part> | |
| 845 | 845 | </software> |
| 846 | 846 | |
| 847 | 847 | <!-- EOS Games --> |
| 848 | ||
| 848 | ||
| 849 | 849 | <software name="2010"> |
| 850 | 850 | <description>2010 - The Text Adventure Game</description> |
| 851 | 851 | <year>1984</year> |
| r242703 | r242704 | |
| 857 | 857 | </dataarea> |
| 858 | 858 | </part> |
| 859 | 859 | </software> |
| 860 | ||
| 860 | ||
| 861 | 861 | <software name="2010a" cloneof="2010"> |
| 862 | 862 | <description>2010 - The Text Adventure Game (Alt)</description> |
| 863 | 863 | <year>1984</year> |
| r242703 | r242704 | |
| 1083 | 1083 | <dataarea name="flop" size="163840"> |
| 1084 | 1084 | <rom name="adventure pack i (1984) (victory software) [a1].dsk" size="163840" crc="1754bbf4" sha1="a38a4ab0689917e66b3b6dda874f5a4f9ab9415a" offset="0" /> |
| 1085 | 1085 | </dataarea> |
| 1086 | </part> | |
| 1086 | </part> | |
| 1087 | 1087 | </software> |
| 1088 | 1088 | |
| 1089 | 1089 | <software name="advpak2v"> |
| r242703 | r242704 | |
| 2409 | 2409 | </part> |
| 2410 | 2410 | </software> |
| 2411 | 2411 | |
| 2412 | <!-- From NIAD's blog: | |
| 2412 | <!-- From NIAD's blog: | |
| 2413 | 2413 | Jeopardy for the ADAM Computer is in fact a finshed product which was copyrighted 1984, but for whatever reason (probably |
| 2414 | completed just prior to Coleco's announcement in Jan. '85 that they were abandoning the ColecoVision and ADAM), Coleco | |
| 2415 | decided not to release it commercially. They instead made it available to ADAM Users Groups circa 1985/1986 to share with | |
| 2416 | the ADAM Community with the requirement that all copyright information would be removed from the program. Because of | |
| 2417 | this requirement by Coleco, you will see multiple versions of Jeopardy available for download that have been hacked to | |
| 2418 | change two title screens. This hacking actually eliminated the first title screen and then replaced the copyright information on | |
| 2414 | completed just prior to Coleco's announcement in Jan. '85 that they were abandoning the ColecoVision and ADAM), Coleco | |
| 2415 | decided not to release it commercially. They instead made it available to ADAM Users Groups circa 1985/1986 to share with | |
| 2416 | the ADAM Community with the requirement that all copyright information would be removed from the program. Because of | |
| 2417 | this requirement by Coleco, you will see multiple versions of Jeopardy available for download that have been hacked to | |
| 2418 | change two title screens. This hacking actually eliminated the first title screen and then replaced the copyright information on | |
| 2419 | 2419 | the second. |
| 2420 | When the original Jeopardy program was copied from data pack (256K max size) to disk (160K max size) a portion of the | |
| 2421 | program that contained game play data/questions was lost to the ages. This disk version which floated around for a while | |
| 2422 | would eventually crash due to the missing data, but this was later patched by Walters Software Co.'s Jim Walters to recycle to | |
| 2420 | When the original Jeopardy program was copied from data pack (256K max size) to disk (160K max size) a portion of the | |
| 2421 | program that contained game play data/questions was lost to the ages. This disk version which floated around for a while | |
| 2422 | would eventually crash due to the missing data, but this was later patched by Walters Software Co.'s Jim Walters to recycle to | |
| 2423 | 2423 | the beginning of the questions. |
| 2424 | 2424 | |
| 2425 | In 1992, a member of NIAD had the tremendous fortune to come in contact with a former Coleco employee who was looking | |
| 2426 | to sell off his entire lot of ADAM gear... a number of never before seen hardware and software protos included. In this lot was | |
| 2427 | [...] a 2-disk version of Jeopardy. I have not tested this 2-disk version thoroughly, but it does seem to work properly and | |
| 2428 | should be the version that you use as more than likely it is the complete version that would have been released for | |
| 2429 | commercial sale. | |
| 2425 | In 1992, a member of NIAD had the tremendous fortune to come in contact with a former Coleco employee who was looking | |
| 2426 | to sell off his entire lot of ADAM gear... a number of never before seen hardware and software protos included. In this lot was | |
| 2427 | [...] a 2-disk version of Jeopardy. I have not tested this 2-disk version thoroughly, but it does seem to work properly and | |
| 2428 | should be the version that you use as more than likely it is the complete version that would have been released for | |
| 2429 | commercial sale. | |
| 2430 | 2430 | --> |
| 2431 | 2431 | |
| 2432 | 2432 | <software name="jeopardy"> |
| r242703 | r242704 | |
| 3195 | 3195 | <dataarea name="flop" size="163840"> |
| 3196 | 3196 | <rom name="robothief (1991) (steve pitman software) [a1].dsk" size="163840" crc="8df50a33" sha1="69fde2a68c6c22ae268a209bc9054f6e7206c541" offset="0" /> |
| 3197 | 3197 | </dataarea> |
| 3198 | </part> | |
| 3198 | </part> | |
| 3199 | 3199 | </software> |
| 3200 | 3200 | |
| 3201 | 3201 | <software name="rubychal"> |
| r242703 | r242704 | |
| 3450 | 3450 | </part> |
| 3451 | 3451 | </software> |
| 3452 | 3452 | |
| 3453 | <!-- From NIAD's blog: | |
| 3454 | The original prototype/demo/unreleased version as was obtained from Epyx was indeed buggy, but this mainly dealt with the | |
| 3455 | inability to get it working on a disk, it was originally supplied on data pack, the save feature was a mess and there were a | |
| 3456 | number of menu (especially at the start of the game) that were messed up. A programmer by the name of Joe Waters spent | |
| 3457 | considerable time fixing these issues or most of them to get it to the state we now know. He actually lived in Albuquerque and | |
| 3458 | released software for the ADAM under the Federation Software label and did the Temple hack and some others under the | |
| 3453 | <!-- From NIAD's blog: | |
| 3454 | The original prototype/demo/unreleased version as was obtained from Epyx was indeed buggy, but this mainly dealt with the | |
| 3455 | inability to get it working on a disk, it was originally supplied on data pack, the save feature was a mess and there were a | |
| 3456 | number of menu (especially at the start of the game) that were messed up. A programmer by the name of Joe Waters spent | |
| 3457 | considerable time fixing these issues or most of them to get it to the state we now know. He actually lived in Albuquerque and | |
| 3458 | released software for the ADAM under the Federation Software label and did the Temple hack and some others under the | |
| 3459 | 3459 | Falcon Federation Hack Group (or something like that) label. |
| 3460 | 3460 | --> |
| 3461 | 3461 | <software name="apshai"> |
| r242703 | r242704 | |
| 4000 | 4000 | </software> |
| 4001 | 4001 | |
| 4002 | 4002 | <!-- EOS Graphics Design --> |
| 4003 | ||
| 4003 | ||
| 4004 | 4004 | <software name="adamgfx"> |
| 4005 | 4005 | <description>ADAM Graphics</description> |
| 4006 | 4006 | <year>199?</year> |
| r242703 | r242704 | |
| 5421 | 5421 | </software> |
| 5422 | 5422 | |
| 5423 | 5423 | <!-- EOS Productivity --> |
| 5424 | ||
| 5424 | ||
| 5425 | 5425 | <software name="atgradeb"> |
| 5426 | 5426 | <description>A-Tech Gradebook</description> |
| 5427 | 5427 | <year>198?</year> |
| r242703 | r242704 | |
| 5433 | 5433 | </dataarea> |
| 5434 | 5434 | </part> |
| 5435 | 5435 | </software> |
| 5436 | ||
| 5436 | ||
| 5437 | 5437 | <software name="atgradeba" cloneof="atgradeb"> |
| 5438 | 5438 | <description>A-Tech Gradebook (Alt)</description> |
| 5439 | 5439 | <year>198?</year> |
| r242703 | r242704 | |
| 5467 | 5467 | <dataarea name="flop" size="163840"> |
| 5468 | 5468 | <rom name="adam agenda - the personal schedule keeper (198x) (jeff harris) [a1].dsk" size="163840" crc="057fd444" sha1="21b76438a43a4e19a1b996789f2073cf25654a19" offset="0" /> |
| 5469 | 5469 | </dataarea> |
| 5470 | </part> | |
| 5470 | </part> | |
| 5471 | 5471 | </software> |
| 5472 | 5472 | |
| 5473 | 5473 | <software name="fbanalyz"> |
| r242703 | r242704 | |
| 7231 | 7231 | |
| 7232 | 7232 | |
| 7233 | 7233 | <!-- EOS Programming --> |
| 7234 | ||
| 7234 | ||
| 7235 | 7235 | <software name="adambas"> |
| 7236 | 7236 | <description>ADAM Basic (v1.6)</description> |
| 7237 | 7237 | <year>198?</year> |
| r242703 | r242704 | |
| 7842 | 7842 | </dataarea> |
| 7843 | 7843 | </part> |
| 7844 | 7844 | </software> |
| 7845 | ||
| 7845 | ||
| 7846 | 7846 | <software name="smartlog"> |
| 7847 | 7847 | <description>SmartLOGO</description> |
| 7848 | 7848 | <year>1984</year> |
| r242703 | r242704 | |
| 7854 | 7854 | </dataarea> |
| 7855 | 7855 | </part> |
| 7856 | 7856 | </software> |
| 7857 | ||
| 7857 | ||
| 7858 | 7858 | <software name="smartloga" cloneof="smartlog"> |
| 7859 | 7859 | <description>SmartLOGO (Alt)</description> |
| 7860 | 7860 | <year>1984</year> |
| r242703 | r242704 | |
| 7866 | 7866 | </dataarea> |
| 7867 | 7867 | </part> |
| 7868 | 7868 | </software> |
| 7869 | ||
| 7869 | ||
| 7870 | 7870 | <software name="smartlogb" cloneof="smartlog"> |
| 7871 | 7871 | <description>SmartLOGO (Alt 2)</description> |
| 7872 | 7872 | <year>1984</year> |
| r242703 | r242704 | |
| 8015 | 8015 | </dataarea> |
| 8016 | 8016 | </part> |
| 8017 | 8017 | </software> |
| 8018 | ||
| 8018 | ||
| 8019 | 8019 | <software name="anetdata"> |
| 8020 | 8020 | <description>A-Net ADAM BBS - Data Files</description> |
| 8021 | 8021 | <year>1990</year> |
| r242703 | r242704 | |
| 9816 | 9816 | <dataarea name="flop" size="163840"> |
| 9817 | 9817 | <rom name="turbodisk v1.0 (1987) (digital express inc.) [a1].dsk" size="163840" crc="bf60a7bb" sha1="ca04851345a882589f1b8d97b11df1643ad4e947" offset="0" /> |
| 9818 | 9818 | </dataarea> |
| 9819 | </part> | |
| 9819 | </part> | |
| 9820 | 9820 | </software> |
| 9821 | 9821 | |
| 9822 | 9822 | <software name="turbload"> |
| r242703 | r242704 | |
| 9936 | 9936 | <dataarea name="flop" size="163840"> |
| 9937 | 9937 | <rom name="xrampak i (1987) (digital express inc.) [a1].dsk" size="163840" crc="dc40400b" sha1="aeebdcf76d6fd369fe1720b0a57a48089ac8e050" offset="0" /> |
| 9938 | 9938 | </dataarea> |
| 9939 | </part> | |
| 9939 | </part> | |
| 9940 | 9940 | </software> |
| 9941 | 9941 | |
| 9942 | 9942 | <!-- EOS Public Domain - ADAMLand --> |
| r242703 | r242704 | |
| 9966 | 9966 | </software> |
| 9967 | 9967 | |
| 9968 | 9968 | <!-- EOS Public Domain - ADAM Users Group --> |
| 9969 | ||
| 9969 | ||
| 9970 | 9970 | <software name="augutils"> |
| 9971 | 9971 | <description>A.U.G. - Utilities</description> |
| 9972 | 9972 | <year>198?</year> |
| r242703 | r242704 | |
| 12328 | 12328 | </software> |
| 12329 | 12329 | |
| 12330 | 12330 | <!-- EOS Public Domain - Nibbles & Bits --> |
| 12331 | ||
| 12331 | ||
| 12332 | 12332 | <software name="nbbas01"> |
| 12333 | 12333 | <description>N&B - Basic Vol. #01</description> |
| 12334 | 12334 | <year>198?</year> |
| r242703 | r242704 | |
| 13582 | 13582 | </software> |
| 13583 | 13583 | |
| 13584 | 13584 | <!-- EOS Public Domain - Puget Sound ADAM Network --> |
| 13585 | ||
| 13585 | ||
| 13586 | 13586 | <software name="psanutil"> |
| 13587 | 13587 | <description>P.S.A.N. - Utilities</description> |
| 13588 | 13588 | <year>198?</year> |
| r242703 | r242704 | |
| 13807 | 13807 | </software> |
| 13808 | 13808 | |
| 13809 | 13809 | <!-- CP/M Drivers --> |
| 13810 | ||
| 13810 | ||
| 13811 | 13811 | <software name="evecpm"> |
| 13812 | 13812 | <description>EVE CP/M Utilities</description> |
| 13813 | 13813 | <year>198?</year> |
| r242703 | r242704 | |
| 13846 | 13846 | |
| 13847 | 13847 | <!-- CP/M Games --> |
| 13848 | 13848 | |
| 13849 | <!-- This is a collection of Scott Adams' adventures --> | |
| 13849 | <!-- This is a collection of Scott Adams' adventures --> | |
| 13850 | 13850 | <software name="adventur"> |
| 13851 | 13851 | <description>Adventure (Scott Adams)</description> |
| 13852 | 13852 | <year>198?</year> |
| r242703 | r242704 | |
| 14269 | 14269 | </software> |
| 14270 | 14270 | |
| 14271 | 14271 | <!-- CP/M Public Domain - Misc --> |
| 14272 | ||
| 14272 | ||
| 14273 | 14273 | <software name="cpmpd01"> |
| 14274 | 14274 | <description>CP-M 2.2 or T-DOS P.D. Vol. #01</description> |
| 14275 | 14275 | <year>198?</year> |
| r242703 | r242704 | |
| 14331 | 14331 | </software> |
| 14332 | 14332 | |
| 14333 | 14333 | <!-- CP/M Public Domain - Northern Illiana ADAM User's Group --> |
| 14334 | ||
| 14334 | ||
| 14335 | 14335 | <software name="cndv01"> |
| 14336 | 14336 | <description>N.I.A.D. - CP/M CNDV #01</description> |
| 14337 | 14337 | <year>198?</year> |
| r242703 | r242704 | |
| 15111 | 15111 | </software> |
| 15112 | 15112 | |
| 15113 | 15113 | <!-- CP/M PrintMaster Artwork --> |
| 15114 | ||
| 15114 | ||
| 15115 | 15115 | <software name="printm01"> |
| 15116 | 15116 | <description>PrintMaster Artwork - ADAMGR01</description> |
| 15117 | 15117 | <year>198?</year> |
| r242703 | r242704 | |
| 15869 | 15869 | </software> |
| 15870 | 15870 | |
| 15871 | 15871 | <!-- CP/M Productivity --> |
| 15872 | ||
| 15872 | ||
| 15873 | 15873 | <software name="abovepls"> |
| 15874 | 15874 | <description>Above Plus</description> |
| 15875 | 15875 | <year>198?</year> |
| r242703 | r242704 | |
| 16046 | 16046 | </software> |
| 16047 | 16047 | |
| 16048 | 16048 | <!-- CP/M Programming --> |
| 16049 | ||
| 16049 | ||
| 16050 | 16050 | <software name="dazzstar"> |
| 16051 | 16051 | <description>DazzleStar Disassembler</description> |
| 16052 | 16052 | <year>1986</year> |
| r242703 | r242704 | |
| 16194 | 16194 | </software> |
| 16195 | 16195 | |
| 16196 | 16196 | <!-- CP/M Utilities --> |
| 16197 | ||
| 16197 | ||
| 16198 | 16198 | <software name="1kutils"> |
| 16199 | 16199 | <description>1K Utilities</description> |
| 16200 | 16200 | <year>198?</year> |
| r242703 | r242704 | |
| 16256 | 16256 | </software> |
| 16257 | 16257 | |
| 16258 | 16258 | <!-- ADAM News Network --> |
| 16259 | ||
| 16259 | ||
| 16260 | 16260 | <software name="ann9103"> |
| 16261 | 16261 | <description>ANN Disk - 1991-03 - E.O.S. Files</description> |
| 16262 | 16262 | <year>1991</year> |
| r242703 | r242704 | |
|---|---|---|
| 3 | 3 | |
| 4 | 4 | <!-- Domain/OS Known Undumped Versions (from http://www.hpmuseum.net/exhibit.php?swc=24) |
| 5 | 5 | |
| 6 | Domain/OS SR10.3 (1990) Product Number 018847 + 018848 | |
| 7 | Domain/OS Quarterly PSK Q3-91 SR10.3 (1991) Product Number 19437 + 19439 | |
| 6 | Domain/OS SR10.3 (1990) Product Number 018847 + 018848 | |
| 7 | Domain/OS Quarterly PSK Q3-91 SR10.3 (1991) Product Number 19437 + 19439 | |
| 8 | 8 | |
| 9 | 9 | --> |
| 10 | 10 |
| r242703 | r242704 | |
|---|---|---|
| 786 | 786 | <dataarea name="flop" size="819200"> |
| 787 | 787 | <rom name="enigma (1993)(archimedes world)[a].adf" size="819200" crc="9277d658" sha1="2bdd2d1f53ee5f359f12adb8b20e915d12978de0" offset="0" /> |
| 788 | 788 | </dataarea> |
| 789 | </part> | |
| 789 | </part> | |
| 790 | 790 | </software> |
| 791 | 791 | |
| 792 | 792 | <software name="enigmab" cloneof="enigma" supported="no"> |
| r242703 | r242704 | |
| 1075 | 1075 | <dataarea name="flop" size="819200"> |
| 1076 | 1076 | <rom name="mad professor mariarti (1990)(krisalis)[a].adf" size="819200" crc="020e0e93" sha1="e64f832705c6923edcec7e85df4cceafe30b817e" offset="0" /> |
| 1077 | 1077 | </dataarea> |
| 1078 | </part> | |
| 1078 | </part> | |
| 1079 | 1079 | </software> |
| 1080 | 1080 | |
| 1081 | 1081 | <software name="mariartib" cloneof="mariarti" supported="no"> |
| r242703 | r242704 | |
| 1504 | 1504 | <dataarea name="flop" size="819200"> |
| 1505 | 1505 | <rom name="super pool (1991)(fourth dimension)[a].adf" size="819200" crc="8fa28978" sha1="10d451076f38ab48e4b9bd754fdcb4c634935c36" offset="0" /> |
| 1506 | 1506 | </dataarea> |
| 1507 | </part> | |
| 1507 | </part> | |
| 1508 | 1508 | </software> |
| 1509 | 1509 | |
| 1510 | 1510 | <software name="suprpoolb" cloneof="suprpool" supported="no"> |
| r242703 | r242704 | |
| 1769 | 1769 | </dataarea> |
| 1770 | 1770 | </part> |
| 1771 | 1771 | </software> |
| 1772 | ||
| 1772 | 1773 | |
| 1773 | ||
| 1774 | 1774 | <!-- Other disks to sort (homebrew?!?) --> |
| 1775 | 1775 | |
| 1776 | 1776 | <software name="3dtanks" supported="no"> |
| r242703 | r242704 | |
| 2001 | 2001 | <dataarea name="flop" size="819200"> |
| 2002 | 2002 | <rom name="hacker, the v3.05 (1993)(doggysoft)[a].adf" size="819200" crc="c6a88514" sha1="b02d6495f6a9a1099cb06cac7d0e0d1756f175a0" offset="0" /> |
| 2003 | 2003 | </dataarea> |
| 2004 | </part> | |
| 2004 | </part> | |
| 2005 | 2005 | </software> |
| 2006 | 2006 | |
| 2007 | 2007 | <software name="hackerb" cloneof="hacker" supported="no"> |
| r242703 | r242704 | |
| 2213 | 2213 | <dataarea name="flop" size="820224"> |
| 2214 | 2214 | <rom name="acorn archimedes risc os application suite v1.00 (19xx)(acorn)(disk 2 of 2)[req risc os].adf" size="820224" crc="d5fdf2ca" sha1="bfc96eff8cab5b61f6db82dd135dd95b32f40d4f" offset="0" /> |
| 2215 | 2215 | </dataarea> |
| 2216 | </part> | |
| 2216 | </part> | |
| 2217 | 2217 | </software> |
| 2218 | 2218 | |
| 2219 | 2219 | <software name="riscappsa" cloneof="riscapps" supported="no"> |
| r242703 | r242704 | |
|---|---|---|
| 1 | 1 | <?xml version="1.0"?> |
| 2 | 2 | <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> |
| 3 | 3 | |
| 4 | <!-- | |
| 4 | <!-- | |
| 5 | 5 | Undumped carts, based on Wikipedia list |
| 6 | 6 | C1010 - Bump N' Run (Unreleased?) |
| 7 | 7 | C1016 - Volcano Panic |
| r242703 | r242704 | |
|---|---|---|
| 26332 | 26332 | </part> |
| 26333 | 26333 | </software> |
| 26334 | 26334 | |
| 26335 | <software name="overstrm"> | |
| 26336 | <description>Overstorm (Euro, Prototype Demo)</description> | |
| 26337 | <year>2003</year> | |
| 26338 | <publisher>Polyzoom</publisher> | |
| 26339 | <part name="cart" interface="gba_cart"> | |
| 26340 | <dataarea name="rom" size="3470916"> | |
| 26341 | <rom name="overstorm_demo.bin" size="3470916" crc="ee764cf6" sha1="88129a07e9dfb556c38a5c61c6e96fbfb4d23fea" offset="000000" /> | |
| 26342 | </dataarea> | |
| 26343 | </part> | |
| 26344 | </software> | |
| 26345 | ||
| 26346 | 26335 | <software name="ozzydrix"> |
| 26347 | 26336 | <description>Ozzy & Drix (USA)</description> |
| 26348 | 26337 | <year>2003</year> |
| r242703 | r242704 | |
| 29126 | 29115 | </part> |
| 29127 | 29116 | </software> |
| 29128 | 29117 | |
| 29129 | <software name="revil2d"> | |
| 29130 | <description>Resident Evil 2 (Euro, Prototype Demo)</description> | |
| 29131 | <year>2000?</year> | |
| 29132 | <publisher>Raylight Studios</publisher> | |
| 29133 | <part name="cart" interface="gba_cart"> | |
| 29134 | <dataarea name="rom" size="2908576"> | |
| 29135 | <rom name="re2_tech.bin" size="2908576" crc="26b5cf8b" sha1="a70cf38071f639e783734bc9875ace0ebd2c5180" offset="000000" /> | |
| 29136 | </dataarea> | |
| 29137 | </part> | |
| 29138 | </software> | |
| 29139 | ||
| 29140 | 29118 | <software name="revshinp" cloneof="revshin"> |
| 29141 | 29119 | <description>The Revenge of Shinobi (Euro, Prototype)</description> |
| 29142 | 29120 | <year>2003</year> |
| r242703 | r242704 | |
|---|---|---|
| 24096 | 24096 | |
| 24097 | 24097 | <!-- Other Asian Pirate dumps to sort --> |
| 24098 | 24098 | |
| 24099 | <software name="digicrs2" cloneof="pokesaph"> | |
| 24100 | <description>Digimon Crystal II (Chi)</description> | |
| 24101 | <year>200?</year> | |
| 24102 | <publisher>Sintax</publisher> | |
| 24103 | <part name="cart" interface="gameboy_cart"> | |
| 24104 | <feature name="slot" value="rom_sintax" /> | |
| 24105 | <!-- cartridge ram --> | |
| 24106 | <dataarea name="rom" size="2097152"> | |
| 24107 | <rom name="digimon crystal ii (unlicensed, english) [raw dump].gbc" size="2097152" crc="685e76df" sha1="4e981044ac3a40d7a9cd63b79d5982b4b4e670a5" offset="0" /> | |
| 24108 | </dataarea> | |
| 24109 | <dataarea name="nvram" size="32768"> | |
| 24110 | </dataarea> | |
| 24111 | </part> | |
| 24112 | </software> | |
| 24113 | ||
| 24114 | <software name="laofuzi"> | |
| 24115 | <description>Lao Fuzi Chuanqi (Chi)</description> | |
| 24116 | <year>200?</year> | |
| 24117 | <publisher>Sintax</publisher> | |
| 24118 | <info name="alt_title" value="老夫子傳奇"/> | |
| 24119 | <part name="cart" interface="gameboy_cart"> | |
| 24120 | <feature name="slot" value="rom_sintax" /> | |
| 24121 | <!-- cartridge ram --> | |
| 24122 | <dataarea name="rom" size="2097152"> | |
| 24123 | <rom name="lao fuzi chuanqi (unlicensed, chinese) [raw dump].gbc" size="2097152" crc="aeca45be" sha1="b7193fcb8b9b8958a2522be0d1a3874cffc1e1db" offset="0" /> | |
| 24124 | </dataarea> | |
| 24125 | <dataarea name="nvram" size="32768"> | |
| 24126 | </dataarea> | |
| 24127 | </part> | |
| 24128 | </software> | |
| 24129 | ||
| 24130 | <software name="yuenanzx"> | |
| 24131 | <description>Yuenan Zhanyi X - Shenru Dihou (Chi)</description> | |
| 24132 | <year>200?</year> | |
| 24133 | <publisher>Sintax</publisher> | |
| 24134 | <info name="alt_title" value="越南戰役X-深入敵後"/> | |
| 24135 | <part name="cart" interface="gameboy_cart"> | |
| 24136 | <feature name="slot" value="rom_sintax" /> | |
| 24137 | <!-- cartridge ram --> | |
| 24138 | <dataarea name="rom" size="2097152"> | |
| 24139 | <rom name="yuenan zhanyi x - shenru dihou (unlicensed, chinese) [raw dump].gbc" size="2097152" crc="602951a6" sha1="6703e9f68b989c976e93bd2eb63f884ceaff63f1" offset="0" /> | |
| 24140 | </dataarea> | |
| 24141 | <dataarea name="nvram" size="32768"> | |
| 24142 | </dataarea> | |
| 24143 | </part> | |
| 24144 | </software> | |
| 24145 | ||
| 24146 | <software name="dballadv"> | |
| 24147 | <description>Qi Long Zhu Z 3 ~ Dragon Ball - Advance Adventure (Chi)</description> | |
| 24148 | <year>200?</year> | |
| 24149 | <publisher>Sintax</publisher> | |
| 24150 | <info name="alt_title" value="七龍珠Z3"/> | |
| 24151 | <part name="cart" interface="gameboy_cart"> | |
| 24152 | <feature name="slot" value="rom_sintax" /> | |
| 24153 | <!-- cartridge ram --> | |
| 24154 | <dataarea name="rom" size="2097152"> | |
| 24155 | <rom name="qi long zhu z 3 (dragon ball - advance adventure) (unlicensed, chinese) [raw dump].gbc" size="2097152" crc="ccfdd63a" sha1="4f3b63cd11522b6fb291661f4d918601d95138e0" offset="0" /> | |
| 24156 | </dataarea> | |
| 24157 | <dataarea name="nvram" size="32768"> | |
| 24158 | </dataarea> | |
| 24159 | </part> | |
| 24160 | </software> | |
| 24161 | ||
| 24162 | 24099 | <!-- World WarCraft? --> |
| 24163 | 24100 | <software name="moshosj"> |
| 24164 | 24101 | <description>Mo Shou Shi Ji - Zhan Shen (Chi)</description> |
| r242703 | r242704 | |
| 24656 | 24593 | </part> |
| 24657 | 24594 | </software> |
| 24658 | 24595 | |
| 24659 | <software name="bwarr5" | |
| 24596 | <software name="bwarr5"> | |
| 24660 | 24597 | <!-- 4MB rom with crc 9d332731 is taizou's cracked version running on base MBC5 --> |
| 24661 | 24598 | <description>Bynasty Warriors Advance 5 (Chi)</description> |
| 24662 | 24599 | <year>200?</year> |
| r242703 | r242704 | |
|---|---|---|
| 2 | 2 | <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> |
| 3 | 3 | <softwarelist name="megacdj" description="Mega CD (Jpn) CD-ROMs"> |
| 4 | 4 | |
| 5 | <!-- | |
| 5 | <!-- | |
| 6 | 6 | |
| 7 | --> | |
| 8 | ||
| 9 | ||
| 10 | <!--- Images below are from the REDUMP set (unless otherwise noted) --> | |
| 7 | 11 | <software name="aburner3"> |
| 8 | <!-- source redump.org | |
| 9 | <rom name="After Burner III (Japan).cue" size="1410" crc="f16b55f2" /> | |
| 10 | <rom name="After Burner III (Japan) (Track 01).bin" size="7890960" crc="069f1cbb" /> | |
| 11 | <rom name="After Burner III (Japan) (Track 02).bin" size="12460896" crc="0dd28f10" /> | |
| 12 | <rom name="After Burner III (Japan) (Track 03).bin" size="12432672" crc="ad711555" /> | |
| 13 | <rom name="After Burner III (Japan) (Track 04).bin" size="5769456" crc="3f5003b1" /> | |
| 14 | <rom name="After Burner III (Japan) (Track 05).bin" size="14558880" crc="ab5794c3" /> | |
| 15 | <rom name="After Burner III (Japan) (Track 06).bin" size="58371936" crc="86a30f77" /> | |
| 16 | <rom name="After Burner III (Japan) (Track 07).bin" size="57972096" crc="cea674df" /> | |
| 17 | <rom name="After Burner III (Japan) (Track 08).bin" size="60902688" crc="88ee1bfb" /> | |
| 18 | <rom name="After Burner III (Japan) (Track 09).bin" size="52277904" crc="37441bd9" /> | |
| 19 | <rom name="After Burner III (Japan) (Track 10).bin" size="54199488" crc="b522e646" /> | |
| 20 | <rom name="After Burner III (Japan) (Track 11).bin" size="56189280" crc="5e9e6657" /> | |
| 21 | <rom name="After Burner III (Japan) (Track 12).bin" size="59724336" crc="a4b53073" /> | |
| 22 | --> | |
| 23 | 12 | <description>After Burner III (Jpn)</description> |
| 24 | 13 | <year>1992</year> |
| 25 | 14 | <publisher>CRI</publisher> |
| 26 | 15 | <info name="serial" value="T-68014"/> |
| 27 | <info name="disk_ring" value="T-68014P-00039-R2M V, T-68014P-00039-R1M V"/> | |
| 28 | 16 | <info name="release" value="19921218"/> |
| 29 | 17 | <info name="alt_title" value="アフターバーナーⅢ"/> |
| 30 | 18 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 35 | 23 | </software> |
| 36 | 24 | |
| 37 | 25 | <software name="ax101"> |
| 38 | <!-- source redump.org | |
| 39 | <rom name="AX-101 (Japan).cue" size="198" crc="6c514d73" /> | |
| 40 | <rom name="AX-101 (Japan) (Track 1).bin" size="615817104" crc="03cbf674" /> | |
| 41 | <rom name="AX-101 (Japan) (Track 2).bin" size="2352000" crc="3fd8d737" /> | |
| 42 | --> | |
| 43 | 26 | <description>AX-101 (Jpn)</description> |
| 44 | 27 | <year>1994</year> |
| 45 | 28 | <publisher>Sega</publisher> |
| 46 | 29 | <info name="serial" value="G-6031"/> |
| 47 | <info name="disk_ring" value="G-6031P-00174 1"/> | |
| 48 | 30 | <info name="release" value="19940325"/> |
| 49 | 31 | <info name="alt_title" value="AX-101"/> |
| 50 | 32 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 55 | 37 | </software> |
| 56 | 38 | |
| 57 | 39 | <software name="bariarm"> |
| 58 | <!-- source redump.org | |
| 59 | <rom name="Bari-Arm (Japan).cue" size="2091" crc="03cc6d8a" /> | |
| 60 | <rom name="Bari-Arm (Japan) (Track 01).bin" size="16849728" crc="af764474" /> | |
| 61 | <rom name="Bari-Arm (Japan) (Track 02).bin" size="22042944" crc="0b7d7a8e" /> | |
| 62 | <rom name="Bari-Arm (Japan) (Track 03).bin" size="21419664" crc="584abbfe" /> | |
| 63 | <rom name="Bari-Arm (Japan) (Track 04).bin" size="8344896" crc="6c5421fc" /> | |
| 64 | <rom name="Bari-Arm (Japan) (Track 05).bin" size="32937408" crc="47acefb4" /> | |
| 65 | <rom name="Bari-Arm (Japan) (Track 06).bin" size="7909776" crc="53bbe4c6" /> | |
| 66 | <rom name="Bari-Arm (Japan) (Track 07).bin" size="32189472" crc="4af2b56c" /> | |
| 67 | <rom name="Bari-Arm (Japan) (Track 08).bin" size="2224992" crc="7ba7a6cc" /> | |
| 68 | <rom name="Bari-Arm (Japan) (Track 09).bin" size="29976240" crc="527b54fe" /> | |
| 69 | <rom name="Bari-Arm (Japan) (Track 10).bin" size="19453392" crc="f7643dec" /> | |
| 70 | <rom name="Bari-Arm (Japan) (Track 11).bin" size="20855184" crc="bc57a263" /> | |
| 71 | <rom name="Bari-Arm (Japan) (Track 12).bin" size="32516400" crc="61693654" /> | |
| 72 | <rom name="Bari-Arm (Japan) (Track 13).bin" size="5214384" crc="4e4bee6c" /> | |
| 73 | <rom name="Bari-Arm (Japan) (Track 14).bin" size="32238864" crc="64d4f9fa" /> | |
| 74 | <rom name="Bari-Arm (Japan) (Track 15).bin" size="21798336" crc="7aad0b67" /> | |
| 75 | <rom name="Bari-Arm (Japan) (Track 16).bin" size="21024528" crc="13b59cf8" /> | |
| 76 | <rom name="Bari-Arm (Japan) (Track 17).bin" size="22285200" crc="67d02acc" /> | |
| 77 | <rom name="Bari-Arm (Japan) (Track 18).bin" size="11802336" crc="46da7909" /> | |
| 78 | <rom name="Bari-Arm (Japan) (Track 19).bin" size="1505280" crc="f68eb74b" /> | |
| 79 | --> | |
| 80 | 40 | <description>Bari-Arm (Jpn)</description> |
| 81 | 41 | <year>1993</year> |
| 82 | 42 | <publisher>Human Entertainment</publisher> |
| 83 | 43 | <info name="serial" value="T-43024"/> |
| 84 | <info name="disk_ring" value="T-43024P-00077-R2M V"/> | |
| 85 | 44 | <info name="release" value="19930730"/> |
| 86 | 45 | <info name="alt_title" value="バリ・アーム"/> |
| 87 | 46 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 92 | 51 | </software> |
| 93 | 52 | |
| 94 | 53 | <software name="burai"> |
| 95 | <!-- source redump.org | |
| 96 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan).cue" size="5862" crc="fe440e0c" /> | |
| 97 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 01).bin" size="72425136" crc="ebe7837f" /> | |
| 98 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 02).bin" size="6428016" crc="04532d6f" /> | |
| 99 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 03).bin" size="1552320" crc="6dc059e1" /> | |
| 100 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 04).bin" size="8436624" crc="cc3cedfa" /> | |
| 101 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 05).bin" size="3269280" crc="a99db4d7" /> | |
| 102 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 06).bin" size="4007808" crc="b7c345e2" /> | |
| 103 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 07).bin" size="4805136" crc="94f047f9" /> | |
| 104 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 08).bin" size="3683232" crc="8938dad0" /> | |
| 105 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 09).bin" size="7813344" crc="1728941a" /> | |
| 106 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 10).bin" size="5360208" crc="959672d2" /> | |
| 107 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 11).bin" size="5301408" crc="90059de8" /> | |
| 108 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 12).bin" size="3259872" crc="79b78394" /> | |
| 109 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 13).bin" size="5292000" crc="99dcd8d5" /> | |
| 110 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 14).bin" size="9396240" crc="9426dd7c" /> | |
| 111 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 15).bin" size="7063056" crc="aa45145b" /> | |
| 112 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 16).bin" size="6771408" crc="d78dff7d" /> | |
| 113 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 17).bin" size="3744384" crc="e0fbf804" /> | |
| 114 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 18).bin" size="5461344" crc="32d7bc4c" /> | |
| 115 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 19).bin" size="1505280" crc="6c902a75" /> | |
| 116 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 20).bin" size="3523296" crc="90adcd22" /> | |
| 117 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 21).bin" size="3426864" crc="eec805e8" /> | |
| 118 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 22).bin" size="1074864" crc="87a72714" /> | |
| 119 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 23).bin" size="7270032" crc="bde2eb70" /> | |
| 120 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 24).bin" size="3368064" crc="758f289b" /> | |
| 121 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 25).bin" size="6190464" crc="61dc9711" /> | |
| 122 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 26).bin" size="1074864" crc="771ee167" /> | |
| 123 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 27).bin" size="6907824" crc="99bfb078" /> | |
| 124 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 28).bin" size="7592256" crc="5f87b79a" /> | |
| 125 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 29).bin" size="1074864" crc="667c6b88" /> | |
| 126 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 30).bin" size="1074864" crc="5d963dff" /> | |
| 127 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 31).bin" size="5835312" crc="95bca9de" /> | |
| 128 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 32).bin" size="6712608" crc="4f577d35" /> | |
| 129 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 33).bin" size="6326880" crc="00e4d19d" /> | |
| 130 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 34).bin" size="4840416" crc="4a2d4262" /> | |
| 131 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 35).bin" size="4715760" crc="18b39122" /> | |
| 132 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 36).bin" size="6616176" crc="5f6f23d2" /> | |
| 133 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 37).bin" size="5630688" crc="a25a727a" /> | |
| 134 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 38).bin" size="6084624" crc="d5fb55b0" /> | |
| 135 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 39).bin" size="3241056" crc="71feb9cb" /> | |
| 136 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 40).bin" size="6230448" crc="8eb12148" /> | |
| 137 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 41).bin" size="13458144" crc="91e5797a" /> | |
| 138 | <rom name="Burai - Hachigyoku no Yuushi Densetsu (Japan) (Track 42).bin" size="12343296" crc="b4d2794c" /> | |
| 139 | --> | |
| 140 | <description>Burai - Yatsudama no Yuushi Densetsu (Jpn)</description> | |
| 54 | <description>Burai - Hachigyoku no Yuushi Densetsu (Jpn)</description> | |
| 141 | 55 | <year>1992</year> |
| 142 | 56 | <publisher>Sega</publisher> |
| 143 | 57 | <info name="serial" value="G-6004"/> |
| 144 | <info name="disk_ring" value="G-6004P-00012-R2M V"/> | |
| 145 | 58 | <info name="release" value="19920911"/> |
| 146 | 59 | <info name="alt_title" value="ブライ 八玉の勇士伝説"/> |
| 147 | 60 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 151 | 64 | </part> |
| 152 | 65 | </software> |
| 153 | 66 | |
| 67 | <software name="quiztono"> | |
| 68 | <description>Capcom no Quiz - Tonosama no Yabou (Jpn)</description> | |
| 69 | <year>1992</year> | |
| 70 | <publisher>SIMS</publisher> | |
| 71 | <info name="serial" value="T-44024"/> | |
| 72 | <info name="release" value="19921225"/> | |
| 73 | <info name="alt_title" value="カプコンのクイズ殿様の野望"/> | |
| 74 | <part name="cdrom" interface="scd_cdrom"> | |
| 75 | <diskarea name="cdrom"> | |
| 76 | <disk name="capcom no quiz - tonosama no yabou (japan)" sha1="9f09efae7369a1439cd85616c89f5d42a2eb741a"/> | |
| 77 | </diskarea> | |
| 78 | </part> | |
| 79 | </software> | |
| 80 | ||
| 154 | 81 | <software name="cfstory"> |
| 155 | <!-- source redump.org | |
| 156 | <rom name="Cosmic Fantasy Stories (Japan).cue" size="7232" crc="0b68973f" /> | |
| 157 | <rom name="Cosmic Fantasy Stories (Japan) (Track 01).bin" size="54244176" crc="eef94b45" /> | |
| 158 | <rom name="Cosmic Fantasy Stories (Japan) (Track 02).bin" size="1100736" crc="dde11567" /> | |
| 159 | <rom name="Cosmic Fantasy Stories (Japan) (Track 03).bin" size="4094832" crc="66052e23" /> | |
| 160 | <rom name="Cosmic Fantasy Stories (Japan) (Track 04).bin" size="1891008" crc="186e6d2e" /> | |
| 161 | <rom name="Cosmic Fantasy Stories (Japan) (Track 05).bin" size="4892160" crc="d17b6a97" /> | |
| 162 | <rom name="Cosmic Fantasy Stories (Japan) (Track 06).bin" size="9741984" crc="97533ea3" /> | |
| 163 | <rom name="Cosmic Fantasy Stories (Japan) (Track 07).bin" size="2681280" crc="d2bbf8e3" /> | |
| 164 | <rom name="Cosmic Fantasy Stories (Japan) (Track 08).bin" size="3859632" crc="261bf7f5" /> | |
| 165 | <rom name="Cosmic Fantasy Stories (Japan) (Track 09).bin" size="6785520" crc="df97144e" /> | |
| 166 | <rom name="Cosmic Fantasy Stories (Japan) (Track 10).bin" size="1498224" crc="a0a4fd04" /> | |
| 167 | <rom name="Cosmic Fantasy Stories (Japan) (Track 11).bin" size="1446480" crc="6eb706d6" /> | |
| 168 | <rom name="Cosmic Fantasy Stories (Japan) (Track 12).bin" size="3245760" crc="7d5a756b" /> | |
| 169 | <rom name="Cosmic Fantasy Stories (Japan) (Track 13).bin" size="6465648" crc="552b9c49" /> | |
| 170 | <rom name="Cosmic Fantasy Stories (Japan) (Track 14).bin" size="1528800" crc="8d79ddc7" /> | |
| 171 | <rom name="Cosmic Fantasy Stories (Japan) (Track 15).bin" size="2114448" crc="0effecc4" /> | |
| 172 | <rom name="Cosmic Fantasy Stories (Japan) (Track 16).bin" size="12105744" crc="b32a7112" /> | |
| 173 | <rom name="Cosmic Fantasy Stories (Japan) (Track 17).bin" size="4704000" crc="57ec5fb3" /> | |
| 174 | <rom name="Cosmic Fantasy Stories (Japan) (Track 18).bin" size="8328432" crc="f6aeef94" /> | |
| 175 | <rom name="Cosmic Fantasy Stories (Japan) (Track 19).bin" size="10736880" crc="e163de8c" /> | |
| 176 | <rom name="Cosmic Fantasy Stories (Japan) (Track 20).bin" size="3092880" crc="fae694bf" /> | |
| 177 | <rom name="Cosmic Fantasy Stories (Japan) (Track 21).bin" size="5440176" crc="86b22746" /> | |
| 178 | <rom name="Cosmic Fantasy Stories (Japan) (Track 22).bin" size="8730624" crc="131239f4" /> | |
| 179 | <rom name="Cosmic Fantasy Stories (Japan) (Track 23).bin" size="11435424" crc="526d30d8" /> | |
| 180 | <rom name="Cosmic Fantasy Stories (Japan) (Track 24).bin" size="14295456" crc="5a4e517c" /> | |
| 181 | <rom name="Cosmic Fantasy Stories (Japan) (Track 25).bin" size="10106544" crc="8e285b41" /> | |
| 182 | <rom name="Cosmic Fantasy Stories (Japan) (Track 26).bin" size="3958416" crc="635a426f" /> | |
| 183 | <rom name="Cosmic Fantasy Stories (Japan) (Track 27).bin" size="2112096" crc="7052ce91" /> | |
| 184 | <rom name="Cosmic Fantasy Stories (Japan) (Track 28).bin" size="5426064" crc="03959bcf" /> | |
| 185 | <rom name="Cosmic Fantasy Stories (Japan) (Track 29).bin" size="10758048" crc="cab90657" /> | |
| 186 | <rom name="Cosmic Fantasy Stories (Japan) (Track 30).bin" size="7215936" crc="c72a4ecc" /> | |
| 187 | <rom name="Cosmic Fantasy Stories (Japan) (Track 31).bin" size="2610720" crc="71bcfc83" /> | |
| 188 | <rom name="Cosmic Fantasy Stories (Japan) (Track 32).bin" size="24733632" crc="3a0511ab" /> | |
| 189 | <rom name="Cosmic Fantasy Stories (Japan) (Track 33).bin" size="1206576" crc="09d6edf1" /> | |
| 190 | <rom name="Cosmic Fantasy Stories (Japan) (Track 34).bin" size="9906624" crc="64bc0ddd" /> | |
| 191 | <rom name="Cosmic Fantasy Stories (Japan) (Track 35).bin" size="3727920" crc="dd9446d2" /> | |
| 192 | <rom name="Cosmic Fantasy Stories (Japan) (Track 36).bin" size="4537008" crc="9204c4f1" /> | |
| 193 | <rom name="Cosmic Fantasy Stories (Japan) (Track 37).bin" size="12818400" crc="e3436cc6" /> | |
| 194 | <rom name="Cosmic Fantasy Stories (Japan) (Track 38).bin" size="12870144" crc="edbdd0af" /> | |
| 195 | <rom name="Cosmic Fantasy Stories (Japan) (Track 39).bin" size="9368016" crc="339adece" /> | |
| 196 | <rom name="Cosmic Fantasy Stories (Japan) (Track 40).bin" size="10685136" crc="14f140ca" /> | |
| 197 | <rom name="Cosmic Fantasy Stories (Japan) (Track 41).bin" size="28026432" crc="84c1a3bf" /> | |
| 198 | <rom name="Cosmic Fantasy Stories (Japan) (Track 42).bin" size="12006960" crc="552dbbb0" /> | |
| 199 | <rom name="Cosmic Fantasy Stories (Japan) (Track 43).bin" size="13547520" crc="2179cd81" /> | |
| 200 | <rom name="Cosmic Fantasy Stories (Japan) (Track 44).bin" size="7020720" crc="d9f2b379" /> | |
| 201 | <rom name="Cosmic Fantasy Stories (Japan) (Track 45).bin" size="3156384" crc="4047dcf2" /> | |
| 202 | <rom name="Cosmic Fantasy Stories (Japan) (Track 46).bin" size="15398544" crc="15077e50" /> | |
| 203 | <rom name="Cosmic Fantasy Stories (Japan) (Track 47).bin" size="3981936" crc="4619e37c" /> | |
| 204 | <rom name="Cosmic Fantasy Stories (Japan) (Track 48).bin" size="10901520" crc="aba714dc" /> | |
| 205 | <rom name="Cosmic Fantasy Stories (Japan) (Track 49).bin" size="8359008" crc="ac0c9e1d" /> | |
| 206 | <rom name="Cosmic Fantasy Stories (Japan) (Track 50).bin" size="12931296" crc="f12fdc3e" /> | |
| 207 | <rom name="Cosmic Fantasy Stories (Japan) (Track 51).bin" size="7742784" crc="9cbbc6e4" /> | |
| 208 | <rom name="Cosmic Fantasy Stories (Japan) (Track 52).bin" size="13399344" crc="962b2e0b" /> | |
| 209 | <rom name="Cosmic Fantasy Stories (Japan) (Track 53).bin" size="17296608" crc="bc221da8" /> | |
| 210 | <rom name="Cosmic Fantasy Stories (Japan) (Track 54).bin" size="6084624" crc="8e167f04" /> | |
| 211 | <rom name="Cosmic Fantasy Stories (Japan) (Track 55).bin" size="48164256" crc="0dc9f0f2" /> | |
| 212 | <rom name="Cosmic Fantasy Stories (Japan) (Track 56).bin" size="10572240" crc="fa2a56d2" /> | |
| 213 | <rom name="Cosmic Fantasy Stories (Japan) (Track 57).bin" size="9224544" crc="7f4ac50c" /> | |
| 214 | <rom name="Cosmic Fantasy Stories (Japan) (Track 58).bin" size="3130512" crc="f36f7b3c" /> | |
| 215 | --> | |
| 216 | 82 | <description>Cosmic Fantasy Stories (Jpn)</description> |
| 217 | 83 | <year>1992</year> |
| 218 | 84 | <publisher>Nihon Telenet</publisher> |
| 219 | 85 | <info name="serial" value="T-49014"/> |
| 220 | <info name="disk_ring" value="T-49014P-00010-R2K V, T-49014P-00010-R1K V"/> | |
| 221 | 86 | <info name="release" value="19920327"/> |
| 222 | 87 | <info name="alt_title" value="コズミックファンタジー Stories"/> |
| 223 | 88 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 228 | 93 | </software> |
| 229 | 94 | |
| 230 | 95 | <software name="cyborg9"> |
| 231 | <!-- source redump.org | |
| 232 | <rom name="Cyborg 009 (Japan).cue" size="3711" crc="35f389fe" /> | |
| 233 | <rom name="Cyborg 009 (Japan) (Track 01).bin" size="15694896" crc="4fc4da73" /> | |
| 234 | <rom name="Cyborg 009 (Japan) (Track 02).bin" size="16085328" crc="f6269638" /> | |
| 235 | <rom name="Cyborg 009 (Japan) (Track 03).bin" size="20603520" crc="b180bb7e" /> | |
| 236 | <rom name="Cyborg 009 (Japan) (Track 04).bin" size="20932800" crc="95abea56" /> | |
| 237 | <rom name="Cyborg 009 (Japan) (Track 05).bin" size="20603520" crc="b850ef27" /> | |
| 238 | <rom name="Cyborg 009 (Japan) (Track 06).bin" size="20965728" crc="76aaecc7" /> | |
| 239 | <rom name="Cyborg 009 (Japan) (Track 07).bin" size="20276592" crc="bc633e19" /> | |
| 240 | <rom name="Cyborg 009 (Japan) (Track 08).bin" size="17752896" crc="614c3275" /> | |
| 241 | <rom name="Cyborg 009 (Japan) (Track 09).bin" size="16706256" crc="2ef89c68" /> | |
| 242 | <rom name="Cyborg 009 (Japan) (Track 10).bin" size="16769760" crc="0d2b8777" /> | |
| 243 | <rom name="Cyborg 009 (Japan) (Track 11).bin" size="16673328" crc="30ac6f1e" /> | |
| 244 | <rom name="Cyborg 009 (Japan) (Track 12).bin" size="6644400" crc="1e3ccd81" /> | |
| 245 | <rom name="Cyborg 009 (Japan) (Track 13).bin" size="8678880" crc="7b3d2672" /> | |
| 246 | <rom name="Cyborg 009 (Japan) (Track 14).bin" size="15786624" crc="5b403551" /> | |
| 247 | <rom name="Cyborg 009 (Japan) (Track 15).bin" size="16802688" crc="e5af999a" /> | |
| 248 | <rom name="Cyborg 009 (Japan) (Track 16).bin" size="10576944" crc="4ef5284b" /> | |
| 249 | <rom name="Cyborg 009 (Japan) (Track 17).bin" size="13427568" crc="70f49d3c" /> | |
| 250 | <rom name="Cyborg 009 (Japan) (Track 18).bin" size="14707056" crc="b4e28153" /> | |
| 251 | <rom name="Cyborg 009 (Japan) (Track 19).bin" size="19850880" crc="e40b727f" /> | |
| 252 | <rom name="Cyborg 009 (Japan) (Track 20).bin" size="5235552" crc="b07a4c02" /> | |
| 253 | <rom name="Cyborg 009 (Japan) (Track 21).bin" size="6973680" crc="b4a80ea9" /> | |
| 254 | <rom name="Cyborg 009 (Japan) (Track 22).bin" size="7956816" crc="f70a0643" /> | |
| 255 | <rom name="Cyborg 009 (Japan) (Track 23).bin" size="15918336" crc="e91e2a4f" /> | |
| 256 | <rom name="Cyborg 009 (Japan) (Track 24).bin" size="19293456" crc="f54c9f66" /> | |
| 257 | <rom name="Cyborg 009 (Japan) (Track 25).bin" size="10511088" crc="9bff939a" /> | |
| 258 | <rom name="Cyborg 009 (Japan) (Track 26).bin" size="13853280" crc="2d737af4" /> | |
| 259 | <rom name="Cyborg 009 (Japan) (Track 27).bin" size="6874896" crc="9f674703" /> | |
| 260 | <rom name="Cyborg 009 (Japan) (Track 28).bin" size="13559280" crc="b7e4395c" /> | |
| 261 | <rom name="Cyborg 009 (Japan) (Track 29).bin" size="21553728" crc="635dc064" /> | |
| 262 | <rom name="Cyborg 009 (Japan) (Track 30).bin" size="27781824" crc="ff346c88" /> | |
| 263 | <rom name="Cyborg 009 (Japan) (Track 31).bin" size="11724720" crc="c95a44a1" /> | |
| 264 | <rom name="Cyborg 009 (Japan) (Track 32).bin" size="44885568" crc="1cca8c90" /> | |
| 265 | <rom name="Cyborg 009 (Japan) (Track 33).bin" size="1952160" crc="cf515c02" /> | |
| 266 | --> | |
| 267 | 96 | <description>Cyborg 009 (Jpn)</description> |
| 268 | 97 | <year>1993</year> |
| 269 | 98 | <publisher>Nihon Telenet</publisher> |
| 270 | 99 | <info name="serial" value="T-49054"/> |
| 271 | <info name="disk_ring" value="T-49054P-00081-R1M V"/> | |
| 272 | 100 | <info name="release" value="19930730"/> |
| 273 | 101 | <info name="alt_title" value="サイボーグ009"/> |
| 274 | 102 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 279 | 107 | </software> |
| 280 | 108 | |
| 281 | 109 | <software name="dennin"> |
| 282 | <!-- source redump.org | |
| 283 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan).cue" size="3657" crc="d1585b2f" /> | |
| 284 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 01).bin" size="15005760" crc="2bba56f5" /> | |
| 285 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 02).bin" size="1110144" crc="8fa35b51" /> | |
| 286 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 03).bin" size="54716928" crc="bcbc7d6c" /> | |
| 287 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 04).bin" size="1933344" crc="d16e4f91" /> | |
| 288 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 05).bin" size="1481760" crc="5521d114" /> | |
| 289 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 06).bin" size="38069472" crc="be4b7bdd" /> | |
| 290 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 07).bin" size="1627584" crc="e19a82ed" /> | |
| 291 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 08).bin" size="1542912" crc="21de70a1" /> | |
| 292 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 09).bin" size="29550528" crc="69e163ae" /> | |
| 293 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 10).bin" size="54978000" crc="473d091b" /> | |
| 294 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 11).bin" size="2222640" crc="1420d49e" /> | |
| 295 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 12).bin" size="1909824" crc="2a51ac8c" /> | |
| 296 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 13).bin" size="2439024" crc="8b5bf582" /> | |
| 297 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 14).bin" size="54159504" crc="197fbb67" /> | |
| 298 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 15).bin" size="1462944" crc="71bf5fa8" /> | |
| 299 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 16).bin" size="59794896" crc="d51df015" /> | |
| 300 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 17).bin" size="1618176" crc="b6623229" /> | |
| 301 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 18).bin" size="34891920" crc="0a10469f" /> | |
| 302 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 19).bin" size="32925648" crc="d94aac05" /> | |
| 303 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 20).bin" size="32471712" crc="41bfce14" /> | |
| 304 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 21).bin" size="45736992" crc="67f1dbdf" /> | |
| 305 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 22).bin" size="17851680" crc="6a6111d0" /> | |
| 306 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 23).bin" size="8382528" crc="ffdfbb3c" /> | |
| 307 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 24).bin" size="9791376" crc="94656f55" /> | |
| 308 | <rom name="Dennin Aleste - Nobunaga and His Ninja Force (Japan) (Track 25).bin" size="68835984" crc="ec551c03" /> | |
| 309 | --> | |
| 310 | 110 | <description>Dennin Aleste - Nobunaga and His Ninja Force (Jpn)</description> |
| 311 | 111 | <year>1992</year> |
| 312 | 112 | <publisher>Compile</publisher> |
| 313 | 113 | <info name="serial" value="T-66014"/> |
| 314 | <info name="disk_ring" value="T-66014P-00035-R2M V"/> | |
| 315 | 114 | <info name="release" value="19921127"/> |
| 316 | 115 | <info name="alt_title" value="電忍アレスタ Nobunaga and his Ninja force"/> |
| 317 | 116 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 322 | 121 | </software> |
| 323 | 122 | |
| 324 | 123 | <software name="detonatr"> |
| 325 | <!-- source redump.org | |
| 326 | <rom name="Detonator Orgun (Japan).cue" size="1280" crc="80377bef" /> | |
| 327 | <rom name="Detonator Orgun (Japan) (Track 01).bin" size="48540576" crc="0856b08f" /> | |
| 328 | <rom name="Detonator Orgun (Japan) (Track 02).bin" size="1178352" crc="781663e0" /> | |
| 329 | <rom name="Detonator Orgun (Japan) (Track 03).bin" size="18978288" crc="7f9cec7e" /> | |
| 330 | <rom name="Detonator Orgun (Japan) (Track 04).bin" size="22765008" crc="860fd7fb" /> | |
| 331 | <rom name="Detonator Orgun (Japan) (Track 05).bin" size="19578048" crc="075da4d2" /> | |
| 332 | <rom name="Detonator Orgun (Japan) (Track 06).bin" size="25700304" crc="b655e442" /> | |
| 333 | <rom name="Detonator Orgun (Japan) (Track 07).bin" size="61636512" crc="796c3d6c" /> | |
| 334 | <rom name="Detonator Orgun (Japan) (Track 08).bin" size="7157136" crc="03fb52e5" /> | |
| 335 | <rom name="Detonator Orgun (Japan) (Track 09).bin" size="6620880" crc="16ee85e4" /> | |
| 336 | <rom name="Detonator Orgun (Japan) (Track 10).bin" size="22092336" crc="121d8502" /> | |
| 337 | <rom name="Detonator Orgun (Japan) (Track 11).bin" size="1477056" crc="8773a91f" /> | |
| 338 | --> | |
| 339 | 124 | <description>Detonator Orgun (Jpn)</description> |
| 340 | 125 | <year>1992</year> |
| 341 | 126 | <publisher>Hot-B</publisher> |
| 342 | 127 | <info name="serial" value="T-28014"/> |
| 343 | <info name="disk_ring" value="T28014P-00019-R1M V"/> | |
| 344 | 128 | <info name="release" value="19920731"/> |
| 345 | 129 | <info name="alt_title" value="デトネイター・オーガン"/> |
| 346 | 130 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 351 | 135 | </software> |
| 352 | 136 | |
| 353 | 137 | <software name="devastat"> |
| 354 | <!-- source redump.org | |
| 355 | <rom name="Devastator (Japan).cue" size="1225" crc="40c82789" /> | |
| 356 | <rom name="Devastator (Japan) (Track 01).bin" size="189074928" crc="55438f4a" /> | |
| 357 | <rom name="Devastator (Japan) (Track 02).bin" size="2272032" crc="1932fbab" /> | |
| 358 | <rom name="Devastator (Japan) (Track 03).bin" size="36618288" crc="89425e59" /> | |
| 359 | <rom name="Devastator (Japan) (Track 04).bin" size="43312080" crc="5f60f459" /> | |
| 360 | <rom name="Devastator (Japan) (Track 05).bin" size="19364016" crc="7498c28c" /> | |
| 361 | <rom name="Devastator (Japan) (Track 06).bin" size="31396848" crc="2706130f" /> | |
| 362 | <rom name="Devastator (Japan) (Track 07).bin" size="33156144" crc="8d4f0038" /> | |
| 363 | <rom name="Devastator (Japan) (Track 08).bin" size="25020576" crc="49e8cd5f" /> | |
| 364 | <rom name="Devastator (Japan) (Track 09).bin" size="34033440" crc="33f406cc" /> | |
| 365 | <rom name="Devastator (Japan) (Track 10).bin" size="42049056" crc="b6a26f5b" /> | |
| 366 | <rom name="Devastator (Japan) (Track 11).bin" size="26928048" crc="c405b742" /> | |
| 367 | --> | |
| 368 | 138 | <description>Devastator (Jpn)</description> |
| 369 | 139 | <year>1993</year> |
| 370 | 140 | <publisher>Wolf Team</publisher> |
| 371 | 141 | <info name="serial" value="T-32074"/> |
| 372 | <info name="disk_ring" value="T-32074P-00063-R1M V"/> | |
| 373 | 142 | <info name="release" value="19930528"/> |
| 374 | 143 | <info name="alt_title" value="デバステイター"/> |
| 375 | 144 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 380 | 149 | </software> |
| 381 | 150 | |
| 382 | 151 | <software name="dlair"> |
| 383 | <!-- source redump.org | |
| 384 | <rom name="Dragon's Lair (Japan) (En,Ja,Fr,De,It).cue" size="246" crc="1191378b" /> | |
| 385 | <rom name="Dragon's Lair (Japan) (En,Ja,Fr,De,It) (Track 1).bin" size="607935552" crc="280750dd" /> | |
| 386 | <rom name="Dragon's Lair (Japan) (En,Ja,Fr,De,It) (Track 2).bin" size="1521744" crc="60eade1a" /> | |
| 387 | --> | |
| 388 | 152 | <description>Dragon's Lair (Jpn)</description> |
| 389 | 153 | <year>1994</year> |
| 390 | 154 | <publisher>Sega</publisher> |
| 391 | 155 | <info name="serial" value="G-6035"/> |
| 392 | <info name="disk_ring" value="G-6035P-00191 4"/> | |
| 393 | 156 | <info name="release" value="19940603"/> |
| 394 | 157 | <info name="alt_title" value="ドラゴンズ・レア"/> |
| 395 | 158 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 400 | 163 | </software> |
| 401 | 164 | |
| 402 | 165 | <software name="dynamicc"> |
| 403 | <!-- source redump.org | |
| 404 | <rom name="Dynamic Country Club (Japan).cue" size="1581" crc="82b9b757" /> | |
| 405 | <rom name="Dynamic Country Club (Japan) (Track 01).bin" size="13556928" crc="aecc9427" /> | |
| 406 | <rom name="Dynamic Country Club (Japan) (Track 02).bin" size="29094240" crc="33ee0730" /> | |
| 407 | <rom name="Dynamic Country Club (Japan) (Track 03).bin" size="27845328" crc="cc8c2438" /> | |
| 408 | <rom name="Dynamic Country Club (Japan) (Track 04).bin" size="30401952" crc="37f8204a" /> | |
| 409 | <rom name="Dynamic Country Club (Japan) (Track 05).bin" size="28699104" crc="5174a4ab" /> | |
| 410 | <rom name="Dynamic Country Club (Japan) (Track 06).bin" size="31291008" crc="a13be94d" /> | |
| 411 | <rom name="Dynamic Country Club (Japan) (Track 07).bin" size="28600320" crc="5de70586" /> | |
| 412 | <rom name="Dynamic Country Club (Japan) (Track 08).bin" size="30206736" crc="1d08e78a" /> | |
| 413 | <rom name="Dynamic Country Club (Japan) (Track 09).bin" size="31352160" crc="92ca0d3c" /> | |
| 414 | <rom name="Dynamic Country Club (Japan) (Track 10).bin" size="76277712" crc="82cc28e6" /> | |
| 415 | <rom name="Dynamic Country Club (Japan) (Track 11).bin" size="7890960" crc="08e07cd7" /> | |
| 416 | <rom name="Dynamic Country Club (Japan) (Track 12).bin" size="10315872" crc="22aacaf7" /> | |
| 417 | <rom name="Dynamic Country Club (Japan) (Track 13).bin" size="13425216" crc="3dc87886" /> | |
| 418 | --> | |
| 419 | 166 | <description>Dynamic Country Club (Jpn)</description> |
| 420 | 167 | <year>1993</year> |
| 421 | 168 | <publisher>Sega</publisher> |
| 422 | 169 | <info name="serial" value="G-6017"/> |
| 423 | <info name="disk_ring" value="G-6017P-00076-R1M V"/> | |
| 424 | 170 | <info name="release" value="19930716"/> |
| 425 | 171 | <info name="alt_title" value="ダイナミックカントリークラブ"/> |
| 426 | 172 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 431 | 177 | </software> |
| 432 | 178 | |
| 433 | 179 | <software name="earnest"> |
| 434 | <!-- source redump.org | |
| 435 | <rom name="Earnest Evans (Japan).cue" size="2882" crc="688b4a76" /> | |
| 436 | <rom name="Earnest Evans (Japan) (Track 01).bin" size="5207328" crc="8438f16a" /> | |
| 437 | <rom name="Earnest Evans (Japan) (Track 02).bin" size="1564080" crc="df681534" /> | |
| 438 | <rom name="Earnest Evans (Japan) (Track 03).bin" size="7437024" crc="c5b6c263" /> | |
| 439 | <rom name="Earnest Evans (Japan) (Track 04).bin" size="3699696" crc="de1f51a4" /> | |
| 440 | <rom name="Earnest Evans (Japan) (Track 05).bin" size="9840768" crc="7be35bc1" /> | |
| 441 | <rom name="Earnest Evans (Japan) (Track 06).bin" size="38088288" crc="5d19e3c6" /> | |
| 442 | <rom name="Earnest Evans (Japan) (Track 07).bin" size="39748800" crc="6df6fe9d" /> | |
| 443 | <rom name="Earnest Evans (Japan) (Track 08).bin" size="9360960" crc="670c3600" /> | |
| 444 | <rom name="Earnest Evans (Japan) (Track 09).bin" size="30949968" crc="6cadf4a9" /> | |
| 445 | <rom name="Earnest Evans (Japan) (Track 10).bin" size="8361360" crc="1e1109c5" /> | |
| 446 | <rom name="Earnest Evans (Japan) (Track 11).bin" size="39984000" crc="2ef9a22a" /> | |
| 447 | <rom name="Earnest Evans (Japan) (Track 12).bin" size="40056912" crc="0e4b9019" /> | |
| 448 | <rom name="Earnest Evans (Japan) (Track 13).bin" size="29614032" crc="53b768ad" /> | |
| 449 | <rom name="Earnest Evans (Japan) (Track 14).bin" size="43876560" crc="a3ed08cc" /> | |
| 450 | <rom name="Earnest Evans (Japan) (Track 15).bin" size="6289248" crc="fde2bc4b" /> | |
| 451 | <rom name="Earnest Evans (Japan) (Track 16).bin" size="16840320" crc="5f96fe02" /> | |
| 452 | <rom name="Earnest Evans (Japan) (Track 17).bin" size="7547568" crc="bf4f1772" /> | |
| 453 | <rom name="Earnest Evans (Japan) (Track 18).bin" size="39664128" crc="ea26c739" /> | |
| 454 | <rom name="Earnest Evans (Japan) (Track 19).bin" size="14707056" crc="2a143709" /> | |
| 455 | <rom name="Earnest Evans (Japan) (Track 20).bin" size="4127760" crc="b3892991" /> | |
| 456 | <rom name="Earnest Evans (Japan) (Track 21).bin" size="43345008" crc="8db32e90" /> | |
| 457 | <rom name="Earnest Evans (Japan) (Track 22).bin" size="20798736" crc="c860f137" /> | |
| 458 | <rom name="Earnest Evans (Japan) (Track 23).bin" size="35209440" crc="5ab179a7" /> | |
| 459 | <rom name="Earnest Evans (Japan) (Track 24).bin" size="49601328" crc="bde9a2a9" /> | |
| 460 | <rom name="Earnest Evans (Japan) (Track 25).bin" size="46830672" crc="f3e9740d" /> | |
| 461 | --> | |
| 462 | 180 | <description>Earnest Evans (Jpn)</description> |
| 463 | 181 | <year>1991</year> |
| 464 | 182 | <publisher>Wolf Team</publisher> |
| 465 | 183 | <info name="serial" value="T-32014"/> |
| 466 | <info name="disk_ring" value="T-32014P-00007-R1K V"/> | |
| 467 | 184 | <info name="release" value="19911220"/> |
| 468 | 185 | <info name="alt_title" value="アーネストエバンス"/> |
| 469 | 186 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 474 | 191 | </software> |
| 475 | 192 | |
| 476 | 193 | <software name="supleag"> |
| 477 | <!-- source redump.org | |
| 478 | <rom name="Egawa Suguru no Super League CD (Japan).cue" size="4672" crc="46a0371c" /> | |
| 479 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 01).bin" size="41446944" crc="ef4adeb8" /> | |
| 480 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 02).bin" size="1397088" crc="b4a16139" /> | |
| 481 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 03).bin" size="2540160" crc="b483f342" /> | |
| 482 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 04).bin" size="1820448" crc="a96d8c52" /> | |
| 483 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 05).bin" size="1505280" crc="12be15e0" /> | |
| 484 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 06).bin" size="1406496" crc="2041fb9d" /> | |
| 485 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 07).bin" size="1493520" crc="26800176" /> | |
| 486 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 08).bin" size="1759296" crc="de86c0d2" /> | |
| 487 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 09).bin" size="4725168" crc="8b20aa25" /> | |
| 488 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 10).bin" size="15342096" crc="53746b8f" /> | |
| 489 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 11).bin" size="2267328" crc="3b80f7ac" /> | |
| 490 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 12).bin" size="2483712" crc="b0041e4b" /> | |
| 491 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 13).bin" size="1975680" crc="e7d4c28b" /> | |
| 492 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 14).bin" size="2460192" crc="66ddb94f" /> | |
| 493 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 15).bin" size="2747136" crc="3dc687fe" /> | |
| 494 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 16).bin" size="2286144" crc="96428c1e" /> | |
| 495 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 17).bin" size="2730672" crc="c1eac89e" /> | |
| 496 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 18).bin" size="2319072" crc="25ef555f" /> | |
| 497 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 19).bin" size="2272032" crc="833ba6d9" /> | |
| 498 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 20).bin" size="2549568" crc="4517bf2e" /> | |
| 499 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 21).bin" size="2549568" crc="efb13585" /> | |
| 500 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 22).bin" size="2335536" crc="60b05d7d" /> | |
| 501 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 23).bin" size="2810640" crc="f5e6f8c4" /> | |
| 502 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 24).bin" size="3081120" crc="c5327ee5" /> | |
| 503 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 25).bin" size="3024672" crc="59329de4" /> | |
| 504 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 26).bin" size="2892960" crc="d1a2e22c" /> | |
| 505 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 27).bin" size="3344544" crc="b7e72774" /> | |
| 506 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 28).bin" size="3041136" crc="20534307" /> | |
| 507 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 29).bin" size="2925888" crc="be112161" /> | |
| 508 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 30).bin" size="3238704" crc="f90a491f" /> | |
| 509 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 31).bin" size="3024672" crc="17ce4d8e" /> | |
| 510 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 32).bin" size="3361008" crc="8d79c9dd" /> | |
| 511 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 33).bin" size="3400992" crc="16cdd168" /> | |
| 512 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 34).bin" size="3064656" crc="ff7429af" /> | |
| 513 | <rom name="Egawa Suguru no Super League CD (Japan) (Track 35).bin" size="1815744" crc="2c146ad4" /> | |
| 514 | --> | |
| 515 | 194 | <description>Egawa Suguru no Super League CD (Jpn)</description> |
| 516 | 195 | <year>1993</year> |
| 517 | 196 | <publisher>Sega</publisher> |
| 518 | 197 | <info name="serial" value="G-6019"/> |
| 519 | <info name="disk_ring" value="G-6019P-00083-R1M V"/> | |
| 520 | 198 | <info name="release" value="19930806"/> |
| 521 | 199 | <info name="alt_title" value="江川卓のスーパーリーグCD"/> |
| 522 | 200 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 527 | 205 | </software> |
| 528 | 206 | |
| 529 | 207 | <software name="f1circus"> |
| 530 | <!-- source redump.org | |
| 531 | <rom name="F1 Circus CD (Japan).cue" size="3317" crc="dc3116ca" /> | |
| 532 | <rom name="F1 Circus CD (Japan) (Track 01).bin" size="16995552" crc="4100652e" /> | |
| 533 | <rom name="F1 Circus CD (Japan) (Track 02).bin" size="8892912" crc="3998b296" /> | |
| 534 | <rom name="F1 Circus CD (Japan) (Track 03).bin" size="4668720" crc="5a652ee0" /> | |
| 535 | <rom name="F1 Circus CD (Japan) (Track 04).bin" size="9332736" crc="6e36fc18" /> | |
| 536 | <rom name="F1 Circus CD (Japan) (Track 05).bin" size="19319328" crc="23c8153a" /> | |
| 537 | <rom name="F1 Circus CD (Japan) (Track 06).bin" size="4983888" crc="d494dffe" /> | |
| 538 | <rom name="F1 Circus CD (Japan) (Track 07).bin" size="3953712" crc="17de7797" /> | |
| 539 | <rom name="F1 Circus CD (Japan) (Track 08).bin" size="12056352" crc="518e935d" /> | |
| 540 | <rom name="F1 Circus CD (Japan) (Track 09).bin" size="21821856" crc="ce39f013" /> | |
| 541 | <rom name="F1 Circus CD (Japan) (Track 10).bin" size="32187120" crc="7eeeb8b7" /> | |
| 542 | <rom name="F1 Circus CD (Japan) (Track 11).bin" size="32803344" crc="3144ca3e" /> | |
| 543 | <rom name="F1 Circus CD (Japan) (Track 12).bin" size="36166704" crc="98f869a7" /> | |
| 544 | <rom name="F1 Circus CD (Japan) (Track 13).bin" size="27577200" crc="7dfd8b00" /> | |
| 545 | <rom name="F1 Circus CD (Japan) (Track 14).bin" size="43728384" crc="90a7d886" /> | |
| 546 | <rom name="F1 Circus CD (Japan) (Track 15).bin" size="18801888" crc="d6b8fc84" /> | |
| 547 | <rom name="F1 Circus CD (Japan) (Track 16).bin" size="3085824" crc="17b74707" /> | |
| 548 | <rom name="F1 Circus CD (Japan) (Track 17).bin" size="16830912" crc="0530e5ff" /> | |
| 549 | <rom name="F1 Circus CD (Japan) (Track 18).bin" size="1387680" crc="6be88609" /> | |
| 550 | <rom name="F1 Circus CD (Japan) (Track 19).bin" size="5950560" crc="c75a3386" /> | |
| 551 | <rom name="F1 Circus CD (Japan) (Track 20).bin" size="16174704" crc="649ef4aa" /> | |
| 552 | <rom name="F1 Circus CD (Japan) (Track 21).bin" size="8815296" crc="fda8aebf" /> | |
| 553 | <rom name="F1 Circus CD (Japan) (Track 22).bin" size="14342496" crc="d1a046ca" /> | |
| 554 | <rom name="F1 Circus CD (Japan) (Track 23).bin" size="2561328" crc="21b32bfd" /> | |
| 555 | <rom name="F1 Circus CD (Japan) (Track 24).bin" size="10873296" crc="0f666453" /> | |
| 556 | <rom name="F1 Circus CD (Japan) (Track 25).bin" size="14843472" crc="459a4d4a" /> | |
| 557 | <rom name="F1 Circus CD (Japan) (Track 26).bin" size="19121760" crc="58595cf3" /> | |
| 558 | <rom name="F1 Circus CD (Japan) (Track 27).bin" size="1752240" crc="2af8def7" /> | |
| 559 | <rom name="F1 Circus CD (Japan) (Track 28).bin" size="11012064" crc="f1e3d543" /> | |
| 560 | <rom name="F1 Circus CD (Japan) (Track 29).bin" size="1387680" crc="6be88609" /> | |
| 561 | --> | |
| 562 | 208 | <description>F1 Circus CD (Jpn)</description> |
| 563 | 209 | <year>1994</year> |
| 564 | 210 | <publisher>Nichibutsu</publisher> |
| 565 | 211 | <info name="serial" value="T-71014"/> |
| 566 | <info name="disk_ring" value="T-71014P-00121 1"/> | |
| 567 | 212 | <info name="release" value="19940318"/> |
| 568 | 213 | <info name="alt_title" value="F1サーカスCD"/> |
| 569 | 214 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 574 | 219 | </software> |
| 575 | 220 | |
| 576 | 221 | <software name="ffightcd"> |
| 577 | <!-- source redump.org | |
| 578 | <rom name="Final Fight CD (Japan).cue" size="3375" crc="68256ab8" /> | |
| 579 | <rom name="Final Fight CD (Japan) (Track 01).bin" size="28209888" crc="0539a47e" /> | |
| 580 | <rom name="Final Fight CD (Japan) (Track 02).bin" size="22936704" crc="0a05e927" /> | |
| 581 | <rom name="Final Fight CD (Japan) (Track 03).bin" size="23799888" crc="d7531f85" /> | |
| 582 | <rom name="Final Fight CD (Japan) (Track 04).bin" size="22790880" crc="a68bc30b" /> | |
| 583 | <rom name="Final Fight CD (Japan) (Track 05).bin" size="22501584" crc="e220f412" /> | |
| 584 | <rom name="Final Fight CD (Japan) (Track 06).bin" size="34280400" crc="cf65493f" /> | |
| 585 | <rom name="Final Fight CD (Japan) (Track 07).bin" size="22181712" crc="051d633a" /> | |
| 586 | <rom name="Final Fight CD (Japan) (Track 08).bin" size="20535312" crc="0118969b" /> | |
| 587 | <rom name="Final Fight CD (Japan) (Track 09).bin" size="23437680" crc="fddb4185" /> | |
| 588 | <rom name="Final Fight CD (Japan) (Track 10).bin" size="22962576" crc="c2fab799" /> | |
| 589 | <rom name="Final Fight CD (Japan) (Track 11).bin" size="22852032" crc="9f720e3f" /> | |
| 590 | <rom name="Final Fight CD (Japan) (Track 12).bin" size="30084432" crc="38da1600" /> | |
| 591 | <rom name="Final Fight CD (Japan) (Track 13).bin" size="1361808" crc="6295a806" /> | |
| 592 | <rom name="Final Fight CD (Japan) (Track 14).bin" size="1766352" crc="f5dc03cd" /> | |
| 593 | <rom name="Final Fight CD (Japan) (Track 15).bin" size="2253216" crc="6cf0af23" /> | |
| 594 | <rom name="Final Fight CD (Japan) (Track 16).bin" size="1481760" crc="0741c9ec" /> | |
| 595 | <rom name="Final Fight CD (Japan) (Track 17).bin" size="21285600" crc="bc95b4cd" /> | |
| 596 | <rom name="Final Fight CD (Japan) (Track 18).bin" size="2474304" crc="34e60016" /> | |
| 597 | <rom name="Final Fight CD (Japan) (Track 19).bin" size="1940400" crc="2b3737b4" /> | |
| 598 | <rom name="Final Fight CD (Japan) (Track 20).bin" size="21621936" crc="63b1a5fd" /> | |
| 599 | <rom name="Final Fight CD (Japan) (Track 21).bin" size="2413152" crc="42dde540" /> | |
| 600 | <rom name="Final Fight CD (Japan) (Track 22).bin" size="34228656" crc="315d88df" /> | |
| 601 | <rom name="Final Fight CD (Japan) (Track 23).bin" size="23129568" crc="d2e3ccd4" /> | |
| 602 | <rom name="Final Fight CD (Japan) (Track 24).bin" size="24794784" crc="34c52149" /> | |
| 603 | <rom name="Final Fight CD (Japan) (Track 25).bin" size="3996048" crc="0a7884e2" /> | |
| 604 | <rom name="Final Fight CD (Japan) (Track 26).bin" size="4214784" crc="0526ca2e" /> | |
| 605 | <rom name="Final Fight CD (Japan) (Track 27).bin" size="4188912" crc="9bab4ce0" /> | |
| 606 | <rom name="Final Fight CD (Japan) (Track 28).bin" size="8897616" crc="385633f7" /> | |
| 607 | <rom name="Final Fight CD (Japan) (Track 29).bin" size="7178304" crc="f8cfa374" /> | |
| 608 | --> | |
| 609 | 222 | <description>Final Fight CD (Jpn)</description> |
| 610 | 223 | <year>1993</year> |
| 611 | 224 | <publisher>Sega</publisher> |
| 612 | 225 | <info name="serial" value="G-6013"/> |
| 613 | <info name="disk_ring" value="G-6013P-00059-R1M V"/> | |
| 614 | 226 | <info name="release" value="19930402"/> |
| 615 | 227 | <info name="alt_title" value="ファイナルファイトCD"/> |
| 616 | 228 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 621 | 233 | </software> |
| 622 | 234 | |
| 623 | 235 | <software name="gambler2"> |
| 624 | <!-- source redump.org | |
| 625 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan).cue" size="8032" crc="4dcef857" /> | |
| 626 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 01).bin" size="33762960" crc="502bf08e" /> | |
| 627 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 02).bin" size="1088976" crc="a9e9f99c" /> | |
| 628 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 03).bin" size="13695696" crc="43418025" /> | |
| 629 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 04).bin" size="8401344" crc="1dc1f069" /> | |
| 630 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 05).bin" size="20420064" crc="ed17a707" /> | |
| 631 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 06).bin" size="6576192" crc="983306ed" /> | |
| 632 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 07).bin" size="6578544" crc="eb865e95" /> | |
| 633 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 08).bin" size="6578544" crc="156440e6" /> | |
| 634 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 09).bin" size="12924240" crc="9864eeb6" /> | |
| 635 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 10).bin" size="53089344" crc="75fa48f9" /> | |
| 636 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 11).bin" size="18068064" crc="d96c999f" /> | |
| 637 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 12).bin" size="6576192" crc="d8f31c88" /> | |
| 638 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 13).bin" size="6578544" crc="9ba70e3e" /> | |
| 639 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 14).bin" size="6576192" crc="523b37b8" /> | |
| 640 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 15).bin" size="12961872" crc="e44032e5" /> | |
| 641 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 16).bin" size="39461856" crc="0d305f7e" /> | |
| 642 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 17).bin" size="2533104" crc="d38cceee" /> | |
| 643 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 18).bin" size="1448832" crc="1a255e22" /> | |
| 644 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 19).bin" size="21005712" crc="9cd1b834" /> | |
| 645 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 20).bin" size="17287200" crc="0cf6af5d" /> | |
| 646 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 21).bin" size="11856432" crc="fcb322d1" /> | |
| 647 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 22).bin" size="1975680" crc="a7b89b43" /> | |
| 648 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 23).bin" size="1905120" crc="6392950d" /> | |
| 649 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 24).bin" size="9772560" crc="6e9d1085" /> | |
| 650 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 25).bin" size="14396592" crc="e259fb2a" /> | |
| 651 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 26).bin" size="7432320" crc="5104e38d" /> | |
| 652 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 27).bin" size="10548720" crc="cc3615af" /> | |
| 653 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 28).bin" size="9346848" crc="1534e794" /> | |
| 654 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 29).bin" size="10045392" crc="a79aac7d" /> | |
| 655 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 30).bin" size="7947408" crc="ef38da5e" /> | |
| 656 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 31).bin" size="9226896" crc="9df553b0" /> | |
| 657 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 32).bin" size="3010560" crc="5783f0c5" /> | |
| 658 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 33).bin" size="8429568" crc="5312176b" /> | |
| 659 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 34).bin" size="11936400" crc="064f6028" /> | |
| 660 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 35).bin" size="10379376" crc="98df8675" /> | |
| 661 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 36).bin" size="6037584" crc="c530d35c" /> | |
| 662 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 37).bin" size="9179856" crc="079ca02b" /> | |
| 663 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 38).bin" size="8730624" crc="94abc24b" /> | |
| 664 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 39).bin" size="11026176" crc="f7ba8d2b" /> | |
| 665 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 40).bin" size="11821152" crc="5cd7e771" /> | |
| 666 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 41).bin" size="16527504" crc="10c9524c" /> | |
| 667 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 42).bin" size="6639696" crc="6a6f20ee" /> | |
| 668 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 43).bin" size="9772560" crc="e42fdd8d" /> | |
| 669 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 44).bin" size="9346848" crc="fdb01fcb" /> | |
| 670 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 45).bin" size="11266080" crc="b9e7d963" /> | |
| 671 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 46).bin" size="10379376" crc="c0b2ad0f" /> | |
| 672 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 47).bin" size="6192816" crc="fdf77b7f" /> | |
| 673 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 48).bin" size="9210432" crc="1166b818" /> | |
| 674 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 49).bin" size="7225344" crc="3ca798cf" /> | |
| 675 | <rom name="Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Japan) (Track 50).bin" size="10548720" crc="09d601aa" /> | |
| 676 | --> | |
| 677 | 236 | <description>Gambler Jikochuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Jpn)</description> |
| 678 | 237 | <year>1992</year> |
| 679 | 238 | <publisher>Game Arts</publisher> |
| 680 | 239 | <info name="serial" value="T-45044"/> |
| 681 | <info name="disk_ring" value="T-45044P-00037-R2M V"/> | |
| 682 | 240 | <info name="release" value="19921225"/> |
| 683 | 241 | <info name="alt_title" value="ぎゅわんぶらあ自己中心派2 激闘! 東京マージャンランド編"/> |
| 684 | 242 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 689 | 247 | </software> |
| 690 | 248 | |
| 691 | 249 | <software name="gamenk1"> |
| 692 | <!-- source redump.org | |
| 693 | <rom name="Game no Kandume Vol.1 (Japan).cue" size="3826" crc="0bc97ffc" /> | |
| 694 | <rom name="Game no Kandume Vol.1 (Japan) (Track 01).bin" size="11416608" crc="1babe750" /> | |
| 695 | <rom name="Game no Kandume Vol.1 (Japan) (Track 02).bin" size="17461248" crc="fd703147" /> | |
| 696 | <rom name="Game no Kandume Vol.1 (Japan) (Track 03).bin" size="5049744" crc="d6ab82f1" /> | |
| 697 | <rom name="Game no Kandume Vol.1 (Japan) (Track 04).bin" size="9737280" crc="53d8695d" /> | |
| 698 | <rom name="Game no Kandume Vol.1 (Japan) (Track 05).bin" size="2646000" crc="3f98622a" /> | |
| 699 | <rom name="Game no Kandume Vol.1 (Japan) (Track 06).bin" size="10748640" crc="ab65519c" /> | |
| 700 | <rom name="Game no Kandume Vol.1 (Japan) (Track 07).bin" size="6011712" crc="54871f4e" /> | |
| 701 | <rom name="Game no Kandume Vol.1 (Japan) (Track 08).bin" size="5414304" crc="24f4072f" /> | |
| 702 | <rom name="Game no Kandume Vol.1 (Japan) (Track 09).bin" size="10372320" crc="e961c7af" /> | |
| 703 | <rom name="Game no Kandume Vol.1 (Japan) (Track 10).bin" size="1719312" crc="54c4cac3" /> | |
| 704 | <rom name="Game no Kandume Vol.1 (Japan) (Track 11).bin" size="14055552" crc="be1afe61" /> | |
| 705 | <rom name="Game no Kandume Vol.1 (Japan) (Track 12).bin" size="14046144" crc="69261cbf" /> | |
| 706 | <rom name="Game no Kandume Vol.1 (Japan) (Track 13).bin" size="9702000" crc="87b2f3a1" /> | |
| 707 | <rom name="Game no Kandume Vol.1 (Japan) (Track 14).bin" size="18771312" crc="34eaa072" /> | |
| 708 | <rom name="Game no Kandume Vol.1 (Japan) (Track 15).bin" size="1199520" crc="08461b8f" /> | |
| 709 | <rom name="Game no Kandume Vol.1 (Japan) (Track 16).bin" size="17070816" crc="20248aad" /> | |
| 710 | <rom name="Game no Kandume Vol.1 (Japan) (Track 17).bin" size="12637296" crc="a69947db" /> | |
| 711 | <rom name="Game no Kandume Vol.1 (Japan) (Track 18).bin" size="20293056" crc="ea4834df" /> | |
| 712 | <rom name="Game no Kandume Vol.1 (Japan) (Track 19).bin" size="15614928" crc="10815e44" /> | |
| 713 | <rom name="Game no Kandume Vol.1 (Japan) (Track 20).bin" size="11538912" crc="0705a2a6" /> | |
| 714 | <rom name="Game no Kandume Vol.1 (Japan) (Track 21).bin" size="11515392" crc="db8f942b" /> | |
| 715 | <rom name="Game no Kandume Vol.1 (Japan) (Track 22).bin" size="15422064" crc="36c13763" /> | |
| 716 | <rom name="Game no Kandume Vol.1 (Japan) (Track 23).bin" size="12305664" crc="ad8202a2" /> | |
| 717 | <rom name="Game no Kandume Vol.1 (Japan) (Track 24).bin" size="23230704" crc="78b082cd" /> | |
| 718 | <rom name="Game no Kandume Vol.1 (Japan) (Track 25).bin" size="22717968" crc="a47f14dc" /> | |
| 719 | <rom name="Game no Kandume Vol.1 (Japan) (Track 26).bin" size="8678880" crc="3ceecc3b" /> | |
| 720 | <rom name="Game no Kandume Vol.1 (Japan) (Track 27).bin" size="19406352" crc="b3a3c5a7" /> | |
| 721 | <rom name="Game no Kandume Vol.1 (Japan) (Track 28).bin" size="14182560" crc="c221826b" /> | |
| 722 | <rom name="Game no Kandume Vol.1 (Japan) (Track 29).bin" size="18529056" crc="3a080106" /> | |
| 723 | <rom name="Game no Kandume Vol.1 (Japan) (Track 30).bin" size="19121760" crc="aa75b323" /> | |
| 724 | <rom name="Game no Kandume Vol.1 (Japan) (Track 31).bin" size="1300656" crc="0db9cca1" /> | |
| 725 | --> | |
| 726 | 250 | <description>Game no Kandume Vol.1 (Jpn)</description> |
| 727 | 251 | <year>1994</year> |
| 728 | 252 | <publisher>Sega</publisher> |
| 729 | 253 | <info name="serial" value="G-6032"/> |
| 730 | <info name="disk_ring" value="G-6032P-00165 1"/> | |
| 731 | 254 | <info name="release" value="19940318"/> |
| 732 | 255 | <info name="alt_title" value="ゲームのかんづめ VOL.1"/> |
| 733 | 256 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 738 | 261 | </software> |
| 739 | 262 | |
| 740 | 263 | <software name="gamenk2"> |
| 741 | <!-- source redump.org | |
| 742 | <rom name="Game no Kandume Vol.2 (Japan).cue" size="2958" crc="1d3c864c" /> | |
| 743 | <rom name="Game no Kandume Vol.2 (Japan) (Track 01).bin" size="9041088" crc="b02c2f00" /> | |
| 744 | <rom name="Game no Kandume Vol.2 (Japan) (Track 02).bin" size="16654512" crc="a7378315" /> | |
| 745 | <rom name="Game no Kandume Vol.2 (Japan) (Track 03).bin" size="18406752" crc="8f0954b1" /> | |
| 746 | <rom name="Game no Kandume Vol.2 (Japan) (Track 04).bin" size="30270240" crc="df2d177a" /> | |
| 747 | <rom name="Game no Kandume Vol.2 (Japan) (Track 05).bin" size="19886160" crc="0aade09e" /> | |
| 748 | <rom name="Game no Kandume Vol.2 (Japan) (Track 06).bin" size="20194272" crc="28463462" /> | |
| 749 | <rom name="Game no Kandume Vol.2 (Japan) (Track 07).bin" size="10125360" crc="d2d1f6f7" /> | |
| 750 | <rom name="Game no Kandume Vol.2 (Japan) (Track 08).bin" size="26173056" crc="d7b80f82" /> | |
| 751 | <rom name="Game no Kandume Vol.2 (Japan) (Track 09).bin" size="13347600" crc="b8244aa7" /> | |
| 752 | <rom name="Game no Kandume Vol.2 (Japan) (Track 10).bin" size="6700848" crc="a795db12" /> | |
| 753 | <rom name="Game no Kandume Vol.2 (Japan) (Track 11).bin" size="18192720" crc="335d1fef" /> | |
| 754 | <rom name="Game no Kandume Vol.2 (Japan) (Track 12).bin" size="14542416" crc="fd02d21f" /> | |
| 755 | <rom name="Game no Kandume Vol.2 (Japan) (Track 13).bin" size="23153088" crc="2cf836aa" /> | |
| 756 | <rom name="Game no Kandume Vol.2 (Japan) (Track 14).bin" size="21812448" crc="4b503da2" /> | |
| 757 | <rom name="Game no Kandume Vol.2 (Japan) (Track 15).bin" size="19462800" crc="2bd29c90" /> | |
| 758 | <rom name="Game no Kandume Vol.2 (Japan) (Track 16).bin" size="17505936" crc="6d71ae65" /> | |
| 759 | <rom name="Game no Kandume Vol.2 (Japan) (Track 17).bin" size="9443280" crc="f525a5b7" /> | |
| 760 | <rom name="Game no Kandume Vol.2 (Japan) (Track 18).bin" size="21443184" crc="4cc40da6" /> | |
| 761 | <rom name="Game no Kandume Vol.2 (Japan) (Track 19).bin" size="15890112" crc="7d7347ca" /> | |
| 762 | <rom name="Game no Kandume Vol.2 (Japan) (Track 20).bin" size="27379632" crc="3807f0d4" /> | |
| 763 | <rom name="Game no Kandume Vol.2 (Japan) (Track 21).bin" size="10602816" crc="e72fdc5c" /> | |
| 764 | <rom name="Game no Kandume Vol.2 (Japan) (Track 22).bin" size="18529056" crc="3a080106" /> | |
| 765 | <rom name="Game no Kandume Vol.2 (Japan) (Track 23).bin" size="19121760" crc="aa75b323" /> | |
| 766 | <rom name="Game no Kandume Vol.2 (Japan) (Track 24).bin" size="1420608" crc="e76b47df" /> | |
| 767 | --> | |
| 768 | 264 | <description>Game no Kandume Vol.2 (Jpn)</description> |
| 769 | 265 | <year>1994</year> |
| 770 | 266 | <publisher>Sega</publisher> |
| 771 | 267 | <info name="serial" value="G-6033"/> |
| 772 | <info name="disk_ring" value="G-6033P-00166 1"/> | |
| 773 | 268 | <info name="release" value="19940318"/> |
| 774 | 269 | <info name="alt_title" value="ゲームのかんづめ VOL.2"/> |
| 775 | 270 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 780 | 275 | </software> |
| 781 | 276 | |
| 782 | 277 | <software name="garousp"> |
| 783 | <!-- source redump.org | |
| 784 | <rom name="Garou Densetsu Special (Japan).cue" size="4732" crc="a1d75963" /> | |
| 785 | <rom name="Garou Densetsu Special (Japan) (Track 01).bin" size="15826608" crc="9cab4019" /> | |
| 786 | <rom name="Garou Densetsu Special (Japan) (Track 02).bin" size="2904720" crc="ba444a89" /> | |
| 787 | <rom name="Garou Densetsu Special (Japan) (Track 03).bin" size="5880000" crc="da231b92" /> | |
| 788 | <rom name="Garou Densetsu Special (Japan) (Track 04).bin" size="6595008" crc="3a5a72e5" /> | |
| 789 | <rom name="Garou Densetsu Special (Japan) (Track 05).bin" size="4214784" crc="343bbd24" /> | |
| 790 | <rom name="Garou Densetsu Special (Japan) (Track 06).bin" size="7674576" crc="6a50eaf5" /> | |
| 791 | <rom name="Garou Densetsu Special (Japan) (Track 07).bin" size="19935552" crc="5650a847" /> | |
| 792 | <rom name="Garou Densetsu Special (Japan) (Track 08).bin" size="21699552" crc="1ed28e91" /> | |
| 793 | <rom name="Garou Densetsu Special (Japan) (Track 09).bin" size="20728176" crc="de9bb9f3" /> | |
| 794 | <rom name="Garou Densetsu Special (Japan) (Track 10).bin" size="25580352" crc="467b5359" /> | |
| 795 | <rom name="Garou Densetsu Special (Japan) (Track 11).bin" size="18877152" crc="31a8cb58" /> | |
| 796 | <rom name="Garou Densetsu Special (Japan) (Track 12).bin" size="26462352" crc="7ffea567" /> | |
| 797 | <rom name="Garou Densetsu Special (Japan) (Track 13).bin" size="26638752" crc="7e051673" /> | |
| 798 | <rom name="Garou Densetsu Special (Japan) (Track 14).bin" size="31048752" crc="52951e33" /> | |
| 799 | <rom name="Garou Densetsu Special (Japan) (Track 15).bin" size="20198976" crc="a7d6ec50" /> | |
| 800 | <rom name="Garou Densetsu Special (Japan) (Track 16).bin" size="47893776" crc="44feee0c" /> | |
| 801 | <rom name="Garou Densetsu Special (Japan) (Track 17).bin" size="27607776" crc="6e5d1f3a" /> | |
| 802 | <rom name="Garou Densetsu Special (Japan) (Track 18).bin" size="17729376" crc="d447388b" /> | |
| 803 | <rom name="Garou Densetsu Special (Japan) (Track 19).bin" size="23992752" crc="3d8692be" /> | |
| 804 | <rom name="Garou Densetsu Special (Japan) (Track 20).bin" size="29018976" crc="59e93eb5" /> | |
| 805 | <rom name="Garou Densetsu Special (Japan) (Track 21).bin" size="21523152" crc="19a6ba07" /> | |
| 806 | <rom name="Garou Densetsu Special (Japan) (Track 22).bin" size="36869952" crc="b9820fe9" /> | |
| 807 | <rom name="Garou Densetsu Special (Japan) (Track 23).bin" size="3720864" crc="b9e0233b" /> | |
| 808 | <rom name="Garou Densetsu Special (Japan) (Track 24).bin" size="3720864" crc="d182e9ca" /> | |
| 809 | <rom name="Garou Densetsu Special (Japan) (Track 25).bin" size="3720864" crc="13999599" /> | |
| 810 | <rom name="Garou Densetsu Special (Japan) (Track 26).bin" size="3720864" crc="e845c787" /> | |
| 811 | <rom name="Garou Densetsu Special (Japan) (Track 27).bin" size="3720864" crc="44961647" /> | |
| 812 | <rom name="Garou Densetsu Special (Japan) (Track 28).bin" size="3720864" crc="ce9711a8" /> | |
| 813 | <rom name="Garou Densetsu Special (Japan) (Track 29).bin" size="3720864" crc="8b1299a4" /> | |
| 814 | <rom name="Garou Densetsu Special (Japan) (Track 30).bin" size="3720864" crc="d6b970c3" /> | |
| 815 | <rom name="Garou Densetsu Special (Japan) (Track 31).bin" size="3720864" crc="f56b4847" /> | |
| 816 | <rom name="Garou Densetsu Special (Japan) (Track 32).bin" size="3720864" crc="3f0a92f7" /> | |
| 817 | <rom name="Garou Densetsu Special (Japan) (Track 33).bin" size="3720864" crc="9caa1fa6" /> | |
| 818 | <rom name="Garou Densetsu Special (Japan) (Track 34).bin" size="3720864" crc="7808bd0a" /> | |
| 819 | <rom name="Garou Densetsu Special (Japan) (Track 35).bin" size="3720864" crc="ecc5296a" /> | |
| 820 | <rom name="Garou Densetsu Special (Japan) (Track 36).bin" size="3720864" crc="0ad8c54d" /> | |
| 821 | <rom name="Garou Densetsu Special (Japan) (Track 37).bin" size="3720864" crc="455176b0" /> | |
| 822 | <rom name="Garou Densetsu Special (Japan) (Track 38).bin" size="2034480" crc="652d1e74" /> | |
| 823 | --> | |
| 824 | 278 | <description>Garou Densetsu Special (Jpn)</description> |
| 825 | 279 | <year>1995</year> |
| 826 | 280 | <publisher>Victor Entertainment</publisher> |
| 827 | 281 | <info name="serial" value="T-60214"/> |
| 828 | <info name="disk_ring" value="T-60214P-R1C V"/> | |
| 829 | 282 | <info name="release" value="19950321"/> |
| 830 | 283 | <info name="alt_title" value="餓狼伝説スペシャル"/> |
| 831 | 284 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 836 | 289 | </software> |
| 837 | 290 | |
| 838 | 291 | <software name="heavenly"> |
| 839 | <!-- source redump.org | |
| 840 | <rom name="Heavenly Symphony (Japan).cue" size="4422" crc="c406b0cd" /> | |
| 841 | <rom name="Heavenly Symphony (Japan) (Track 01).bin" size="202761216" crc="41aafac7" /> | |
| 842 | <rom name="Heavenly Symphony (Japan) (Track 02).bin" size="16014768" crc="129ed3da" /> | |
| 843 | <rom name="Heavenly Symphony (Japan) (Track 03).bin" size="19707408" crc="fc68a898" /> | |
| 844 | <rom name="Heavenly Symphony (Japan) (Track 04).bin" size="16753296" crc="32337abf" /> | |
| 845 | <rom name="Heavenly Symphony (Japan) (Track 05).bin" size="11661216" crc="f1f8527c" /> | |
| 846 | <rom name="Heavenly Symphony (Japan) (Track 06).bin" size="11228448" crc="56096ca3" /> | |
| 847 | <rom name="Heavenly Symphony (Japan) (Track 07).bin" size="17433024" crc="dcfa821f" /> | |
| 848 | <rom name="Heavenly Symphony (Japan) (Track 08).bin" size="12324480" crc="d395cb4d" /> | |
| 849 | <rom name="Heavenly Symphony (Japan) (Track 09).bin" size="15462048" crc="c2eb664c" /> | |
| 850 | <rom name="Heavenly Symphony (Japan) (Track 10).bin" size="26107200" crc="5686998d" /> | |
| 851 | <rom name="Heavenly Symphony (Japan) (Track 11).bin" size="11529504" crc="7c24ea79" /> | |
| 852 | <rom name="Heavenly Symphony (Japan) (Track 12).bin" size="15377376" crc="3aa5bdc5" /> | |
| 853 | <rom name="Heavenly Symphony (Japan) (Track 13).bin" size="21337344" crc="bdbc2d65" /> | |
| 854 | <rom name="Heavenly Symphony (Japan) (Track 14).bin" size="2996448" crc="70b00db4" /> | |
| 855 | <rom name="Heavenly Symphony (Japan) (Track 15).bin" size="2493120" crc="3f35ceb6" /> | |
| 856 | <rom name="Heavenly Symphony (Japan) (Track 16).bin" size="7168896" crc="7707f5e0" /> | |
| 857 | <rom name="Heavenly Symphony (Japan) (Track 17).bin" size="3706752" crc="8b741032" /> | |
| 858 | <rom name="Heavenly Symphony (Japan) (Track 18).bin" size="2911776" crc="0d2c6519" /> | |
| 859 | <rom name="Heavenly Symphony (Japan) (Track 19).bin" size="1117200" crc="421f466c" /> | |
| 860 | <rom name="Heavenly Symphony (Japan) (Track 20).bin" size="13032432" crc="7fc3c5a7" /> | |
| 861 | <rom name="Heavenly Symphony (Japan) (Track 21).bin" size="10499328" crc="4b6cc7ce" /> | |
| 862 | <rom name="Heavenly Symphony (Japan) (Track 22).bin" size="9885456" crc="dad1304f" /> | |
| 863 | <rom name="Heavenly Symphony (Japan) (Track 23).bin" size="11228448" crc="c73e18cb" /> | |
| 864 | <rom name="Heavenly Symphony (Japan) (Track 24).bin" size="10861536" crc="57a73fc5" /> | |
| 865 | <rom name="Heavenly Symphony (Japan) (Track 25).bin" size="13220592" crc="58acd55f" /> | |
| 866 | <rom name="Heavenly Symphony (Japan) (Track 26).bin" size="11663568" crc="bd80964d" /> | |
| 867 | <rom name="Heavenly Symphony (Japan) (Track 27).bin" size="11440128" crc="ac0f53d6" /> | |
| 868 | <rom name="Heavenly Symphony (Japan) (Track 28).bin" size="11531856" crc="82dc6f50" /> | |
| 869 | <rom name="Heavenly Symphony (Japan) (Track 29).bin" size="11195520" crc="4df9fad1" /> | |
| 870 | <rom name="Heavenly Symphony (Japan) (Track 30).bin" size="11717664" crc="0cd8fd9b" /> | |
| 871 | <rom name="Heavenly Symphony (Japan) (Track 31).bin" size="11865840" crc="18b4441d" /> | |
| 872 | <rom name="Heavenly Symphony (Japan) (Track 32).bin" size="11376624" crc="356a93b0" /> | |
| 873 | <rom name="Heavenly Symphony (Japan) (Track 33).bin" size="12517344" crc="1b43de31" /> | |
| 874 | <rom name="Heavenly Symphony (Japan) (Track 34).bin" size="11983440" crc="7bd0c837" /> | |
| 875 | <rom name="Heavenly Symphony (Japan) (Track 35).bin" size="16186464" crc="950b6a34" /> | |
| 876 | <rom name="Heavenly Symphony (Japan) (Track 36).bin" size="14866992" crc="108f5a17" /> | |
| 877 | <rom name="Heavenly Symphony (Japan) (Track 37).bin" size="43267392" crc="e55cb55b" /> | |
| 878 | --> | |
| 879 | 292 | <description>Heavenly Symphony (Jpn)</description> |
| 880 | 293 | <year>1994</year> |
| 881 | 294 | <publisher>Sega</publisher> |
| 882 | 295 | <info name="serial" value="G-6034"/> |
| 883 | <info name="disk_ring" value="G-6034P-00194-R1M V"/> | |
| 884 | 296 | <info name="release" value="19940423"/> |
| 885 | 297 | <info name="alt_title" value="ヘブンリー シンフォニー フォームラワン ワールド チャンピオンシップ 1993"/> |
| 886 | 298 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 891 | 303 | </software> |
| 892 | 304 | |
| 893 | 305 | <software name="heavynov"> |
| 894 | <!-- source redump.org | |
| 895 | <rom name="Heavy Nova (Japan).cue" size="1790" crc="3c2ab392" /> | |
| 896 | <rom name="Heavy Nova (Japan) (Track 01).bin" size="2791824" crc="a282781b" /> | |
| 897 | <rom name="Heavy Nova (Japan) (Track 02).bin" size="28054656" crc="7f76c7b2" /> | |
| 898 | <rom name="Heavy Nova (Japan) (Track 03).bin" size="54808656" crc="90c5bdc2" /> | |
| 899 | <rom name="Heavy Nova (Japan) (Track 04).bin" size="42025536" crc="54c5edf9" /> | |
| 900 | <rom name="Heavy Nova (Japan) (Track 05).bin" size="35134176" crc="a07e4964" /> | |
| 901 | <rom name="Heavy Nova (Japan) (Track 06).bin" size="21922992" crc="a2bc70d2" /> | |
| 902 | <rom name="Heavy Nova (Japan) (Track 07).bin" size="30768864" crc="8fb9fc65" /> | |
| 903 | <rom name="Heavy Nova (Japan) (Track 08).bin" size="32257680" crc="d324dd2a" /> | |
| 904 | <rom name="Heavy Nova (Japan) (Track 09).bin" size="32678688" crc="ccb8c145" /> | |
| 905 | <rom name="Heavy Nova (Japan) (Track 10).bin" size="32718672" crc="3406056c" /> | |
| 906 | <rom name="Heavy Nova (Japan) (Track 11).bin" size="33040896" crc="5dc9f9af" /> | |
| 907 | <rom name="Heavy Nova (Japan) (Track 12).bin" size="31966032" crc="909a1857" /> | |
| 908 | <rom name="Heavy Nova (Japan) (Track 13).bin" size="32836272" crc="a605fc3f" /> | |
| 909 | <rom name="Heavy Nova (Japan) (Track 14).bin" size="31937808" crc="02b03b88" /> | |
| 910 | <rom name="Heavy Nova (Japan) (Track 15).bin" size="27330240" crc="a1b0d2a5" /> | |
| 911 | <rom name="Heavy Nova (Japan) (Track 16).bin" size="13378176" crc="4b4f84d0" /> | |
| 912 | --> | |
| 913 | 306 | <description>Heavy Nova (Jpn)</description> |
| 914 | 307 | <year>1991</year> |
| 915 | 308 | <publisher>Micronet</publisher> |
| 916 | 309 | <info name="serial" value="T-22014"/> |
| 917 | <info name="disk_ring" value="T-22014P-00004-R1K V"/> | |
| 918 | 310 | <info name="release" value="19911212"/> |
| 919 | 311 | <info name="alt_title" value="ヘビーノバ"/> |
| 920 | 312 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 925 | 317 | </software> |
| 926 | 318 | |
| 927 | 319 | <software name="heimdall"> |
| 928 | <!-- source redump.org | |
| 929 | <rom name="Heimdall (Japan).cue" size="2646" crc="d5465570" /> | |
| 930 | <rom name="Heimdall (Japan) (Track 01).bin" size="25881408" crc="b07c3ddd" /> | |
| 931 | <rom name="Heimdall (Japan) (Track 02).bin" size="15523200" crc="9eef3fc6" /> | |
| 932 | <rom name="Heimdall (Japan) (Track 03).bin" size="31159296" crc="31bbdaf2" /> | |
| 933 | <rom name="Heimdall (Japan) (Track 04).bin" size="43356768" crc="f7117edd" /> | |
| 934 | <rom name="Heimdall (Japan) (Track 05).bin" size="19371072" crc="39069d04" /> | |
| 935 | <rom name="Heimdall (Japan) (Track 06).bin" size="38902080" crc="93263477" /> | |
| 936 | <rom name="Heimdall (Japan) (Track 07).bin" size="21584304" crc="d65b22ae" /> | |
| 937 | <rom name="Heimdall (Japan) (Track 08).bin" size="3368064" crc="4c733968" /> | |
| 938 | <rom name="Heimdall (Japan) (Track 09).bin" size="4111296" crc="d358fa19" /> | |
| 939 | <rom name="Heimdall (Japan) (Track 10).bin" size="3266928" crc="bcc96ffb" /> | |
| 940 | <rom name="Heimdall (Japan) (Track 11).bin" size="4955664" crc="72df33cd" /> | |
| 941 | <rom name="Heimdall (Japan) (Track 12).bin" size="4722816" crc="b8c42479" /> | |
| 942 | <rom name="Heimdall (Japan) (Track 13).bin" size="3996048" crc="6c5efce3" /> | |
| 943 | <rom name="Heimdall (Japan) (Track 14).bin" size="3135216" crc="edbda656" /> | |
| 944 | <rom name="Heimdall (Japan) (Track 15).bin" size="3179904" crc="d70d7f89" /> | |
| 945 | <rom name="Heimdall (Japan) (Track 16).bin" size="3673824" crc="d826ee5a" /> | |
| 946 | <rom name="Heimdall (Japan) (Track 17).bin" size="3558576" crc="cd9517f4" /> | |
| 947 | <rom name="Heimdall (Japan) (Track 18).bin" size="3673824" crc="9c155405" /> | |
| 948 | <rom name="Heimdall (Japan) (Track 19).bin" size="3760848" crc="7d47e79f" /> | |
| 949 | <rom name="Heimdall (Japan) (Track 20).bin" size="3179904" crc="1bde23d9" /> | |
| 950 | <rom name="Heimdall (Japan) (Track 21).bin" size="2481360" crc="1cf1a55b" /> | |
| 951 | <rom name="Heimdall (Japan) (Track 22).bin" size="2189712" crc="f0e19043" /> | |
| 952 | <rom name="Heimdall (Japan) (Track 23).bin" size="2683632" crc="a6a2845f" /> | |
| 953 | <rom name="Heimdall (Japan) (Track 24).bin" size="2681280" crc="8e15cd69" /> | |
| 954 | --> | |
| 955 | 320 | <description>Heimdall (Jpn)</description> |
| 956 | 321 | <year>1994</year> |
| 957 | 322 | <publisher>Victor Entertainment</publisher> |
| 958 | 323 | <info name="serial" value="T-60154"/> |
| 959 | <info name="disk_ring" value="T-60054P-00178-R1M V"/> | |
| 960 | 324 | <info name="release" value="19940318"/> |
| 961 | 325 | <info name="alt_title" value="ハイムドール"/> |
| 962 | 326 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 967 | 331 | </software> |
| 968 | 332 | |
| 969 | 333 | <software name="jagxj220"> |
| 970 | <!-- source redump.org | |
| 971 | <rom name="Jaguar XJ220 (Japan) (En,Ja).cue" size="1581" crc="b84b6a6a" /> | |
| 972 | <rom name="Jaguar XJ220 (Japan) (En,Ja) (Track 01).bin" size="12042240" crc="3ebc3c2e" /> | |
| 973 | <rom name="Jaguar XJ220 (Japan) (En,Ja) (Track 02).bin" size="63976752" crc="facc3c84" /> | |
| 974 | <rom name="Jaguar XJ220 (Japan) (En,Ja) (Track 03).bin" size="27821808" crc="4a4281d8" /> | |
| 975 | <rom name="Jaguar XJ220 (Japan) (En,Ja) (Track 04).bin" size="32267088" crc="9d5d4679" /> | |
| 976 | <rom name="Jaguar XJ220 (Japan) (En,Ja) (Track 05).bin" size="21518448" crc="2db6a7a0" /> | |
| 977 | <rom name="Jaguar XJ220 (Japan) (En,Ja) (Track 06).bin" size="18844224" crc="013c1590" /> | |
| 978 | <rom name="Jaguar XJ220 (Japan) (En,Ja) (Track 07).bin" size="22993152" crc="fe40dd5c" /> | |
| 979 | <rom name="Jaguar XJ220 (Japan) (En,Ja) (Track 08).bin" size="27760656" crc="9ff69020" /> | |
| 980 | <rom name="Jaguar XJ220 (Japan) (En,Ja) (Track 09).bin" size="46642512" crc="8bf11829" /> | |
| 981 | <rom name="Jaguar XJ220 (Japan) (En,Ja) (Track 10).bin" size="56596176" crc="6f018050" /> | |
| 982 | <rom name="Jaguar XJ220 (Japan) (En,Ja) (Track 11).bin" size="49751856" crc="fa705a13" /> | |
| 983 | <rom name="Jaguar XJ220 (Japan) (En,Ja) (Track 12).bin" size="39231360" crc="945df445" /> | |
| 984 | <rom name="Jaguar XJ220 (Japan) (En,Ja) (Track 13).bin" size="61763520" crc="c9bc9069" /> | |
| 985 | --> | |
| 986 | 334 | <description>Jaguar XJ220 (Jpn)</description> |
| 987 | 335 | <year>1993</year> |
| 988 | 336 | <publisher>Victor Entertainment</publisher> |
| 989 | 337 | <info name="serial" value="T-60094"/> |
| 990 | <info name="disk_ring" value="T-60094P-00056-R1M V"/> | |
| 991 | 338 | <info name="release" value="19930326"/> |
| 992 | 339 | <info name="alt_title" value="ジャガーXJ220"/> |
| 993 | 340 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 998 | 345 | </software> |
| 999 | 346 | |
| 1000 | 347 | <software name="jangouwc"> |
| 1001 | <!-- source redump.org | |
| 1002 | <rom name="Jangou World Cup (Japan).cue" size="2005" crc="b53cdd58" /> | |
| 1003 | <rom name="Jangou World Cup (Japan) (Track 01).bin" size="33146736" crc="ee6b68a0" /> | |
| 1004 | <rom name="Jangou World Cup (Japan) (Track 02).bin" size="17364816" crc="74c7ade0" /> | |
| 1005 | <rom name="Jangou World Cup (Japan) (Track 03).bin" size="38589264" crc="f356aee6" /> | |
| 1006 | <rom name="Jangou World Cup (Japan) (Track 04).bin" size="38593968" crc="39ad3f59" /> | |
| 1007 | <rom name="Jangou World Cup (Japan) (Track 05).bin" size="38332896" crc="aa68b1e4" /> | |
| 1008 | <rom name="Jangou World Cup (Japan) (Track 06).bin" size="37808400" crc="c8db163d" /> | |
| 1009 | <rom name="Jangou World Cup (Japan) (Track 07).bin" size="38857392" crc="ce3f3b91" /> | |
| 1010 | <rom name="Jangou World Cup (Japan) (Track 08).bin" size="37512048" crc="b14aa173" /> | |
| 1011 | <rom name="Jangou World Cup (Japan) (Track 09).bin" size="38561040" crc="4e6fab78" /> | |
| 1012 | <rom name="Jangou World Cup (Japan) (Track 10).bin" size="38135328" crc="986bf810" /> | |
| 1013 | <rom name="Jangou World Cup (Japan) (Track 11).bin" size="37610832" crc="18188fcd" /> | |
| 1014 | <rom name="Jangou World Cup (Japan) (Track 12).bin" size="16736832" crc="65a3bd54" /> | |
| 1015 | <rom name="Jangou World Cup (Japan) (Track 13).bin" size="1470000" crc="547a2719" /> | |
| 1016 | <rom name="Jangou World Cup (Japan) (Track 14).bin" size="1237152" crc="5748800e" /> | |
| 1017 | <rom name="Jangou World Cup (Japan) (Track 15).bin" size="14083776" crc="39837e4e" /> | |
| 1018 | <rom name="Jangou World Cup (Japan) (Track 16).bin" size="33810000" crc="8342332e" /> | |
| 1019 | <rom name="Jangou World Cup (Japan) (Track 17).bin" size="26601120" crc="86bbc07d" /> | |
| 1020 | --> | |
| 1021 | 348 | <description>Jangou World Cup (Jpn)</description> |
| 1022 | 349 | <year>1993</year> |
| 1023 | 350 | <publisher>Victor Entertainment</publisher> |
| 1024 | 351 | <info name="serial" value="T-60124"/> |
| 1025 | <info name="disk_ring" value="T-60124P-00119 1"/> | |
| 1026 | 352 | <info name="release" value="19930827"/> |
| 1027 | 353 | <info name="alt_title" value="雀豪ワールドカップ"/> |
| 1028 | 354 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1033 | 359 | </software> |
| 1034 | 360 | |
| 1035 | 361 | <software name="kamenrzo"> |
| 1036 | <!-- source redump.org | |
| 1037 | <rom name="Kamen Rider ZO (Japan).cue" size="562" crc="664ab999" /> | |
| 1038 | <rom name="Kamen Rider ZO (Japan) (Track 1).bin" size="449996400" crc="a21571de" /> | |
| 1039 | <rom name="Kamen Rider ZO (Japan) (Track 2).bin" size="2907072" crc="a1d33bde" /> | |
| 1040 | <rom name="Kamen Rider ZO (Japan) (Track 3).bin" size="2709504" crc="2ee49aa2" /> | |
| 1041 | <rom name="Kamen Rider ZO (Japan) (Track 4).bin" size="11449536" crc="42c25462" /> | |
| 1042 | <rom name="Kamen Rider ZO (Japan) (Track 5).bin" size="2631888" crc="f11cc7d0" /> | |
| 1043 | --> | |
| 1044 | 362 | <description>Kamen Rider ZO (Jpn)</description> |
| 1045 | 363 | <year>1994</year> |
| 1046 | 364 | <publisher>Toei Animation</publisher> |
| 1047 | 365 | <info name="serial" value="T-141013"/> |
| 1048 | <info name="disk_ring" value="T-141014P-00192-R1M V"/> | |
| 1049 | 366 | <info name="release" value="19940513"/> |
| 1050 | 367 | <info name="alt_title" value="仮面ライダーZO"/> |
| 1051 | 368 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1056 | 373 | </software> |
| 1057 | 374 | |
| 1058 | 375 | <software name="keio"> |
| 1059 | <!-- source redump.org | |
| 1060 | <rom name="Keiou Yuugekitai (Japan).cue" size="2957" crc="e1a6760b" /> | |
| 1061 | <rom name="Keiou Yuugekitai (Japan) (Track 01).bin" size="77853552" crc="8586c1e7" /> | |
| 1062 | <rom name="Keiou Yuugekitai (Japan) (Track 02).bin" size="1117200" crc="6cdfd209" /> | |
| 1063 | <rom name="Keiou Yuugekitai (Japan) (Track 03).bin" size="40720176" crc="1bcab310" /> | |
| 1064 | <rom name="Keiou Yuugekitai (Japan) (Track 04).bin" size="45922800" crc="ad73e1e6" /> | |
| 1065 | <rom name="Keiou Yuugekitai (Japan) (Track 05).bin" size="49062720" crc="ddb213e4" /> | |
| 1066 | <rom name="Keiou Yuugekitai (Japan) (Track 06).bin" size="41087088" crc="b69a3b55" /> | |
| 1067 | <rom name="Keiou Yuugekitai (Japan) (Track 07).bin" size="44499840" crc="22f09035" /> | |
| 1068 | <rom name="Keiou Yuugekitai (Japan) (Track 08).bin" size="38690400" crc="227cd2c6" /> | |
| 1069 | <rom name="Keiou Yuugekitai (Japan) (Track 09).bin" size="37201584" crc="edd11321" /> | |
| 1070 | <rom name="Keiou Yuugekitai (Japan) (Track 10).bin" size="25944912" crc="da153759" /> | |
| 1071 | <rom name="Keiou Yuugekitai (Japan) (Track 11).bin" size="19977888" crc="e1c594c9" /> | |
| 1072 | <rom name="Keiou Yuugekitai (Japan) (Track 12).bin" size="1756944" crc="0d1c28ad" /> | |
| 1073 | <rom name="Keiou Yuugekitai (Japan) (Track 13).bin" size="6851376" crc="9dbc18b5" /> | |
| 1074 | <rom name="Keiou Yuugekitai (Japan) (Track 14).bin" size="19714464" crc="cc90cc4f" /> | |
| 1075 | <rom name="Keiou Yuugekitai (Japan) (Track 15).bin" size="26808096" crc="0387f9a3" /> | |
| 1076 | <rom name="Keiou Yuugekitai (Japan) (Track 16).bin" size="25305168" crc="6adfebc1" /> | |
| 1077 | <rom name="Keiou Yuugekitai (Japan) (Track 17).bin" size="6794928" crc="3cc05521" /> | |
| 1078 | <rom name="Keiou Yuugekitai (Japan) (Track 18).bin" size="7484064" crc="f755eab1" /> | |
| 1079 | <rom name="Keiou Yuugekitai (Japan) (Track 19).bin" size="7437024" crc="78aed185" /> | |
| 1080 | <rom name="Keiou Yuugekitai (Japan) (Track 20).bin" size="7368816" crc="20cbadfd" /> | |
| 1081 | <rom name="Keiou Yuugekitai (Japan) (Track 21).bin" size="7265328" crc="f7178b92" /> | |
| 1082 | <rom name="Keiou Yuugekitai (Japan) (Track 22).bin" size="7270032" crc="1047ba39" /> | |
| 1083 | <rom name="Keiou Yuugekitai (Japan) (Track 23).bin" size="11924640" crc="83b489ef" /> | |
| 1084 | <rom name="Keiou Yuugekitai (Japan) (Track 24).bin" size="26556432" crc="5f24b29f" /> | |
| 1085 | <rom name="Keiou Yuugekitai (Japan) (Track 25).bin" size="9972480" crc="b8ee9bfd" /> | |
| 1086 | --> | |
| 1087 | 376 | <description>Keiou Yuugekitai (Jpn)</description> |
| 1088 | 377 | <year>1993</year> |
| 1089 | 378 | <publisher>Victor Entertainment</publisher> |
| 1090 | 379 | <info name="serial" value="T-60114"/> |
| 1091 | <info name="disk_ring" value="T-60114-00082-R1M V"/> | |
| 1092 | 380 | <info name="release" value="19930806"/> |
| 1093 | 381 | <info name="alt_title" value="慶応遊撃隊"/> |
| 1094 | 382 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1099 | 387 | </software> |
| 1100 | 388 | |
| 1101 | 389 | <software name="lodoss"> |
| 1102 | <!-- source redump.org | |
| 1103 | <rom name="Lodoss Tou Senki - Eiyuu Sensou (Japan).cue" size="1858" crc="98bfd15e" /> | |
| 1104 | <rom name="Lodoss Tou Senki - Eiyuu Sensou (Japan) (Track 01).bin" size="190392048" crc="1112c998" /> | |
| 1105 | <rom name="Lodoss Tou Senki - Eiyuu Sensou (Japan) (Track 02).bin" size="26215392" crc="f630543f" /> | |
| 1106 | <rom name="Lodoss Tou Senki - Eiyuu Sensou (Japan) (Track 03).bin" size="25709712" crc="13a48faf" /> | |
| 1107 | <rom name="Lodoss Tou Senki - Eiyuu Sensou (Japan) (Track 04).bin" size="17026128" crc="8e01a7be" /> | |
| 1108 | <rom name="Lodoss Tou Senki - Eiyuu Sensou (Japan) (Track 05).bin" size="15443232" crc="fb62b25e" /> | |
| 1109 | <rom name="Lodoss Tou Senki - Eiyuu Sensou (Japan) (Track 06).bin" size="23160144" crc="f862bf6f" /> | |
| 1110 | <rom name="Lodoss Tou Senki - Eiyuu Sensou (Japan) (Track 07).bin" size="29322384" crc="275f0340" /> | |
| 1111 | <rom name="Lodoss Tou Senki - Eiyuu Sensou (Japan) (Track 08).bin" size="14547120" crc="03049eaa" /> | |
| 1112 | <rom name="Lodoss Tou Senki - Eiyuu Sensou (Japan) (Track 09).bin" size="15556128" crc="3b20586c" /> | |
| 1113 | <rom name="Lodoss Tou Senki - Eiyuu Sensou (Japan) (Track 10).bin" size="15770160" crc="66973d5f" /> | |
| 1114 | <rom name="Lodoss Tou Senki - Eiyuu Sensou (Japan) (Track 11).bin" size="26460000" crc="4fc4500d" /> | |
| 1115 | <rom name="Lodoss Tou Senki - Eiyuu Sensou (Japan) (Track 12).bin" size="20304816" crc="533d34b0" /> | |
| 1116 | <rom name="Lodoss Tou Senki - Eiyuu Sensou (Japan) (Track 13).bin" size="20638800" crc="5e49867e" /> | |
| 1117 | <rom name="Lodoss Tou Senki - Eiyuu Sensou (Japan) (Track 14).bin" size="15553776" crc="edbdbe07" /> | |
| 1118 | --> | |
| 1119 | 390 | <description>Lodoss Tou Senki - Eiyuu Sensou (Jpn)</description> |
| 1120 | 391 | <year>1994</year> |
| 1121 | 392 | <publisher>Sega</publisher> |
| 1122 | 393 | <info name="serial" value="G-6024"/> |
| 1123 | <info name="disk_ring" value="G-6024P-00198-R2M V"/> | |
| 1124 | 394 | <info name="release" value="19940520"/> |
| 1125 | 395 | <info name="alt_title" value="ロードス島戦記 英雄戦争"/> |
| 1126 | 396 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1131 | 401 | </software> |
| 1132 | 402 | |
| 1133 | 403 | <software name="lunar2"> |
| 1134 | <!-- source redump.org | |
| 1135 | <rom name="Lunar - Eternal Blue (Japan).cue" size="470" crc="cf310d01" /> | |
| 1136 | <rom name="Lunar - Eternal Blue (Japan) (Track 1).bin" size="458849328" crc="c445ce6d" /> | |
| 1137 | <rom name="Lunar - Eternal Blue (Japan) (Track 2).bin" size="50930208" crc="c7e46925" /> | |
| 1138 | <rom name="Lunar - Eternal Blue (Japan) (Track 3).bin" size="11769408" crc="ad7b04a0" /> | |
| 1139 | <rom name="Lunar - Eternal Blue (Japan) (Track 4).bin" size="1608768" crc="cb94bee5" /> | |
| 1140 | --> | |
| 1141 | 404 | <description>Lunar - Eternal Blue (Jpn, Set 1)</description> |
| 1142 | 405 | <year>1994</year> |
| 1143 | 406 | <publisher>Game Arts</publisher> |
| 1144 | 407 | <info name="serial" value="T-45074"/> |
| 1145 | <info name="disk_ring" value="T-45074P-00271-R1M V"/> | |
| 1146 | 408 | <info name="release" value="19941222"/> |
| 1147 | 409 | <info name="alt_title" value="ルナ-エターナルブルー"/> |
| 1148 | 410 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1153 | 415 | </software> |
| 1154 | 416 | |
| 1155 | 417 | <software name="lunar"> |
| 1156 | <!-- source redump.org | |
| 1157 | <rom name="Lunar - The Silver Star (Japan).cue" size="6534" crc="36b473ba" /> | |
| 1158 | <rom name="Lunar - The Silver Star (Japan) (Track 01).bin" size="32989152" crc="90aa9eef" /> | |
| 1159 | <rom name="Lunar - The Silver Star (Japan) (Track 02).bin" size="2401392" crc="d150053b" /> | |
| 1160 | <rom name="Lunar - The Silver Star (Japan) (Track 03).bin" size="18830112" crc="0fffc0f2" /> | |
| 1161 | <rom name="Lunar - The Silver Star (Japan) (Track 04).bin" size="12698448" crc="a66df0b3" /> | |
| 1162 | <rom name="Lunar - The Silver Star (Japan) (Track 05).bin" size="15005760" crc="0331692d" /> | |
| 1163 | <rom name="Lunar - The Silver Star (Japan) (Track 06).bin" size="15504384" crc="86714260" /> | |
| 1164 | <rom name="Lunar - The Silver Star (Japan) (Track 07).bin" size="13787424" crc="ea67a6ab" /> | |
| 1165 | <rom name="Lunar - The Silver Star (Japan) (Track 08).bin" size="13968528" crc="23289817" /> | |
| 1166 | <rom name="Lunar - The Silver Star (Japan) (Track 09).bin" size="12879552" crc="b86b132e" /> | |
| 1167 | <rom name="Lunar - The Silver Star (Japan) (Track 10).bin" size="13806240" crc="a9a95368" /> | |
| 1168 | <rom name="Lunar - The Silver Star (Japan) (Track 11).bin" size="15694896" crc="15aef7d1" /> | |
| 1169 | <rom name="Lunar - The Silver Star (Japan) (Track 12).bin" size="15553776" crc="2b156026" /> | |
| 1170 | <rom name="Lunar - The Silver Star (Japan) (Track 13).bin" size="15125712" crc="a6381e6f" /> | |
| 1171 | <rom name="Lunar - The Silver Star (Japan) (Track 14).bin" size="11745888" crc="5816aba1" /> | |
| 1172 | <rom name="Lunar - The Silver Star (Japan) (Track 15).bin" size="11705904" crc="b827b19b" /> | |
| 1173 | <rom name="Lunar - The Silver Star (Japan) (Track 16).bin" size="13309968" crc="0aa6895d" /> | |
| 1174 | <rom name="Lunar - The Silver Star (Japan) (Track 17).bin" size="8744736" crc="3c61dedc" /> | |
| 1175 | <rom name="Lunar - The Silver Star (Japan) (Track 18).bin" size="13862688" crc="b424a49c" /> | |
| 1176 | <rom name="Lunar - The Silver Star (Japan) (Track 19).bin" size="7385280" crc="01fb9d92" /> | |
| 1177 | <rom name="Lunar - The Silver Star (Japan) (Track 20).bin" size="7669872" crc="d77ea6ec" /> | |
| 1178 | <rom name="Lunar - The Silver Star (Japan) (Track 21).bin" size="14937552" crc="2d720225" /> | |
| 1179 | <rom name="Lunar - The Silver Star (Japan) (Track 22).bin" size="12199824" crc="5e2d7179" /> | |
| 1180 | <rom name="Lunar - The Silver Star (Japan) (Track 23).bin" size="7646352" crc="04423700" /> | |
| 1181 | <rom name="Lunar - The Silver Star (Japan) (Track 24).bin" size="3438624" crc="70a8150e" /> | |
| 1182 | <rom name="Lunar - The Silver Star (Japan) (Track 25).bin" size="3758496" crc="b16f5fe3" /> | |
| 1183 | <rom name="Lunar - The Silver Star (Japan) (Track 26).bin" size="4116000" crc="df24dca9" /> | |
| 1184 | <rom name="Lunar - The Silver Star (Japan) (Track 27).bin" size="4113648" crc="c1975282" /> | |
| 1185 | <rom name="Lunar - The Silver Star (Japan) (Track 28).bin" size="14989296" crc="65e0f04c" /> | |
| 1186 | <rom name="Lunar - The Silver Star (Japan) (Track 29).bin" size="10181808" crc="5b5d8f5b" /> | |
| 1187 | <rom name="Lunar - The Silver Star (Japan) (Track 30).bin" size="12246864" crc="3c5e0e25" /> | |
| 1188 | <rom name="Lunar - The Silver Star (Japan) (Track 31).bin" size="3640896" crc="45b2bc7c" /> | |
| 1189 | <rom name="Lunar - The Silver Star (Japan) (Track 32).bin" size="4301808" crc="27a21a1e" /> | |
| 1190 | <rom name="Lunar - The Silver Star (Japan) (Track 33).bin" size="4607568" crc="b489fb5c" /> | |
| 1191 | <rom name="Lunar - The Silver Star (Japan) (Track 34).bin" size="3165792" crc="8957de10" /> | |
| 1192 | <rom name="Lunar - The Silver Star (Japan) (Track 35).bin" size="3690288" crc="ad8631e3" /> | |
| 1193 | <rom name="Lunar - The Silver Star (Japan) (Track 36).bin" size="2638944" crc="74536514" /> | |
| 1194 | <rom name="Lunar - The Silver Star (Japan) (Track 37).bin" size="14436576" crc="15380ab6" /> | |
| 1195 | <rom name="Lunar - The Silver Star (Japan) (Track 38).bin" size="11585952" crc="25380270" /> | |
| 1196 | <rom name="Lunar - The Silver Star (Japan) (Track 39).bin" size="3894912" crc="723684b3" /> | |
| 1197 | <rom name="Lunar - The Silver Star (Japan) (Track 40).bin" size="5477808" crc="b0a0acde" /> | |
| 1198 | <rom name="Lunar - The Silver Star (Japan) (Track 41).bin" size="4405296" crc="469bd826" /> | |
| 1199 | <rom name="Lunar - The Silver Star (Japan) (Track 42).bin" size="8551872" crc="88c83dd3" /> | |
| 1200 | <rom name="Lunar - The Silver Star (Japan) (Track 43).bin" size="4351200" crc="c8a07913" /> | |
| 1201 | <rom name="Lunar - The Silver Star (Japan) (Track 44).bin" size="4965072" crc="8fe73000" /> | |
| 1202 | <rom name="Lunar - The Silver Star (Japan) (Track 45).bin" size="4400592" crc="daf1f216" /> | |
| 1203 | <rom name="Lunar - The Silver Star (Japan) (Track 46).bin" size="3250464" crc="2b865cca" /> | |
| 1204 | <rom name="Lunar - The Silver Star (Japan) (Track 47).bin" size="11092032" crc="ed2716b5" /> | |
| 1205 | <rom name="Lunar - The Silver Star (Japan) (Track 48).bin" size="33480720" crc="0fe019bb" /> | |
| 1206 | <rom name="Lunar - The Silver Star (Japan) (Track 49).bin" size="3137568" crc="7dd84be1" /> | |
| 1207 | <rom name="Lunar - The Silver Star (Japan) (Track 50).bin" size="5014464" crc="362b407d" /> | |
| 1208 | <rom name="Lunar - The Silver Star (Japan) (Track 51).bin" size="1611120" crc="5fce5cf1" /> | |
| 1209 | <rom name="Lunar - The Silver Star (Japan) (Track 52).bin" size="15299760" crc="d22641d1" /> | |
| 1210 | --> | |
| 1211 | 418 | <description>Lunar - The Silver Star (Jpn)</description> |
| 1212 | 419 | <year>1992</year> |
| 1213 | 420 | <publisher>Game Arts</publisher> |
| 1214 | 421 | <info name="serial" value="T-45014"/> |
| 1215 | <info name="disk_ring" value="T-45014P-00017-R1M V"/> | |
| 1216 | 422 | <info name="release" value="19920626"/> |
| 1217 | 423 | <info name="alt_title" value="ルナ ザ・シルバースター"/> |
| 1218 | 424 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1223 | 429 | </software> |
| 1224 | 430 | |
| 1225 | 431 | <software name="microcos"> |
| 1226 | <!-- source redump.org | |
| 1227 | <rom name="Microcosm (Japan).cue" size="981" crc="9d8c52cf" /> | |
| 1228 | <rom name="Microcosm (Japan) (Track 1).bin" size="274203216" crc="440ce76f" /> | |
| 1229 | <rom name="Microcosm (Japan) (Track 2).bin" size="20993952" crc="5a892270" /> | |
| 1230 | <rom name="Microcosm (Japan) (Track 3).bin" size="22755600" crc="d4110a7d" /> | |
| 1231 | <rom name="Microcosm (Japan) (Track 4).bin" size="21873600" crc="2beb48b8" /> | |
| 1232 | <rom name="Microcosm (Japan) (Track 5).bin" size="35985600" crc="708877db" /> | |
| 1233 | <rom name="Microcosm (Japan) (Track 6).bin" size="24519600" crc="aa292aba" /> | |
| 1234 | <rom name="Microcosm (Japan) (Track 7).bin" size="22755600" crc="03a29b6f" /> | |
| 1235 | <rom name="Microcosm (Japan) (Track 8).bin" size="21873600" crc="bba6b7c9" /> | |
| 1236 | <rom name="Microcosm (Japan) (Track 9).bin" size="23988048" crc="9956dc95" /> | |
| 1237 | --> | |
| 1238 | 432 | <description>Microcosm (Jpn)</description> |
| 1239 | 433 | <year>1994</year> |
| 1240 | 434 | <publisher>Victor Entertainment</publisher> |
| 1241 | 435 | <info name="serial" value="T-60164"/> |
| 1242 | <info name="disk_ring" value="T-60164P-00171-R1M V"/> | |
| 1243 | 436 | <info name="release" value="19940225"/> |
| 1244 | 437 | <info name="alt_title" value="マイクロコズム"/> |
| 1245 | 438 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1250 | 443 | </software> |
| 1251 | 444 | |
| 1252 | 445 | <software name="nstriker"> |
| 1253 | <!-- source redump.org | |
| 1254 | <rom name="Night Striker (Japan, Korea).cue" size="4779" crc="9fef22f7" /> | |
| 1255 | <rom name="Night Striker (Japan, Korea) (Track 01).bin" size="15605520" crc="184fb14e" /> | |
| 1256 | <rom name="Night Striker (Japan, Korea) (Track 02).bin" size="6383328" crc="7d83c902" /> | |
| 1257 | <rom name="Night Striker (Japan, Korea) (Track 03).bin" size="7587552" crc="51d41c2b" /> | |
| 1258 | <rom name="Night Striker (Japan, Korea) (Track 04).bin" size="1987440" crc="00dd3edb" /> | |
| 1259 | <rom name="Night Striker (Japan, Korea) (Track 05).bin" size="3292800" crc="f7b76fee" /> | |
| 1260 | <rom name="Night Striker (Japan, Korea) (Track 06).bin" size="15240960" crc="b301e3ff" /> | |
| 1261 | <rom name="Night Striker (Japan, Korea) (Track 07).bin" size="16174704" crc="b7f631e3" /> | |
| 1262 | <rom name="Night Striker (Japan, Korea) (Track 08).bin" size="19004160" crc="8b972a8f" /> | |
| 1263 | <rom name="Night Striker (Japan, Korea) (Track 09).bin" size="19168800" crc="2d63f9b4" /> | |
| 1264 | <rom name="Night Striker (Japan, Korea) (Track 10).bin" size="12973632" crc="17ce9bf0" /> | |
| 1265 | <rom name="Night Striker (Japan, Korea) (Track 11).bin" size="13157088" crc="1302e856" /> | |
| 1266 | <rom name="Night Striker (Japan, Korea) (Track 12).bin" size="15015168" crc="f855716c" /> | |
| 1267 | <rom name="Night Striker (Japan, Korea) (Track 13).bin" size="15269184" crc="a2d13ff9" /> | |
| 1268 | <rom name="Night Striker (Japan, Korea) (Track 14).bin" size="14857584" crc="e7e72f89" /> | |
| 1269 | <rom name="Night Striker (Japan, Korea) (Track 15).bin" size="14796432" crc="2c4c8ba5" /> | |
| 1270 | <rom name="Night Striker (Japan, Korea) (Track 16).bin" size="19620384" crc="ca0d45f3" /> | |
| 1271 | <rom name="Night Striker (Japan, Korea) (Track 17).bin" size="19547472" crc="2dac4121" /> | |
| 1272 | <rom name="Night Striker (Japan, Korea) (Track 18).bin" size="15793680" crc="00f6da22" /> | |
| 1273 | <rom name="Night Striker (Japan, Korea) (Track 19).bin" size="16355808" crc="6d8c921e" /> | |
| 1274 | <rom name="Night Striker (Japan, Korea) (Track 20).bin" size="15059856" crc="90c30eb0" /> | |
| 1275 | <rom name="Night Striker (Japan, Korea) (Track 21).bin" size="14878752" crc="24bd5409" /> | |
| 1276 | <rom name="Night Striker (Japan, Korea) (Track 22).bin" size="1667568" crc="38f5d20e" /> | |
| 1277 | <rom name="Night Striker (Japan, Korea) (Track 23).bin" size="13340544" crc="1dadb77e" /> | |
| 1278 | <rom name="Night Striker (Japan, Korea) (Track 24).bin" size="16452240" crc="820c93bc" /> | |
| 1279 | <rom name="Night Striker (Japan, Korea) (Track 25).bin" size="10506384" crc="ac5fa021" /> | |
| 1280 | <rom name="Night Striker (Japan, Korea) (Track 26).bin" size="12983040" crc="6451e672" /> | |
| 1281 | <rom name="Night Striker (Japan, Korea) (Track 27).bin" size="12797232" crc="489e6bae" /> | |
| 1282 | <rom name="Night Striker (Japan, Korea) (Track 28).bin" size="15939504" crc="04f5311f" /> | |
| 1283 | <rom name="Night Striker (Japan, Korea) (Track 29).bin" size="12536160" crc="991fd3e4" /> | |
| 1284 | <rom name="Night Striker (Japan, Korea) (Track 30).bin" size="17195472" crc="b3d7a253" /> | |
| 1285 | <rom name="Night Striker (Japan, Korea) (Track 31).bin" size="12503232" crc="ed9148b9" /> | |
| 1286 | <rom name="Night Striker (Japan, Korea) (Track 32).bin" size="15930096" crc="e5bceec5" /> | |
| 1287 | <rom name="Night Striker (Japan, Korea) (Track 33).bin" size="16574544" crc="48593b08" /> | |
| 1288 | <rom name="Night Striker (Japan, Korea) (Track 34).bin" size="18347952" crc="2cc3912d" /> | |
| 1289 | <rom name="Night Striker (Japan, Korea) (Track 35).bin" size="11527152" crc="95f71fe7" /> | |
| 1290 | <rom name="Night Striker (Japan, Korea) (Track 36).bin" size="5461344" crc="6f4c78a4" /> | |
| 1291 | <rom name="Night Striker (Japan, Korea) (Track 37).bin" size="15313872" crc="7f954de6" /> | |
| 1292 | <rom name="Night Striker (Japan, Korea) (Track 38).bin" size="18599616" crc="27ed2641" /> | |
| 1293 | <rom name="Night Striker (Japan, Korea) (Track 39).bin" size="19331088" crc="05bf45d3" /> | |
| 1294 | --> | |
| 1295 | 446 | <description>Night Striker (Jpn, Kor)</description> |
| 1296 | 447 | <year>1993</year> |
| 1297 | 448 | <publisher>Taito</publisher> |
| 1298 | 449 | <info name="serial" value="T-11014"/> |
| 1299 | <info name="disk_ring" value="T-11014P-00062-R1M V"/> | |
| 1300 | 450 | <info name="release" value="19930528"/> |
| 1301 | 451 | <info name="alt_title" value="ナイトストライカー"/> |
| 1302 | 452 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1307 | 457 | </software> |
| 1308 | 458 | |
| 1309 | 459 | <software name="ntrap"> |
| 1310 | <!-- source redump.org | |
| 1311 | <rom name="Night Trap (Japan) (Disc 1).cue" size="224" crc="f3527896" /> | |
| 1312 | <rom name="Night Trap (Japan) (Disc 1) (Track 1).bin" size="615875904" crc="17744c64" /> | |
| 1313 | <rom name="Night Trap (Japan) (Disc 1) (Track 2).bin" size="2587200" crc="ff1b77f6" /> | |
| 1314 | ||
| 1315 | <rom name="Night Trap (Japan) (Disc 2).cue" size="224" crc="7970405a" /> | |
| 1316 | <rom name="Night Trap (Japan) (Disc 2) (Track 1).bin" size="514587024" crc="36d7aa8c" /> | |
| 1317 | <rom name="Night Trap (Japan) (Disc 2) (Track 2).bin" size="2587200" crc="e575194e" /> | |
| 1318 | --> | |
| 1319 | 460 | <description>Night Trap (Jpn)</description> |
| 1320 | 461 | <year>1993</year> |
| 1321 | 462 | <publisher>Sega</publisher> |
| 1322 | 463 | <info name="serial" value="G-6025"/> |
| 1323 | <info name="disk_ring" value="G-6025P-00148 1 (Disc 1), G-6025P-00149 1 (Disc 2)"/> | |
| 1324 | 464 | <info name="release" value="19931119"/> |
| 1325 | 465 | <info name="alt_title" value="ナイトトラップ"/> |
| 1326 | 466 | <part name="cdrom1" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1338 | 478 | </software> |
| 1339 | 479 | |
| 1340 | 480 | <software name="nost1907"> |
| 1341 | <!-- source redump.org | |
| 1342 | <rom name="Nostalgia 1907 (Japan).cue" size="214" crc="fae49f9e" /> | |
| 1343 | <rom name="Nostalgia 1907 (Japan) (Track 1).bin" size="192649968" crc="b1478a7e" /> | |
| 1344 | <rom name="Nostalgia 1907 (Japan) (Track 2).bin" size="24710112" crc="747ca04b" /> | |
| 1345 | --> | |
| 1346 | 481 | <description>Nostalgia 1907 (Jpn)</description> |
| 1347 | 482 | <year>1991</year> |
| 1348 | 483 | <publisher>Takeru</publisher> |
| 1349 | 484 | <info name="serial" value="T-77014"/> |
| 1350 | <info name="disk_ring" value="T-77014P-00006-R1K V"/> | |
| 1351 | 485 | <info name="release" value="19911214"/> |
| 1352 | 486 | <info name="alt_title" value="ノスタルジア1907"/> |
| 1353 | 487 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1358 | 492 | </software> |
| 1359 | 493 | |
| 1360 | 494 | <software name="popmail"> |
| 1361 | <!-- source redump.org | |
| 1362 | <rom name="Popful Mail (Japan).cue" size="321" crc="76e15750" /> | |
| 1363 | <rom name="Popful Mail (Japan) (Track 1).bin" size="349281408" crc="da0db5b4" /> | |
| 1364 | <rom name="Popful Mail (Japan) (Track 2).bin" size="25133472" crc="d044aac3" /> | |
| 1365 | <rom name="Popful Mail (Japan) (Track 3).bin" size="42778176" crc="f64659a4" /> | |
| 1366 | --> | |
| 1367 | 495 | <description>Popful Mail (Jpn)</description> |
| 1368 | 496 | <year>1994</year> |
| 1369 | 497 | <publisher>Sega</publisher> |
| 1370 | 498 | <info name="serial" value="G-6029"/> |
| 1371 | <info name="disk_ring" value="G-6029P-00190-R1M V"/> | |
| 1372 | 499 | <info name="release" value="19940401"/> |
| 1373 | 500 | <info name="alt_title" value="ぽっぷるメイル"/> |
| 1374 | 501 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1379 | 506 | </software> |
| 1380 | 507 | |
| 1381 | 508 | <software name="ppersia"> |
| 1382 | <!-- source redump.org | |
| 1383 | <rom name="Prince of Persia (Japan).cue" size="2957" crc="742ea509" /> | |
| 1384 | <rom name="Prince of Persia (Japan) (Track 01).bin" size="7933296" crc="a7ef5614" /> | |
| 1385 | <rom name="Prince of Persia (Japan) (Track 02).bin" size="33708864" crc="49811689" /> | |
| 1386 | <rom name="Prince of Persia (Japan) (Track 03).bin" size="33765312" crc="4b5b8516" /> | |
| 1387 | <rom name="Prince of Persia (Japan) (Track 04).bin" size="19359312" crc="98ddfbb6" /> | |
| 1388 | <rom name="Prince of Persia (Japan) (Track 05).bin" size="12609072" crc="9be52ed5" /> | |
| 1389 | <rom name="Prince of Persia (Japan) (Track 06).bin" size="1622880" crc="a2030259" /> | |
| 1390 | <rom name="Prince of Persia (Japan) (Track 07).bin" size="1891008" crc="3379ec4c" /> | |
| 1391 | <rom name="Prince of Persia (Japan) (Track 08).bin" size="1505280" crc="fe313f82" /> | |
| 1392 | <rom name="Prince of Persia (Japan) (Track 09).bin" size="2041536" crc="89a40265" /> | |
| 1393 | <rom name="Prince of Persia (Japan) (Track 10).bin" size="1818096" crc="7cb12741" /> | |
| 1394 | <rom name="Prince of Persia (Japan) (Track 11).bin" size="1916880" crc="32038cb2" /> | |
| 1395 | <rom name="Prince of Persia (Japan) (Track 12).bin" size="27095040" crc="9cbe7f41" /> | |
| 1396 | <rom name="Prince of Persia (Japan) (Track 13).bin" size="13267632" crc="f60baa25" /> | |
| 1397 | <rom name="Prince of Persia (Japan) (Track 14).bin" size="24519600" crc="e39236c3" /> | |
| 1398 | <rom name="Prince of Persia (Japan) (Track 15).bin" size="9464448" crc="44d1b48c" /> | |
| 1399 | <rom name="Prince of Persia (Japan) (Track 16).bin" size="21271488" crc="d16b5133" /> | |
| 1400 | <rom name="Prince of Persia (Japan) (Track 17).bin" size="35773920" crc="49a82a06" /> | |
| 1401 | <rom name="Prince of Persia (Japan) (Track 18).bin" size="12512640" crc="9bb4dbb2" /> | |
| 1402 | <rom name="Prince of Persia (Japan) (Track 19).bin" size="27222048" crc="534a134b" /> | |
| 1403 | <rom name="Prince of Persia (Japan) (Track 20).bin" size="49363776" crc="3baf85d1" /> | |
| 1404 | <rom name="Prince of Persia (Japan) (Track 21).bin" size="1982736" crc="90a8b2f0" /> | |
| 1405 | <rom name="Prince of Persia (Japan) (Track 22).bin" size="2053296" crc="313727c9" /> | |
| 1406 | <rom name="Prince of Persia (Japan) (Track 23).bin" size="2062704" crc="aad284e6" /> | |
| 1407 | <rom name="Prince of Persia (Japan) (Track 24).bin" size="1662864" crc="56f7c105" /> | |
| 1408 | <rom name="Prince of Persia (Japan) (Track 25).bin" size="1660512" crc="227e49ca" /> | |
| 1409 | --> | |
| 1410 | 509 | <description>Prince of Persia (Jpn)</description> |
| 1411 | 510 | <year>1992</year> |
| 1412 | 511 | <publisher>Victor Entertainment</publisher> |
| 1413 | 512 | <info name="serial" value="T-60014"/> |
| 1414 | <info name="disk_ring" value="T60014P-00020-R1M V"/> | |
| 1415 | 513 | <info name="release" value="19920807"/> |
| 1416 | 514 | <info name="alt_title" value="プリンス・オブ・ペルシャ"/> |
| 1417 | 515 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1422 | 520 | </software> |
| 1423 | 521 | |
| 1424 | 522 | <software name="proyakcd"> |
| 1425 | <!-- source redump.org | |
| 1426 | <rom name="Pro Yakyuu Super League CD (Japan).cue" size="2949" crc="b74953c9" /> | |
| 1427 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 01).bin" size="51685200" crc="069a0e83" /> | |
| 1428 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 02).bin" size="11825856" crc="97c32cc2" /> | |
| 1429 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 03).bin" size="22572144" crc="165f0f36" /> | |
| 1430 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 04).bin" size="7549920" crc="b9374cad" /> | |
| 1431 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 05).bin" size="3041136" crc="de817541" /> | |
| 1432 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 06).bin" size="11985792" crc="32007c76" /> | |
| 1433 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 07).bin" size="12084576" crc="c934d7c0" /> | |
| 1434 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 08).bin" size="1117200" crc="cdd208de" /> | |
| 1435 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 09).bin" size="1070160" crc="187056fd" /> | |
| 1436 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 10).bin" size="1154832" crc="56beef71" /> | |
| 1437 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 11).bin" size="1208928" crc="fc8efa38" /> | |
| 1438 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 12).bin" size="1164240" crc="8a1e410c" /> | |
| 1439 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 13).bin" size="1136016" crc="b7485f1c" /> | |
| 1440 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 14).bin" size="1072512" crc="acb83e60" /> | |
| 1441 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 15).bin" size="1272432" crc="d8955637" /> | |
| 1442 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 16).bin" size="1204224" crc="a30d3ff0" /> | |
| 1443 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 17).bin" size="1244208" crc="3593a52d" /> | |
| 1444 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 18).bin" size="1211280" crc="771be76e" /> | |
| 1445 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 19).bin" size="1126608" crc="f53bd813" /> | |
| 1446 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 20).bin" size="1244208" crc="d19d393f" /> | |
| 1447 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 21).bin" size="1215984" crc="7b59a99b" /> | |
| 1448 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 22).bin" size="1079568" crc="9563b01f" /> | |
| 1449 | <rom name="Pro Yakyuu Super League CD (Japan) (Track 23).bin" size="1136016" crc="7024a847" /> | |
| 1450 | --> | |
| 1451 | 523 | <description>Pro Yakyuu Super League CD (Jpn)</description> |
| 1452 | 524 | <year>1992</year> |
| 1453 | 525 | <publisher>Sega</publisher> |
| 1454 | 526 | <info name="serial" value="G-6010"/> |
| 1455 | <info name="disk_ring" value="G-6010P-00029-R1M V"/> | |
| 1456 | 527 | <info name="release" value="19921030"/> |
| 1457 | 528 | <info name="alt_title" value="プロ野球スーパーリーグCD"/> |
| 1458 | 529 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1463 | 534 | </software> |
| 1464 | 535 | |
| 1465 | 536 | <software name="quizss"> |
| 1466 | <!-- source redump.org | |
| 1467 | <rom name="Quiz Scramble Special (Japan) (Rev B).cue" size="5394" crc="32fb3613" /> | |
| 1468 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 01).bin" size="28261632" crc="24f14a3d" /> | |
| 1469 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 02).bin" size="12352704" crc="ec5d2bdd" /> | |
| 1470 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 03).bin" size="13307616" crc="06ca795f" /> | |
| 1471 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 04).bin" size="16400496" crc="817f51bb" /> | |
| 1472 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 05).bin" size="6505632" crc="b15f3c16" /> | |
| 1473 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 06).bin" size="18987696" crc="a38bb4c2" /> | |
| 1474 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 07).bin" size="1872192" crc="64f43933" /> | |
| 1475 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 08).bin" size="1827504" crc="45605c3d" /> | |
| 1476 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 09).bin" size="1653456" crc="a61bca4f" /> | |
| 1477 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 10).bin" size="1074864" crc="844cdc67" /> | |
| 1478 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 11).bin" size="1067808" crc="6574dee2" /> | |
| 1479 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 12).bin" size="8558928" crc="1575f1cf" /> | |
| 1480 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 13).bin" size="3097584" crc="47a07687" /> | |
| 1481 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 14).bin" size="3944304" crc="80dae03d" /> | |
| 1482 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 15).bin" size="2650704" crc="9997d610" /> | |
| 1483 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 16).bin" size="3756144" crc="36820469" /> | |
| 1484 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 17).bin" size="2034480" crc="be75ae0a" /> | |
| 1485 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 18).bin" size="3203424" crc="c2e90f08" /> | |
| 1486 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 19).bin" size="3085824" crc="4f399ab9" /> | |
| 1487 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 20).bin" size="5738880" crc="92ee9a3c" /> | |
| 1488 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 21).bin" size="4372368" crc="8aea6ad6" /> | |
| 1489 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 22).bin" size="3156384" crc="f0033ea1" /> | |
| 1490 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 23).bin" size="4685184" crc="6c906c1e" /> | |
| 1491 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 24).bin" size="1070160" crc="de0fb321" /> | |
| 1492 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 25).bin" size="1074864" crc="5640a695" /> | |
| 1493 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 26).bin" size="1074864" crc="8b6eff3a" /> | |
| 1494 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 27).bin" size="1486464" crc="c8b53368" /> | |
| 1495 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 28).bin" size="1248912" crc="403145d9" /> | |
| 1496 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 29).bin" size="1063104" crc="71651e61" /> | |
| 1497 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 30).bin" size="1063104" crc="6739a167" /> | |
| 1498 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 31).bin" size="1065456" crc="d70de543" /> | |
| 1499 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 32).bin" size="1587600" crc="4c1e6bc4" /> | |
| 1500 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 33).bin" size="1063104" crc="191ea5c2" /> | |
| 1501 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 34).bin" size="1077216" crc="429ae1bc" /> | |
| 1502 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 35).bin" size="1081920" crc="47d3fb26" /> | |
| 1503 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 36).bin" size="1070160" crc="5607a7dd" /> | |
| 1504 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 37).bin" size="1237152" crc="a030fff6" /> | |
| 1505 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 38).bin" size="1326528" crc="e5fbb50d" /> | |
| 1506 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 39).bin" size="1952160" crc="03a5913e" /> | |
| 1507 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 40).bin" size="1067808" crc="81bb73c2" /> | |
| 1508 | <rom name="Quiz Scramble Special (Japan) (Rev B) (Track 41).bin" size="1176000" crc="36cf78ed" /> | |
| 1509 | --> | |
| 1510 | 537 | <description>Quiz Scramble Special (Jpn, Rev. B)</description> |
| 1511 | 538 | <year>1992</year> |
| 1512 | 539 | <publisher>Sega</publisher> |
| 1513 | 540 | <info name="serial" value="G-6003"/> |
| 1514 | <info name="disk_ring" value="G-6003P-00014B-R2M V"/> | |
| 1515 | 541 | <info name="release" value="19920529"/> |
| 1516 | 542 | <info name="alt_title" value="クイズスクランブルスペシャル"/> |
| 1517 | 543 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1521 | 547 | </part> |
| 1522 | 548 | </software> |
| 1523 | 549 | |
| 1524 | <software name="quiztono"> | |
| 1525 | <!-- source redump.org | |
| 1526 | <rom name="Capcom no Quiz - Tonosama no Yabou (Japan).cue" size="254" crc="dcb26809" /> | |
| 1527 | <rom name="Capcom no Quiz - Tonosama no Yabou (Japan) (Track 1).bin" size="498555792" crc="ac72da73" /> | |
| 1528 | <rom name="Capcom no Quiz - Tonosama no Yabou (Japan) (Track 2).bin" size="2050944" crc="07287a36" /> | |
| 1529 | --> | |
| 1530 | <description>Quiz Tonosama no Yabou (Jpn)</description> | |
| 1531 | <year>1992</year> | |
| 1532 | <publisher>SIMS</publisher> | |
| 1533 | <info name="serial" value="T-44024"/> | |
| 1534 | <info name="disk_ring" value="T-44024P-00034-R1M V"/> | |
| 1535 | <info name="release" value="19921225"/> | |
| 1536 | <info name="alt_title" value="クイズ殿様の野望"/> | |
| 1537 | <part name="cdrom" interface="scd_cdrom"> | |
| 1538 | <diskarea name="cdrom"> | |
| 1539 | <disk name="capcom no quiz - tonosama no yabou (japan)" sha1="9f09efae7369a1439cd85616c89f5d42a2eb741a"/> | |
| 1540 | </diskarea> | |
| 1541 | </part> | |
| 1542 | </software> | |
| 1543 | ||
| 1544 | 550 | <software name="ranma"> |
| 1545 | <!-- source redump.org | |
| 1546 | <rom name="Ranma 1-2 - Byakuranaika (Japan).cue" size="3157" crc="3a971b70" /> | |
| 1547 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 01).bin" size="49519008" crc="a92a2dc5" /> | |
| 1548 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 02).bin" size="10334688" crc="f8086912" /> | |
| 1549 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 03).bin" size="14638848" crc="3226211c" /> | |
| 1550 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 04).bin" size="17308368" crc="80d209f3" /> | |
| 1551 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 05).bin" size="52771824" crc="238bc537" /> | |
| 1552 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 06).bin" size="16348752" crc="70c12cc9" /> | |
| 1553 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 07).bin" size="16339344" crc="ca745251" /> | |
| 1554 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 08).bin" size="16421664" crc="f1180e24" /> | |
| 1555 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 09).bin" size="17444784" crc="61283229" /> | |
| 1556 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 10).bin" size="16546320" crc="e9fb564c" /> | |
| 1557 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 11).bin" size="17012016" crc="880ae37a" /> | |
| 1558 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 12).bin" size="16823856" crc="a6548b54" /> | |
| 1559 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 13).bin" size="16969680" crc="bf2020ea" /> | |
| 1560 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 14).bin" size="17122560" crc="380830ba" /> | |
| 1561 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 15).bin" size="16786224" crc="8870b6ae" /> | |
| 1562 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 16).bin" size="16758000" crc="5a64e72c" /> | |
| 1563 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 17).bin" size="16099440" crc="5d146f9b" /> | |
| 1564 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 18).bin" size="17037888" crc="f9c911c3" /> | |
| 1565 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 19).bin" size="17216640" crc="9abc95fc" /> | |
| 1566 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 20).bin" size="17141376" crc="1e1682b0" /> | |
| 1567 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 21).bin" size="18300912" crc="fe1a1eba" /> | |
| 1568 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 22).bin" size="15657264" crc="5cc7685b" /> | |
| 1569 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 23).bin" size="16638048" crc="9e499237" /> | |
| 1570 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 24).bin" size="16226448" crc="effceb82" /> | |
| 1571 | <rom name="Ranma 1-2 - Byakuranaika (Japan) (Track 25).bin" size="18051600" crc="cb75ab7c" /> | |
| 1572 | --> | |
| 1573 | 551 | <description>Ranma ½ - Byakuranaika (Jpn)</description> |
| 1574 | 552 | <year>1993</year> |
| 1575 | 553 | <publisher>NCS</publisher> |
| 1576 | 554 | <info name="serial" value="T-25014"/> |
| 1577 | <info name="disk_ring" value="T-25014P-00060-R3M V, T-25014P-00060-R2M V"/> | |
| 1578 | 555 | <info name="release" value="19930423"/> |
| 1579 | 556 | <info name="alt_title" value="らんま½ 白蘭愛歌"/> |
| 1580 | 557 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1585 | 562 | </software> |
| 1586 | 563 | |
| 1587 | 564 | <software name="risedrag"> |
| 1588 | <!-- source redump.org | |
| 1589 | <rom name="Rise of the Dragon - A Blade Hunter Mystery (Japan).cue" size="707" crc="59bdb6fd" /> | |
| 1590 | <rom name="Rise of the Dragon - A Blade Hunter Mystery (Japan) (Track 1).bin" size="178145184" crc="e9c09483" /> | |
| 1591 | <rom name="Rise of the Dragon - A Blade Hunter Mystery (Japan) (Track 2).bin" size="15866592" crc="272c6e01" /> | |
| 1592 | <rom name="Rise of the Dragon - A Blade Hunter Mystery (Japan) (Track 3).bin" size="38391696" crc="4392fcb4" /> | |
| 1593 | <rom name="Rise of the Dragon - A Blade Hunter Mystery (Japan) (Track 4).bin" size="24124464" crc="0278c2fd" /> | |
| 1594 | <rom name="Rise of the Dragon - A Blade Hunter Mystery (Japan) (Track 5).bin" size="29235360" crc="93ba211d" /> | |
| 1595 | --> | |
| 1596 | 565 | <description>Rise of the Dragon - A Blade Hunter Mystery (Jpn)</description> |
| 1597 | 566 | <year>1992</year> |
| 1598 | 567 | <publisher>Sega</publisher> |
| 1599 | 568 | <info name="serial" value="G-6002"/> |
| 1600 | <info name="disk_ring" value="G-6002P-00023-R1M V"/> | |
| 1601 | 569 | <info name="release" value="19920925"/> |
| 1602 | 570 | <info name="alt_title" value="ライズ オブ ザ ドラゴン −ブレイド・ハンター・ミステリ"/> |
| 1603 | 571 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1608 | 576 | </software> |
| 1609 | 577 | |
| 1610 | 578 | <software name="sangoku3"> |
| 1611 | <!-- source redump.org | |
| 1612 | <rom name="Sangokushi III (Japan).cue" size="5832" crc="1748f5b9" /> | |
| 1613 | <rom name="Sangokushi III (Japan) (Track 01).bin" size="11160240" crc="5e0d844c" /> | |
| 1614 | <rom name="Sangokushi III (Japan) (Track 02).bin" size="1427664" crc="dc5eda0e" /> | |
| 1615 | <rom name="Sangokushi III (Japan) (Track 03).bin" size="2135616" crc="49dce1a0" /> | |
| 1616 | <rom name="Sangokushi III (Japan) (Track 04).bin" size="1597008" crc="bb41fab3" /> | |
| 1617 | <rom name="Sangokushi III (Japan) (Track 05).bin" size="1413552" crc="cfbd1b68" /> | |
| 1618 | <rom name="Sangokushi III (Japan) (Track 06).bin" size="1425312" crc="f37f728b" /> | |
| 1619 | <rom name="Sangokushi III (Japan) (Track 07).bin" size="1239504" crc="a5523350" /> | |
| 1620 | <rom name="Sangokushi III (Japan) (Track 08).bin" size="1077216" crc="f964204a" /> | |
| 1621 | <rom name="Sangokushi III (Japan) (Track 09).bin" size="1065456" crc="2aca7837" /> | |
| 1622 | <rom name="Sangokushi III (Japan) (Track 10).bin" size="1072512" crc="fe339fde" /> | |
| 1623 | <rom name="Sangokushi III (Japan) (Track 11).bin" size="1063104" crc="781f541b" /> | |
| 1624 | <rom name="Sangokushi III (Japan) (Track 12).bin" size="1060752" crc="e58f8782" /> | |
| 1625 | <rom name="Sangokushi III (Japan) (Track 13).bin" size="1063104" crc="6a73faeb" /> | |
| 1626 | <rom name="Sangokushi III (Japan) (Track 14).bin" size="1063104" crc="9a68c229" /> | |
| 1627 | <rom name="Sangokushi III (Japan) (Track 15).bin" size="1065456" crc="fc4b780d" /> | |
| 1628 | <rom name="Sangokushi III (Japan) (Track 16).bin" size="1060752" crc="159ce9a5" /> | |
| 1629 | <rom name="Sangokushi III (Japan) (Track 17).bin" size="1063104" crc="0cd98855" /> | |
| 1630 | <rom name="Sangokushi III (Japan) (Track 18).bin" size="1065456" crc="c3347b88" /> | |
| 1631 | <rom name="Sangokushi III (Japan) (Track 19).bin" size="1063104" crc="8fe197de" /> | |
| 1632 | <rom name="Sangokushi III (Japan) (Track 20).bin" size="1063104" crc="ff9ecb5e" /> | |
| 1633 | <rom name="Sangokushi III (Japan) (Track 21).bin" size="1067808" crc="931fae3c" /> | |
| 1634 | <rom name="Sangokushi III (Japan) (Track 22).bin" size="1072512" crc="c92f5dbf" /> | |
| 1635 | <rom name="Sangokushi III (Japan) (Track 23).bin" size="1072512" crc="0abcaa50" /> | |
| 1636 | <rom name="Sangokushi III (Japan) (Track 24).bin" size="39941664" crc="e356f07f" /> | |
| 1637 | <rom name="Sangokushi III (Japan) (Track 25).bin" size="17557680" crc="ce6a9643" /> | |
| 1638 | <rom name="Sangokushi III (Japan) (Track 26).bin" size="28786128" crc="cd70217a" /> | |
| 1639 | <rom name="Sangokushi III (Japan) (Track 27).bin" size="3457440" crc="7faa0ed6" /> | |
| 1640 | <rom name="Sangokushi III (Japan) (Track 28).bin" size="27151488" crc="16a95fb4" /> | |
| 1641 | <rom name="Sangokushi III (Japan) (Track 29).bin" size="2909424" crc="7646016f" /> | |
| 1642 | <rom name="Sangokushi III (Japan) (Track 30).bin" size="29334144" crc="d4208b9c" /> | |
| 1643 | <rom name="Sangokushi III (Japan) (Track 31).bin" size="19773264" crc="8a1b380d" /> | |
| 1644 | <rom name="Sangokushi III (Japan) (Track 32).bin" size="25323984" crc="2346cea6" /> | |
| 1645 | <rom name="Sangokushi III (Japan) (Track 33).bin" size="16393440" crc="4bcec6e4" /> | |
| 1646 | <rom name="Sangokushi III (Japan) (Track 34).bin" size="2827104" crc="3ff4238f" /> | |
| 1647 | <rom name="Sangokushi III (Japan) (Track 35).bin" size="25286352" crc="1ce143bf" /> | |
| 1648 | <rom name="Sangokushi III (Japan) (Track 36).bin" size="19975536" crc="e27dd054" /> | |
| 1649 | <rom name="Sangokushi III (Japan) (Track 37).bin" size="35505792" crc="b73e6493" /> | |
| 1650 | <rom name="Sangokushi III (Japan) (Track 38).bin" size="32471712" crc="224e09c0" /> | |
| 1651 | <rom name="Sangokushi III (Japan) (Track 39).bin" size="21920640" crc="71602343" /> | |
| 1652 | <rom name="Sangokushi III (Japan) (Track 40).bin" size="33015024" crc="a6836ff3" /> | |
| 1653 | <rom name="Sangokushi III (Japan) (Track 41).bin" size="22786176" crc="e2bc7b75" /> | |
| 1654 | <rom name="Sangokushi III (Japan) (Track 42).bin" size="45000816" crc="6fd08a14" /> | |
| 1655 | <rom name="Sangokushi III (Japan) (Track 43).bin" size="12921888" crc="f6f80a97" /> | |
| 1656 | <rom name="Sangokushi III (Japan) (Track 44).bin" size="9777264" crc="5f4d79ad" /> | |
| 1657 | <rom name="Sangokushi III (Japan) (Track 45).bin" size="16769760" crc="f04fe3d3" /> | |
| 1658 | <rom name="Sangokushi III (Japan) (Track 46).bin" size="15069264" crc="082badab" /> | |
| 1659 | <rom name="Sangokushi III (Japan) (Track 47).bin" size="15266832" crc="f9df5d23" /> | |
| 1660 | <rom name="Sangokushi III (Japan) (Track 48).bin" size="17329536" crc="1a082a6d" /> | |
| 1661 | <rom name="Sangokushi III (Japan) (Track 49).bin" size="15694896" crc="597a794d" /> | |
| 1662 | <rom name="Sangokushi III (Japan) (Track 50).bin" size="15052800" crc="083cd29b" /> | |
| 1663 | --> | |
| 1664 | 579 | <description>Sangokushi III (Jpn)</description> |
| 1665 | 580 | <year>1993</year> |
| 1666 | 581 | <publisher>Koei</publisher> |
| 1667 | 582 | <info name="serial" value="T-76014"/> |
| 1668 | <info name="disk_ring" value="T-76014P-00057-R1M V"/> | |
| 1669 | 583 | <info name="release" value="19930423"/> |
| 1670 | 584 | <info name="alt_title" value="三國志III"/> |
| 1671 | 585 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1676 | 590 | </software> |
| 1677 | 591 | |
| 1678 | 592 | <software name="segaac"> |
| 1679 | <!-- source redump.org | |
| 1680 | <rom name="Sega Classic Arcade Collection (Japan).cue" size="1578" crc="1426a3b5" /> | |
| 1681 | <rom name="Sega Classic Arcade Collection (Japan) (Track 01).bin" size="25149936" crc="a65db4ba" /> | |
| 1682 | <rom name="Sega Classic Arcade Collection (Japan) (Track 02).bin" size="16315824" crc="824dfd97" /> | |
| 1683 | <rom name="Sega Classic Arcade Collection (Japan) (Track 03).bin" size="3826704" crc="d5bdeb78" /> | |
| 1684 | <rom name="Sega Classic Arcade Collection (Japan) (Track 04).bin" size="8996400" crc="b90782c5" /> | |
| 1685 | <rom name="Sega Classic Arcade Collection (Japan) (Track 05).bin" size="28929600" crc="a8fe0e58" /> | |
| 1686 | <rom name="Sega Classic Arcade Collection (Japan) (Track 06).bin" size="23912784" crc="b14eed0d" /> | |
| 1687 | <rom name="Sega Classic Arcade Collection (Japan) (Track 07).bin" size="15810144" crc="0baf9d48" /> | |
| 1688 | <rom name="Sega Classic Arcade Collection (Japan) (Track 08).bin" size="21791280" crc="4a23f0c3" /> | |
| 1689 | <rom name="Sega Classic Arcade Collection (Japan) (Track 09).bin" size="25646208" crc="f2758941" /> | |
| 1690 | <rom name="Sega Classic Arcade Collection (Japan) (Track 10).bin" size="23696400" crc="445ff798" /> | |
| 1691 | <rom name="Sega Classic Arcade Collection (Japan) (Track 11).bin" size="3709104" crc="cac806ff" /> | |
| 1692 | <rom name="Sega Classic Arcade Collection (Japan) (Track 12).bin" size="12169248" crc="46fd5492" /> | |
| 1693 | --> | |
| 1694 | <description>Sega Classic Arcade Collection - Limited Edition (Jpn)</description> | |
| 593 | <description>Sega Classic Arcade Collection (Jpn)</description> | |
| 1695 | 594 | <year>1993</year> |
| 1696 | 595 | <publisher>Sega</publisher> |
| 1697 | 596 | <info name="serial" value="G-6012"/> |
| 1698 | <info name="disk_ring" value="G-6012P-00024-2-R2M V, G-6012P-00024-2-R1M V"/> | |
| 1699 | 597 | <info name="release" value="19930423"/> |
| 1700 | 598 | <info name="alt_title" value="セガクラシック"/> |
| 1701 | 599 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1706 | 604 | </software> |
| 1707 | 605 | |
| 1708 | 606 | <software name="3x3eyes"> |
| 1709 | <!-- source redump.org | |
| 1710 | <rom name="Seima Densetsu 3x3 Eyes (Japan).cue" size="5904" crc="caaaf2ac" /> | |
| 1711 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 01).bin" size="310675680" crc="4811e91c" /> | |
| 1712 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 02).bin" size="4388832" crc="ea403473" /> | |
| 1713 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 03).bin" size="5150880" crc="70b2998a" /> | |
| 1714 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 04).bin" size="3662064" crc="73059046" /> | |
| 1715 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 05).bin" size="2060352" crc="6c2f54b5" /> | |
| 1716 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 06).bin" size="1869840" crc="df71cdfd" /> | |
| 1717 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 07).bin" size="1354752" crc="82312be8" /> | |
| 1718 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 08).bin" size="2944704" crc="0bc09042" /> | |
| 1719 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 09).bin" size="6571488" crc="36719ad2" /> | |
| 1720 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 10).bin" size="4798080" crc="0340bd39" /> | |
| 1721 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 11).bin" size="2979984" crc="83cb4639" /> | |
| 1722 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 12).bin" size="10184160" crc="95b72693" /> | |
| 1723 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 13).bin" size="2340240" crc="c3ccb4a1" /> | |
| 1724 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 14).bin" size="7446432" crc="e5256df2" /> | |
| 1725 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 15).bin" size="8507184" crc="4f716dc0" /> | |
| 1726 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 16).bin" size="2413152" crc="6f357da5" /> | |
| 1727 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 17).bin" size="5061504" crc="d78646d0" /> | |
| 1728 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 18).bin" size="25192272" crc="5902de59" /> | |
| 1729 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 19).bin" size="2443728" crc="c0353764" /> | |
| 1730 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 20).bin" size="7453488" crc="b4bd0ef8" /> | |
| 1731 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 21).bin" size="24616032" crc="7e0d5b82" /> | |
| 1732 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 22).bin" size="14067312" crc="d0c1900b" /> | |
| 1733 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 23).bin" size="7415856" crc="8ed1aa3c" /> | |
| 1734 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 24).bin" size="12651408" crc="877d7dbe" /> | |
| 1735 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 25).bin" size="14509488" crc="fa5558e5" /> | |
| 1736 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 26).bin" size="2060352" crc="2d75287b" /> | |
| 1737 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 27).bin" size="5680080" crc="c0df136a" /> | |
| 1738 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 28).bin" size="5240256" crc="26e73f83" /> | |
| 1739 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 29).bin" size="6475056" crc="b272c004" /> | |
| 1740 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 30).bin" size="2215584" crc="96956bee" /> | |
| 1741 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 31).bin" size="20636448" crc="5b969d55" /> | |
| 1742 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 32).bin" size="5390784" crc="a2eb0cda" /> | |
| 1743 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 33).bin" size="5797680" crc="1dfbb1dc" /> | |
| 1744 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 34).bin" size="5209680" crc="cc7f5225" /> | |
| 1745 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 35).bin" size="2177952" crc="c8c724cc" /> | |
| 1746 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 36).bin" size="12152784" crc="13f54b59" /> | |
| 1747 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 37).bin" size="4449984" crc="2001f3f5" /> | |
| 1748 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 38).bin" size="13912080" crc="4ec1b3fc" /> | |
| 1749 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 39).bin" size="8300208" crc="682a0e9e" /> | |
| 1750 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 40).bin" size="8062656" crc="fcac245d" /> | |
| 1751 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 41).bin" size="12721968" crc="e95c0f05" /> | |
| 1752 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 42).bin" size="1726368" crc="25930c7e" /> | |
| 1753 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 43).bin" size="2255568" crc="d8abf5d8" /> | |
| 1754 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 44).bin" size="2170896" crc="3e84fd75" /> | |
| 1755 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 45).bin" size="1371216" crc="e1697068" /> | |
| 1756 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 46).bin" size="1495872" crc="cab5acd4" /> | |
| 1757 | <rom name="Seima Densetsu 3x3 Eyes (Japan) (Track 47).bin" size="46023936" crc="b4ad07a8" /> | |
| 1758 | --> | |
| 1759 | 607 | <description>Seima Densetsu 3x3 Eyes (Jpn)</description> |
| 1760 | 608 | <year>1993</year> |
| 1761 | 609 | <publisher>Sega</publisher> |
| 1762 | 610 | <info name="serial" value="G-6007"/> |
| 1763 | <info name="disk_ring" value="G-6007P-00078-R1M V"/> | |
| 1764 | 611 | <info name="release" value="19930723"/> |
| 1765 | 612 | <info name="alt_title" value="聖魔伝説 3×3EYES"/> |
| 1766 | 613 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1771 | 618 | </software> |
| 1772 | 619 | |
| 1773 | 620 | <software name="fheyarea"> |
| 1774 | <!-- source redump.org | |
| 1775 | <rom name="Seirei Shinseiki - Fhey Area (Japan).cue" size="11117" crc="48ab62ca" /> | |
| 1776 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 01).bin" size="16285248" crc="da4a8e92" /> | |
| 1777 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 02).bin" size="1121904" crc="fb93618b" /> | |
| 1778 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 03).bin" size="1150128" crc="8137c47e" /> | |
| 1779 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 04).bin" size="1286544" crc="1ebc9d8c" /> | |
| 1780 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 05).bin" size="1063104" crc="08d255df" /> | |
| 1781 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 06).bin" size="1063104" crc="06640d84" /> | |
| 1782 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 07).bin" size="1084272" crc="74838596" /> | |
| 1783 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 08).bin" size="1143072" crc="9092f2dc" /> | |
| 1784 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 09).bin" size="1201872" crc="a4d5ecd9" /> | |
| 1785 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 10).bin" size="1223040" crc="efff3a98" /> | |
| 1786 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 11).bin" size="1213632" crc="1b903267" /> | |
| 1787 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 12).bin" size="1260672" crc="e8f493db" /> | |
| 1788 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 13).bin" size="1074864" crc="1408a74d" /> | |
| 1789 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 14).bin" size="1063104" crc="bafcff55" /> | |
| 1790 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 15).bin" size="1164240" crc="44cd861d" /> | |
| 1791 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 16).bin" size="1063104" crc="5390908d" /> | |
| 1792 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 17).bin" size="1121904" crc="31d3c2a2" /> | |
| 1793 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 18).bin" size="1307712" crc="5daa242d" /> | |
| 1794 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 19).bin" size="1239504" crc="4a6872d8" /> | |
| 1795 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 20).bin" size="1321824" crc="a358a0b8" /> | |
| 1796 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 21).bin" size="1246560" crc="2b5bf866" /> | |
| 1797 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 22).bin" size="1225392" crc="53780215" /> | |
| 1798 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 23).bin" size="1063104" crc="fff71a66" /> | |
| 1799 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 24).bin" size="1065456" crc="8b997295" /> | |
| 1800 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 25).bin" size="1063104" crc="ef59de32" /> | |
| 1801 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 26).bin" size="1063104" crc="9208ecdb" /> | |
| 1802 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 27).bin" size="1063104" crc="f9f4f5e2" /> | |
| 1803 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 28).bin" size="1291248" crc="9f3582b9" /> | |
| 1804 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 29).bin" size="1063104" crc="2e5571ec" /> | |
| 1805 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 30).bin" size="1063104" crc="0537b417" /> | |
| 1806 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 31).bin" size="1063104" crc="3e76bfeb" /> | |
| 1807 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 32).bin" size="1063104" crc="0e413a8d" /> | |
| 1808 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 33).bin" size="1063104" crc="5e827ce1" /> | |
| 1809 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 34).bin" size="1159536" crc="ec5c6180" /> | |
| 1810 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 35).bin" size="1063104" crc="d4f09e3b" /> | |
| 1811 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 36).bin" size="1063104" crc="8d4a3e4b" /> | |
| 1812 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 37).bin" size="1063104" crc="1725e66b" /> | |
| 1813 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 38).bin" size="1063104" crc="d6f8c628" /> | |
| 1814 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 39).bin" size="1063104" crc="f2c5abfa" /> | |
| 1815 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 40).bin" size="1063104" crc="9ee23876" /> | |
| 1816 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 41).bin" size="1359456" crc="34979146" /> | |
| 1817 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 42).bin" size="1265376" crc="aba888f7" /> | |
| 1818 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 43).bin" size="1063104" crc="f6500888" /> | |
| 1819 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 44).bin" size="1580544" crc="cfcf4b08" /> | |
| 1820 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 45).bin" size="1063104" crc="422a6829" /> | |
| 1821 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 46).bin" size="1063104" crc="e7aae3a4" /> | |
| 1822 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 47).bin" size="1063104" crc="c1f33f6d" /> | |
| 1823 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 48).bin" size="1063104" crc="0b6f8dad" /> | |
| 1824 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 49).bin" size="1063104" crc="5ca095cd" /> | |
| 1825 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 50).bin" size="1063104" crc="a2be051e" /> | |
| 1826 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 51).bin" size="1907472" crc="b6247cef" /> | |
| 1827 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 52).bin" size="1898064" crc="7b245349" /> | |
| 1828 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 53).bin" size="1684032" crc="e9ec7768" /> | |
| 1829 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 54).bin" size="2601312" crc="cbb3190c" /> | |
| 1830 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 55).bin" size="2180304" crc="6db49514" /> | |
| 1831 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 56).bin" size="3208128" crc="f2df1beb" /> | |
| 1832 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 57).bin" size="2653056" crc="8bdb469c" /> | |
| 1833 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 58).bin" size="2431968" crc="3ea50b2c" /> | |
| 1834 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 59).bin" size="4372368" crc="29c83fcf" /> | |
| 1835 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 60).bin" size="33139680" crc="70abd7d6" /> | |
| 1836 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 61).bin" size="26424720" crc="84e2bcb9" /> | |
| 1837 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 62).bin" size="17261328" crc="3bfad8f2" /> | |
| 1838 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 63).bin" size="43446144" crc="983c1f87" /> | |
| 1839 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 64).bin" size="21454944" crc="5129ca96" /> | |
| 1840 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 65).bin" size="29668128" crc="2839c56f" /> | |
| 1841 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 66).bin" size="25302816" crc="8b8a735e" /> | |
| 1842 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 67).bin" size="25533312" crc="89181cd1" /> | |
| 1843 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 68).bin" size="28466256" crc="cb9b980e" /> | |
| 1844 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 69).bin" size="14620032" crc="ab3dba8b" /> | |
| 1845 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 70).bin" size="20530608" crc="eb8e35af" /> | |
| 1846 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 71).bin" size="31989552" crc="03cff43a" /> | |
| 1847 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 72).bin" size="29611680" crc="12202e49" /> | |
| 1848 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 73).bin" size="25298112" crc="fb402ac6" /> | |
| 1849 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 74).bin" size="26695200" crc="514bf5b7" /> | |
| 1850 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 75).bin" size="1921584" crc="27c64bc4" /> | |
| 1851 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 76).bin" size="2422560" crc="d153e33a" /> | |
| 1852 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 77).bin" size="2083872" crc="05b34810" /> | |
| 1853 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 78).bin" size="1063104" crc="3c24ab75" /> | |
| 1854 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 79).bin" size="6926640" crc="dd395719" /> | |
| 1855 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 80).bin" size="1808688" crc="3ec6f4d6" /> | |
| 1856 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 81).bin" size="2391984" crc="90fd33bc" /> | |
| 1857 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 82).bin" size="1651104" crc="a49db122" /> | |
| 1858 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 83).bin" size="19474560" crc="4cfd30a3" /> | |
| 1859 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 84).bin" size="23284800" crc="e0a79a6f" /> | |
| 1860 | <rom name="Seirei Shinseiki - Fhey Area (Japan) (Track 85).bin" size="51076032" crc="6c6882b3" /> | |
| 1861 | --> | |
| 1862 | 621 | <description>Seirei Shinseiki - Fhey Area (Jpn)</description> |
| 1863 | 622 | <year>1992</year> |
| 1864 | 623 | <publisher>Wolf Team</publisher> |
| 1865 | 624 | <info name="serial" value="T-32034"/> |
| 1866 | <info name="disk_ring" value="T-32034P-00009-R2K V, T-32034P-00009-R1K V"/> | |
| 1867 | 625 | <info name="release" value="19920218"/> |
| 1868 | 626 | <info name="alt_title" value="精霊神世紀フェイエリア"/> |
| 1869 | 627 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1874 | 632 | </software> |
| 1875 | 633 | |
| 1876 | 634 | <software name="beast2"> |
| 1877 | <!-- source redump.org | |
| 1878 | <rom name="Shadow of the Beast II - Juushin no Jubaku (Japan).cue" size="2012" crc="6b67e248" /> | |
| 1879 | <rom name="Shadow of the Beast II - Juushin no Jubaku (Japan) (Track 01).bin" size="29976240" crc="0330e73d" /> | |
| 1880 | <rom name="Shadow of the Beast II - Juushin no Jubaku (Japan) (Track 02).bin" size="230380752" crc="5b36b378" /> | |
| 1881 | <rom name="Shadow of the Beast II - Juushin no Jubaku (Japan) (Track 03).bin" size="26645808" crc="43d6a1b9" /> | |
| 1882 | <rom name="Shadow of the Beast II - Juushin no Jubaku (Japan) (Track 04).bin" size="76033104" crc="085d2972" /> | |
| 1883 | <rom name="Shadow of the Beast II - Juushin no Jubaku (Japan) (Track 05).bin" size="57856848" crc="4ee3e06f" /> | |
| 1884 | <rom name="Shadow of the Beast II - Juushin no Jubaku (Japan) (Track 06).bin" size="28757904" crc="9e3dc01b" /> | |
| 1885 | <rom name="Shadow of the Beast II - Juushin no Jubaku (Japan) (Track 07).bin" size="24519600" crc="847ba532" /> | |
| 1886 | <rom name="Shadow of the Beast II - Juushin no Jubaku (Japan) (Track 08).bin" size="24343200" crc="92099bd4" /> | |
| 1887 | <rom name="Shadow of the Beast II - Juushin no Jubaku (Japan) (Track 09).bin" size="24519600" crc="64c6794d" /> | |
| 1888 | <rom name="Shadow of the Beast II - Juushin no Jubaku (Japan) (Track 10).bin" size="33163200" crc="fc85c16a" /> | |
| 1889 | <rom name="Shadow of the Beast II - Juushin no Jubaku (Japan) (Track 11).bin" size="27875904" crc="00bdf019" /> | |
| 1890 | <rom name="Shadow of the Beast II - Juushin no Jubaku (Japan) (Track 12).bin" size="6705552" crc="057408ee" /> | |
| 1891 | <rom name="Shadow of the Beast II - Juushin no Jubaku (Japan) (Track 13).bin" size="6526800" crc="04008006" /> | |
| 1892 | <rom name="Shadow of the Beast II - Juushin no Jubaku (Japan) (Track 14).bin" size="9523248" crc="6c025c7e" /> | |
| 1893 | --> | |
| 1894 | 635 | <description>Shadow of the Beast II - Juushin no Jubaku (Jpn)</description> |
| 1895 | 636 | <year>1994</year> |
| 1896 | 637 | <publisher>Victor Entertainment</publisher> |
| 1897 | 638 | <info name="serial" value="T-60034"/> |
| 1898 | <info name="disk_ring" value="T-60034P-00233-R2M V"/> | |
| 1899 | 639 | <info name="release" value="19940729"/> |
| 1900 | 640 | <info name="alt_title" value="シャドー・オブ・ザ・ビーストII 獣神の呪縛"/> |
| 1901 | 641 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1906 | 646 | </software> |
| 1907 | 647 | |
| 1908 | 648 | <software name="shinmt"> |
| 1909 | <!-- source redump.org | |
| 1910 | <rom name="Shin Megami Tensei (Japan).cue" size="3491" crc="8b795266" /> | |
| 1911 | <rom name="Shin Megami Tensei (Japan) (Track 01).bin" size="68633712" crc="4fbbcf95" /> | |
| 1912 | <rom name="Shin Megami Tensei (Japan) (Track 02).bin" size="3499776" crc="d6b82430" /> | |
| 1913 | <rom name="Shin Megami Tensei (Japan) (Track 03).bin" size="15327984" crc="d22eafbf" /> | |
| 1914 | <rom name="Shin Megami Tensei (Japan) (Track 04).bin" size="11397792" crc="ee71fb5b" /> | |
| 1915 | <rom name="Shin Megami Tensei (Japan) (Track 05).bin" size="15918336" crc="089114dc" /> | |
| 1916 | <rom name="Shin Megami Tensei (Japan) (Track 06).bin" size="22341648" crc="2822b6de" /> | |
| 1917 | <rom name="Shin Megami Tensei (Japan) (Track 07).bin" size="14836416" crc="f9854241" /> | |
| 1918 | <rom name="Shin Megami Tensei (Japan) (Track 08).bin" size="17197824" crc="8e91a7f6" /> | |
| 1919 | <rom name="Shin Megami Tensei (Japan) (Track 09).bin" size="22341648" crc="b91a48e2" /> | |
| 1920 | <rom name="Shin Megami Tensei (Japan) (Track 10).bin" size="13034784" crc="194ed649" /> | |
| 1921 | <rom name="Shin Megami Tensei (Japan) (Track 11).bin" size="17066112" crc="c83b6065" /> | |
| 1922 | <rom name="Shin Megami Tensei (Japan) (Track 12).bin" size="15264480" crc="a3acf2ec" /> | |
| 1923 | <rom name="Shin Megami Tensei (Japan) (Track 13).bin" size="19131168" crc="c43b3273" /> | |
| 1924 | <rom name="Shin Megami Tensei (Japan) (Track 14).bin" size="16214688" crc="0f329bfd" /> | |
| 1925 | <rom name="Shin Megami Tensei (Japan) (Track 15).bin" size="18933600" crc="1c6d326c" /> | |
| 1926 | <rom name="Shin Megami Tensei (Japan) (Track 16).bin" size="20309520" crc="9fc88c26" /> | |
| 1927 | <rom name="Shin Megami Tensei (Japan) (Track 17).bin" size="16541616" crc="f7a03dbc" /> | |
| 1928 | <rom name="Shin Megami Tensei (Japan) (Track 18).bin" size="23423568" crc="c0622411" /> | |
| 1929 | <rom name="Shin Megami Tensei (Japan) (Track 19).bin" size="3859632" crc="4ddf05f4" /> | |
| 1930 | <rom name="Shin Megami Tensei (Japan) (Track 20).bin" size="3400992" crc="38174816" /> | |
| 1931 | <rom name="Shin Megami Tensei (Japan) (Track 21).bin" size="4285344" crc="697ed08a" /> | |
| 1932 | <rom name="Shin Megami Tensei (Japan) (Track 22).bin" size="5334336" crc="dd1ccad0" /> | |
| 1933 | <rom name="Shin Megami Tensei (Japan) (Track 23).bin" size="3433920" crc="5d8aca22" /> | |
| 1934 | <rom name="Shin Megami Tensei (Japan) (Track 24).bin" size="3598560" crc="a34d6163" /> | |
| 1935 | <rom name="Shin Megami Tensei (Japan) (Track 25).bin" size="3598560" crc="f8378312" /> | |
| 1936 | <rom name="Shin Megami Tensei (Japan) (Track 26).bin" size="45245424" crc="af81332c" /> | |
| 1937 | <rom name="Shin Megami Tensei (Japan) (Track 27).bin" size="20603520" crc="35ece82f" /> | |
| 1938 | <rom name="Shin Megami Tensei (Japan) (Track 28).bin" size="16901472" crc="5f027327" /> | |
| 1939 | <rom name="Shin Megami Tensei (Japan) (Track 29).bin" size="21358512" crc="c284eb28" /> | |
| 1940 | --> | |
| 1941 | 649 | <description>Shin Megami Tensei (Jpn)</description> |
| 1942 | 650 | <year>1994</year> |
| 1943 | 651 | <publisher>SIMS</publisher> |
| 1944 | 652 | <info name="serial" value="T-44044"/> |
| 1945 | <info name="disk_ring" value="T-44044P-00163 1"/> | |
| 1946 | 653 | <info name="release" value="19940225"/> |
| 1947 | 654 | <info name="alt_title" value="真・女神転生"/> |
| 1948 | 655 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 1953 | 660 | </software> |
| 1954 | 661 | |
| 1955 | 662 | <software name="shinfrce"> |
| 1956 | <!-- source redump.org | |
| 1957 | <rom name="Shining Force CD (Japan).cue" size="4147" crc="51bef593" /> | |
| 1958 | <rom name="Shining Force CD (Japan) (Track 01).bin" size="68664288" crc="4dd14b8b" /> | |
| 1959 | <rom name="Shining Force CD (Japan) (Track 02).bin" size="1768704" crc="75589f1a" /> | |
| 1960 | <rom name="Shining Force CD (Japan) (Track 03).bin" size="3488016" crc="b08408fc" /> | |
| 1961 | <rom name="Shining Force CD (Japan) (Track 04).bin" size="9716112" crc="c326c9db" /> | |
| 1962 | <rom name="Shining Force CD (Japan) (Track 05).bin" size="15756048" crc="c731e3ee" /> | |
| 1963 | <rom name="Shining Force CD (Japan) (Track 06).bin" size="26697552" crc="8fd237d9" /> | |
| 1964 | <rom name="Shining Force CD (Japan) (Track 07).bin" size="16706256" crc="19d49872" /> | |
| 1965 | <rom name="Shining Force CD (Japan) (Track 08).bin" size="10725120" crc="a3bb3eb8" /> | |
| 1966 | <rom name="Shining Force CD (Japan) (Track 09).bin" size="1992144" crc="2b8c3bd9" /> | |
| 1967 | <rom name="Shining Force CD (Japan) (Track 10).bin" size="2105040" crc="c596d167" /> | |
| 1968 | <rom name="Shining Force CD (Japan) (Track 11).bin" size="2229696" crc="a6c89ac1" /> | |
| 1969 | <rom name="Shining Force CD (Japan) (Track 12).bin" size="15344448" crc="2e6eb51a" /> | |
| 1970 | <rom name="Shining Force CD (Japan) (Track 13).bin" size="25789680" crc="51301511" /> | |
| 1971 | <rom name="Shining Force CD (Japan) (Track 14).bin" size="25897872" crc="cb909642" /> | |
| 1972 | <rom name="Shining Force CD (Japan) (Track 15).bin" size="15177456" crc="69c68928" /> | |
| 1973 | <rom name="Shining Force CD (Japan) (Track 16).bin" size="6623232" crc="28eea195" /> | |
| 1974 | <rom name="Shining Force CD (Japan) (Track 17).bin" size="8196720" crc="9950df8f" /> | |
| 1975 | <rom name="Shining Force CD (Japan) (Track 18).bin" size="9391536" crc="4730bab5" /> | |
| 1976 | <rom name="Shining Force CD (Japan) (Track 19).bin" size="5522496" crc="8813d62b" /> | |
| 1977 | <rom name="Shining Force CD (Japan) (Track 20).bin" size="5089728" crc="45935f3b" /> | |
| 1978 | <rom name="Shining Force CD (Japan) (Track 21).bin" size="4906272" crc="5e170e50" /> | |
| 1979 | <rom name="Shining Force CD (Japan) (Track 22).bin" size="20617632" crc="4c13e324" /> | |
| 1980 | <rom name="Shining Force CD (Japan) (Track 23).bin" size="17298960" crc="28e1533b" /> | |
| 1981 | <rom name="Shining Force CD (Japan) (Track 24).bin" size="19302864" crc="90014f0e" /> | |
| 1982 | <rom name="Shining Force CD (Japan) (Track 25).bin" size="16080624" crc="7b2dc1a0" /> | |
| 1983 | <rom name="Shining Force CD (Japan) (Track 26).bin" size="14601216" crc="d0eb2179" /> | |
| 1984 | <rom name="Shining Force CD (Japan) (Track 27).bin" size="16633344" crc="3a786120" /> | |
| 1985 | <rom name="Shining Force CD (Japan) (Track 28).bin" size="11334288" crc="1e68f0ec" /> | |
| 1986 | <rom name="Shining Force CD (Japan) (Track 29).bin" size="9201024" crc="c3bf8bc2" /> | |
| 1987 | <rom name="Shining Force CD (Japan) (Track 30).bin" size="33490128" crc="1750540a" /> | |
| 1988 | <rom name="Shining Force CD (Japan) (Track 31).bin" size="40901280" crc="6115771c" /> | |
| 1989 | <rom name="Shining Force CD (Japan) (Track 32).bin" size="2008608" crc="ef4c2ac4" /> | |
| 1990 | <rom name="Shining Force CD (Japan) (Track 33).bin" size="1952160" crc="fa0f0799" /> | |
| 1991 | <rom name="Shining Force CD (Japan) (Track 34).bin" size="1822800" crc="95b82aea" /> | |
| 1992 | <rom name="Shining Force CD (Japan) (Track 35).bin" size="19312272" crc="62fd60eb" /> | |
| 1993 | --> | |
| 1994 | 663 | <description>Shining Force CD (Jpn)</description> |
| 1995 | 664 | <year>1994</year> |
| 1996 | 665 | <publisher>Sega</publisher> |
| 1997 | 666 | <info name="serial" value="G-6036"/> |
| 1998 | <info name="disk_ring" value="G-6036P-00226-R1M V"/> | |
| 1999 | 667 | <info name="release" value="19940722"/> |
| 2000 | 668 | <info name="alt_title" value="シャイニング・フォースCD"/> |
| 2001 | 669 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2006 | 674 | </software> |
| 2007 | 675 | |
| 2008 | 676 | <software name="silpheed"> |
| 2009 | <!-- source redump.org | |
| 2010 | <rom name="Silpheed (Japan).cue" size="862" crc="b6759734" /> | |
| 2011 | <rom name="Silpheed (Japan) (Track 1).bin" size="369174624" crc="4d419bdf" /> | |
| 2012 | <rom name="Silpheed (Japan) (Track 2).bin" size="16099440" crc="9d8797f4" /> | |
| 2013 | <rom name="Silpheed (Japan) (Track 3).bin" size="36994608" crc="e731779a" /> | |
| 2014 | <rom name="Silpheed (Japan) (Track 4).bin" size="31095792" crc="7735f3fe" /> | |
| 2015 | <rom name="Silpheed (Japan) (Track 5).bin" size="34252176" crc="dfa7a797" /> | |
| 2016 | <rom name="Silpheed (Japan) (Track 6).bin" size="27551328" crc="50e61295" /> | |
| 2017 | <rom name="Silpheed (Japan) (Track 7).bin" size="12888960" crc="f0eee386" /> | |
| 2018 | <rom name="Silpheed (Japan) (Track 8).bin" size="34835472" crc="43febcf8" /> | |
| 2019 | --> | |
| 2020 | 677 | <description>Silpheed (Jpn)</description> |
| 2021 | 678 | <year>1993</year> |
| 2022 | 679 | <publisher>Game Arts</publisher> |
| 2023 | 680 | <info name="serial" value="T-45054"/> |
| 2024 | <info name="disk_ring" value="T-45054P-00080-R1M V"/> | |
| 2025 | 681 | <info name="release" value="19930730"/> |
| 2026 | 682 | <info name="alt_title" value="シルフィード"/> |
| 2027 | 683 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2032 | 688 | </software> |
| 2033 | 689 | |
| 2034 | 690 | <software name="solfeace"> |
| 2035 | <!-- source redump.org | |
| 2036 | <rom name="Sol-Feace (Japan).cue" size="2446" crc="e3bf68e3" /> | |
| 2037 | <rom name="Sol-Feace (Japan) (Track 01).bin" size="4097184" crc="03c0bd53" /> | |
| 2038 | <rom name="Sol-Feace (Japan) (Track 02).bin" size="2053296" crc="36364065" /> | |
| 2039 | <rom name="Sol-Feace (Japan) (Track 03).bin" size="2582496" crc="4e470df5" /> | |
| 2040 | <rom name="Sol-Feace (Japan) (Track 04).bin" size="2646000" crc="74417567" /> | |
| 2041 | <rom name="Sol-Feace (Japan) (Track 05).bin" size="22198176" crc="929380c5" /> | |
| 2042 | <rom name="Sol-Feace (Japan) (Track 06).bin" size="23599968" crc="b6d94261" /> | |
| 2043 | <rom name="Sol-Feace (Japan) (Track 07).bin" size="23214240" crc="88960786" /> | |
| 2044 | <rom name="Sol-Feace (Japan) (Track 08).bin" size="27918240" crc="13f3966c" /> | |
| 2045 | <rom name="Sol-Feace (Japan) (Track 09).bin" size="18355008" crc="e8d67865" /> | |
| 2046 | <rom name="Sol-Feace (Japan) (Track 10).bin" size="59119872" crc="c5793b77" /> | |
| 2047 | <rom name="Sol-Feace (Japan) (Track 11).bin" size="23127216" crc="3353021e" /> | |
| 2048 | <rom name="Sol-Feace (Japan) (Track 12).bin" size="40118064" crc="c9a7ca2b" /> | |
| 2049 | <rom name="Sol-Feace (Japan) (Track 13).bin" size="15887760" crc="380f9b88" /> | |
| 2050 | <rom name="Sol-Feace (Japan) (Track 14).bin" size="27675984" crc="a7802d83" /> | |
| 2051 | <rom name="Sol-Feace (Japan) (Track 15).bin" size="25933152" crc="541df37e" /> | |
| 2052 | <rom name="Sol-Feace (Japan) (Track 16).bin" size="83822928" crc="d8ba28ef" /> | |
| 2053 | <rom name="Sol-Feace (Japan) (Track 17).bin" size="19262880" crc="a60f598b" /> | |
| 2054 | <rom name="Sol-Feace (Japan) (Track 18).bin" size="27854736" crc="60ee3eab" /> | |
| 2055 | <rom name="Sol-Feace (Japan) (Track 19).bin" size="35889168" crc="4b696831" /> | |
| 2056 | <rom name="Sol-Feace (Japan) (Track 20).bin" size="41399904" crc="4d05d9a8" /> | |
| 2057 | <rom name="Sol-Feace (Japan) (Track 21).bin" size="16845024" crc="7faff230" /> | |
| 2058 | <rom name="Sol-Feace (Japan) (Track 22).bin" size="20932800" crc="d14346cf" /> | |
| 2059 | --> | |
| 2060 | 691 | <description>Sol-Feace (Jpn)</description> |
| 2061 | 692 | <year>1991</year> |
| 2062 | 693 | <publisher>Wolf Team</publisher> |
| 2063 | 694 | <info name="serial" value="T-32024"/> |
| 2064 | <info name="disk_ring" value="T-32024P-00003-R1K V"/> | |
| 2065 | 695 | <info name="release" value="19911212"/> |
| 2066 | 696 | <info name="alt_title" value="ソル・フィース"/> |
| 2067 | 697 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2072 | 702 | </software> |
| 2073 | 703 | |
| 2074 | 704 | <software name="soniccd"> |
| 2075 | <!-- source redump.org | |
| 2076 | <rom name="Sonic the Hedgehog CD (Japan).cue" size="4322" crc="6a065b3b" /> | |
| 2077 | <rom name="Sonic the Hedgehog CD (Japan) (Track 01).bin" size="129592848" crc="4c9fb365" /> | |
| 2078 | <rom name="Sonic the Hedgehog CD (Japan) (Track 02).bin" size="1093680" crc="b5575d36" /> | |
| 2079 | <rom name="Sonic the Hedgehog CD (Japan) (Track 03).bin" size="19077072" crc="fc6ec59e" /> | |
| 2080 | <rom name="Sonic the Hedgehog CD (Japan) (Track 04).bin" size="14231952" crc="fb6c1ae5" /> | |
| 2081 | <rom name="Sonic the Hedgehog CD (Japan) (Track 05).bin" size="14827008" crc="1e0d8f87" /> | |
| 2082 | <rom name="Sonic the Hedgehog CD (Japan) (Track 06).bin" size="17567088" crc="acd1383f" /> | |
| 2083 | <rom name="Sonic the Hedgehog CD (Japan) (Track 07).bin" size="13980288" crc="293daff5" /> | |
| 2084 | <rom name="Sonic the Hedgehog CD (Japan) (Track 08).bin" size="14342496" crc="038ddf9e" /> | |
| 2085 | <rom name="Sonic the Hedgehog CD (Japan) (Track 09).bin" size="20278944" crc="e4932318" /> | |
| 2086 | <rom name="Sonic the Hedgehog CD (Japan) (Track 10).bin" size="14041440" crc="a583cc24" /> | |
| 2087 | <rom name="Sonic the Hedgehog CD (Japan) (Track 11).bin" size="13653360" crc="c0b8e3ef" /> | |
| 2088 | <rom name="Sonic the Hedgehog CD (Japan) (Track 12).bin" size="18016320" crc="021318e0" /> | |
| 2089 | <rom name="Sonic the Hedgehog CD (Japan) (Track 13).bin" size="13573392" crc="68d8d7de" /> | |
| 2090 | <rom name="Sonic the Hedgehog CD (Japan) (Track 14).bin" size="11411904" crc="ea181442" /> | |
| 2091 | <rom name="Sonic the Hedgehog CD (Japan) (Track 15).bin" size="16231152" crc="092b16d8" /> | |
| 2092 | <rom name="Sonic the Hedgehog CD (Japan) (Track 16).bin" size="10932096" crc="4bd4f694" /> | |
| 2093 | <rom name="Sonic the Hedgehog CD (Japan) (Track 17).bin" size="14048496" crc="9c978637" /> | |
| 2094 | <rom name="Sonic the Hedgehog CD (Japan) (Track 18).bin" size="20137824" crc="ecf914a0" /> | |
| 2095 | <rom name="Sonic the Hedgehog CD (Japan) (Track 19).bin" size="12881904" crc="96c5de23" /> | |
| 2096 | <rom name="Sonic the Hedgehog CD (Japan) (Track 20).bin" size="11783520" crc="6c51ddc6" /> | |
| 2097 | <rom name="Sonic the Hedgehog CD (Japan) (Track 21).bin" size="14942256" crc="98e7a25e" /> | |
| 2098 | <rom name="Sonic the Hedgehog CD (Japan) (Track 22).bin" size="11607120" crc="874c1767" /> | |
| 2099 | <rom name="Sonic the Hedgehog CD (Japan) (Track 23).bin" size="12816048" crc="9ec4920e" /> | |
| 2100 | <rom name="Sonic the Hedgehog CD (Japan) (Track 24).bin" size="14088480" crc="a55590e6" /> | |
| 2101 | <rom name="Sonic the Hedgehog CD (Japan) (Track 25).bin" size="14660016" crc="a48ca9dd" /> | |
| 2102 | <rom name="Sonic the Hedgehog CD (Japan) (Track 26).bin" size="5294352" crc="dab24994" /> | |
| 2103 | <rom name="Sonic the Hedgehog CD (Japan) (Track 27).bin" size="5296704" crc="b7a17d88" /> | |
| 2104 | <rom name="Sonic the Hedgehog CD (Japan) (Track 28).bin" size="1458240" crc="6b3db1ca" /> | |
| 2105 | <rom name="Sonic the Hedgehog CD (Japan) (Track 29).bin" size="3988992" crc="c69de397" /> | |
| 2106 | <rom name="Sonic the Hedgehog CD (Japan) (Track 30).bin" size="3869040" crc="7142a282" /> | |
| 2107 | <rom name="Sonic the Hedgehog CD (Japan) (Track 31).bin" size="2008608" crc="59e1254d" /> | |
| 2108 | <rom name="Sonic the Hedgehog CD (Japan) (Track 32).bin" size="21513744" crc="bcf8e467" /> | |
| 2109 | <rom name="Sonic the Hedgehog CD (Japan) (Track 33).bin" size="21873600" crc="646b66ee" /> | |
| 2110 | <rom name="Sonic the Hedgehog CD (Japan) (Track 34).bin" size="16214688" crc="ad32fc11" /> | |
| 2111 | <rom name="Sonic the Hedgehog CD (Japan) (Track 35).bin" size="32104800" crc="e63f110d" /> | |
| 2112 | --> | |
| 2113 | 705 | <description>Sonic The Hedgehog CD (Jpn)</description> |
| 2114 | 706 | <year>1993</year> |
| 2115 | 707 | <publisher>Sega</publisher> |
| 2116 | 708 | <info name="serial" value="G-6021"/> |
| 2117 | <info name="disk_ring" value="G-6021P-00128-R1M V"/> | |
| 2118 | 709 | <info name="release" value="19930923"/> |
| 2119 | 710 | <info name="alt_title" value="ソニック・ザ・ヘッジホッグCD"/> |
| 2120 | 711 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2125 | 716 | </software> |
| 2126 | 717 | |
| 2127 | 718 | <software name="swra"> |
| 2128 | <!-- source redump.org | |
| 2129 | <rom name="Star Wars - Rebel Assault (Japan).cue" size="236" crc="593af0ea" /> | |
| 2130 | <rom name="Star Wars - Rebel Assault (Japan) (Track 1).bin" size="395248896" crc="e49d72d3" /> | |
| 2131 | <rom name="Star Wars - Rebel Assault (Japan) (Track 2).bin" size="57795696" crc="ea28d67f" /> | |
| 2132 | --> | |
| 2133 | 719 | <description>Star Wars - Rebel Assault (Jpn)</description> |
| 2134 | 720 | <year>19??</year> |
| 2135 | 721 | <publisher>Victor Entertainment</publisher> |
| 2136 | 722 | <info name="serial" value="T-60174"/> |
| 2137 | <info name="disk_ring" value="T-60174P-00232-R1M V"/> | |
| 2138 | 723 | <info name="release" value="19940922"/> |
| 2139 | 724 | <info name="alt_title" value="スターウォーズ・レベル・アサルト"/> |
| 2140 | 725 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2145 | 730 | </software> |
| 2146 | 731 | |
| 2147 | 732 | <software name="starblad"> |
| 2148 | <!-- source redump.org | |
| 2149 | <rom name="Starblade (Japan).cue" size="204" crc="04ca242d" /> | |
| 2150 | <rom name="Starblade (Japan) (Track 1).bin" size="466669728" crc="239f44d6" /> | |
| 2151 | <rom name="Starblade (Japan) (Track 2).bin" size="1528800" crc="9265e140" /> | |
| 2152 | --> | |
| 2153 | 733 | <description>Starblade (Jpn)</description> |
| 2154 | 734 | <year>1994</year> |
| 2155 | 735 | <publisher>Namco</publisher> |
| 2156 | 736 | <info name="serial" value="T-14014"/> |
| 2157 | <info name="disk_ring" value="T-14014P-00246-R1M V"/> | |
| 2158 | 737 | <info name="release" value="19941028"/> |
| 2159 | 738 | <info name="alt_title" value="スターブレード"/> |
| 2160 | 739 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2165 | 744 | </software> |
| 2166 | 745 | |
| 2167 | 746 | <software name="switch"> |
| 2168 | <!-- source redump.org | |
| 2169 | <rom name="Switch (Japan).cue" size="4996" crc="78993adf" /> | |
| 2170 | <rom name="Switch (Japan) (Track 01).bin" size="253884288" crc="09aceef5" /> | |
| 2171 | <rom name="Switch (Japan) (Track 02).bin" size="16732128" crc="8414ba7d" /> | |
| 2172 | <rom name="Switch (Japan) (Track 03).bin" size="18538464" crc="fbd15b13" /> | |
| 2173 | <rom name="Switch (Japan) (Track 04).bin" size="6037584" crc="88b99ba0" /> | |
| 2174 | <rom name="Switch (Japan) (Track 05).bin" size="6253968" crc="5d3f054c" /> | |
| 2175 | <rom name="Switch (Japan) (Track 06).bin" size="6512688" crc="628245b1" /> | |
| 2176 | <rom name="Switch (Japan) (Track 07).bin" size="5435472" crc="6a6bf581" /> | |
| 2177 | <rom name="Switch (Japan) (Track 08).bin" size="6218688" crc="f1ee3844" /> | |
| 2178 | <rom name="Switch (Japan) (Track 09).bin" size="5999952" crc="63bca993" /> | |
| 2179 | <rom name="Switch (Japan) (Track 10).bin" size="5096784" crc="d0c71776" /> | |
| 2180 | <rom name="Switch (Japan) (Track 11).bin" size="5618928" crc="9060453b" /> | |
| 2181 | <rom name="Switch (Japan) (Track 12).bin" size="4934496" crc="ac2c45c9" /> | |
| 2182 | <rom name="Switch (Japan) (Track 13).bin" size="3304560" crc="d71648d8" /> | |
| 2183 | <rom name="Switch (Japan) (Track 14).bin" size="4776912" crc="3e34f758" /> | |
| 2184 | <rom name="Switch (Japan) (Track 15).bin" size="6197520" crc="61d9b048" /> | |
| 2185 | <rom name="Switch (Japan) (Track 16).bin" size="4447632" crc="49ae4d9a" /> | |
| 2186 | <rom name="Switch (Japan) (Track 17).bin" size="6385680" crc="53a252fb" /> | |
| 2187 | <rom name="Switch (Japan) (Track 18).bin" size="5957616" crc="5fb74365" /> | |
| 2188 | <rom name="Switch (Japan) (Track 19).bin" size="5983488" crc="cb93cfee" /> | |
| 2189 | <rom name="Switch (Japan) (Track 20).bin" size="6719664" crc="a50b9380" /> | |
| 2190 | <rom name="Switch (Japan) (Track 21).bin" size="6867840" crc="290d6ba5" /> | |
| 2191 | <rom name="Switch (Japan) (Track 22).bin" size="6491520" crc="3c1cac6d" /> | |
| 2192 | <rom name="Switch (Japan) (Track 23).bin" size="6571488" crc="1a883e03" /> | |
| 2193 | <rom name="Switch (Japan) (Track 24).bin" size="6630288" crc="5b9e30aa" /> | |
| 2194 | <rom name="Switch (Japan) (Track 25).bin" size="5404896" crc="d0959fad" /> | |
| 2195 | <rom name="Switch (Japan) (Track 26).bin" size="7018368" crc="4f9142fc" /> | |
| 2196 | <rom name="Switch (Japan) (Track 27).bin" size="7077168" crc="38dc6050" /> | |
| 2197 | <rom name="Switch (Japan) (Track 28).bin" size="6352752" crc="615fb73d" /> | |
| 2198 | <rom name="Switch (Japan) (Track 29).bin" size="6719664" crc="669e4e33" /> | |
| 2199 | <rom name="Switch (Japan) (Track 30).bin" size="6411552" crc="9db5af80" /> | |
| 2200 | <rom name="Switch (Japan) (Track 31).bin" size="5835312" crc="2bb48d7f" /> | |
| 2201 | <rom name="Switch (Japan) (Track 32).bin" size="6870192" crc="eb3089d7" /> | |
| 2202 | <rom name="Switch (Japan) (Track 33).bin" size="5999952" crc="6dc969fe" /> | |
| 2203 | <rom name="Switch (Japan) (Track 34).bin" size="5668320" crc="0c2684db" /> | |
| 2204 | <rom name="Switch (Japan) (Track 35).bin" size="6315120" crc="0b59ac0a" /> | |
| 2205 | <rom name="Switch (Japan) (Track 36).bin" size="6705552" crc="0e69ea50" /> | |
| 2206 | <rom name="Switch (Japan) (Track 37).bin" size="5999952" crc="ee7132ff" /> | |
| 2207 | <rom name="Switch (Japan) (Track 38).bin" size="5651856" crc="58fe60fe" /> | |
| 2208 | <rom name="Switch (Japan) (Track 39).bin" size="7415856" crc="8fb77e97" /> | |
| 2209 | <rom name="Switch (Japan) (Track 40).bin" size="6729072" crc="fbf23e6a" /> | |
| 2210 | <rom name="Switch (Japan) (Track 41).bin" size="3184608" crc="9a024d69" /> | |
| 2211 | <rom name="Switch (Japan) (Track 42).bin" size="6275136" crc="00b05629" /> | |
| 2212 | <rom name="Switch (Japan) (Track 43).bin" size="6263376" crc="5da86cb0" /> | |
| 2213 | <rom name="Switch (Japan) (Track 44).bin" size="10903872" crc="6bd2630a" /> | |
| 2214 | <rom name="Switch (Japan) (Track 45).bin" size="34835472" crc="ba6b2357" /> | |
| 2215 | <rom name="Switch (Japan) (Track 46).bin" size="11856432" crc="acc8f0a5" /> | |
| 2216 | --> | |
| 2217 | 747 | <description>Switch (Jpn)</description> |
| 2218 | 748 | <year>1993</year> |
| 2219 | 749 | <publisher>Sega</publisher> |
| 2220 | 750 | <info name="serial" value="G-6009"/> |
| 2221 | <info name="disk_ring" value="G-6009P-00061-R1M V"/> | |
| 2222 | 751 | <info name="release" value="19930423"/> |
| 2223 | 752 | <info name="alt_title" value="スイッチ"/> |
| 2224 | 753 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2229 | 758 | </software> |
| 2230 | 759 | |
| 2231 | 760 | <software name="tenbu"> |
| 2232 | <!-- source redump.org | |
| 2233 | <rom name="Tenbu Mega CD Special (Japan).cue" size="1089" crc="79c8ab53" /> | |
| 2234 | <rom name="Tenbu Mega CD Special (Japan) (Track 1).bin" size="216478080" crc="c4127fc0" /> | |
| 2235 | <rom name="Tenbu Mega CD Special (Japan) (Track 2).bin" size="43580208" crc="84945981" /> | |
| 2236 | <rom name="Tenbu Mega CD Special (Japan) (Track 3).bin" size="57388800" crc="5502704e" /> | |
| 2237 | <rom name="Tenbu Mega CD Special (Japan) (Track 4).bin" size="41882064" crc="730168c6" /> | |
| 2238 | <rom name="Tenbu Mega CD Special (Japan) (Track 5).bin" size="35009520" crc="6f7ae3c5" /> | |
| 2239 | <rom name="Tenbu Mega CD Special (Japan) (Track 6).bin" size="54799248" crc="11a8aa44" /> | |
| 2240 | <rom name="Tenbu Mega CD Special (Japan) (Track 7).bin" size="4144224" crc="b3ef21c9" /> | |
| 2241 | <rom name="Tenbu Mega CD Special (Japan) (Track 8).bin" size="2940000" crc="e49038b7" /> | |
| 2242 | <rom name="Tenbu Mega CD Special (Japan) (Track 9).bin" size="3231648" crc="bb700374" /> | |
| 2243 | --> | |
| 2244 | 761 | <description>Tenbu Mega CD Special (Jpn)</description> |
| 2245 | 762 | <year>1992</year> |
| 2246 | 763 | <publisher>Wolf Team</publisher> |
| 2247 | 764 | <info name="serial" value="T-32084"/> |
| 2248 | <info name="disk_ring" value="T-32084P-00044-R1M V"/> | |
| 2249 | 765 | <info name="release" value="19921225"/> |
| 2250 | 766 | <info name="alt_title" value="天舞メガCDスペシャル"/> |
| 2251 | 767 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2256 | 772 | </software> |
| 2257 | 773 | |
| 2258 | 774 | <software name="tenkafub"> |
| 2259 | <!-- source redump.org | |
| 2260 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan).cue" size="2547" crc="0d10e057" /> | |
| 2261 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 01).bin" size="120457680" crc="487c1c68" /> | |
| 2262 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 02).bin" size="1613472" crc="42d8c275" /> | |
| 2263 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 03).bin" size="32074224" crc="5f64fdf4" /> | |
| 2264 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 04).bin" size="30700656" crc="57bd6abb" /> | |
| 2265 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 05).bin" size="39852288" crc="548d844b" /> | |
| 2266 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 06).bin" size="25401600" crc="53b94b1d" /> | |
| 2267 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 07).bin" size="26848080" crc="f5422754" /> | |
| 2268 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 08).bin" size="26365920" crc="28b8c277" /> | |
| 2269 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 09).bin" size="30500736" crc="1a7ac132" /> | |
| 2270 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 10).bin" size="19227600" crc="f534ddcc" /> | |
| 2271 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 11).bin" size="15033984" crc="ab12bc45" /> | |
| 2272 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 12).bin" size="29616384" crc="eba969a1" /> | |
| 2273 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 13).bin" size="28654416" crc="19b15fdf" /> | |
| 2274 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 14).bin" size="23113104" crc="ab39235c" /> | |
| 2275 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 15).bin" size="28052304" crc="732460be" /> | |
| 2276 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 16).bin" size="32869200" crc="a2263ee7" /> | |
| 2277 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 17).bin" size="25883760" crc="2bb8c63a" /> | |
| 2278 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 18).bin" size="35757456" crc="16d2cedc" /> | |
| 2279 | <rom name="Tenkafubu - Eiyuutachi no Houkou (Japan) (Track 19).bin" size="33828816" crc="5a99929d" /> | |
| 2280 | --> | |
| 2281 | 775 | <description>Tenkafubu - Eiyuutachi no Houkou (Jpn)</description> |
| 2282 | 776 | <year>1991</year> |
| 2283 | 777 | <publisher>Game Arts</publisher> |
| 2284 | 778 | <info name="serial" value="T-45024"/> |
| 2285 | <info name="disk_ring" value="T-45024P-00008-R2K V"/> | |
| 2286 | 779 | <info name="release" value="19911228"/> |
| 2287 | 780 | <info name="alt_title" value="天下布武 英雄たちの咆哮"/> |
| 2288 | 781 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2293 | 786 | </software> |
| 2294 | 787 | |
| 2295 | 788 | <software name="tstormfx"> |
| 2296 | <!-- source redump.org | |
| 2297 | <rom name="Thunder Storm FX (Japan).cue" size="218" crc="aa9ff0ed" /> | |
| 2298 | <rom name="Thunder Storm FX (Japan) (Track 1).bin" size="259446768" crc="5512fd9c" /> | |
| 2299 | <rom name="Thunder Storm FX (Japan) (Track 2).bin" size="1653456" crc="bf577267" /> | |
| 2300 | --> | |
| 2301 | 789 | <description>Thunder Storm FX (Jpn)</description> |
| 2302 | 790 | <year>1992</year> |
| 2303 | 791 | <publisher>Wolf Team</publisher> |
| 2304 | 792 | <info name="serial" value="T-32064"/> |
| 2305 | <info name="disk_ring" value="T-32064P-00022-R2M V, T-32064P-00022-R1M V"/> | |
| 2306 | 793 | <info name="release" value="19920828"/> |
| 2307 | 794 | <info name="alt_title" value="サンダーストームFX"/> |
| 2308 | 795 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2313 | 800 | </software> |
| 2314 | 801 | |
| 2315 | 802 | <software name="thawk"> |
| 2316 | <!-- source redump.org | |
| 2317 | <rom name="Thunderhawk (Japan).cue" size="1236" crc="f4ae0600" /> | |
| 2318 | <rom name="Thunderhawk (Japan) (Track 01).bin" size="104504064" crc="590bda55" /> | |
| 2319 | <rom name="Thunderhawk (Japan) (Track 02).bin" size="38704512" crc="6d7bdc00" /> | |
| 2320 | <rom name="Thunderhawk (Japan) (Track 03).bin" size="38532816" crc="8dd0aa1f" /> | |
| 2321 | <rom name="Thunderhawk (Japan) (Track 04).bin" size="15692544" crc="f4c63271" /> | |
| 2322 | <rom name="Thunderhawk (Japan) (Track 05).bin" size="10094784" crc="eb1683d8" /> | |
| 2323 | <rom name="Thunderhawk (Japan) (Track 06).bin" size="20039040" crc="f43cba4f" /> | |
| 2324 | <rom name="Thunderhawk (Japan) (Track 07).bin" size="40656672" crc="e35a0605" /> | |
| 2325 | <rom name="Thunderhawk (Japan) (Track 08).bin" size="40717824" crc="7750a085" /> | |
| 2326 | <rom name="Thunderhawk (Japan) (Track 09).bin" size="25081728" crc="28125505" /> | |
| 2327 | <rom name="Thunderhawk (Japan) (Track 10).bin" size="44243472" crc="a674e49f" /> | |
| 2328 | <rom name="Thunderhawk (Japan) (Track 11).bin" size="52945872" crc="5229bdbf" /> | |
| 2329 | --> | |
| 2330 | 803 | <description>Thunderhawk (Jpn)</description> |
| 2331 | 804 | <year>1993</year> |
| 2332 | 805 | <publisher>Victor Entertainment</publisher> |
| 2333 | 806 | <info name="serial" value="T-60134"/> |
| 2334 | <info name="disk_ring" value="T-60134P-00126 2"/> | |
| 2335 | 807 | <info name="release" value="19930917"/> |
| 2336 | 808 | <info name="alt_title" value="サンダーホーク"/> |
| 2337 | 809 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2342 | 814 | </software> |
| 2343 | 815 | |
| 2344 | 816 | <software name="timegal"> |
| 2345 | <!-- source redump.org | |
| 2346 | <rom name="Time Gal (Japan).cue" size="202" crc="a50da29e" /> | |
| 2347 | <rom name="Time Gal (Japan) (Track 1).bin" size="304652208" crc="1a756c12" /> | |
| 2348 | <rom name="Time Gal (Japan) (Track 2).bin" size="1651104" crc="fd9c4ef7" /> | |
| 2349 | --> | |
| 2350 | 817 | <description>Time Gal (Jpn)</description> |
| 2351 | 818 | <year>1992</year> |
| 2352 | 819 | <publisher>Wolf Team</publisher> |
| 2353 | 820 | <info name="serial" value="T-32114"/> |
| 2354 | <info name="disk_ring" value="T-32114P-00031-R1M V"/> | |
| 2355 | 821 | <info name="release" value="19921113"/> |
| 2356 | 822 | <info name="alt_title" value="タイムギャル"/> |
| 2357 | 823 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2362 | 828 | </software> |
| 2363 | 829 | |
| 2364 | 830 | <software name="uruseiya"> |
| 2365 | <!-- source redump.org | |
| 2366 | <rom name="Urusei Yatsura - Dear My Friends (Japan).cue" size="384" crc="6947c2fa" /> | |
| 2367 | <rom name="Urusei Yatsura - Dear My Friends (Japan) (Track 1).bin" size="383653536" crc="187ce23e" /> | |
| 2368 | <rom name="Urusei Yatsura - Dear My Friends (Japan) (Track 2).bin" size="21083328" crc="ef56f804" /> | |
| 2369 | <rom name="Urusei Yatsura - Dear My Friends (Japan) (Track 3).bin" size="39774672" crc="5e2d74bf" /> | |
| 2370 | --> | |
| 2371 | 831 | <description>Urusei Yatsura - Dear My Friends (Jpn)</description> |
| 2372 | 832 | <year>1994</year> |
| 2373 | 833 | <publisher>Game Arts</publisher> |
| 2374 | 834 | <info name="serial" value="T-45064"/> |
| 2375 | <info name="disk_ring" value="T-45064P-00195-R1M V"/> | |
| 2376 | 835 | <info name="release" value="19940415"/> |
| 2377 | 836 | <info name="alt_title" value="うる星やつら ディア マイ フレンズ"/> |
| 2378 | 837 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2383 | 842 | </software> |
| 2384 | 843 | |
| 2385 | 844 | <software name="vay"> |
| 2386 | <!-- source redump.org | |
| 2387 | <rom name="Vay - Ryuusei no Yoroi (Japan).cue" size="2107" crc="b0351491" /> | |
| 2388 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 01).bin" size="122294592" crc="e080738e" /> | |
| 2389 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 02).bin" size="1368864" crc="e0613845" /> | |
| 2390 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 03).bin" size="21419664" crc="795cb59c" /> | |
| 2391 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 04).bin" size="21231504" crc="fedaeff7" /> | |
| 2392 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 05).bin" size="19439280" crc="d13e65c9" /> | |
| 2393 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 06).bin" size="22146432" crc="f530ac1a" /> | |
| 2394 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 07).bin" size="20474160" crc="0f22a101" /> | |
| 2395 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 08).bin" size="16746240" crc="8e131629" /> | |
| 2396 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 09).bin" size="21937104" crc="4b44eb01" /> | |
| 2397 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 10).bin" size="7658112" crc="ee1152a5" /> | |
| 2398 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 11).bin" size="11952864" crc="119444a8" /> | |
| 2399 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 12).bin" size="10181808" crc="c862c71b" /> | |
| 2400 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 13).bin" size="16595712" crc="58fbc5a8" /> | |
| 2401 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 14).bin" size="1164240" crc="12313260" /> | |
| 2402 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 15).bin" size="32163600" crc="9cf28017" /> | |
| 2403 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 16).bin" size="19206432" crc="97d73c99" /> | |
| 2404 | <rom name="Vay - Ryuusei no Yoroi (Japan) (Track 17).bin" size="22920240" crc="c5f8063d" /> | |
| 2405 | --> | |
| 2406 | 845 | <description>Vay - Ryuusei no Yoroi (Jpn)</description> |
| 2407 | 846 | <year>1993</year> |
| 2408 | 847 | <publisher>SIMS</publisher> |
| 2409 | 848 | <info name="serial" value="T-44014"/> |
| 2410 | <info name="disk_ring" value="T-44014P-00141 1"/> | |
| 2411 | 849 | <info name="release" value="19931022"/> |
| 2412 | 850 | <info name="alt_title" value="Vay 流星の鎧"/> |
| 2413 | 851 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2418 | 856 | </software> |
| 2419 | 857 | |
| 2420 | 858 | <software name="funkband"> |
| 2421 | <!-- source redump.org | |
| 2422 | <rom name="Wakusei Woodstock - Funky Horror Band (Japan).cue" size="677" crc="d30c2458" /> | |
| 2423 | <rom name="Wakusei Woodstock - Funky Horror Band (Japan) (Track 1).bin" size="58030896" crc="15c08675" /> | |
| 2424 | <rom name="Wakusei Woodstock - Funky Horror Band (Japan) (Track 2).bin" size="30528960" crc="195f442b" /> | |
| 2425 | <rom name="Wakusei Woodstock - Funky Horror Band (Japan) (Track 3).bin" size="30425472" crc="081d9f6c" /> | |
| 2426 | <rom name="Wakusei Woodstock - Funky Horror Band (Japan) (Track 4).bin" size="33812352" crc="ba656829" /> | |
| 2427 | <rom name="Wakusei Woodstock - Funky Horror Band (Japan) (Track 5).bin" size="49968240" crc="678ce0ca" /> | |
| 2428 | --> | |
| 2429 | 859 | <description>Wakusei Woodstock - Funky Horror Band (Jpn)</description> |
| 2430 | 860 | <year>1991</year> |
| 2431 | 861 | <publisher>Sega</publisher> |
| 2432 | 862 | <info name="serial" value="G-6001"/> |
| 2433 | <info name="disk_ring" value="G-6001P-00001-R1K V"/> | |
| 2434 | 863 | <info name="release" value="19911220"/> |
| 2435 | 864 | <info name="alt_title" value="惑星ウッドストック ファンキーホラーバンド"/> |
| 2436 | 865 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2441 | 870 | </software> |
| 2442 | 871 | |
| 2443 | 872 | <software name="wingcomm"> |
| 2444 | <!-- source redump.org | |
| 2445 | <rom name="Wing Commander (Japan).cue" size="678" crc="6367c9d3" /> | |
| 2446 | <rom name="Wing Commander (Japan) (Track 1).bin" size="425876640" crc="bd623044" /> | |
| 2447 | <rom name="Wing Commander (Japan) (Track 2).bin" size="20765808" crc="8031b38b" /> | |
| 2448 | <rom name="Wing Commander (Japan) (Track 3).bin" size="7404096" crc="34a864b1" /> | |
| 2449 | <rom name="Wing Commander (Japan) (Track 4).bin" size="5783568" crc="d8efc4cc" /> | |
| 2450 | <rom name="Wing Commander (Japan) (Track 5).bin" size="7286496" crc="6e9f7d90" /> | |
| 2451 | <rom name="Wing Commander (Japan) (Track 6).bin" size="30423120" crc="1890f041" /> | |
| 2452 | --> | |
| 2453 | 873 | <description>Wing Commander (Jpn)</description> |
| 2454 | 874 | <year>1994</year> |
| 2455 | 875 | <publisher>Sega</publisher> |
| 2456 | 876 | <info name="serial" value="G-6011"/> |
| 2457 | <info name="disk_ring" value="G-6011P-00175-R1M V"/> | |
| 2458 | 877 | <info name="release" value="19940325"/> |
| 2459 | 878 | <info name="alt_title" value="ウイングコマンダー"/> |
| 2460 | 879 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2465 | 884 | </software> |
| 2466 | 885 | |
| 2467 | 886 | <software name="winpost"> |
| 2468 | <!-- source redump.org | |
| 2469 | <rom name="Winning Post (Japan).cue" size="2167" crc="0a09b085" /> | |
| 2470 | <rom name="Winning Post (Japan) (Track 01).bin" size="10252368" crc="db23bafd" /> | |
| 2471 | <rom name="Winning Post (Japan) (Track 02).bin" size="7989744" crc="c41baa20" /> | |
| 2472 | <rom name="Winning Post (Japan) (Track 03).bin" size="6164592" crc="ddb1ba32" /> | |
| 2473 | <rom name="Winning Post (Japan) (Track 04).bin" size="9923088" crc="5c2e2ccf" /> | |
| 2474 | <rom name="Winning Post (Japan) (Track 05).bin" size="8344896" crc="ba591013" /> | |
| 2475 | <rom name="Winning Post (Japan) (Track 06).bin" size="1164240" crc="fd93dabf" /> | |
| 2476 | <rom name="Winning Post (Japan) (Track 07).bin" size="5040336" crc="0e34184a" /> | |
| 2477 | <rom name="Winning Post (Japan) (Track 08).bin" size="4188912" crc="0129ab9e" /> | |
| 2478 | <rom name="Winning Post (Japan) (Track 09).bin" size="3466848" crc="f806a3a3" /> | |
| 2479 | <rom name="Winning Post (Japan) (Track 10).bin" size="3466848" crc="28facd3a" /> | |
| 2480 | <rom name="Winning Post (Japan) (Track 11).bin" size="3172848" crc="efb193c8" /> | |
| 2481 | <rom name="Winning Post (Japan) (Track 12).bin" size="2450784" crc="bbff49f8" /> | |
| 2482 | <rom name="Winning Post (Japan) (Track 13).bin" size="3433920" crc="127b5a17" /> | |
| 2483 | <rom name="Winning Post (Japan) (Track 14).bin" size="7890960" crc="1582d0bb" /> | |
| 2484 | <rom name="Winning Post (Japan) (Track 15).bin" size="8184960" crc="832432ac" /> | |
| 2485 | <rom name="Winning Post (Japan) (Track 16).bin" size="9069312" crc="0862cab2" /> | |
| 2486 | <rom name="Winning Post (Japan) (Track 17).bin" size="7564032" crc="68d265a9" /> | |
| 2487 | <rom name="Winning Post (Japan) (Track 18).bin" size="5433120" crc="11927a0d" /> | |
| 2488 | <rom name="Winning Post (Japan) (Track 19).bin" size="33570096" crc="6bddf7c6" /> | |
| 2489 | --> | |
| 2490 | 887 | <description>Winning Post (Jpn)</description> |
| 2491 | 888 | <year>1993</year> |
| 2492 | 889 | <publisher>Koei</publisher> |
| 2493 | 890 | <info name="serial" value="T-76044"/> |
| 2494 | <info name="disk_ring" value="T-76044P-00123 1"/> | |
| 2495 | 891 | <info name="release" value="19930917"/> |
| 2496 | 892 | <info name="alt_title" value="ウイニングポスト"/> |
| 2497 | 893 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2502 | 898 | </software> |
| 2503 | 899 | |
| 2504 | 900 | <software name="wolfchld"> |
| 2505 | <!-- source redump.org | |
| 2506 | <rom name="Wolfchild (Japan).cue" size="1214" crc="d3f5888a" /> | |
| 2507 | <rom name="Wolfchild (Japan) (Track 01).bin" size="11343696" crc="e2e83143" /> | |
| 2508 | <rom name="Wolfchild (Japan) (Track 02).bin" size="34477968" crc="b41b20c1" /> | |
| 2509 | <rom name="Wolfchild (Japan) (Track 03).bin" size="53094048" crc="2f1e370f" /> | |
| 2510 | <rom name="Wolfchild (Japan) (Track 04).bin" size="52934112" crc="c48136da" /> | |
| 2511 | <rom name="Wolfchild (Japan) (Track 05).bin" size="52743600" crc="4065e696" /> | |
| 2512 | <rom name="Wolfchild (Japan) (Track 06).bin" size="52880016" crc="0f7e0a4c" /> | |
| 2513 | <rom name="Wolfchild (Japan) (Track 07).bin" size="52847088" crc="7ef3edc1" /> | |
| 2514 | <rom name="Wolfchild (Japan) (Track 08).bin" size="31963680" crc="e7d8254f" /> | |
| 2515 | <rom name="Wolfchild (Japan) (Track 09).bin" size="21045696" crc="f708df83" /> | |
| 2516 | <rom name="Wolfchild (Japan) (Track 10).bin" size="1740480" crc="219b4cb2" /> | |
| 2517 | <rom name="Wolfchild (Japan) (Track 11).bin" size="19961424" crc="bcedc4fc" /> | |
| 2518 | --> | |
| 2519 | 901 | <description>Wolfchild (Jpn)</description> |
| 2520 | 902 | <year>1993</year> |
| 2521 | 903 | <publisher>Victor Entertainment</publisher> |
| 2522 | 904 | <info name="serial" value="T-60104"/> |
| 2523 | <info name="disk_ring" value="T-60104P-00054-R1M V"/> | |
| 2524 | 905 | <info name="release" value="19930319"/> |
| 2525 | 906 | <info name="alt_title" value="ウルフチャイルド"/> |
| 2526 | 907 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2531 | 912 | </software> |
| 2532 | 913 | |
| 2533 | 914 | <software name="wonderdg"> |
| 2534 | <!-- source redump.org | |
| 2535 | <rom name="Wonder Dog (Japan).cue" size="2355" crc="e62fe1de" /> | |
| 2536 | <rom name="Wonder Dog (Japan) (Track 01).bin" size="32746896" crc="0cbf80c2" /> | |
| 2537 | <rom name="Wonder Dog (Japan) (Track 02).bin" size="42961632" crc="4c909867" /> | |
| 2538 | <rom name="Wonder Dog (Japan) (Track 03).bin" size="37876608" crc="cfbf018e" /> | |
| 2539 | <rom name="Wonder Dog (Japan) (Track 04).bin" size="36162000" crc="a3f5fe41" /> | |
| 2540 | <rom name="Wonder Dog (Japan) (Track 05).bin" size="42886368" crc="bdc4c197" /> | |
| 2541 | <rom name="Wonder Dog (Japan) (Track 06).bin" size="52176768" crc="57f76a38" /> | |
| 2542 | <rom name="Wonder Dog (Japan) (Track 07).bin" size="34073424" crc="f8495832" /> | |
| 2543 | <rom name="Wonder Dog (Japan) (Track 08).bin" size="10823904" crc="0446a053" /> | |
| 2544 | <rom name="Wonder Dog (Japan) (Track 09).bin" size="11632992" crc="26592b7a" /> | |
| 2545 | <rom name="Wonder Dog (Japan) (Track 10).bin" size="21605472" crc="9ce04c27" /> | |
| 2546 | <rom name="Wonder Dog (Japan) (Track 11).bin" size="18578448" crc="76314b07" /> | |
| 2547 | <rom name="Wonder Dog (Japan) (Track 12).bin" size="15560832" crc="dc71494e" /> | |
| 2548 | <rom name="Wonder Dog (Japan) (Track 13).bin" size="17044944" crc="b5d58afd" /> | |
| 2549 | <rom name="Wonder Dog (Japan) (Track 14).bin" size="17823456" crc="1c956fa0" /> | |
| 2550 | <rom name="Wonder Dog (Japan) (Track 15).bin" size="17941056" crc="a8aea35d" /> | |
| 2551 | <rom name="Wonder Dog (Japan) (Track 16).bin" size="14511840" crc="2f894101" /> | |
| 2552 | <rom name="Wonder Dog (Japan) (Track 17).bin" size="44775024" crc="83162f54" /> | |
| 2553 | <rom name="Wonder Dog (Japan) (Track 18).bin" size="14695296" crc="46b4447a" /> | |
| 2554 | <rom name="Wonder Dog (Japan) (Track 19).bin" size="41265840" crc="3936ac75" /> | |
| 2555 | <rom name="Wonder Dog (Japan) (Track 20).bin" size="6115200" crc="4636ac6d" /> | |
| 2556 | <rom name="Wonder Dog (Japan) (Track 21).bin" size="59449152" crc="e813bb63" /> | |
| 2557 | --> | |
| 2558 | 915 | <description>Wonder Dog (Jpn)</description> |
| 2559 | 916 | <year>1992</year> |
| 2560 | 917 | <publisher>Victor Entertainment</publisher> |
| 2561 | 918 | <info name="serial" value="T-60074"/> |
| 2562 | <info name="disk_ring" value="T-60074P-00028-R1M V"/> | |
| 2563 | 919 | <info name="release" value="19920925"/> |
| 2564 | 920 | <info name="alt_title" value="ワンダードッグ"/> |
| 2565 | 921 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2570 | 926 | </software> |
| 2571 | 927 | |
| 2572 | 928 | <software name="yumemi"> |
| 2573 | <!-- source redump.org | |
| 2574 | <rom name="Yumemi Yakata no Monogatari (Japan).cue" size="240" crc="e9b007a4" /> | |
| 2575 | <rom name="Yumemi Yakata no Monogatari (Japan) (Track 1).bin" size="625389744" crc="e491e189" /> | |
| 2576 | <rom name="Yumemi Yakata no Monogatari (Japan) (Track 2).bin" size="7190064" crc="1d6aa9a6" /> | |
| 2577 | --> | |
| 2578 | 929 | <description>Yumemi Yakata no Monogatari (Jpn)</description> |
| 2579 | 930 | <year>1993</year> |
| 2580 | 931 | <publisher>Sega</publisher> |
| 2581 | 932 | <info name="serial" value="G-6027"/> |
| 2582 | <info name="disk_ring" value="G-6027P-00142-R1M V"/> | |
| 2583 | 933 | <info name="release" value="19931210"/> |
| 2584 | 934 | <info name="alt_title" value="夢見館の物語"/> |
| 2585 | 935 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2590 | 940 | </software> |
| 2591 | 941 | |
| 2592 | 942 | <software name="yumimimx"> |
| 2593 | <!-- source redump.org | |
| 2594 | <rom name="Yumimi Mix (Japan).cue" size="430" crc="70013638" /> | |
| 2595 | <rom name="Yumimi Mix (Japan) (Track 1).bin" size="197299872" crc="e93a646f" /> | |
| 2596 | <rom name="Yumimi Mix (Japan) (Track 2).bin" size="21676032" crc="c535ba1f" /> | |
| 2597 | <rom name="Yumimi Mix (Japan) (Track 3).bin" size="35872704" crc="43e9be38" /> | |
| 2598 | <rom name="Yumimi Mix (Japan) (Track 4).bin" size="14307216" crc="579798ef" /> | |
| 2599 | --> | |
| 2600 | 943 | <description>Yumimi Mix (Jpn)</description> |
| 2601 | 944 | <year>1993</year> |
| 2602 | 945 | <publisher>Game Arts</publisher> |
| 2603 | 946 | <info name="serial" value="T-45034"/> |
| 2604 | <info name="disk_ring" value="T-45034P-00047-R1M V"/> | |
| 2605 | 947 | <info name="release" value="19930129"/> |
| 2606 | 948 | <info name="alt_title" value="ゆみみみっくす"/> |
| 2607 | 949 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 2611 | 953 | </part> |
| 2612 | 954 | </software> |
| 2613 | 955 | |
| 2614 | ||
| 2615 | 956 | <!-- TOSEC dumps --> |
| 2616 | 957 | |
| 958 | ||
| 2617 | 959 | <software name="arank"> |
| 2618 | <!-- source toseciso | |
| 2619 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)[!].cue" size="8145" crc="bca5564d" /> | |
| 2620 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 01 of 55)[!].iso" size="137910272" crc="94c11894" /> | |
| 2621 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 02 of 55)[!].wav" size="1352444" crc="520ad16c" /> | |
| 2622 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 03 of 55)[!].wav" size="27643100" crc="877ee6b7" /> | |
| 2623 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 04 of 55)[!].wav" size="16235900" crc="7a6af65b" /> | |
| 2624 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 05 of 55)[!].wav" size="1420652" crc="8486d807" /> | |
| 2625 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 06 of 55)[!].wav" size="16835660" crc="f38f4aab" /> | |
| 2626 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 07 of 55)[!].wav" size="16572236" crc="06db5694" /> | |
| 2627 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 08 of 55)[!].wav" size="16482860" crc="88624d8e" /> | |
| 2628 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 09 of 55)[!].wav" size="22395788" crc="77084515" /> | |
| 2629 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 10 of 55)[!].wav" size="22057100" crc="83e075da" /> | |
| 2630 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 11 of 55)[!].wav" size="21713708" crc="38779b23" /> | |
| 2631 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 12 of 55)[!].wav" size="1500620" crc="d7f33f52" /> | |
| 2632 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 13 of 55)[!].wav" size="5990588" crc="e563aef4" /> | |
| 2633 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 14 of 55)[!].wav" size="1500620" crc="573bad80" /> | |
| 2634 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 15 of 55)[!].wav" size="2265020" crc="11c339fc" /> | |
| 2635 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 16 of 55)[!].wav" size="2086268" crc="1fef9c88" /> | |
| 2636 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 17 of 55)[!].wav" size="2862428" crc="de3be34b" /> | |
| 2637 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 18 of 55)[!].wav" size="1446524" crc="f85229a4" /> | |
| 2638 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 19 of 55)[!].wav" size="1500620" crc="b74c7dae" /> | |
| 2639 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 20 of 55)[!].wav" size="1519436" crc="0b051b68" /> | |
| 2640 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 21 of 55)[!].wav" size="3986684" crc="d1645f57" /> | |
| 2641 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 22 of 55)[!].wav" size="11710652" crc="b84c8db2" /> | |
| 2642 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 23 of 55)[!].wav" size="1573532" crc="496b4439" /> | |
| 2643 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 24 of 55)[!].wav" size="1408892" crc="3cc5cde5" /> | |
| 2644 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 25 of 55)[!].wav" size="1423004" crc="399bcf2a" /> | |
| 2645 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 26 of 55)[!].wav" size="1408892" crc="f0a7d4a5" /> | |
| 2646 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 27 of 55)[!].wav" size="1540604" crc="93a4bf51" /> | |
| 2647 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 28 of 55)[!].wav" size="1780508" crc="b3407bb0" /> | |
| 2648 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 29 of 55)[!].wav" size="4976876" crc="c66254ad" /> | |
| 2649 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 30 of 55)[!].wav" size="2025116" crc="7268273b" /> | |
| 2650 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 31 of 55)[!].wav" size="3318716" crc="bcfb7e9f" /> | |
| 2651 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 32 of 55)[!].wav" size="4196012" crc="8c1c5578" /> | |
| 2652 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 33 of 55)[!].wav" size="4224236" crc="7d9f03d5" /> | |
| 2653 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 34 of 55)[!].wav" size="4386524" crc="99a5792a" /> | |
| 2654 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 35 of 55)[!].wav" size="4410044" crc="b440494d" /> | |
| 2655 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 36 of 55)[!].wav" size="3930236" crc="0c89a8a5" /> | |
| 2656 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 37 of 55)[!].wav" size="1731116" crc="7e9cee69" /> | |
| 2657 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 38 of 55)[!].wav" size="2608412" crc="87ba6ebb" /> | |
| 2658 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 39 of 55)[!].wav" size="3245804" crc="316136df" /> | |
| 2659 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 40 of 55)[!].wav" size="2236796" crc="e99276ad" /> | |
| 2660 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 41 of 55)[!].wav" size="3243452" crc="f65fbe5f" /> | |
| 2661 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 42 of 55)[!].wav" size="3116444" crc="b06fdd92" /> | |
| 2662 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 43 of 55)[!].wav" size="2726012" crc="c201dfcc" /> | |
| 2663 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 44 of 55)[!].wav" size="3236396" crc="63d90aa0" /> | |
| 2664 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 45 of 55)[!].wav" size="3647996" crc="9e4c0180" /> | |
| 2665 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 46 of 55)[!].wav" size="3318716" crc="fe2a574a" /> | |
| 2666 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 47 of 55)[!].wav" size="2601356" crc="80f2d5e1" /> | |
| 2667 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 48 of 55)[!].wav" size="2827148" crc="a52abd69" /> | |
| 2668 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 49 of 55)[!].wav" size="3365756" crc="460a8705" /> | |
| 2669 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 50 of 55)[!].wav" size="3045884" crc="918bec31" /> | |
| 2670 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 51 of 55)[!].wav" size="2867132" crc="8d1af82e" /> | |
| 2671 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 52 of 55)[!].wav" size="2810684" crc="44722af6" /> | |
| 2672 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 53 of 55)[!].wav" size="23444780" crc="164d590d" /> | |
| 2673 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 54 of 55)[!].wav" size="27045692" crc="af8a4056" /> | |
| 2674 | <rom name="A-Rank Thunder Tanjouhen (1993)(Riot)(NTSC)(JP)(Track 55 of 55)[!].wav" size="42124364" crc="aef65e71" /> | |
| 2675 | --> | |
| 2676 | 960 | <description>A-Rank Thunder Tanjouhen (Jpn)</description> |
| 2677 | 961 | <year>1993</year> |
| 2678 | 962 | <publisher>Nihon Telenet</publisher> |
| r242703 | r242704 | |
| 2687 | 971 | </software> |
| 2688 | 972 | |
| 2689 | 973 | <software name="afterarm"> |
| 2690 | <!-- source toseciso | |
| 2691 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)[!].cue" size="6791" crc="be870589" /> | |
| 2692 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 01 of 39)[!].iso" size="6563840" crc="cb0d3e44" /> | |
| 2693 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 02 of 39)[!].wav" size="10692236" crc="59e03c16" /> | |
| 2694 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 03 of 39)[!].wav" size="9746732" crc="297f890a" /> | |
| 2695 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 04 of 39)[!].wav" size="11644796" crc="b180914a" /> | |
| 2696 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 05 of 39)[!].wav" size="12926636" crc="beb721f5" /> | |
| 2697 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 06 of 39)[!].wav" size="14446028" crc="ca2ba889" /> | |
| 2698 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 07 of 39)[!].wav" size="14384876" crc="5c6425a7" /> | |
| 2699 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 08 of 39)[!].wav" size="15991292" crc="3fb14ed9" /> | |
| 2700 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 09 of 39)[!].wav" size="17383676" crc="693c6138" /> | |
| 2701 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 10 of 39)[!].wav" size="11625980" crc="7fdb1ab3" /> | |
| 2702 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 11 of 39)[!].wav" size="19222940" crc="df77caaa" /> | |
| 2703 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 12 of 39)[!].wav" size="13484060" crc="0e64006d" /> | |
| 2704 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 13 of 39)[!].wav" size="12105788" crc="c69bb636" /> | |
| 2705 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 14 of 39)[!].wav" size="16226492" crc="a94eda81" /> | |
| 2706 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 15 of 39)[!].wav" size="19712156" crc="957174b6" /> | |
| 2707 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 16 of 39)[!].wav" size="18538508" crc="ab7e1a28" /> | |
| 2708 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 17 of 39)[!].wav" size="17677676" crc="c11eef36" /> | |
| 2709 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 18 of 39)[!].wav" size="15462092" crc="a741d546" /> | |
| 2710 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 19 of 39)[!].wav" size="8147372" crc="bba2cd24" /> | |
| 2711 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 20 of 39)[!].wav" size="15034028" crc="de0c37c6" /> | |
| 2712 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 21 of 39)[!].wav" size="19874444" crc="7f31d3b1" /> | |
| 2713 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 22 of 39)[!].wav" size="19754492" crc="d09aa118" /> | |
| 2714 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 23 of 39)[!].wav" size="24317372" crc="ae19656e" /> | |
| 2715 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 24 of 39)[!].wav" size="10332380" crc="7f7bbe94" /> | |
| 2716 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 25 of 39)[!].wav" size="12385676" crc="70b6c8fa" /> | |
| 2717 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 26 of 39)[!].wav" size="9245756" crc="85343c87" /> | |
| 2718 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 27 of 39)[!].wav" size="10028972" crc="cebaa049" /> | |
| 2719 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 28 of 39)[!].wav" size="11917628" crc="f1bc62b3" /> | |
| 2720 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 29 of 39)[!].wav" size="15302156" crc="48a79e73" /> | |
| 2721 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 30 of 39)[!].wav" size="20474204" crc="bf329627" /> | |
| 2722 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 31 of 39)[!].wav" size="13032476" crc="3981e5bd" /> | |
| 2723 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 32 of 39)[!].wav" size="34781420" crc="68de7c73" /> | |
| 2724 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 33 of 39)[!].wav" size="11938796" crc="3e72905a" /> | |
| 2725 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 34 of 39)[!].wav" size="11713004" crc="25e78403" /> | |
| 2726 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 35 of 39)[!].wav" size="15796076" crc="7b715718" /> | |
| 2727 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 36 of 39)[!].wav" size="15838412" crc="c9f412e0" /> | |
| 2728 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 37 of 39)[!].wav" size="12124604" crc="984220be" /> | |
| 2729 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 38 of 39)[!].wav" size="12752588" crc="3fac2053" /> | |
| 2730 | <rom name="After Armageddon Gaiden - Majuu Toushouden Eclipse (1994)(Sega)(NTSC)(JP)(Track 39 of 39)[!].wav" size="12188108" crc="3ff8b389" /> | |
| 2731 | --> | |
| 2732 | 974 | <description>After Armageddon Gaiden - Majuu Toushouden Eclipse (Jpn)</description> |
| 2733 | 975 | <year>1994</year> |
| 2734 | 976 | <publisher>Sega</publisher> |
| r242703 | r242704 | |
| 2742 | 984 | </part> |
| 2743 | 985 | </software> |
| 2744 | 986 | |
| 987 | <!-- | |
| 988 | <software name="aburner3"> | |
| 989 | <description>After Burner III (Jpn)</description> | |
| 990 | <year>1992</year> | |
| 991 | <publisher>Sega</publisher> | |
| 992 | <part name="cdrom" interface="scd_cdrom"> | |
| 993 | <diskarea name="cdrom"> | |
| 994 | <disk name="after burner iii (1992)(sega)(ntsc)(jp)(en)[!]" sha1="d7b43705b4c337dc39362931f9d136eb9a308522"/> | |
| 995 | </diskarea> | |
| 996 | </part> | |
| 997 | </software> | |
| 998 | --> | |
| 999 | ||
| 2745 | 1000 | <software name="aislelrd"> |
| 2746 | <!-- source toseciso | |
| 2747 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)[!].cue" size="2345" crc="0f61b7b9" /> | |
| 2748 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 01 of 17)[!].iso" size="108869632" crc="6abfddfc" /> | |
| 2749 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 02 of 17)[!].wav" size="1300700" crc="08e21297" /> | |
| 2750 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 03 of 17)[!].wav" size="23294252" crc="eed846b1" /> | |
| 2751 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 04 of 17)[!].wav" size="7872188" crc="b4942a10" /> | |
| 2752 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 05 of 17)[!].wav" size="24919484" crc="7494665d" /> | |
| 2753 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 06 of 17)[!].wav" size="4711100" crc="4c0943bd" /> | |
| 2754 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 07 of 17)[!].wav" size="7517036" crc="3dc28556" /> | |
| 2755 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 08 of 17)[!].wav" size="4772252" crc="0107a073" /> | |
| 2756 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 09 of 17)[!].wav" size="8761244" crc="eb9ce073" /> | |
| 2757 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 10 of 17)[!].wav" size="13260620" crc="b2c56b1b" /> | |
| 2758 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 11 of 17)[!].wav" size="12649100" crc="da0d41d8" /> | |
| 2759 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 12 of 17)[!].wav" size="8789468" crc="cd9f0eaf" /> | |
| 2760 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 13 of 17)[!].wav" size="4257164" crc="eeb67bea" /> | |
| 2761 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 14 of 17)[!].wav" size="8867084" crc="e657f4cb" /> | |
| 2762 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 15 of 17)[!].wav" size="12722012" crc="e37f5d29" /> | |
| 2763 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 16 of 17)[!].wav" size="45640604" crc="1c985344" /> | |
| 2764 | <rom name="Aisle Lord (1992)(Wolf Team)(NTSC)(Jp)(Track 17 of 17)[!].wav" size="3565676" crc="36134764" /> | |
| 2765 | --> | |
| 2766 | 1001 | <description>Aisle Lord (Jpn)</description> |
| 2767 | 1002 | <year>1992</year> |
| 2768 | 1003 | <publisher>Wolf Team</publisher> |
| r242703 | r242704 | |
| 2777 | 1012 | </software> |
| 2778 | 1013 | |
| 2779 | 1014 | <software name="alshark"> |
| 2780 | <!-- source toseciso | |
| 2781 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)[!].cue" size="5009" crc="2ded8ede" /> | |
| 2782 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 01 of 36)[!].iso" size="23838720" crc="c31174f8" /> | |
| 2783 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 02 of 36)[!].wav" size="12157532" crc="043b5b19" /> | |
| 2784 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 03 of 36)[!].wav" size="18700796" crc="e7cd2442" /> | |
| 2785 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 04 of 36)[!].wav" size="20111996" crc="b674d1dc" /> | |
| 2786 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 05 of 36)[!].wav" size="14290796" crc="6b182b3e" /> | |
| 2787 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 06 of 36)[!].wav" size="11524844" crc="14306a94" /> | |
| 2788 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 07 of 36)[!].wav" size="15010508" crc="f07ff72e" /> | |
| 2789 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 08 of 36)[!].wav" size="19603964" crc="77f49b10" /> | |
| 2790 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 09 of 36)[!].wav" size="21523196" crc="3ce94483" /> | |
| 2791 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 10 of 36)[!].wav" size="20114348" crc="857baac3" /> | |
| 2792 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 11 of 36)[!].wav" size="15172796" crc="ef9f1d7a" /> | |
| 2793 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 12 of 36)[!].wav" size="13937996" crc="f18062fe" /> | |
| 2794 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 13 of 36)[!].wav" size="14996396" crc="47cbd25c" /> | |
| 2795 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 14 of 36)[!].wav" size="18171596" crc="e78fdf81" /> | |
| 2796 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 15 of 36)[!].wav" size="18347996" crc="7831ac83" /> | |
| 2797 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 16 of 36)[!].wav" size="17642396" crc="2965eea1" /> | |
| 2798 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 17 of 36)[!].wav" size="35799836" crc="626f9551" /> | |
| 2799 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 18 of 36)[!].wav" size="33327884" crc="faea78ff" /> | |
| 2800 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 19 of 36)[!].wav" size="20620028" crc="226e3543" /> | |
| 2801 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 20 of 36)[!].wav" size="32577596" crc="cd336a92" /> | |
| 2802 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 21 of 36)[!].wav" size="13408796" crc="fbf0e8b0" /> | |
| 2803 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 22 of 36)[!].wav" size="18844268" crc="d724f8e1" /> | |
| 2804 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 23 of 36)[!].wav" size="6251660" crc="1629d445" /> | |
| 2805 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 24 of 36)[!].wav" size="2022764" crc="691ade9a" /> | |
| 2806 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 25 of 36)[!].wav" size="6268124" crc="d4922653" /> | |
| 2807 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 26 of 36)[!].wav" size="44264684" crc="70a2d59d" /> | |
| 2808 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 27 of 36)[!].wav" size="28899068" crc="77c34d39" /> | |
| 2809 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 28 of 36)[!].wav" size="8631884" crc="5232737d" /> | |
| 2810 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 29 of 36)[!].wav" size="5212076" crc="bf31ae7b" /> | |
| 2811 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 30 of 36)[!].wav" size="3972572" crc="38e520d9" /> | |
| 2812 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 31 of 36)[!].wav" size="18712556" crc="0bb4f92d" /> | |
| 2813 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 32 of 36)[!].wav" size="20149628" crc="c253005b" /> | |
| 2814 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 33 of 36)[!].wav" size="9389228" crc="1f40d0ec" /> | |
| 2815 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 34 of 36)[!].wav" size="6656204" crc="d31156ff" /> | |
| 2816 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 35 of 36)[!].wav" size="23153132" crc="88953ed9" /> | |
| 2817 | <rom name="Alshark (1993)(Polydor K.K.)(NTSC)(JP)(Track 36 of 36)[!].wav" size="6199916" crc="b2bb6c5a" /> | |
| 2818 | --> | |
| 2819 | 1015 | <description>Alshark (Jpn)</description> |
| 2820 | 1016 | <year>1993</year> |
| 2821 | 1017 | <publisher>Polydor K.K.</publisher> |
| r242703 | r242704 | |
| 2830 | 1026 | </software> |
| 2831 | 1027 | |
| 2832 | 1028 | <software name="anettfut"> |
| 2833 | <!-- source toseciso | |
| 2834 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)[!].cue" size="4562" crc="e29146cb" /> | |
| 2835 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 01 of 31)[!].iso" size="31488000" crc="ed405f82" /> | |
| 2836 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 02 of 31)[!].wav" size="2109788" crc="a062e6a3" /> | |
| 2837 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 03 of 31)[!].wav" size="3429260" crc="b31535da" /> | |
| 2838 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 04 of 31)[!].wav" size="33671276" crc="38d3861a" /> | |
| 2839 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 05 of 31)[!].wav" size="35588156" crc="881752c8" /> | |
| 2840 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 06 of 31)[!].wav" size="33443132" crc="84b0b91d" /> | |
| 2841 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 07 of 31)[!].wav" size="40557932" crc="3cd241e7" /> | |
| 2842 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 08 of 31)[!].wav" size="38589308" crc="6151ac68" /> | |
| 2843 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 09 of 31)[!].wav" size="38831564" crc="9ca83770" /> | |
| 2844 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 10 of 31)[!].wav" size="40819004" crc="bfff5794" /> | |
| 2845 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 11 of 31)[!].wav" size="39791180" crc="af1f0b20" /> | |
| 2846 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 12 of 31)[!].wav" size="11183804" crc="890dad36" /> | |
| 2847 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 13 of 31)[!].wav" size="10099532" crc="755139f8" /> | |
| 2848 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 14 of 31)[!].wav" size="18971276" crc="9df9c708" /> | |
| 2849 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 15 of 31)[!].wav" size="5889452" crc="0a9de611" /> | |
| 2850 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 16 of 31)[!].wav" size="9885500" crc="06cdde0e" /> | |
| 2851 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 17 of 31)[!].wav" size="4835756" crc="41a682bb" /> | |
| 2852 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 18 of 31)[!].wav" size="14631836" crc="83591bfc" /> | |
| 2853 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 19 of 31)[!].wav" size="7865132" crc="3027d451" /> | |
| 2854 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 20 of 31)[!].wav" size="22153532" crc="5a88360a" /> | |
| 2855 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 21 of 31)[!].wav" size="14128508" crc="5c8bd300" /> | |
| 2856 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 22 of 31)[!].wav" size="12646748" crc="54189e3a" /> | |
| 2857 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 23 of 31)[!].wav" size="13086572" crc="88cd8b70" /> | |
| 2858 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 24 of 31)[!].wav" size="12889004" crc="1a59a46f" /> | |
| 2859 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 25 of 31)[!].wav" size="19655708" crc="d7e518c3" /> | |
| 2860 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 26 of 31)[!].wav" size="6383372" crc="7e611776" /> | |
| 2861 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 27 of 31)[!].wav" size="12562076" crc="dc83c470" /> | |
| 2862 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 28 of 31)[!].wav" size="5108588" crc="c1b84af4" /> | |
| 2863 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 29 of 31)[!].wav" size="16576940" crc="f02267a3" /> | |
| 2864 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 30 of 31)[!].wav" size="11106188" crc="be77203b" /> | |
| 2865 | <rom name="Anett Futatabi (1993)(Wolf Team)(NTSC)(JP)(en)(Track 31 of 31)[!].wav" size="29851628" crc="20d88302" /> | |
| 2866 | --> | |
| 2867 | 1029 | <description>Anett Futatabi (Jpn)</description> |
| 2868 | 1030 | <year>1993</year> |
| 2869 | 1031 | <publisher>Wolf Team</publisher> |
| r242703 | r242704 | |
| 2878 | 1040 | </software> |
| 2879 | 1041 | |
| 2880 | 1042 | <software name="genchohi"> |
| 2881 | <!-- source toseciso | |
| 2882 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)[!].cue" size="15215" crc="661532e9" /> | |
| 2883 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 01 of 90)[!].iso" size="9979904" crc="35729e14" /> | |
| 2884 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 02 of 90)[!].wav" size="707996" crc="70c1fce2" /> | |
| 2885 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 03 of 90)[!].wav" size="1131356" crc="af56a087" /> | |
| 2886 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 04 of 90)[!].wav" size="1253660" crc="63c83748" /> | |
| 2887 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 05 of 90)[!].wav" size="1060796" crc="f4adc14f" /> | |
| 2888 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 06 of 90)[!].wav" size="1060796" crc="5c37d95e" /> | |
| 2889 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 07 of 90)[!].wav" size="1138412" crc="a4a03662" /> | |
| 2890 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 08 of 90)[!].wav" size="1213676" crc="5b3caa7b" /> | |
| 2891 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 09 of 90)[!].wav" size="1060796" crc="f5c3c9ae" /> | |
| 2892 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 10 of 90)[!].wav" size="1060796" crc="26a7373f" /> | |
| 2893 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 11 of 90)[!].wav" size="1378316" crc="3ebb0f83" /> | |
| 2894 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 12 of 90)[!].wav" size="1060796" crc="719670d0" /> | |
| 2895 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 13 of 90)[!].wav" size="1100780" crc="5dc25fd7" /> | |
| 2896 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 14 of 90)[!].wav" size="1390076" crc="e2dd8b1e" /> | |
| 2897 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 15 of 90)[!].wav" size="1084316" crc="58b1c5b5" /> | |
| 2898 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 16 of 90)[!].wav" size="1072556" crc="e365cb05" /> | |
| 2899 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 17 of 90)[!].wav" size="1154876" crc="f69c9417" /> | |
| 2900 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 18 of 90)[!].wav" size="1171340" crc="46bae66e" /> | |
| 2901 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 19 of 90)[!].wav" size="1105484" crc="90b599e5" /> | |
| 2902 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 20 of 90)[!].wav" size="1180748" crc="e32ec47a" /> | |
| 2903 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 21 of 90)[!].wav" size="1364204" crc="d3788573" /> | |
| 2904 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 22 of 90)[!].wav" size="1274828" crc="b69da38e" /> | |
| 2905 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 23 of 90)[!].wav" size="1295996" crc="2c722244" /> | |
| 2906 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 24 of 90)[!].wav" size="1086668" crc="696dacee" /> | |
| 2907 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 25 of 90)[!].wav" size="1267772" crc="06870885" /> | |
| 2908 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 26 of 90)[!].wav" size="1100780" crc="4b1a14e5" /> | |
| 2909 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 27 of 90)[!].wav" size="1263068" crc="6b7d2300" /> | |
| 2910 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 28 of 90)[!].wav" size="1089020" crc="1e566b6b" /> | |
| 2911 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 29 of 90)[!].wav" size="1103132" crc="8f390277" /> | |
| 2912 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 30 of 90)[!].wav" size="1161932" crc="a3fa496b" /> | |
| 2913 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 31 of 90)[!].wav" size="1065500" crc="fec5c2b5" /> | |
| 2914 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 32 of 90)[!].wav" size="1206620" crc="48fc8f59" /> | |
| 2915 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 33 of 90)[!].wav" size="1060796" crc="14948052" /> | |
| 2916 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 34 of 90)[!].wav" size="1063148" crc="3fa20475" /> | |
| 2917 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 35 of 90)[!].wav" size="1060796" crc="bbcc4ec9" /> | |
| 2918 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 36 of 90)[!].wav" size="1060796" crc="2ebbfa61" /> | |
| 2919 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 37 of 90)[!].wav" size="1331276" crc="a7e0fca8" /> | |
| 2920 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 38 of 90)[!].wav" size="1425356" crc="56a2b589" /> | |
| 2921 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 39 of 90)[!].wav" size="1060796" crc="a0ee920a" /> | |
| 2922 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 40 of 90)[!].wav" size="1225436" crc="24d44f0b" /> | |
| 2923 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 41 of 90)[!].wav" size="1510028" crc="6b610d59" /> | |
| 2924 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 42 of 90)[!].wav" size="1060796" crc="47c5e3dc" /> | |
| 2925 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 43 of 90)[!].wav" size="1248956" crc="79b8d588" /> | |
| 2926 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 44 of 90)[!].wav" size="1453580" crc="fa60e0c5" /> | |
| 2927 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 45 of 90)[!].wav" size="1213676" crc="5c4ed94a" /> | |
| 2928 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 46 of 90)[!].wav" size="1373612" crc="98c10401" /> | |
| 2929 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 47 of 90)[!].wav" size="1121948" crc="e50809a9" /> | |
| 2930 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 48 of 90)[!].wav" size="1333628" crc="f9640769" /> | |
| 2931 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 49 of 90)[!].wav" size="1279532" crc="550d5c31" /> | |
| 2932 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 50 of 90)[!].wav" size="1227788" crc="aa1a9ee2" /> | |
| 2933 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 51 of 90)[!].wav" size="1232492" crc="dedf4995" /> | |
| 2934 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 52 of 90)[!].wav" size="1439468" crc="79aaf7d0" /> | |
| 2935 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 53 of 90)[!].wav" size="1060796" crc="732eb691" /> | |
| 2936 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 54 of 90)[!].wav" size="1060796" crc="5852b682" /> | |
| 2937 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 55 of 90)[!].wav" size="1060796" crc="764cf083" /> | |
| 2938 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 56 of 90)[!].wav" size="1063148" crc="b2d72397" /> | |
| 2939 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 57 of 90)[!].wav" size="1060796" crc="c79ba68b" /> | |
| 2940 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 58 of 90)[!].wav" size="1060796" crc="50b9a767" /> | |
| 2941 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 59 of 90)[!].wav" size="1465340" crc="2f4b90dc" /> | |
| 2942 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 60 of 90)[!].wav" size="1430060" crc="c375300b" /> | |
| 2943 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 61 of 90)[!].wav" size="1385372" crc="31c20a5c" /> | |
| 2944 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 62 of 90)[!].wav" size="1394780" crc="3ee5ff9c" /> | |
| 2945 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 63 of 90)[!].wav" size="1201916" crc="9898fcf5" /> | |
| 2946 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 64 of 90)[!].wav" size="1352444" crc="95862223" /> | |
| 2947 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 65 of 90)[!].wav" size="1493564" crc="f15ee6dc" /> | |
| 2948 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 66 of 90)[!].wav" size="1314812" crc="2ac5326f" /> | |
| 2949 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 67 of 90)[!].wav" size="1561772" crc="2e40af40" /> | |
| 2950 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 68 of 90)[!].wav" size="1105484" crc="5c395966" /> | |
| 2951 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 69 of 90)[!].wav" size="1227788" crc="9fa634ac" /> | |
| 2952 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 70 of 90)[!].wav" size="1220732" crc="2d1bd2b5" /> | |
| 2953 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 71 of 90)[!].wav" size="1208972" crc="5a448f95" /> | |
| 2954 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 72 of 90)[!].wav" size="1129004" crc="6effbff2" /> | |
| 2955 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 73 of 90)[!].wav" size="1425356" crc="abc1fab1" /> | |
| 2956 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 74 of 90)[!].wav" size="1427708" crc="f317ef1b" /> | |
| 2957 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 75 of 90)[!].wav" size="1535900" crc="d221a6c7" /> | |
| 2958 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 76 of 90)[!].wav" size="1060796" crc="c8c55ae5" /> | |
| 2959 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 77 of 90)[!].wav" size="1223084" crc="f54f9459" /> | |
| 2960 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 78 of 90)[!].wav" size="1089020" crc="5c98ab46" /> | |
| 2961 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 79 of 90)[!].wav" size="1143116" crc="1aa20513" /> | |
| 2962 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 80 of 90)[!].wav" size="1244252" crc="7af43c1c" /> | |
| 2963 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 81 of 90)[!].wav" size="49900076" crc="b1422adf" /> | |
| 2964 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 82 of 90)[!].wav" size="42653564" crc="a6b51bcc" /> | |
| 2965 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 83 of 90)[!].wav" size="43166300" crc="defdd428" /> | |
| 2966 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 84 of 90)[!].wav" size="47962028" crc="844dcd84" /> | |
| 2967 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 85 of 90)[!].wav" size="37156940" crc="e1e21678" /> | |
| 2968 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 86 of 90)[!].wav" size="42825260" crc="b20cf903" /> | |
| 2969 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 87 of 90)[!].wav" size="49359116" crc="0b878389" /> | |
| 2970 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 88 of 90)[!].wav" size="36552476" crc="a31fd1f2" /> | |
| 2971 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 89 of 90)[!].wav" size="66197084" crc="3bc1df1d" /> | |
| 2972 | <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi (1993)(KOEI)(NTSC)(JP)(Track 90 of 90)[!].wav" size="55761260" crc="9a097866" /> | |
| 2973 | --> | |
| 2974 | 1043 | <description>Aoki Ookami to Shiroki Mejika - Genchou Hishi (Jpn)</description> |
| 2975 | 1044 | <year>1993</year> |
| 2976 | 1045 | <publisher>Koei</publisher> |
| r242703 | r242704 | |
| 2985 | 1054 | </software> |
| 2986 | 1055 | |
| 2987 | 1056 | <software name="arcus123"> |
| 2988 | <!-- source toseciso | |
| 2989 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)[!].cue" size="3008" crc="fd6bf655" /> | |
| 2990 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 01 of 21)[!].iso" size="98013184" crc="8e09a7f5" /> | |
| 2991 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 02 of 21)[!].wav" size="21492620" crc="8a4f48ea" /> | |
| 2992 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 03 of 21)[!].wav" size="28503932" crc="b6b572f0" /> | |
| 2993 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 04 of 21)[!].wav" size="21342092" crc="fc8df78d" /> | |
| 2994 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 05 of 21)[!].wav" size="22767404" crc="6be30d89" /> | |
| 2995 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 06 of 21)[!].wav" size="22245260" crc="7f598828" /> | |
| 2996 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 07 of 21)[!].wav" size="26377724" crc="ad404cb9" /> | |
| 2997 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 08 of 21)[!].wav" size="7636988" crc="d773797b" /> | |
| 2998 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 09 of 21)[!].wav" size="14518940" crc="ba160fec" /> | |
| 2999 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 10 of 21)[!].wav" size="8436668" crc="9f042501" /> | |
| 3000 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 11 of 21)[!].wav" size="14307260" crc="7dc24418" /> | |
| 3001 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 12 of 21)[!].wav" size="8065052" crc="f5c9905d" /> | |
| 3002 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 13 of 21)[!].wav" size="14389580" crc="c0180302" /> | |
| 3003 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 14 of 21)[!].wav" size="12411548" crc="2d335126" /> | |
| 3004 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 15 of 21)[!].wav" size="15304508" crc="746d17fd" /> | |
| 3005 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 16 of 21)[!].wav" size="12609116" crc="a0173076" /> | |
| 3006 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 17 of 21)[!].wav" size="14359004" crc="8e99ac7b" /> | |
| 3007 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 18 of 21)[!].wav" size="9643244" crc="abfbb034" /> | |
| 3008 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 19 of 21)[!].wav" size="14907020" crc="64656b24" /> | |
| 3009 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 20 of 21)[!].wav" size="20697644" crc="05d83490" /> | |
| 3010 | <rom name="Arcus I-II-III (1993)(Wolf Team)(NTSC)(JP)(Track 21 of 21)[!].wav" size="34466252" crc="a3f5623a" /> | |
| 3011 | --> | |
| 3012 | 1057 | <description>Arcus I-II-III (Jpn)</description> |
| 3013 | 1058 | <year>1993</year> |
| 3014 | 1059 | <publisher>Wolf Team</publisher> |
| r242703 | r242704 | |
| 3023 | 1068 | </software> |
| 3024 | 1069 | |
| 3025 | 1070 | <software name="arslan"> |
| 3026 | <!-- source toseciso | |
| 3027 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)[!].cue" size="9858" crc="ed8657b6" /> | |
| 3028 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 01 of 59)[!].iso" size="22022144" crc="79ea9df3" /> | |
| 3029 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 02 of 59)[!].wav" size="18813692" crc="8f79d49c" /> | |
| 3030 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 03 of 59)[!].wav" size="15186908" crc="17de52c7" /> | |
| 3031 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 04 of 59)[!].wav" size="12166940" crc="382a7513" /> | |
| 3032 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 05 of 59)[!].wav" size="12213980" crc="c5e6ebea" /> | |
| 3033 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 06 of 59)[!].wav" size="9368060" crc="4780fad6" /> | |
| 3034 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 07 of 59)[!].wav" size="12557372" crc="3e11ef57" /> | |
| 3035 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 08 of 59)[!].wav" size="7408844" crc="564f2aa2" /> | |
| 3036 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 09 of 59)[!].wav" size="9814940" crc="88debb93" /> | |
| 3037 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 10 of 59)[!].wav" size="9116396" crc="3c6671c9" /> | |
| 3038 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 11 of 59)[!].wav" size="2396732" crc="7195b1df" /> | |
| 3039 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 12 of 59)[!].wav" size="14231996" crc="35438587" /> | |
| 3040 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 13 of 59)[!].wav" size="11381372" crc="ca352b31" /> | |
| 3041 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 14 of 59)[!].wav" size="11849420" crc="4f718e9c" /> | |
| 3042 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 15 of 59)[!].wav" size="8556620" crc="ff23788a" /> | |
| 3043 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 16 of 59)[!].wav" size="5023916" crc="4bc95ad8" /> | |
| 3044 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 17 of 59)[!].wav" size="4598204" crc="b6a6f5e9" /> | |
| 3045 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 18 of 59)[!].wav" size="12230444" crc="e64cc01d" /> | |
| 3046 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 19 of 59)[!].wav" size="5574284" crc="61dfbcee" /> | |
| 3047 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 20 of 59)[!].wav" size="12390380" crc="92f9f2ab" /> | |
| 3048 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 21 of 59)[!].wav" size="3212876" crc="9ad6e840" /> | |
| 3049 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 22 of 59)[!].wav" size="7291244" crc="f898c9c4" /> | |
| 3050 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 23 of 59)[!].wav" size="4419452" crc="48ad7c43" /> | |
| 3051 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 24 of 59)[!].wav" size="3259916" crc="5a1b4877" /> | |
| 3052 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 25 of 59)[!].wav" size="1952204" crc="5f3e737f" /> | |
| 3053 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 26 of 59)[!].wav" size="2432012" crc="60d75d2b" /> | |
| 3054 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 27 of 59)[!].wav" size="2831852" crc="45a083ba" /> | |
| 3055 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 28 of 59)[!].wav" size="3963164" crc="664a2c17" /> | |
| 3056 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 29 of 59)[!].wav" size="3659756" crc="be27a1b7" /> | |
| 3057 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 30 of 59)[!].wav" size="13392332" crc="c0aacfa3" /> | |
| 3058 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 31 of 59)[!].wav" size="10468796" crc="a208cfc7" /> | |
| 3059 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 32 of 59)[!].wav" size="9097580" crc="2addb65c" /> | |
| 3060 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 33 of 59)[!].wav" size="9765548" crc="148befd5" /> | |
| 3061 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 34 of 59)[!].wav" size="4353596" crc="ba83182b" /> | |
| 3062 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 35 of 59)[!].wav" size="5833004" crc="77ac4559" /> | |
| 3063 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 36 of 59)[!].wav" size="6397484" crc="7e30bb04" /> | |
| 3064 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 37 of 59)[!].wav" size="4520588" crc="69e280a8" /> | |
| 3065 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 38 of 59)[!].wav" size="6747932" crc="9d22bac0" /> | |
| 3066 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 39 of 59)[!].wav" size="3904364" crc="9af80858" /> | |
| 3067 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 40 of 59)[!].wav" size="2676620" crc="f8f34e75" /> | |
| 3068 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 41 of 59)[!].wav" size="15377420" crc="55836a21" /> | |
| 3069 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 42 of 59)[!].wav" size="8121500" crc="c95e7962" /> | |
| 3070 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 43 of 59)[!].wav" size="6249308" crc="d332fb03" /> | |
| 3071 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 44 of 59)[!].wav" size="7328876" crc="248c7e12" /> | |
| 3072 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 45 of 59)[!].wav" size="12301004" crc="c23d4eb7" /> | |
| 3073 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 46 of 59)[!].wav" size="11252012" crc="831af70f" /> | |
| 3074 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 47 of 59)[!].wav" size="9469196" crc="3014ed2d" /> | |
| 3075 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 48 of 59)[!].wav" size="7914524" crc="90d6afaf" /> | |
| 3076 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 49 of 59)[!].wav" size="8984684" crc="551cbb9d" /> | |
| 3077 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 50 of 59)[!].wav" size="8897660" crc="9f92d031" /> | |
| 3078 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 51 of 59)[!].wav" size="2998844" crc="33923509" /> | |
| 3079 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 52 of 59)[!].wav" size="4010204" crc="6d32c0b6" /> | |
| 3080 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 53 of 59)[!].wav" size="6886700" crc="0c8af349" /> | |
| 3081 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 54 of 59)[!].wav" size="1738172" crc="5054e1fb" /> | |
| 3082 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 55 of 59)[!].wav" size="5642492" crc="df419be1" /> | |
| 3083 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 56 of 59)[!].wav" size="6842012" crc="33d9214e" /> | |
| 3084 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 57 of 59)[!].wav" size="2775404" crc="5569a34b" /> | |
| 3085 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 58 of 59)[!].wav" size="10066604" crc="5ecd20b6" /> | |
| 3086 | <rom name="Arislan Senki - The Heroic Legend of Arslan (1993)(Sega)(NTSC)(JP)(Track 59 of 59)[!].wav" size="2396732" crc="8f3e097d" /> | |
| 3087 | --> | |
| 3088 | 1071 | <description>Arslan Senki - The Heroic Legend of Arslan (Jpn)</description> |
| 3089 | 1072 | <year>1993</year> |
| 3090 | 1073 | <publisher>Sega</publisher> |
| r242703 | r242704 | |
| 3098 | 1081 | </part> |
| 3099 | 1082 | </software> |
| 3100 | 1083 | |
| 1084 | <!-- | |
| 1085 | <software name="ax101"> | |
| 1086 | <description>AX-101 (Jpn)</description> | |
| 1087 | <year>1994</year> | |
| 1088 | <publisher>Sega</publisher> | |
| 1089 | <part name="cdrom" interface="scd_cdrom"> | |
| 1090 | <diskarea name="cdrom"> | |
| 1091 | <disk name="ax-101 (1994)(sega)(ntsc)(jp)[!]" sha1="c3abb77d3ff095fba69cdb257e272a75e12f0ab2"/> | |
| 1092 | </diskarea> | |
| 1093 | </part> | |
| 1094 | </software> | |
| 1095 | --> | |
| 1096 | ||
| 3101 | 1097 | <software name="bakuden"> |
| 3102 | <!-- source toseciso | |
| 3103 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)[!].cue" size="5703" crc="ef0ef485" /> | |
| 3104 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 01 of 37)[!].iso" size="221941760" crc="c7838993" /> | |
| 3105 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 02 of 37)[!].wav" size="1305404" crc="042a6abf" /> | |
| 3106 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 03 of 37)[!].wav" size="1771100" crc="426e0f17" /> | |
| 3107 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 04 of 37)[!].wav" size="1599404" crc="8ef55eca" /> | |
| 3108 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 05 of 37)[!].wav" size="1761692" crc="9bd13916" /> | |
| 3109 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 06 of 37)[!].wav" size="1895756" crc="02d6b523" /> | |
| 3110 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 07 of 37)[!].wav" size="1827548" crc="59517979" /> | |
| 3111 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 08 of 37)[!].wav" size="1571180" crc="5a509467" /> | |
| 3112 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 09 of 37)[!].wav" size="1759340" crc="db2cc8e2" /> | |
| 3113 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 10 of 37)[!].wav" size="1613516" crc="1a132f1f" /> | |
| 3114 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 11 of 37)[!].wav" size="1655852" crc="7aaa032e" /> | |
| 3115 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 12 of 37)[!].wav" size="1674668" crc="e0359f09" /> | |
| 3116 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 13 of 37)[!].wav" size="1660556" crc="08c7d98d" /> | |
| 3117 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 14 of 37)[!].wav" size="1589996" crc="2b1de6ff" /> | |
| 3118 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 15 of 37)[!].wav" size="1662908" crc="c3c934e5" /> | |
| 3119 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 16 of 37)[!].wav" size="1707596" crc="7e037782" /> | |
| 3120 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 17 of 37)[!].wav" size="1653500" crc="d98fd529" /> | |
| 3121 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 18 of 37)[!].wav" size="1773452" crc="60707b6d" /> | |
| 3122 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 19 of 37)[!].wav" size="1923980" crc="be2272bb" /> | |
| 3123 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 20 of 37)[!].wav" size="1627628" crc="ca11aa26" /> | |
| 3124 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 21 of 37)[!].wav" size="1571180" crc="57a20dbb" /> | |
| 3125 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 22 of 37)[!].wav" size="1740524" crc="c3c635e4" /> | |
| 3126 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 23 of 37)[!].wav" size="1933388" crc="f5a6e2cb" /> | |
| 3127 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 24 of 37)[!].wav" size="1789916" crc="288308c6" /> | |
| 3128 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 25 of 37)[!].wav" size="1759340" crc="e46f072f" /> | |
| 3129 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 26 of 37)[!].wav" size="1747580" crc="58eb57e5" /> | |
| 3130 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 27 of 37)[!].wav" size="2100380" crc="966b15dc" /> | |
| 3131 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 28 of 37)[!].wav" size="9866684" crc="434804e5" /> | |
| 3132 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 29 of 37)[!].wav" size="14707100" crc="2b47a277" /> | |
| 3133 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 30 of 37)[!].wav" size="17628284" crc="21a061b2" /> | |
| 3134 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 31 of 37)[!].wav" size="14758844" crc="9f4eb640" /> | |
| 3135 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 32 of 37)[!].wav" size="13895660" crc="9cbd0f71" /> | |
| 3136 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 33 of 37)[!].wav" size="65599676" crc="771806c5" /> | |
| 3137 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 34 of 37)[!].wav" size="4299500" crc="51eb7785" /> | |
| 3138 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 35 of 37)[!].wav" size="4689932" crc="28411a7c" /> | |
| 3139 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 36 of 37)[!].wav" size="10685180" crc="8a30a53f" /> | |
| 3140 | <rom name="Baku-den - The Unbalanced Zone (1994)(Sony)(NTSC)(JP)(Track 37 of 37)[!].wav" size="2780108" crc="bc78ce37" /> | |
| 3141 | --> | |
| 3142 | 1098 | <description>Baku-den - The Unbalanced Zone (Jpn)</description> |
| 3143 | 1099 | <year>1994</year> |
| 3144 | 1100 | <publisher>Sony Music Entertainment</publisher> |
| r242703 | r242704 | |
| 3152 | 1108 | </part> |
| 3153 | 1109 | </software> |
| 3154 | 1110 | |
| 1111 | <!-- | |
| 1112 | <software name="bariarm"> | |
| 1113 | <description>Bari-Arm (Jpn)</description> | |
| 1114 | <year>1993</year> | |
| 1115 | <publisher>Human Entertainment</publisher> | |
| 1116 | <part name="cdrom" interface="scd_cdrom"> | |
| 1117 | <diskarea name="cdrom"> | |
| 1118 | <disk name="bari-arm (1993)(human)(ntsc)(jp)(en)[!]" sha1="c87cd03e8e85f9d11d8fc45912cadc10783d9315"/> | |
| 1119 | </diskarea> | |
| 1120 | </part> | |
| 1121 | </software> | |
| 1122 | --> | |
| 1123 | ||
| 3155 | 1124 | <software name="batlfant"> |
| 3156 | <!-- source toseciso | |
| 3157 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)[!].cue" size="6372" crc="a323dd1c" /> | |
| 3158 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 01 of 45)[!].iso" size="18720768" crc="0e09dfdc" /> | |
| 3159 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 02 of 45)[!].wav" size="32779868" crc="1b1650df" /> | |
| 3160 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 03 of 45)[!].wav" size="18950108" crc="e1b3c9ed" /> | |
| 3161 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 04 of 45)[!].wav" size="21861884" crc="01a57e96" /> | |
| 3162 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 05 of 45)[!].wav" size="21165692" crc="36e89f60" /> | |
| 3163 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 06 of 45)[!].wav" size="12197516" crc="8434df82" /> | |
| 3164 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 07 of 45)[!].wav" size="12435068" crc="f11f3f90" /> | |
| 3165 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 08 of 45)[!].wav" size="11350796" crc="4cff6475" /> | |
| 3166 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 09 of 45)[!].wav" size="13759244" crc="6e4af8a9" /> | |
| 3167 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 10 of 45)[!].wav" size="12350396" crc="4913f368" /> | |
| 3168 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 11 of 45)[!].wav" size="20323676" crc="f08e34a3" /> | |
| 3169 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 12 of 45)[!].wav" size="12465644" crc="20b7918a" /> | |
| 3170 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 13 of 45)[!].wav" size="16868588" crc="badc5d40" /> | |
| 3171 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 14 of 45)[!].wav" size="21880700" crc="12d4d58f" /> | |
| 3172 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 15 of 45)[!].wav" size="16675724" crc="18f9a68f" /> | |
| 3173 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 16 of 45)[!].wav" size="12870188" crc="e23947cc" /> | |
| 3174 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 17 of 45)[!].wav" size="13542860" crc="4f899090" /> | |
| 3175 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 18 of 45)[!].wav" size="16581644" crc="2eaacc61" /> | |
| 3176 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 19 of 45)[!].wav" size="18338588" crc="34293b3e" /> | |
| 3177 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 20 of 45)[!].wav" size="15170444" crc="1a90c1bf" /> | |
| 3178 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 21 of 45)[!].wav" size="16934444" crc="b614e992" /> | |
| 3179 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 22 of 45)[!].wav" size="18343292" crc="38fa5950" /> | |
| 3180 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 23 of 45)[!].wav" size="18340940" crc="599d6872" /> | |
| 3181 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 24 of 45)[!].wav" size="28010012" crc="c04a5dc1" /> | |
| 3182 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 25 of 45)[!].wav" size="12947804" crc="f2611ff7" /> | |
| 3183 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 26 of 45)[!].wav" size="9076412" crc="c9f05983" /> | |
| 3184 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 27 of 45)[!].wav" size="5527244" crc="1c37a7d2" /> | |
| 3185 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 28 of 45)[!].wav" size="8954108" crc="8ab97f72" /> | |
| 3186 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 29 of 45)[!].wav" size="10090124" crc="9dd01fb1" /> | |
| 3187 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 30 of 45)[!].wav" size="8354348" crc="2a72228f" /> | |
| 3188 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 31 of 45)[!].wav" size="11134412" crc="8ee70c7c" /> | |
| 3189 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 32 of 45)[!].wav" size="12684380" crc="8ca0a46d" /> | |
| 3190 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 33 of 45)[!].wav" size="9233996" crc="ded5fffc" /> | |
| 3191 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 34 of 45)[!].wav" size="4459436" crc="83687b58" /> | |
| 3192 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 35 of 45)[!].wav" size="7549964" crc="f81ddbe3" /> | |
| 3193 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 36 of 45)[!].wav" size="7789868" crc="4e4b4272" /> | |
| 3194 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 37 of 45)[!].wav" size="4083116" crc="6beaeb40" /> | |
| 3195 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 38 of 45)[!].wav" size="3829100" crc="09a1ea36" /> | |
| 3196 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 39 of 45)[!].wav" size="7401788" crc="1c1348b8" /> | |
| 3197 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 40 of 45)[!].wav" size="11012108" crc="a549e88f" /> | |
| 3198 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 41 of 45)[!].wav" size="8954108" crc="f10567b0" /> | |
| 3199 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 42 of 45)[!].wav" size="4499420" crc="989183c5" /> | |
| 3200 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 43 of 45)[!].wav" size="3532748" crc="a1ed7104" /> | |
| 3201 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 44 of 45)[!].wav" size="4595852" crc="223a7eed" /> | |
| 3202 | <rom name="Battle Fantasy (1994)(Micronet)(NTSC)(JP)(Track 45 of 45)[!].wav" size="6954908" crc="95a4fc3e" /> | |
| 3203 | --> | |
| 3204 | 1125 | <description>Battle Fantasy (Jpn)</description> |
| 3205 | 1126 | <year>1994</year> |
| 3206 | 1127 | <publisher>Micronet</publisher> |
| r242703 | r242704 | |
| 3215 | 1136 | </software> |
| 3216 | 1137 | |
| 3217 | 1138 | <software name="btlcorps"> |
| 3218 | <!-- source toseciso | |
| 3219 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)[!].cue" size="8505" crc="0b97a0e4" /> | |
| 3220 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 01 of 50)[!].iso" size="78995456" crc="b39c40a4" /> | |
| 3221 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 02 of 50)[!].wav" size="1361852" crc="5f764240" /> | |
| 3222 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 03 of 50)[!].wav" size="67770572" crc="d345a3c1" /> | |
| 3223 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 04 of 50)[!].wav" size="52849484" crc="9d1a566b" /> | |
| 3224 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 05 of 50)[!].wav" size="58155596" crc="388dbca3" /> | |
| 3225 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 06 of 50)[!].wav" size="55862396" crc="5179137a" /> | |
| 3226 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 07 of 50)[!].wav" size="69647468" crc="b8f6876a" /> | |
| 3227 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 08 of 50)[!].wav" size="44394044" crc="233e4c3d" /> | |
| 3228 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 09 of 50)[!].wav" size="5562524" crc="64e8c165" /> | |
| 3229 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 10 of 50)[!].wav" size="4313612" crc="3e48fc4d" /> | |
| 3230 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 11 of 50)[!].wav" size="5301452" crc="5c3d9547" /> | |
| 3231 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 12 of 50)[!].wav" size="5411996" crc="abe4a60a" /> | |
| 3232 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 13 of 50)[!].wav" size="5362604" crc="4f228aa6" /> | |
| 3233 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 14 of 50)[!].wav" size="4854572" crc="199e939f" /> | |
| 3234 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 15 of 50)[!].wav" size="5289692" crc="4924b75b" /> | |
| 3235 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 16 of 50)[!].wav" size="6089372" crc="fee64860" /> | |
| 3236 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 17 of 50)[!].wav" size="4179548" crc="81f0fbe7" /> | |
| 3237 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 18 of 50)[!].wav" size="4243052" crc="ea24b144" /> | |
| 3238 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 19 of 50)[!].wav" size="3673868" crc="efdabe19" /> | |
| 3239 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 20 of 50)[!].wav" size="5146220" crc="0d266573" /> | |
| 3240 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 21 of 50)[!].wav" size="3723260" crc="b2741f63" /> | |
| 3241 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 22 of 50)[!].wav" size="4551164" crc="65bf6e84" /> | |
| 3242 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 23 of 50)[!].wav" size="3793820" crc="c8ec78f7" /> | |
| 3243 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 24 of 50)[!].wav" size="4388876" crc="6950707e" /> | |
| 3244 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 25 of 50)[!].wav" size="4205420" crc="407324a2" /> | |
| 3245 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 26 of 50)[!].wav" size="4330076" crc="c4635387" /> | |
| 3246 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 27 of 50)[!].wav" size="4106636" crc="1aacf9f9" /> | |
| 3247 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 28 of 50)[!].wav" size="3909068" crc="7007a566" /> | |
| 3248 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 29 of 50)[!].wav" size="5284988" crc="f6777596" /> | |
| 3249 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 30 of 50)[!].wav" size="3170540" crc="62eb4d1b" /> | |
| 3250 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 31 of 50)[!].wav" size="4026668" crc="d3984a59" /> | |
| 3251 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 32 of 50)[!].wav" size="3139964" crc="37a5f9ec" /> | |
| 3252 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 33 of 50)[!].wav" size="3852620" crc="1f1c4fe7" /> | |
| 3253 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 34 of 50)[!].wav" size="3224636" crc="c70b1a86" /> | |
| 3254 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 35 of 50)[!].wav" size="4652300" crc="71ca169d" /> | |
| 3255 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 36 of 50)[!].wav" size="4007852" crc="7b41a3ff" /> | |
| 3256 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 37 of 50)[!].wav" size="4431212" crc="d027c129" /> | |
| 3257 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 38 of 50)[!].wav" size="3817340" crc="8e6603d6" /> | |
| 3258 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 39 of 50)[!].wav" size="3798524" crc="dd54acd6" /> | |
| 3259 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 40 of 50)[!].wav" size="3775004" crc="e39e6047" /> | |
| 3260 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 41 of 50)[!].wav" size="4261868" crc="96c533a2" /> | |
| 3261 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 42 of 50)[!].wav" size="3775004" crc="1ff1bec9" /> | |
| 3262 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 43 of 50)[!].wav" size="3448076" crc="ffe57a3b" /> | |
| 3263 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 44 of 50)[!].wav" size="3332828" crc="7bc3133f" /> | |
| 3264 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 45 of 50)[!].wav" size="2718956" crc="90753daa" /> | |
| 3265 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 46 of 50)[!].wav" size="3967868" crc="94f72192" /> | |
| 3266 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 47 of 50)[!].wav" size="3365756" crc="4df649a7" /> | |
| 3267 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 48 of 50)[!].wav" size="2420252" crc="5dfdd7a8" /> | |
| 3268 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 49 of 50)[!].wav" size="2269724" crc="dddff7ce" /> | |
| 3269 | <rom name="Battlecorps - 3D Mechanical Battle Simulator (1994)(Victor)(NTSC)(JP)(Track 50 of 50)[!].wav" size="2577836" crc="7e1015ba" /> | |
| 3270 | --> | |
| 3271 | 1139 | <description>Battlecorps - 3D Mechanical Battle Simulator (Jpn)</description> |
| 3272 | 1140 | <year>1994</year> |
| 3273 | 1141 | <publisher>Victor Entertainment</publisher> |
| r242703 | r242704 | |
| 3282 | 1150 | </software> |
| 3283 | 1151 | |
| 3284 | 1152 | <software name="blckhole"> |
| 3285 | <!-- source toseciso | |
| 3286 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)[!].cue" size="3363" crc="8739246c" /> | |
| 3287 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 01 of 23)[!].iso" size="12238848" crc="ae2463cc" /> | |
| 3288 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 02 of 23)[!].wav" size="14737676" crc="2dc5d88e" /> | |
| 3289 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 03 of 23)[!].wav" size="30820652" crc="475aa1eb" /> | |
| 3290 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 04 of 23)[!].wav" size="16268828" crc="de8324e3" /> | |
| 3291 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 05 of 23)[!].wav" size="17522444" crc="70fea127" /> | |
| 3292 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 06 of 23)[!].wav" size="20819948" crc="2d5a4574" /> | |
| 3293 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 07 of 23)[!].wav" size="29901020" crc="cef3d776" /> | |
| 3294 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 08 of 23)[!].wav" size="20958716" crc="d298e832" /> | |
| 3295 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 09 of 23)[!].wav" size="23536508" crc="5f35f568" /> | |
| 3296 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 10 of 23)[!].wav" size="26081372" crc="c9d1873a" /> | |
| 3297 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 11 of 23)[!].wav" size="18926588" crc="87b2a798" /> | |
| 3298 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 12 of 23)[!].wav" size="13596956" crc="c4c0e65d" /> | |
| 3299 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 13 of 23)[!].wav" size="15817244" crc="df2810f6" /> | |
| 3300 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 14 of 23)[!].wav" size="23750540" crc="c1fa3c35" /> | |
| 3301 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 15 of 23)[!].wav" size="10997996" crc="d9e98724" /> | |
| 3302 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 16 of 23)[!].wav" size="48190172" crc="106aa8d4" /> | |
| 3303 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 17 of 23)[!].wav" size="5981180" crc="1902b782" /> | |
| 3304 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 18 of 23)[!].wav" size="19121804" crc="2fc0da66" /> | |
| 3305 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 19 of 23)[!].wav" size="42867596" crc="eaaf4ff4" /> | |
| 3306 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 20 of 23)[!].wav" size="34746140" crc="fa6c01de" /> | |
| 3307 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 21 of 23)[!].wav" size="21584348" crc="528444bf" /> | |
| 3308 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 22 of 23)[!].wav" size="35270636" crc="5f096446" /> | |
| 3309 | <rom name="Black Hole Assault (1992)(Micronet)(NTSC)(JP)(Track 23 of 23)[!].wav" size="33944108" crc="2cf923dd" /> | |
| 3310 | --> | |
| 3311 | 1153 | <description>Black Hole Assault (Jpn)</description> |
| 3312 | 1154 | <year>1992</year> |
| 3313 | 1155 | <publisher>Micronet</publisher> |
| r242703 | r242704 | |
| 3321 | 1163 | </part> |
| 3322 | 1164 | </software> |
| 3323 | 1165 | |
| 1166 | <!-- | |
| 1167 | <software name="burai"> | |
| 1168 | <description>Burai - Hachigyoku no Yuushi Densetsu (Jpn)</description> | |
| 1169 | <year>1992</year> | |
| 1170 | <publisher>Sega</publisher> | |
| 1171 | <part name="cdrom" interface="scd_cdrom"> | |
| 1172 | <diskarea name="cdrom"> | |
| 1173 | <disk name="burai - hachigyoku no yuushi densetsu (1992)(sega)(ntsc)(jp)[!]" sha1="5861ee548c48c798d037dbe16e5a6e6d75813abb"/> | |
| 1174 | </diskarea> | |
| 1175 | </part> | |
| 1176 | </software> | |
| 1177 | --> | |
| 1178 | ||
| 1179 | <!-- | |
| 1180 | <software name="quiztono"> | |
| 1181 | <description>Capcom no Quiz - Tono-sama no Yabou (Jpn)</description> | |
| 1182 | <year>1992</year> | |
| 1183 | <publisher>SIMS</publisher> | |
| 1184 | <part name="cdrom" interface="scd_cdrom"> | |
| 1185 | <diskarea name="cdrom"> | |
| 1186 | <disk name="capcom no quiz - tono-sama no yabou (1992)(sims)(ntsc)(jp)[!]" sha1="96b58dc32142938623129f0c651491738ce45fc1"/> | |
| 1187 | </diskarea> | |
| 1188 | </part> | |
| 1189 | </software> | |
| 1190 | --> | |
| 1191 | ||
| 3324 | 1192 | <software name="ctsuba"> |
| 3325 | <!-- source toseciso | |
| 3326 | <rom name="Captain Tsubasa (1994)(Tecmo)(NTSC)(JP)[!].cue" size="419" crc="ebd3f49a" /> | |
| 3327 | <rom name="Captain Tsubasa (1994)(Tecmo)(NTSC)(JP)(Track 1 of 3)[!].iso" size="151955456" crc="28305efd" /> | |
| 3328 | <rom name="Captain Tsubasa (1994)(Tecmo)(NTSC)(JP)(Track 2 of 3)[!].wav" size="17943452" crc="9c1e5da1" /> | |
| 3329 | <rom name="Captain Tsubasa (1994)(Tecmo)(NTSC)(JP)(Track 3 of 3)[!].wav" size="24726620" crc="8e904660" /> | |
| 3330 | --> | |
| 3331 | 1193 | <description>Captain Tsubasa (Jpn)</description> |
| 3332 | 1194 | <year>1994</year> |
| 3333 | 1195 | <publisher>Tecmo</publisher> |
| r242703 | r242704 | |
| 3341 | 1203 | </part> |
| 3342 | 1204 | </software> |
| 3343 | 1205 | |
| 1206 | <!-- | |
| 1207 | <software name="cfstory"> | |
| 1208 | <description>Cosmic Fantasy Stories (Jpn)</description> | |
| 1209 | <year>1992</year> | |
| 1210 | <publisher>Nihon Telenet</publisher> | |
| 1211 | <part name="cdrom" interface="scd_cdrom"> | |
| 1212 | <diskarea name="cdrom"> | |
| 1213 | <disk name="cosmic fantasy stories (1992)(riot)(ntsc)(jp)[!]" sha1="aaff08feeab0a70ab7cbe775a03101587b5dd1b7"/> | |
| 1214 | </diskarea> | |
| 1215 | </part> | |
| 1216 | </software> | |
| 1217 | --> | |
| 1218 | ||
| 1219 | <!-- | |
| 1220 | <software name="cyb009"> | |
| 1221 | <description>Cyborg 009 (Jpn)</description> | |
| 1222 | <year>1993</year> | |
| 1223 | <publisher>Nihon Telenet</publisher> | |
| 1224 | <part name="cdrom" interface="scd_cdrom"> | |
| 1225 | <diskarea name="cdrom"> | |
| 1226 | <disk name="cyborg 009 (1993)(riot)(ntsc)(jp)[!]" sha1="c23be6afea4ae9883de6e2c39c6a904aeeb4458b"/> | |
| 1227 | </diskarea> | |
| 1228 | </part> | |
| 1229 | </software> | |
| 1230 | --> | |
| 1231 | ||
| 3344 | 1232 | <software name="daihoush"> |
| 3345 | <!-- source toseciso | |
| 3346 | <rom name="Daihoushinden (1995)(Victor)(NTSC)(JP)[!].cue" size="827" crc="a4140523" /> | |
| 3347 | <rom name="Daihoushinden (1995)(Victor)(NTSC)(JP)(Track 1 of 6)[!].iso" size="336377856" crc="76de0bb7" /> | |
| 3348 | <rom name="Daihoushinden (1995)(Victor)(NTSC)(JP)(Track 2 of 6)[!].wav" size="20231948" crc="79e10684" /> | |
| 3349 | <rom name="Daihoushinden (1995)(Victor)(NTSC)(JP)(Track 3 of 6)[!].wav" size="4548812" crc="371dafce" /> | |
| 3350 | <rom name="Daihoushinden (1995)(Victor)(NTSC)(JP)(Track 4 of 6)[!].wav" size="3187004" crc="d5d65cf4" /> | |
| 3351 | <rom name="Daihoushinden (1995)(Victor)(NTSC)(JP)(Track 5 of 6)[!].wav" size="26507084" crc="87aba968" /> | |
| 3352 | <rom name="Daihoushinden (1995)(Victor)(NTSC)(JP)(Track 6 of 6)[!].wav" size="1237196" crc="3644f956" /> | |
| 3353 | --> | |
| 3354 | 1233 | <description>Daihoushinden (Jpn)</description> |
| 3355 | 1234 | <year>1995</year> |
| 3356 | 1235 | <publisher>Victor Entertainment</publisher> |
| r242703 | r242704 | |
| 3365 | 1244 | </software> |
| 3366 | 1245 | |
| 3367 | 1246 | <software name="darkwiz"> |
| 3368 | <!-- source toseciso | |
| 3369 | <rom name="Dark Wizard - Yomigaeri Shiyami no Madoushi (1993)(Sega)(NTSC)(JP)[!].cue" size="2009" crc="f04f9d8d" /> | |
| 3370 | <rom name="Dark Wizard - Yomigaeri Shiyami no Madoushi (1993)(Sega)(NTSC)(JP)(Track 01 of 12)[!].iso" size="360058880" crc="29a2ec0c" /> | |
| 3371 | <rom name="Dark Wizard - Yomigaeri Shiyami no Madoushi (1993)(Sega)(NTSC)(JP)(Track 02 of 12)[!].wav" size="15092828" crc="a1310c38" /> | |
| 3372 | <rom name="Dark Wizard - Yomigaeri Shiyami no Madoushi (1993)(Sega)(NTSC)(JP)(Track 03 of 12)[!].wav" size="12371564" crc="e8fce984" /> | |
| 3373 | <rom name="Dark Wizard - Yomigaeri Shiyami no Madoushi (1993)(Sega)(NTSC)(JP)(Track 04 of 12)[!].wav" size="14664764" crc="78a5e16d" /> | |
| 3374 | <rom name="Dark Wizard - Yomigaeri Shiyami no Madoushi (1993)(Sega)(NTSC)(JP)(Track 05 of 12)[!].wav" size="17701196" crc="c15ad36c" /> | |
| 3375 | <rom name="Dark Wizard - Yomigaeri Shiyami no Madoushi (1993)(Sega)(NTSC)(JP)(Track 06 of 12)[!].wav" size="18202172" crc="005967ec" /> | |
| 3376 | <rom name="Dark Wizard - Yomigaeri Shiyami no Madoushi (1993)(Sega)(NTSC)(JP)(Track 07 of 12)[!].wav" size="9812588" crc="5da4ed9a" /> | |
| 3377 | <rom name="Dark Wizard - Yomigaeri Shiyami no Madoushi (1993)(Sega)(NTSC)(JP)(Track 08 of 12)[!].wav" size="11574236" crc="36383e5f" /> | |
| 3378 | <rom name="Dark Wizard - Yomigaeri Shiyami no Madoushi (1993)(Sega)(NTSC)(JP)(Track 09 of 12)[!].wav" size="13505228" crc="9d403cf2" /> | |
| 3379 | <rom name="Dark Wizard - Yomigaeri Shiyami no Madoushi (1993)(Sega)(NTSC)(JP)(Track 10 of 12)[!].wav" size="13608716" crc="403603f0" /> | |
| 3380 | <rom name="Dark Wizard - Yomigaeri Shiyami no Madoushi (1993)(Sega)(NTSC)(JP)(Track 11 of 12)[!].wav" size="16972076" crc="5883fffb" /> | |
| 3381 | <rom name="Dark Wizard - Yomigaeri Shiyami no Madoushi (1993)(Sega)(NTSC)(JP)(Track 12 of 12)[!].wav" size="46593164" crc="b505c38c" /> | |
| 3382 | --> | |
| 3383 | 1247 | <description>Dark Wizard - Yomigaeri Shiyami no Madoushi (Jpn)</description> |
| 3384 | 1248 | <year>1993</year> |
| 3385 | 1249 | <publisher>Sega</publisher> |
| r242703 | r242704 | |
| 3394 | 1258 | </software> |
| 3395 | 1259 | |
| 3396 | 1260 | <software name="deathbrn"> |
| 3397 | <!-- source toseciso | |
| 3398 | <rom name="Death Bringer - Himerata Monshou - The Knight of Darkness (1992)(Riot)(NTSC)(JP)[!].cue" size="2539" crc="bfe0cdad" /> | |
| 3399 | <rom name="Death Bringer - Himerata Monshou - The Knight of Darkness (1992)(Riot)(NTSC)(JP)(Track 01 of 14)[!].iso" size="33028096" crc="0c5673d5" /> | |
| 3400 | <rom name="Death Bringer - Himerata Monshou - The Knight of Darkness (1992)(Riot)(NTSC)(JP)(Track 02 of 14)[!].wav" size="39523052" crc="756bf4de" /> | |
| 3401 | <rom name="Death Bringer - Himerata Monshou - The Knight of Darkness (1992)(Riot)(NTSC)(JP)(Track 03 of 14)[!].wav" size="19521644" crc="2f98f5bd" /> | |
| 3402 | <rom name="Death Bringer - Himerata Monshou - The Knight of Darkness (1992)(Riot)(NTSC)(JP)(Track 04 of 14)[!].wav" size="7606412" crc="50f8e956" /> | |
| 3403 | <rom name="Death Bringer - Himerata Monshou - The Knight of Darkness (1992)(Riot)(NTSC)(JP)(Track 05 of 14)[!].wav" size="12999548" crc="4284e70d" /> | |
| 3404 | <rom name="Death Bringer - Himerata Monshou - The Knight of Darkness (1992)(Riot)(NTSC)(JP)(Track 06 of 14)[!].wav" size="11115596" crc="903512c5" /> | |
| 3405 | <rom name="Death Bringer - Himerata Monshou - The Knight of Darkness (1992)(Riot)(NTSC)(JP)(Track 07 of 14)[!].wav" size="2864780" crc="f3f6e3d5" /> | |
| 3406 | <rom name="Death Bringer - Himerata Monshou - The Knight of Darkness (1992)(Riot)(NTSC)(JP)(Track 08 of 14)[!].wav" size="12348044" crc="bed5a299" /> | |
| 3407 | <rom name="Death Bringer - Himerata Monshou - The Knight of Darkness (1992)(Riot)(NTSC)(JP)(Track 09 of 14)[!].wav" size="27546668" crc="38033cf7" /> | |
| 3408 | <rom name="Death Bringer - Himerata Monshou - The Knight of Darkness (1992)(Riot)(NTSC)(JP)(Track 10 of 14)[!].wav" size="10459388" crc="7f8cb09c" /> | |
| 3409 | <rom name="Death Bringer - Himerata Monshou - The Knight of Darkness (1992)(Riot)(NTSC)(JP)(Track 11 of 14)[!].wav" size="1495916" crc="4efd0078" /> | |
| 3410 | <rom name="Death Bringer - Himerata Monshou - The Knight of Darkness (1992)(Riot)(NTSC)(JP)(Track 12 of 14)[!].wav" size="1441820" crc="3c7edd95" /> | |
| 3411 | <rom name="Death Bringer - Himerata Monshou - The Knight of Darkness (1992)(Riot)(NTSC)(JP)(Track 13 of 14)[!].wav" size="1512380" crc="96431d34" /> | |
| 3412 | <rom name="Death Bringer - Himerata Monshou - The Knight of Darkness (1992)(Riot)(NTSC)(JP)(Track 14 of 14)[!].wav" size="1361852" crc="71311dac" /> | |
| 3413 | --> | |
| 3414 | 1261 | <description>Death Bringer - Himerata Monshou - The Knight of Darkness (Jpn)</description> |
| 3415 | 1262 | <year>1992</year> |
| 3416 | 1263 | <publisher>Nihon Telenet</publisher> |
| r242703 | r242704 | |
| 3424 | 1271 | </part> |
| 3425 | 1272 | </software> |
| 3426 | 1273 | |
| 3427 | <software name="illcity"> | |
| 3428 | <!-- source toseciso | |
| 3429 | <rom name="Denei Toshi - Illusion City (1993)(Micro Cabin)(NTSC)(JP)[!][T-51014P-00066-R2M].cue" size="1785" crc="e3face0f" /> | |
| 3430 | <rom name="Denei Toshi - Illusion City (1993)(Micro Cabin)(NTSC)(JP)(Track 01 of 10)[!][T-51014P-00066-R2M].iso" size="16060416" crc="f7d742d0" /> | |
| 3431 | <rom name="Denei Toshi - Illusion City (1993)(Micro Cabin)(NTSC)(JP)(Track 02 of 10)[!][T-51014P-00066-R2M].wav" size="29498828" crc="9bd1a4d1" /> | |
| 3432 | <rom name="Denei Toshi - Illusion City (1993)(Micro Cabin)(NTSC)(JP)(Track 03 of 10)[!][T-51014P-00066-R2M].wav" size="27532556" crc="ab515c95" /> | |
| 3433 | <rom name="Denei Toshi - Illusion City (1993)(Micro Cabin)(NTSC)(JP)(Track 04 of 10)[!][T-51014P-00066-R2M].wav" size="23496524" crc="acf7305f" /> | |
| 3434 | <rom name="Denei Toshi - Illusion City (1993)(Micro Cabin)(NTSC)(JP)(Track 05 of 10)[!][T-51014P-00066-R2M].wav" size="38822156" crc="2390e5b8" /> | |
| 3435 | <rom name="Denei Toshi - Illusion City (1993)(Micro Cabin)(NTSC)(JP)(Track 06 of 10)[!][T-51014P-00066-R2M].wav" size="39755900" crc="825da231" /> | |
| 3436 | <rom name="Denei Toshi - Illusion City (1993)(Micro Cabin)(NTSC)(JP)(Track 07 of 10)[!][T-51014P-00066-R2M].wav" size="43062812" crc="a4c2925b" /> | |
| 3437 | <rom name="Denei Toshi - Illusion City (1993)(Micro Cabin)(NTSC)(JP)(Track 08 of 10)[!][T-51014P-00066-R2M].wav" size="43316828" crc="b6c66034" /> | |
| 3438 | <rom name="Denei Toshi - Illusion City (1993)(Micro Cabin)(NTSC)(JP)(Track 09 of 10)[!][T-51014P-00066-R2M].wav" size="45022028" crc="6a0765aa" /> | |
| 3439 | <rom name="Denei Toshi - Illusion City (1993)(Micro Cabin)(NTSC)(JP)(Track 10 of 10)[!][T-51014P-00066-R2M].wav" size="56146988" crc="02d23f50" /> | |
| 3440 | --> | |
| 3441 | <description>Illusion City - Genei Toshi (Jpn)</description> | |
| 1274 | <software name="deneitos"> | |
| 1275 | <!-- Diskring: T-51014P-00066-R2M --> | |
| 1276 | <description>Denei Toshi - Illusion City (Jpn)</description> | |
| 3442 | 1277 | <year>1993</year> |
| 3443 | 1278 | <publisher>Micro Cabin</publisher> |
| 3444 | 1279 | <info name="serial" value="T-51014"/> |
| 3445 | <info name="disk_ring" value="T-51014P-00066-R2M"/> | |
| 3446 | 1280 | <info name="release" value="19930528"/> |
| 3447 | 1281 | <info name="alt_title" value="幻影都市 -ILLUSION CITY-"/> |
| 3448 | 1282 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 3452 | 1286 | </part> |
| 3453 | 1287 | </software> |
| 3454 | 1288 | |
| 1289 | <!-- | |
| 1290 | <software name="dennin"> | |
| 1291 | <description>Dennin-Aleste - Nobunaga and his Ninja Force (Jpn)</description> | |
| 1292 | <year>1992</year> | |
| 1293 | <publisher>Compile</publisher> | |
| 1294 | <part name="cdrom" interface="scd_cdrom"> | |
| 1295 | <diskarea name="cdrom"> | |
| 1296 | <disk name="dennin-aleste - nobunaga and his ninja force (1992)(compile)(ntsc)(jp)[!]" sha1="526f4b25f304b7b1b3d0de034a4b4b6fb74aefe5"/> | |
| 1297 | </diskarea> | |
| 1298 | </part> | |
| 1299 | </software> | |
| 1300 | --> | |
| 1301 | ||
| 1302 | <!-- | |
| 1303 | <software name="detonat"> | |
| 1304 | <description>Detonator Orgun (Jpn)</description> | |
| 1305 | <year>1992</year> | |
| 1306 | <publisher>Hot-B</publisher> | |
| 1307 | <part name="cdrom" interface="scd_cdrom"> | |
| 1308 | <diskarea name="cdrom"> | |
| 1309 | <disk name="detonator orgun (1992)(hot-b)(ntsc)(jp)[!]" sha1="a859acb522e0972182a09165ef63fe31efe306a2"/> | |
| 1310 | </diskarea> | |
| 1311 | </part> | |
| 1312 | </software> | |
| 1313 | --> | |
| 1314 | ||
| 1315 | <!-- | |
| 1316 | <software name="devastat"> | |
| 1317 | <description>Devastator (Jpn)</description> | |
| 1318 | <year>1993</year> | |
| 1319 | <publisher>Wolf Team</publisher> | |
| 1320 | <part name="cdrom" interface="scd_cdrom"> | |
| 1321 | <diskarea name="cdrom"> | |
| 1322 | <disk name="devastator (1993)(wolf team)(ntsc)(jp)[!]" sha1="d56ceea7790114e15644e2a892162b5bba338ac0"/> | |
| 1323 | </diskarea> | |
| 1324 | </part> | |
| 1325 | </software> | |
| 1326 | --> | |
| 1327 | ||
| 3455 | 1328 | <software name="dblswtch"> |
| 3456 | <!-- source toseciso | |
| 3457 | <rom name="Double Switch (1995)(Sega)(NTSC)(JP)[!].cue" size="275" crc="19630e5f" /> | |
| 3458 | <rom name="Double Switch (1995)(Sega)(NTSC)(JP)(Track 1 of 2)[!].iso" size="550866944" crc="165736de" /> | |
| 3459 | <rom name="Double Switch (1995)(Sega)(NTSC)(JP)(Track 2 of 2)[!].wav" size="1528844" crc="409d75fa" /> | |
| 3460 | --> | |
| 3461 | 1329 | <description>Double Switch (Jpn)</description> |
| 3462 | 1330 | <year>1995</year> |
| 3463 | 1331 | <publisher>Sega</publisher> |
| r242703 | r242704 | |
| 3471 | 1339 | </part> |
| 3472 | 1340 | </software> |
| 3473 | 1341 | |
| 1342 | <!-- | |
| 1343 | <software name="dlair"> | |
| 1344 | <description>Dragon's Lair (Jpn)</description> | |
| 1345 | <year>1993</year> | |
| 1346 | <publisher>Sega</publisher> | |
| 1347 | <part name="cdrom" interface="scd_cdrom"> | |
| 1348 | <diskarea name="cdrom"> | |
| 1349 | <disk name="dragon's lair (1993)(sega)(ntsc)(jp)(m5)[!]" sha1="b0f5182af9d538226e8949bd2657e91dfce3f660"/> | |
| 1350 | </diskarea> | |
| 1351 | </part> | |
| 1352 | </software> | |
| 1353 | --> | |
| 1354 | ||
| 3474 | 1355 | <software name="dngmstr2"> |
| 3475 | <!-- source toseciso | |
| 3476 | <rom name="Dungeon Master II - Skullkeep v1.0 (1994)(Victor)(NTSC)(JP)[!].cue" size="1111" crc="09079f1b" /> | |
| 3477 | <rom name="Dungeon Master II - Skullkeep v1.0 (1994)(Victor)(NTSC)(JP)(Track 1 of 7)[!].iso" size="11874304" crc="dff4905d" /> | |
| 3478 | <rom name="Dungeon Master II - Skullkeep v1.0 (1994)(Victor)(NTSC)(JP)(Track 2 of 7)[!].wav" size="32236556" crc="54c5d52d" /> | |
| 3479 | <rom name="Dungeon Master II - Skullkeep v1.0 (1994)(Victor)(NTSC)(JP)(Track 3 of 7)[!].wav" size="43373276" crc="b379aaa9" /> | |
| 3480 | <rom name="Dungeon Master II - Skullkeep v1.0 (1994)(Victor)(NTSC)(JP)(Track 4 of 7)[!].wav" size="16172396" crc="79c832df" /> | |
| 3481 | <rom name="Dungeon Master II - Skullkeep v1.0 (1994)(Victor)(NTSC)(JP)(Track 5 of 7)[!].wav" size="21283292" crc="6f86bb53" /> | |
| 3482 | <rom name="Dungeon Master II - Skullkeep v1.0 (1994)(Victor)(NTSC)(JP)(Track 6 of 7)[!].wav" size="51689948" crc="a9380c6b" /> | |
| 3483 | <rom name="Dungeon Master II - Skullkeep v1.0 (1994)(Victor)(NTSC)(JP)(Track 7 of 7)[!].wav" size="2940044" crc="aeadf2f5" /> | |
| 3484 | --> | |
| 3485 | 1356 | <description>Dungeon Master II - Skullkeep (Jpn, v1.0)</description> |
| 3486 | 1357 | <year>1994</year> |
| 3487 | 1358 | <publisher>Victor Entertainment</publisher> |
| r242703 | r242704 | |
| 3495 | 1366 | </part> |
| 3496 | 1367 | </software> |
| 3497 | 1368 | |
| 1369 | <!-- | |
| 1370 | <software name="dynamicc"> | |
| 1371 | <description>Dynamic Country Club - 3D Golf Simulation (Jpn)</description> | |
| 1372 | <year>1993</year> | |
| 1373 | <publisher>Sega</publisher> | |
| 1374 | <part name="cdrom" interface="scd_cdrom"> | |
| 1375 | <diskarea name="cdrom"> | |
| 1376 | <disk name="dynamic country club - 3d golf simulation (1993)(sega)(ntsc)(jp)[!]" sha1="883a0bbc0f29b302d43d124e2ebff4c518c14e3f"/> | |
| 1377 | </diskarea> | |
| 1378 | </part> | |
| 1379 | </software> | |
| 1380 | --> | |
| 1381 | ||
| 1382 | <!-- | |
| 1383 | <software name="earnest"> | |
| 1384 | <description>Earnest Evans (Jpn)</description> | |
| 1385 | <year>1991</year> | |
| 1386 | <publisher>Wolf Team</publisher> | |
| 1387 | <part name="cdrom" interface="scd_cdrom"> | |
| 1388 | <diskarea name="cdrom"> | |
| 1389 | <disk name="earnest evans (1991)(wolf team)(ntsc)(jp)(en)[!]" sha1="058449e89ee928f912014e6db6156370f6665526"/> | |
| 1390 | </diskarea> | |
| 1391 | </part> | |
| 1392 | </software> | |
| 1393 | --> | |
| 1394 | ||
| 3498 | 1395 | <!-- these are standalone discs, even if they were part of a single package --> |
| 3499 | 1396 | <software name="ecco"> |
| 3500 | <!-- source toseciso | |
| 3501 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)[!][Ecco the Dolphin].cue" size="2789" crc="bcb8fae9" /> | |
| 3502 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 01 of 16)[!][Ecco the Dolphin].iso" size="51910656" crc="b83895f7" /> | |
| 3503 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 02 of 16)[!][Ecco the Dolphin].wav" size="48423020" crc="53c68ad2" /> | |
| 3504 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 03 of 16)[!][Ecco the Dolphin].wav" size="43323884" crc="ca2ef58b" /> | |
| 3505 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 04 of 16)[!][Ecco the Dolphin].wav" size="37653212" crc="32683fa6" /> | |
| 3506 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 05 of 16)[!][Ecco the Dolphin].wav" size="65731388" crc="bfbabc75" /> | |
| 3507 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 06 of 16)[!][Ecco the Dolphin].wav" size="57631100" crc="f7f0b595" /> | |
| 3508 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 07 of 16)[!][Ecco the Dolphin].wav" size="59905484" crc="e1ed3600" /> | |
| 3509 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 08 of 16)[!][Ecco the Dolphin].wav" size="37333340" crc="a1223006" /> | |
| 3510 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 09 of 16)[!][Ecco the Dolphin].wav" size="10816892" crc="d530716a" /> | |
| 3511 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 10 of 16)[!][Ecco the Dolphin].wav" size="20737628" crc="451ea626" /> | |
| 3512 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 11 of 16)[!][Ecco the Dolphin].wav" size="36477212" crc="34b7e382" /> | |
| 3513 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 12 of 16)[!][Ecco the Dolphin].wav" size="10812188" crc="61c7ec3f" /> | |
| 3514 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 13 of 16)[!][Ecco the Dolphin].wav" size="37547372" crc="65122733" /> | |
| 3515 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 14 of 16)[!][Ecco the Dolphin].wav" size="37476812" crc="a0d05736" /> | |
| 3516 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 15 of 16)[!][Ecco the Dolphin].wav" size="59016428" crc="91778a50" /> | |
| 3517 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 16 of 16)[!][Ecco the Dolphin].wav" size="40350956" crc="4c9dcf9a" /> | |
| 3518 | --> | |
| 3519 | 1397 | <description>Ecco the Dolphin CD (Jpn, Disc 1 - Ecco the Dolphin)</description> |
| 3520 | 1398 | <year>1995</year> |
| 3521 | 1399 | <publisher>Sega</publisher> |
| r242703 | r242704 | |
| 3530 | 1408 | </software> |
| 3531 | 1409 | |
| 3532 | 1410 | <software name="ecco2"> |
| 3533 | <!-- source toseciso | |
| 3534 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)[!][Ecco the Dolphin II].cue" size="3014" crc="6e907051" /> | |
| 3535 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 01 of 17)[!][Ecco the Dolphin II].iso" size="131043328" crc="c34475f0" /> | |
| 3536 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 02 of 17)[!][Ecco the Dolphin II].wav" size="50005916" crc="4a8c1687" /> | |
| 3537 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 03 of 17)[!][Ecco the Dolphin II].wav" size="48622940" crc="bc438d4e" /> | |
| 3538 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 04 of 17)[!][Ecco the Dolphin II].wav" size="40393292" crc="7acfc255" /> | |
| 3539 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 05 of 17)[!][Ecco the Dolphin II].wav" size="39744140" crc="f823c375" /> | |
| 3540 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 06 of 17)[!][Ecco the Dolphin II].wav" size="37415660" crc="cb2a3d5b" /> | |
| 3541 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 07 of 17)[!][Ecco the Dolphin II].wav" size="37248668" crc="23e12f0b" /> | |
| 3542 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 08 of 17)[!][Ecco the Dolphin II].wav" size="35755148" crc="0a8a88af" /> | |
| 3543 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 09 of 17)[!][Ecco the Dolphin II].wav" size="34986044" crc="7b778aad" /> | |
| 3544 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 10 of 17)[!][Ecco the Dolphin II].wav" size="30253820" crc="2969b127" /> | |
| 3545 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 11 of 17)[!][Ecco the Dolphin II].wav" size="29595260" crc="32101179" /> | |
| 3546 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 12 of 17)[!][Ecco the Dolphin II].wav" size="28913180" crc="f5e5a1b4" /> | |
| 3547 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 13 of 17)[!][Ecco the Dolphin II].wav" size="23910476" crc="6816f61f" /> | |
| 3548 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 14 of 17)[!][Ecco the Dolphin II].wav" size="15596156" crc="7907bc58" /> | |
| 3549 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 15 of 17)[!][Ecco the Dolphin II].wav" size="4438268" crc="2ec7620f" /> | |
| 3550 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 16 of 17)[!][Ecco the Dolphin II].wav" size="49128620" crc="1b3d0b81" /> | |
| 3551 | <rom name="Ecco the Dolphin CD (1995)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 17 of 17)[!][Ecco the Dolphin II].wav" size="10816892" crc="3e9c92a6" /> | |
| 3552 | --> | |
| 3553 | 1411 | <description>Ecco the Dolphin CD (Jpn, Disc 2 - Ecco the Dolphin II)</description> |
| 3554 | 1412 | <year>1995</year> |
| 3555 | 1413 | <publisher>Sega</publisher> |
| r242703 | r242704 | |
| 3563 | 1421 | </part> |
| 3564 | 1422 | </software> |
| 3565 | 1423 | |
| 1424 | <!-- | |
| 1425 | <software name="supleges"> | |
| 1426 | <description>Egawa Sugoru no Super League CD (Jpn)</description> | |
| 1427 | <year>1993</year> | |
| 1428 | <publisher>Sega</publisher> | |
| 1429 | <part name="cdrom" interface="scd_cdrom"> | |
| 1430 | <diskarea name="cdrom"> | |
| 1431 | <disk name="egawa sugoru no super league cd (1993)(sega)(ntsc)(jp)[!]" sha1="1147ed564df0ec4a8ffb5ac70afc0c88b0cfa232"/> | |
| 1432 | </diskarea> | |
| 1433 | </part> | |
| 1434 | </software> | |
| 1435 | --> | |
| 1436 | ||
| 3566 | 1437 | <software name="eyebehol"> |
| 3567 | <!-- source toseciso | |
| 3568 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)[!].cue" size="8405" crc="72d263ee" /> | |
| 3569 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 01 of 56)[!].iso" size="23156736" crc="02ae16e8" /> | |
| 3570 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 02 of 56)[!].wav" size="52143884" crc="36938728" /> | |
| 3571 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 03 of 56)[!].wav" size="32638748" crc="b43c0f80" /> | |
| 3572 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 04 of 56)[!].wav" size="27132716" crc="eabd6cd0" /> | |
| 3573 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 05 of 56)[!].wav" size="30437276" crc="2084c504" /> | |
| 3574 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 06 of 56)[!].wav" size="33203228" crc="2c87caec" /> | |
| 3575 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 07 of 56)[!].wav" size="35298860" crc="c0091445" /> | |
| 3576 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 08 of 56)[!].wav" size="29508236" crc="599b16cd" /> | |
| 3577 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 09 of 56)[!].wav" size="22249964" crc="eeab3ed7" /> | |
| 3578 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 10 of 56)[!].wav" size="30839468" crc="cbeccef6" /> | |
| 3579 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 11 of 56)[!].wav" size="10000748" crc="dc8d43e6" /> | |
| 3580 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 12 of 56)[!].wav" size="20744684" crc="13731c88" /> | |
| 3581 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 13 of 56)[!].wav" size="1542956" crc="35aa710d" /> | |
| 3582 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 14 of 56)[!].wav" size="5567228" crc="7475b9b4" /> | |
| 3583 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 15 of 56)[!].wav" size="3779708" crc="8e9e963b" /> | |
| 3584 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 16 of 56)[!].wav" size="1759340" crc="49ebb859" /> | |
| 3585 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 17 of 56)[!].wav" size="3469244" crc="52e3b97d" /> | |
| 3586 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 18 of 56)[!].wav" size="24500828" crc="8ccf4eaa" /> | |
| 3587 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 19 of 56)[!].wav" size="1756988" crc="5484a1f5" /> | |
| 3588 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 20 of 56)[!].wav" size="11825900" crc="5fa8cb54" /> | |
| 3589 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 21 of 56)[!].wav" size="2048636" crc="0023a007" /> | |
| 3590 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 22 of 56)[!].wav" size="1733468" crc="807f912b" /> | |
| 3591 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 23 of 56)[!].wav" size="4638188" crc="92eddf05" /> | |
| 3592 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 24 of 56)[!].wav" size="1907516" crc="b99ba664" /> | |
| 3593 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 25 of 56)[!].wav" size="1430060" crc="a7dca13b" /> | |
| 3594 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 26 of 56)[!].wav" size="2410844" crc="2bed95fd" /> | |
| 3595 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 27 of 56)[!].wav" size="8817692" crc="4ae3d5e8" /> | |
| 3596 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 28 of 56)[!].wav" size="25606268" crc="8b0dd2d3" /> | |
| 3597 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 29 of 56)[!].wav" size="1401836" crc="e0051d02" /> | |
| 3598 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 30 of 56)[!].wav" size="1404188" crc="b471ebf6" /> | |
| 3599 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 31 of 56)[!].wav" size="2227388" crc="a787dffc" /> | |
| 3600 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 32 of 56)[!].wav" size="1383020" crc="7457d37a" /> | |
| 3601 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 33 of 56)[!].wav" size="2702492" crc="8a00517b" /> | |
| 3602 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 34 of 56)[!].wav" size="10974476" crc="ceca1109" /> | |
| 3603 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 35 of 56)[!].wav" size="1665260" crc="b117cb14" /> | |
| 3604 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 36 of 56)[!].wav" size="4254812" crc="7413ca91" /> | |
| 3605 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 37 of 56)[!].wav" size="1618220" crc="2fa5bfd3" /> | |
| 3606 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 38 of 56)[!].wav" size="3419852" crc="578a520b" /> | |
| 3607 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 39 of 56)[!].wav" size="2754236" crc="a98b006b" /> | |
| 3608 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 40 of 56)[!].wav" size="6293996" crc="e320c5ac" /> | |
| 3609 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 41 of 56)[!].wav" size="1681724" crc="d240a740" /> | |
| 3610 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 42 of 56)[!].wav" size="4014908" crc="176294a1" /> | |
| 3611 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 43 of 56)[!].wav" size="1411244" crc="395efa74" /> | |
| 3612 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 44 of 56)[!].wav" size="4901612" crc="7241e425" /> | |
| 3613 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 45 of 56)[!].wav" size="6070556" crc="ae02fbf0" /> | |
| 3614 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 46 of 56)[!].wav" size="3803228" crc="0994dc5b" /> | |
| 3615 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 47 of 56)[!].wav" size="5553116" crc="1d2ec2d7" /> | |
| 3616 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 48 of 56)[!].wav" size="4179548" crc="bcfa7b59" /> | |
| 3617 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 49 of 56)[!].wav" size="2013356" crc="264a9fa4" /> | |
| 3618 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 50 of 56)[!].wav" size="5433164" crc="1dc4882e" /> | |
| 3619 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 51 of 56)[!].wav" size="5393180" crc="78d313e5" /> | |
| 3620 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 52 of 56)[!].wav" size="2493164" crc="1e8c91b1" /> | |
| 3621 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 53 of 56)[!].wav" size="5176796" crc="fb9e5f74" /> | |
| 3622 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 54 of 56)[!].wav" size="1582940" crc="0dfdafb2" /> | |
| 3623 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 55 of 56)[!].wav" size="3069404" crc="b20c4c43" /> | |
| 3624 | <rom name="Eye of the Beholder (1994)(Pony Canyon)(NTSC)(JP)(Track 56 of 56)[!].wav" size="3979628" crc="3193d019" /> | |
| 3625 | --> | |
| 3626 | 1438 | <description>Eye of the Beholder (Jpn)</description> |
| 3627 | 1439 | <year>1994</year> |
| 3628 | 1440 | <publisher>Pony Canyon</publisher> |
| r242703 | r242704 | |
| 3636 | 1448 | </part> |
| 3637 | 1449 | </software> |
| 3638 | 1450 | |
| 1451 | <!-- | |
| 1452 | <software name="f1circus"> | |
| 1453 | <description>F1 Circus CD (Jpn)</description> | |
| 1454 | <year>1994</year> | |
| 1455 | <publisher>Nichibutsu</publisher> | |
| 1456 | <part name="cdrom" interface="scd_cdrom"> | |
| 1457 | <diskarea name="cdrom"> | |
| 1458 | <disk name="f1 circus cd (1994)(nichibutsu)(ntsc)(jp)[!]" sha1="90acc540aec5ce3ada70c497df4080a7e6a54979"/> | |
| 1459 | </diskarea> | |
| 1460 | </part> | |
| 1461 | </software> | |
| 1462 | --> | |
| 1463 | ||
| 3639 | 1464 | <software name="fahrenhe"> |
| 3640 | <!-- source toseciso | |
| 3641 | <rom name="Fahrenheit (1995)(Sega)(NTSC)(JP)[!].cue" size="269" crc="d69de602" /> | |
| 3642 | <rom name="Fahrenheit (1995)(Sega)(NTSC)(JP)(Track 1 of 2)[!].iso" size="516972544" crc="3e54d0fa" /> | |
| 3643 | <rom name="Fahrenheit (1995)(Sega)(NTSC)(JP)(Track 2 of 2)[!].wav" size="1874588" crc="ad809074" /> | |
| 3644 | --> | |
| 3645 | 1465 | <description>Fahrenheit (Jpn)</description> |
| 3646 | 1466 | <year>1995</year> |
| 3647 | 1467 | <publisher>Sega</publisher> |
| r242703 | r242704 | |
| 3655 | 1475 | </part> |
| 3656 | 1476 | </software> |
| 3657 | 1477 | |
| 1478 | <!-- Ringcode: G-6013P-00059-R1M --> | |
| 1479 | <!-- | |
| 1480 | <software name="ffightcd"> | |
| 1481 | <description>Final Fight CD (Jpn)</description> | |
| 1482 | <year>1993</year> | |
| 1483 | <publisher>Sega</publisher> | |
| 1484 | <part name="cdrom" interface="scd_cdrom"> | |
| 1485 | <diskarea name="cdrom"> | |
| 1486 | <disk name="final fight cd (1993)(sega)(ntsc)(jp)(en)[!][g-6013p-00059-r1m]" sha1="841a17ed8123097811ebc88629dbe9b21dc673d7"/> | |
| 1487 | </diskarea> | |
| 1488 | </part> | |
| 1489 | </software> | |
| 1490 | --> | |
| 1491 | ||
| 1492 | <!-- | |
| 1493 | <software name="gamjik2"> | |
| 1494 | <description>Gambler Jiko Chuushinha 2 - Gekitou! Tokyo Mahjongland Hen (Jpn)</description> | |
| 1495 | <year>1992</year> | |
| 1496 | <publisher>Game Arts</publisher> | |
| 1497 | <part name="cdrom" interface="scd_cdrom"> | |
| 1498 | <diskarea name="cdrom"> | |
| 1499 | <disk name="gambler jiko chuushinha 2 - gekitou! tokyo mahjongland hen (1992)(game arts)(ntsc)(jp)[!]" sha1="ea06aad113bfe71bd84a7dcca83f9a80254ed8e0"/> | |
| 1500 | </diskarea> | |
| 1501 | </part> | |
| 1502 | </software> | |
| 1503 | --> | |
| 1504 | ||
| 1505 | ||
| 1506 | <!-- | |
| 1507 | <software name="gameno1"> | |
| 1508 | <description>Game no Kanzume - Sega Games Can Vol.1 (Jpn)</description> | |
| 1509 | <year>1994</year> | |
| 1510 | <publisher>Sega</publisher> | |
| 1511 | <part name="cdrom" interface="scd_cdrom"> | |
| 1512 | <diskarea name="cdrom"> | |
| 1513 | <disk name="game no kanzume - sega games can vol.1 (1994)(sega)(ntsc)(jp)[!][compilation]" sha1="36c8b8ce1e24a2c2949121bb112c7d5f89fe24d8"/> | |
| 1514 | </diskarea> | |
| 1515 | </part> | |
| 1516 | </software> | |
| 1517 | --> | |
| 1518 | ||
| 1519 | <!-- | |
| 1520 | <software name="gameno2"> | |
| 1521 | <description>Game no Kanzume - Sega Games Can Vol.2 (Jpn)</description> | |
| 1522 | <year>1994</year> | |
| 1523 | <publisher>Sega</publisher> | |
| 1524 | <part name="cdrom" interface="scd_cdrom"> | |
| 1525 | <diskarea name="cdrom"> | |
| 1526 | <disk name="game no kanzume - sega games can vol.2 (1994)(sega)(ntsc)(jp)[!][compilation]" sha1="992b3373fb17bf2052a2f9a94011a55b3af26880"/> | |
| 1527 | </diskarea> | |
| 1528 | </part> | |
| 1529 | </software> | |
| 1530 | --> | |
| 1531 | ||
| 1532 | <!-- | |
| 1533 | <software name="garoudsp"> | |
| 1534 | <description>Garou Densetsu Special (Jpn)</description> | |
| 1535 | <year>1995</year> | |
| 1536 | <publisher>Victor Entertainment</publisher> | |
| 1537 | <part name="cdrom" interface="scd_cdrom"> | |
| 1538 | <diskarea name="cdrom"> | |
| 1539 | <disk name="garou densetsu special (1995)(victor)(ntsc)(jp)(en)[!]" sha1="c6ed65f8d83b90215da08d657b88a32d304285ac"/> | |
| 1540 | </diskarea> | |
| 1541 | </part> | |
| 1542 | </software> | |
| 1543 | --> | |
| 1544 | ||
| 1545 | <!-- | |
| 1546 | <software name="heavenly"> | |
| 1547 | <description>Heavenly Symphony - Formula One World Championship 1993 (Jpn)</description> | |
| 1548 | <year>1994</year> | |
| 1549 | <publisher>Sega</publisher> | |
| 1550 | <part name="cdrom" interface="scd_cdrom"> | |
| 1551 | <diskarea name="cdrom"> | |
| 1552 | <disk name="heavenly symphony - formula one world championship 1993 (1994)(sega)(ntsc)(jp)[!]" sha1="44f1e992169ff3ab12a2b5a08a0dd9c61b14cc8f"/> | |
| 1553 | </diskarea> | |
| 1554 | </part> | |
| 1555 | </software> | |
| 1556 | --> | |
| 1557 | ||
| 1558 | <!-- | |
| 1559 | <software name="hvynova"> | |
| 1560 | <description>Heavy Nova (Jpn)</description> | |
| 1561 | <year>1991</year> | |
| 1562 | <publisher>Micronet</publisher> | |
| 1563 | <part name="cdrom" interface="scd_cdrom"> | |
| 1564 | <diskarea name="cdrom"> | |
| 1565 | <disk name="heavy nova (1991)(micronet)(ntsc)(jp)(en-ja)[!]" sha1="64193e38f454f4d408f0fe02ff682afee333be30"/> | |
| 1566 | </diskarea> | |
| 1567 | </part> | |
| 1568 | </software> | |
| 1569 | --> | |
| 1570 | ||
| 1571 | <!-- | |
| 1572 | <software name="heimdall"> | |
| 1573 | <description>Heimdall (Jpn)</description> | |
| 1574 | <year>1994</year> | |
| 1575 | <publisher>Victor Entertainment</publisher> | |
| 1576 | <part name="cdrom" interface="scd_cdrom"> | |
| 1577 | <diskarea name="cdrom"> | |
| 1578 | <disk name="heimdall (1994)(victor)(ntsc)(jp)[!]" sha1="98b5689f7d22e519258658f98b6359cbe3a8c430"/> | |
| 1579 | </diskarea> | |
| 1580 | </part> | |
| 1581 | </software> | |
| 1582 | --> | |
| 1583 | ||
| 3658 | 1584 | <software name="3rdww"> |
| 3659 | <!-- source toseciso | |
| 3660 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)[!].cue" size="6813" crc="635412ab" /> | |
| 3661 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 01 of 46)[!].iso" size="153169920" crc="b9a4c33e" /> | |
| 3662 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 02 of 46)[!].wav" size="11546012" crc="be43e05e" /> | |
| 3663 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 03 of 46)[!].wav" size="13935644" crc="7f01af5c" /> | |
| 3664 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 04 of 46)[!].wav" size="18938348" crc="a31ab8fe" /> | |
| 3665 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 05 of 46)[!].wav" size="15121052" crc="3d89bfb3" /> | |
| 3666 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 06 of 46)[!].wav" size="14989340" crc="08aa5edf" /> | |
| 3667 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 07 of 46)[!].wav" size="15055196" crc="e4217670" /> | |
| 3668 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 08 of 46)[!].wav" size="11291996" crc="ac8df6ca" /> | |
| 3669 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 09 of 46)[!].wav" size="18387980" crc="c92331b9" /> | |
| 3670 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 10 of 46)[!].wav" size="15017564" crc="2993ffe0" /> | |
| 3671 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 11 of 46)[!].wav" size="21219788" crc="bfd0d885" /> | |
| 3672 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 12 of 46)[!].wav" size="21636092" crc="ec0955fb" /> | |
| 3673 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 13 of 46)[!].wav" size="21963020" crc="24d79e74" /> | |
| 3674 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 14 of 46)[!].wav" size="9685580" crc="a6bbc2d9" /> | |
| 3675 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 15 of 46)[!].wav" size="16386428" crc="1017c501" /> | |
| 3676 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 16 of 46)[!].wav" size="10125404" crc="07b52dcf" /> | |
| 3677 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 17 of 46)[!].wav" size="11002700" crc="82118f02" /> | |
| 3678 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 18 of 46)[!].wav" size="1326572" crc="3875aed6" /> | |
| 3679 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 19 of 46)[!].wav" size="1378316" crc="343471e9" /> | |
| 3680 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 20 of 46)[!].wav" size="1265420" crc="9a3702f3" /> | |
| 3681 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 21 of 46)[!].wav" size="1319516" crc="168d0335" /> | |
| 3682 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 22 of 46)[!].wav" size="1187804" crc="5ab6ab61" /> | |
| 3683 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 23 of 46)[!].wav" size="1291292" crc="863a996e" /> | |
| 3684 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 24 of 46)[!].wav" size="1441820" crc="a0ee5fc5" /> | |
| 3685 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 25 of 46)[!].wav" size="1559420" crc="fdab65a3" /> | |
| 3686 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 26 of 46)[!].wav" size="1277180" crc="acc9cbc2" /> | |
| 3687 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 27 of 46)[!].wav" size="1256012" crc="798cd3e2" /> | |
| 3688 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 28 of 46)[!].wav" size="1230140" crc="051dd6ab" /> | |
| 3689 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 29 of 46)[!].wav" size="1208972" crc="4520ac08" /> | |
| 3690 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 30 of 46)[!].wav" size="1274828" crc="8039d145" /> | |
| 3691 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 31 of 46)[!].wav" size="1265420" crc="84c9d202" /> | |
| 3692 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 32 of 46)[!].wav" size="1277180" crc="96b395ca" /> | |
| 3693 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 33 of 46)[!].wav" size="1270124" crc="6146eb2d" /> | |
| 3694 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 34 of 46)[!].wav" size="1303052" crc="50db3854" /> | |
| 3695 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 35 of 46)[!].wav" size="1295996" crc="4d4be352" /> | |
| 3696 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 36 of 46)[!].wav" size="1298348" crc="dc7387a9" /> | |
| 3697 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 37 of 46)[!].wav" size="1284236" crc="e228e169" /> | |
| 3698 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 38 of 46)[!].wav" size="1286588" crc="31ba13f2" /> | |
| 3699 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 39 of 46)[!].wav" size="1183100" crc="9cb93b87" /> | |
| 3700 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 40 of 46)[!].wav" size="1305404" crc="b1185905" /> | |
| 3701 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 41 of 46)[!].wav" size="1281884" crc="06c700be" /> | |
| 3702 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 42 of 46)[!].wav" size="1314812" crc="a86b6949" /> | |
| 3703 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 43 of 46)[!].wav" size="1295996" crc="d824903e" /> | |
| 3704 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 44 of 46)[!].wav" size="1305404" crc="44385d9a" /> | |
| 3705 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 45 of 46)[!].wav" size="1844012" crc="919a20c3" /> | |
| 3706 | <rom name="Third World War, The (1993)(Micronet)(NTSC)(Jp)(Track 46 of 46)[!].wav" size="1726412" crc="ccc08967" /> | |
| 3707 | --> | |
| 3708 | 1585 | <description>The IIIrd World War (Jpn)</description> |
| 3709 | 1586 | <year>1993</year> |
| 3710 | 1587 | <publisher>Micronet</publisher> |
| r242703 | r242704 | |
| 3719 | 1596 | </software> |
| 3720 | 1597 | |
| 3721 | 1598 | <software name="ishiihis"> |
| 3722 | <!-- source toseciso | |
| 3723 | <rom name="Ishii Hisaichi no Daisekai (1994)(Sega)(NTSC)(JP)[!].cue" size="301" crc="58302545" /> | |
| 3724 | <rom name="Ishii Hisaichi no Daisekai (1994)(Sega)(NTSC)(JP)(Track 1 of 2)[!].iso" size="7733248" crc="e1f8624a" /> | |
| 3725 | <rom name="Ishii Hisaichi no Daisekai (1994)(Sega)(NTSC)(JP)(Track 2 of 2)[!].wav" size="769148" crc="bd7489e2" /> | |
| 3726 | --> | |
| 3727 | 1599 | <description>Ishii Hisaichi no Daisekai (Jpn)</description> |
| 3728 | 1600 | <year>1994</year> |
| 3729 | 1601 | <publisher>Sega</publisher> |
| r242703 | r242704 | |
| 3737 | 1609 | </part> |
| 3738 | 1610 | </software> |
| 3739 | 1611 | |
| 1612 | <!-- | |
| 1613 | <software name="xj220"> | |
| 1614 | <description>Jaguar XJ220 (Jpn)</description> | |
| 1615 | <year>1993</year> | |
| 1616 | <publisher>Victor Entertainment</publisher> | |
| 1617 | <part name="cdrom" interface="scd_cdrom"> | |
| 1618 | <diskarea name="cdrom"> | |
| 1619 | <disk name="jaguar xj220 (1993)(victor)(ntsc)(jp)(en-ja)[!]" sha1="af4c7b196a5530e867befa7f5b1e5fe6aa0abf2d"/> | |
| 1620 | </diskarea> | |
| 1621 | </part> | |
| 1622 | </software> | |
| 1623 | --> | |
| 1624 | ||
| 1625 | <!-- | |
| 1626 | <software name="jangwc"> | |
| 1627 | <description>Jangou World Cup (Jpn)</description> | |
| 1628 | <year>1993</year> | |
| 1629 | <publisher>Victor Entertainment</publisher> | |
| 1630 | <part name="cdrom" interface="scd_cdrom"> | |
| 1631 | <diskarea name="cdrom"> | |
| 1632 | <disk name="jangou world cup (1993)(victor)(ntsc)(jp)[!]" sha1="7b91a3d44698f129bfef7af748dae06302bce927"/> | |
| 1633 | </diskarea> | |
| 1634 | </part> | |
| 1635 | </software> | |
| 1636 | --> | |
| 1637 | ||
| 3740 | 1638 | <software name="jpark"> |
| 3741 | <!-- source toseciso | |
| 3742 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)[!].cue" size="4389" crc="5a0b550d" /> | |
| 3743 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 01 of 32)[!].iso" size="165844992" crc="a575aebf" /> | |
| 3744 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 02 of 32)[!].wav" size="11026220" crc="44cc8f41" /> | |
| 3745 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 03 of 32)[!].wav" size="11291996" crc="539b92ce" /> | |
| 3746 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 04 of 32)[!].wav" size="10412348" crc="c0a75cb6" /> | |
| 3747 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 05 of 32)[!].wav" size="1481804" crc="db9ea970" /> | |
| 3748 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 06 of 32)[!].wav" size="11614220" crc="0dcefc29" /> | |
| 3749 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 07 of 32)[!].wav" size="10976828" crc="9352ae43" /> | |
| 3750 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 08 of 32)[!].wav" size="16583996" crc="3cb2e113" /> | |
| 3751 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 09 of 32)[!].wav" size="14653004" crc="80d25216" /> | |
| 3752 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 10 of 32)[!].wav" size="12007004" crc="49c60a6b" /> | |
| 3753 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 11 of 32)[!].wav" size="19768604" crc="49e1dd9f" /> | |
| 3754 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 12 of 32)[!].wav" size="2570780" crc="cbea0bc3" /> | |
| 3755 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 13 of 32)[!].wav" size="13194764" crc="5fef640d" /> | |
| 3756 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 14 of 32)[!].wav" size="13103036" crc="ec7dee28" /> | |
| 3757 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 15 of 32)[!].wav" size="1973372" crc="ecde793b" /> | |
| 3758 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 16 of 32)[!].wav" size="11374316" crc="4c7bad5d" /> | |
| 3759 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 17 of 32)[!].wav" size="2502572" crc="ec793028" /> | |
| 3760 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 18 of 32)[!].wav" size="11291996" crc="c4a0fb8e" /> | |
| 3761 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 19 of 32)[!].wav" size="15812540" crc="8b1020a2" /> | |
| 3762 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 20 of 32)[!].wav" size="1959260" crc="dd78047b" /> | |
| 3763 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 21 of 32)[!].wav" size="11291996" crc="dcc40ef4" /> | |
| 3764 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 22 of 32)[!].wav" size="2243852" crc="61c8cf77" /> | |
| 3765 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 23 of 32)[!].wav" size="11291996" crc="fc24aa9a" /> | |
| 3766 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 24 of 32)[!].wav" size="1653500" crc="1ae48db0" /> | |
| 3767 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 25 of 32)[!].wav" size="15450332" crc="734b5a17" /> | |
| 3768 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 26 of 32)[!].wav" size="22275836" crc="f97f493d" /> | |
| 3769 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 27 of 32)[!].wav" size="1785212" crc="556877b7" /> | |
| 3770 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 28 of 32)[!].wav" size="10513484" crc="c379ce84" /> | |
| 3771 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 29 of 32)[!].wav" size="34005260" crc="6aa86ab2" /> | |
| 3772 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 30 of 32)[!].wav" size="13794524" crc="eef4ac5d" /> | |
| 3773 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 31 of 32)[!].wav" size="17444828" crc="380f8cca" /> | |
| 3774 | <rom name="Jurassic Park (1992)(Sega)(NTSC)(JP)(Track 32 of 32)[!].wav" size="2394380" crc="960c51ad" /> | |
| 3775 | --> | |
| 3776 | 1639 | <description>Jurassic Park (Jpn)</description> |
| 3777 | 1640 | <year>1994</year> |
| 3778 | 1641 | <publisher>Sega</publisher> |
| r242703 | r242704 | |
| 3786 | 1649 | </part> |
| 3787 | 1650 | </software> |
| 3788 | 1651 | |
| 1652 | <!-- | |
| 1653 | <software name="kamenrid"> | |
| 1654 | <description>Kamen Rider ZO (Jpn)</description> | |
| 1655 | <year>1994</year> | |
| 1656 | <publisher>Wolf Team</publisher> | |
| 1657 | <part name="cdrom" interface="scd_cdrom"> | |
| 1658 | <diskarea name="cdrom"> | |
| 1659 | <disk name="kamen rider zo (1994)(wolf team)(ntsc)(jp)[!]" sha1="d8ce936b45a766199d7d4dc128558a80b83a06c4"/> | |
| 1660 | </diskarea> | |
| 1661 | </part> | |
| 1662 | </software> | |
| 1663 | --> | |
| 1664 | ||
| 1665 | <!-- | |
| 1666 | <software name="keiou"> | |
| 1667 | <description>Keiou Yuugekitai (Jpn)</description> | |
| 1668 | <year>1993</year> | |
| 1669 | <publisher>Victor Entertainment</publisher> | |
| 1670 | <part name="cdrom" interface="scd_cdrom"> | |
| 1671 | <diskarea name="cdrom"> | |
| 1672 | <disk name="keiou yuugekitai (1993)(victor)(ntsc)(jp)[!]" sha1="60db81983905822ccead05080dbedcdeedfe0be4"/> | |
| 1673 | </diskarea> | |
| 1674 | </part> | |
| 1675 | </software> | |
| 1676 | --> | |
| 1677 | ||
| 3789 | 1678 | <software name="lethalen"> |
| 3790 | <!-- source toseciso | |
| 3791 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)[!].cue" size="3363" crc="f53989d5" /> | |
| 3792 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 01 of 23)[!].iso" size="8792064" crc="0e04969a" /> | |
| 3793 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 02 of 23)[!].wav" size="1764044" crc="ab0e440c" /> | |
| 3794 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 03 of 23)[!].wav" size="52520204" crc="81e5ce5f" /> | |
| 3795 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 04 of 23)[!].wav" size="38222396" crc="e3bc17cb" /> | |
| 3796 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 05 of 23)[!].wav" size="62506796" crc="d916ce75" /> | |
| 3797 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 06 of 23)[!].wav" size="31232252" crc="d3839087" /> | |
| 3798 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 07 of 23)[!].wav" size="57875708" crc="6b424001" /> | |
| 3799 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 08 of 23)[!].wav" size="60354716" crc="64fa4d94" /> | |
| 3800 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 09 of 23)[!].wav" size="6348092" crc="836dd39f" /> | |
| 3801 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 10 of 23)[!].wav" size="1444172" crc="e293e0ae" /> | |
| 3802 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 11 of 23)[!].wav" size="58484876" crc="e65ca5af" /> | |
| 3803 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 12 of 23)[!].wav" size="25253468" crc="8b12318f" /> | |
| 3804 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 13 of 23)[!].wav" size="93045164" crc="95529378" /> | |
| 3805 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 14 of 23)[!].wav" size="1721708" crc="2f7ee757" /> | |
| 3806 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 15 of 23)[!].wav" size="32532908" crc="205806ed" /> | |
| 3807 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 16 of 23)[!].wav" size="1832252" crc="86e49e32" /> | |
| 3808 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 17 of 23)[!].wav" size="1808732" crc="1681547b" /> | |
| 3809 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 18 of 23)[!].wav" size="1808732" crc="0ba45dd9" /> | |
| 3810 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 19 of 23)[!].wav" size="1808732" crc="65db565d" /> | |
| 3811 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 20 of 23)[!].wav" size="1808732" crc="1b3e48b4" /> | |
| 3812 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 21 of 23)[!].wav" size="1279532" crc="8aa4129e" /> | |
| 3813 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 22 of 23)[!].wav" size="22666268" crc="935af7a1" /> | |
| 3814 | <rom name="Lethal Enforcers (1993)(Konami)(NTSC)(JP)(en)(Track 23 of 23)[!].wav" size="37516796" crc="b15e6cdd" /> | |
| 3815 | --> | |
| 3816 | 1679 | <description>Lethal Enforcers (Jpn)</description> |
| 3817 | 1680 | <year>1993</year> |
| 3818 | 1681 | <publisher>Konami</publisher> |
| r242703 | r242704 | |
| 3827 | 1690 | </software> |
| 3828 | 1691 | |
| 3829 | 1692 | <software name="le2"> |
| 3830 | <!-- source toseciso | |
| 3831 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)[!].cue" size="3754" crc="1ddd64c8" /> | |
| 3832 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 01 of 23)[!].iso" size="12926976" crc="b9cd527b" /> | |
| 3833 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 02 of 23)[!].wav" size="43345052" crc="fc6645c6" /> | |
| 3834 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 03 of 23)[!].wav" size="36042092" crc="6ea84fd8" /> | |
| 3835 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 04 of 23)[!].wav" size="24474956" crc="dd0624a1" /> | |
| 3836 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 05 of 23)[!].wav" size="37991900" crc="1ac74ebc" /> | |
| 3837 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 06 of 23)[!].wav" size="28837916" crc="e5115d52" /> | |
| 3838 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 07 of 23)[!].wav" size="27017468" crc="8bb66852" /> | |
| 3839 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 08 of 23)[!].wav" size="51675836" crc="af7c7369" /> | |
| 3840 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 09 of 23)[!].wav" size="25606268" crc="fd9c5775" /> | |
| 3841 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 10 of 23)[!].wav" size="27885356" crc="4a935715" /> | |
| 3842 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 11 of 23)[!].wav" size="62257484" crc="e92e3673" /> | |
| 3843 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 12 of 23)[!].wav" size="28922588" crc="57ac4fd3" /> | |
| 3844 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 13 of 23)[!].wav" size="55655420" crc="2c4f7ab2" /> | |
| 3845 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 14 of 23)[!].wav" size="1331276" crc="9ed88329" /> | |
| 3846 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 15 of 23)[!].wav" size="1166636" crc="70d5c296" /> | |
| 3847 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 16 of 23)[!].wav" size="1164284" crc="6ab0c7fa" /> | |
| 3848 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 17 of 23)[!].wav" size="32335340" crc="694a9b85" /> | |
| 3849 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 18 of 23)[!].wav" size="44612780" crc="0ea4010a" /> | |
| 3850 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 19 of 23)[!].wav" size="1437116" crc="31e67094" /> | |
| 3851 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 20 of 23)[!].wav" size="18552620" crc="dd9389db" /> | |
| 3852 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 21 of 23)[!].wav" size="5957660" crc="e6371eaf" /> | |
| 3853 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 22 of 23)[!].wav" size="5569580" crc="69ae91a0" /> | |
| 3854 | <rom name="Lethal Enforcers II - The Western (1994)(Konami)(NTSC)(JP)(en)(Track 23 of 23)[!].wav" size="6508028" crc="f6cd9ab2" /> | |
| 3855 | --> | |
| 3856 | 1693 | <description>Lethal Enforcers II - The Western (Jpn)</description> |
| 3857 | 1694 | <year>1994</year> |
| 3858 | 1695 | <publisher>Konami</publisher> |
| r242703 | r242704 | |
| 3866 | 1703 | </part> |
| 3867 | 1704 | </software> |
| 3868 | 1705 | |
| 1706 | <!-- | |
| 1707 | <software name="lodoss"> | |
| 1708 | <description>Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (Jpn)</description> | |
| 1709 | <year>1994</year> | |
| 1710 | <publisher>Sega</publisher> | |
| 1711 | <part name="cdrom" interface="scd_cdrom"> | |
| 1712 | <diskarea name="cdrom"> | |
| 1713 | <disk name="lodoss tou senki - eiyuu sensou - record of lodoss war (1994)(sega)(ntsc)(jp)[!]" sha1="995a2e9cae40cc3279c0c8d676a4ef1f985c9986"/> | |
| 1714 | </diskarea> | |
| 1715 | </part> | |
| 1716 | </software> | |
| 1717 | --> | |
| 1718 | ||
| 3869 | 1719 | <!-- one of these probably matches the REDUMP set --> |
| 3870 | 1720 | <software name="lunar2b" cloneof="lunar2"> |
| 3871 | <!-- source toseciso | |
| 3872 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(JP)[!][T-45074P-00271-R1M].cue" size="673" crc="aec2baa0" /> | |
| 3873 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(JP)(Track 1 of 4)[!][T-45074P-00271-R1M].iso" size="399542272" crc="5ba349c0" /> | |
| 3874 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(JP)(Track 2 of 4)[!][T-45074P-00271-R1M].wav" size="50577452" crc="09169604" /> | |
| 3875 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(JP)(Track 3 of 4)[!][T-45074P-00271-R1M].wav" size="11769452" crc="022a2281" /> | |
| 3876 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(JP)(Track 4 of 4)[!][T-45074P-00271-R1M].wav" size="1608812" crc="794d7aa9" /> | |
| 3877 | --> | |
| 1721 | <!-- Diskring: T-45074P-00271-R1M --> | |
| 3878 | 1722 | <description>Lunar - Eternal Blue (Jpn, Set 2)</description> |
| 3879 | 1723 | <year>1994</year> |
| 3880 | 1724 | <publisher>Game Arts</publisher> |
| 3881 | 1725 | <info name="serial" value="T-45074"/> |
| 3882 | <info name="disk_ring" value="T-45074P-00271-R1M"/> | |
| 3883 | 1726 | <info name="release" value="19941222"/> |
| 3884 | 1727 | <info name="alt_title" value="ルナ-エターナルブルー"/> |
| 3885 | 1728 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 3890 | 1733 | </software> |
| 3891 | 1734 | |
| 3892 | 1735 | <software name="lunar2a" cloneof="lunar2"> |
| 3893 | <!-- source toseciso | |
| 3894 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(JP)[!][T-45074P-00271A-R1M].cue" size="677" crc="61426198" /> | |
| 3895 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(JP)(Track 1 of 4)[!][T-45074P-00271A-R1M].iso" size="399542272" crc="26326647" /> | |
| 3896 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(JP)(Track 2 of 4)[!][T-45074P-00271A-R1M].wav" size="50577452" crc="1b19750a" /> | |
| 3897 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(JP)(Track 3 of 4)[!][T-45074P-00271A-R1M].wav" size="11769452" crc="da19c77a" /> | |
| 3898 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(JP)(Track 4 of 4)[!][T-45074P-00271A-R1M].wav" size="1608812" crc="c980f230" /> | |
| 3899 | --> | |
| 1736 | <!-- Diskring: T-45074P-00271A-R1M --> | |
| 3900 | 1737 | <description>Lunar - Eternal Blue (Jpn, Set 3)</description> |
| 3901 | 1738 | <year>1994</year> |
| 3902 | 1739 | <publisher>Game Arts</publisher> |
| 3903 | 1740 | <info name="serial" value="T-45074"/> |
| 3904 | <info name="disk_ring" value="T-45074P-00271A-R1M"/> | |
| 3905 | 1741 | <info name="release" value="19941222"/> |
| 3906 | 1742 | <info name="alt_title" value="ルナ-エターナルブルー"/> |
| 3907 | 1743 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 3913 | 1749 | |
| 3914 | 1750 | <!-- one of these probably matches the REDUMP set --> |
| 3915 | 1751 | <software name="lunarb" cloneof="lunar"> |
| 3916 | <!-- source toseciso | |
| 3917 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)[!][T-45014P-00017-R1M].cue" size="8949" crc="6a20fea1" /> | |
| 3918 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 01 of 52)[!][T-45014P-00017-R1M].iso" size="28725248" crc="a89042ce" /> | |
| 3919 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 02 of 52)[!][T-45014P-00017-R1M].wav" size="2048636" crc="b7bab421" /> | |
| 3920 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 03 of 52)[!][T-45014P-00017-R1M].wav" size="18830156" crc="02e84421" /> | |
| 3921 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 04 of 52)[!][T-45014P-00017-R1M].wav" size="12698492" crc="1e821efd" /> | |
| 3922 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 05 of 52)[!][T-45014P-00017-R1M].wav" size="15005804" crc="ad64d8c7" /> | |
| 3923 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 06 of 52)[!][T-45014P-00017-R1M].wav" size="15504428" crc="129d828e" /> | |
| 3924 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 07 of 52)[!][T-45014P-00017-R1M].wav" size="13787468" crc="f2e9bebe" /> | |
| 3925 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 08 of 52)[!][T-45014P-00017-R1M].wav" size="13968572" crc="41e1aee8" /> | |
| 3926 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 09 of 52)[!][T-45014P-00017-R1M].wav" size="12879596" crc="fcb9fc31" /> | |
| 3927 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 10 of 52)[!][T-45014P-00017-R1M].wav" size="13806284" crc="584339c8" /> | |
| 3928 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 11 of 52)[!][T-45014P-00017-R1M].wav" size="15694940" crc="b0d99e00" /> | |
| 3929 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 12 of 52)[!][T-45014P-00017-R1M].wav" size="15553820" crc="bcabb522" /> | |
| 3930 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 13 of 52)[!][T-45014P-00017-R1M].wav" size="15125756" crc="ca7e68b2" /> | |
| 3931 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 14 of 52)[!][T-45014P-00017-R1M].wav" size="11745932" crc="e2637014" /> | |
| 3932 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 15 of 52)[!][T-45014P-00017-R1M].wav" size="11705948" crc="e4c2e093" /> | |
| 3933 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 16 of 52)[!][T-45014P-00017-R1M].wav" size="13310012" crc="0d586501" /> | |
| 3934 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 17 of 52)[!][T-45014P-00017-R1M].wav" size="8744780" crc="e25b4c4e" /> | |
| 3935 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 18 of 52)[!][T-45014P-00017-R1M].wav" size="13862732" crc="06ef1abf" /> | |
| 3936 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 19 of 52)[!][T-45014P-00017-R1M].wav" size="7385324" crc="da0eee49" /> | |
| 3937 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 20 of 52)[!][T-45014P-00017-R1M].wav" size="7669916" crc="4c703a90" /> | |
| 3938 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 21 of 52)[!][T-45014P-00017-R1M].wav" size="14937596" crc="91c285b4" /> | |
| 3939 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 22 of 52)[!][T-45014P-00017-R1M].wav" size="12199868" crc="ac0631c8" /> | |
| 3940 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 23 of 52)[!][T-45014P-00017-R1M].wav" size="7646396" crc="d76d8198" /> | |
| 3941 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 24 of 52)[!][T-45014P-00017-R1M].wav" size="3438668" crc="087c87fa" /> | |
| 3942 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 25 of 52)[!][T-45014P-00017-R1M].wav" size="3758540" crc="30be1321" /> | |
| 3943 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 26 of 52)[!][T-45014P-00017-R1M].wav" size="4116044" crc="661956e9" /> | |
| 3944 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 27 of 52)[!][T-45014P-00017-R1M].wav" size="4113692" crc="14422e04" /> | |
| 3945 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 28 of 52)[!][T-45014P-00017-R1M].wav" size="14989340" crc="ec9deba6" /> | |
| 3946 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 29 of 52)[!][T-45014P-00017-R1M].wav" size="10181852" crc="b86797b1" /> | |
| 3947 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 30 of 52)[!][T-45014P-00017-R1M].wav" size="12246908" crc="640f7c4e" /> | |
| 3948 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 31 of 52)[!][T-45014P-00017-R1M].wav" size="3640940" crc="72c90fa0" /> | |
| 3949 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 32 of 52)[!][T-45014P-00017-R1M].wav" size="4301852" crc="e201888f" /> | |
| 3950 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 33 of 52)[!][T-45014P-00017-R1M].wav" size="4607612" crc="02abf4bd" /> | |
| 3951 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 34 of 52)[!][T-45014P-00017-R1M].wav" size="3165836" crc="fd2e46a6" /> | |
| 3952 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 35 of 52)[!][T-45014P-00017-R1M].wav" size="3690332" crc="069c40aa" /> | |
| 3953 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 36 of 52)[!][T-45014P-00017-R1M].wav" size="2638988" crc="fa78354a" /> | |
| 3954 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 37 of 52)[!][T-45014P-00017-R1M].wav" size="14436620" crc="39a317dd" /> | |
| 3955 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 38 of 52)[!][T-45014P-00017-R1M].wav" size="11585996" crc="3fa37309" /> | |
| 3956 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 39 of 52)[!][T-45014P-00017-R1M].wav" size="3894956" crc="fd6a1502" /> | |
| 3957 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 40 of 52)[!][T-45014P-00017-R1M].wav" size="5477852" crc="09ff8e49" /> | |
| 3958 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 41 of 52)[!][T-45014P-00017-R1M].wav" size="4405340" crc="ac547e2f" /> | |
| 3959 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 42 of 52)[!][T-45014P-00017-R1M].wav" size="8551916" crc="bd5526ef" /> | |
| 3960 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 43 of 52)[!][T-45014P-00017-R1M].wav" size="4351244" crc="991fb26c" /> | |
| 3961 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 44 of 52)[!][T-45014P-00017-R1M].wav" size="4965116" crc="bf8adf07" /> | |
| 3962 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 45 of 52)[!][T-45014P-00017-R1M].wav" size="4400636" crc="2676b24b" /> | |
| 3963 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 46 of 52)[!][T-45014P-00017-R1M].wav" size="3250508" crc="475d0552" /> | |
| 3964 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 47 of 52)[!][T-45014P-00017-R1M].wav" size="11092076" crc="dccfc766" /> | |
| 3965 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 48 of 52)[!][T-45014P-00017-R1M].wav" size="33480764" crc="9346a592" /> | |
| 3966 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 49 of 52)[!][T-45014P-00017-R1M].wav" size="3137612" crc="0f142aeb" /> | |
| 3967 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 50 of 52)[!][T-45014P-00017-R1M].wav" size="5014508" crc="0750fc47" /> | |
| 3968 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 51 of 52)[!][T-45014P-00017-R1M].wav" size="1611164" crc="d41a33c1" /> | |
| 3969 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 52 of 52)[!][T-45014P-00017-R1M].wav" size="15299804" crc="43115dd3" /> | |
| 3970 | --> | |
| 1752 | <!-- Diskring: T-45014P-00017-R1M --> | |
| 3971 | 1753 | <description>Lunar - The Silver Star (Jpn, R1M)</description> |
| 3972 | 1754 | <year>1992</year> |
| 3973 | 1755 | <publisher>Game Arts</publisher> |
| 3974 | 1756 | <info name="serial" value="T-45014"/> |
| 3975 | <info name="disk_ring" value="T-45014P-00017-R1M"/> | |
| 3976 | 1757 | <info name="release" value="19920626"/> |
| 3977 | 1758 | <info name="alt_title" value="ルナ ザ・シルバースター"/> |
| 3978 | 1759 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 3983 | 1764 | </software> |
| 3984 | 1765 | |
| 3985 | 1766 | <software name="lunara" cloneof="lunar"> |
| 3986 | <!-- source toseciso | |
| 3987 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)[!][T-45014P-00017-R2M].cue" size="8949" crc="833ce071" /> | |
| 3988 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 01 of 52)[!][T-45014P-00017-R2M].iso" size="28725248" crc="a89042ce" /> | |
| 3989 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 02 of 52)[!][T-45014P-00017-R2M].wav" size="2048636" crc="4fb82061" /> | |
| 3990 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 03 of 52)[!][T-45014P-00017-R2M].wav" size="18830156" crc="3cb51c93" /> | |
| 3991 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 04 of 52)[!][T-45014P-00017-R2M].wav" size="12698492" crc="3469aa9f" /> | |
| 3992 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 05 of 52)[!][T-45014P-00017-R2M].wav" size="15005804" crc="1ba45bf1" /> | |
| 3993 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 06 of 52)[!][T-45014P-00017-R2M].wav" size="15504428" crc="acdb8913" /> | |
| 3994 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 07 of 52)[!][T-45014P-00017-R2M].wav" size="13787468" crc="6da66f68" /> | |
| 3995 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 08 of 52)[!][T-45014P-00017-R2M].wav" size="13968572" crc="200f8029" /> | |
| 3996 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 09 of 52)[!][T-45014P-00017-R2M].wav" size="12879596" crc="3c34cb04" /> | |
| 3997 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 10 of 52)[!][T-45014P-00017-R2M].wav" size="13806284" crc="1833beac" /> | |
| 3998 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 11 of 52)[!][T-45014P-00017-R2M].wav" size="15694940" crc="21c47aae" /> | |
| 3999 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 12 of 52)[!][T-45014P-00017-R2M].wav" size="15553820" crc="1407fc02" /> | |
| 4000 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 13 of 52)[!][T-45014P-00017-R2M].wav" size="15125756" crc="9ecb9d95" /> | |
| 4001 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 14 of 52)[!][T-45014P-00017-R2M].wav" size="11745932" crc="e7dd7b14" /> | |
| 4002 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 15 of 52)[!][T-45014P-00017-R2M].wav" size="11705948" crc="ebbb38e6" /> | |
| 4003 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 16 of 52)[!][T-45014P-00017-R2M].wav" size="13310012" crc="2844d63c" /> | |
| 4004 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 17 of 52)[!][T-45014P-00017-R2M].wav" size="8744780" crc="549bcd34" /> | |
| 4005 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 18 of 52)[!][T-45014P-00017-R2M].wav" size="13862732" crc="d0313af2" /> | |
| 4006 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 19 of 52)[!][T-45014P-00017-R2M].wav" size="7385324" crc="d0651994" /> | |
| 4007 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 20 of 52)[!][T-45014P-00017-R2M].wav" size="7669916" crc="fc3493cc" /> | |
| 4008 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 21 of 52)[!][T-45014P-00017-R2M].wav" size="14937596" crc="fa5fadee" /> | |
| 4009 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 22 of 52)[!][T-45014P-00017-R2M].wav" size="12199868" crc="25467f9c" /> | |
| 4010 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 23 of 52)[!][T-45014P-00017-R2M].wav" size="7646396" crc="91d98fe7" /> | |
| 4011 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 24 of 52)[!][T-45014P-00017-R2M].wav" size="3438668" crc="ef521f94" /> | |
| 4012 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 25 of 52)[!][T-45014P-00017-R2M].wav" size="3756188" crc="37122728" /> | |
| 4013 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 26 of 52)[!][T-45014P-00017-R2M].wav" size="4118396" crc="205b17a1" /> | |
| 4014 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 27 of 52)[!][T-45014P-00017-R2M].wav" size="4113692" crc="bda5cf0c" /> | |
| 4015 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 28 of 52)[!][T-45014P-00017-R2M].wav" size="14989340" crc="4800e665" /> | |
| 4016 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 29 of 52)[!][T-45014P-00017-R2M].wav" size="10181852" crc="20fb2d3e" /> | |
| 4017 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 30 of 52)[!][T-45014P-00017-R2M].wav" size="12246908" crc="7ee185b8" /> | |
| 4018 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 31 of 52)[!][T-45014P-00017-R2M].wav" size="3640940" crc="6ba30678" /> | |
| 4019 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 32 of 52)[!][T-45014P-00017-R2M].wav" size="4301852" crc="5ab8f2c5" /> | |
| 4020 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 33 of 52)[!][T-45014P-00017-R2M].wav" size="4607612" crc="438c0fef" /> | |
| 4021 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 34 of 52)[!][T-45014P-00017-R2M].wav" size="3165836" crc="89e45655" /> | |
| 4022 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 35 of 52)[!][T-45014P-00017-R2M].wav" size="3690332" crc="982f3924" /> | |
| 4023 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 36 of 52)[!][T-45014P-00017-R2M].wav" size="2638988" crc="a6c99c7f" /> | |
| 4024 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 37 of 52)[!][T-45014P-00017-R2M].wav" size="14436620" crc="adf3ab5c" /> | |
| 4025 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 38 of 52)[!][T-45014P-00017-R2M].wav" size="11585996" crc="cd783a31" /> | |
| 4026 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 39 of 52)[!][T-45014P-00017-R2M].wav" size="3894956" crc="d61450b9" /> | |
| 4027 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 40 of 52)[!][T-45014P-00017-R2M].wav" size="5477852" crc="369e55a5" /> | |
| 4028 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 41 of 52)[!][T-45014P-00017-R2M].wav" size="4405340" crc="105bc644" /> | |
| 4029 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 42 of 52)[!][T-45014P-00017-R2M].wav" size="8551916" crc="004c1ef7" /> | |
| 4030 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 43 of 52)[!][T-45014P-00017-R2M].wav" size="4351244" crc="a6597120" /> | |
| 4031 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 44 of 52)[!][T-45014P-00017-R2M].wav" size="4965116" crc="7388ae29" /> | |
| 4032 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 45 of 52)[!][T-45014P-00017-R2M].wav" size="4400636" crc="67282d80" /> | |
| 4033 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 46 of 52)[!][T-45014P-00017-R2M].wav" size="3250508" crc="b1a08263" /> | |
| 4034 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 47 of 52)[!][T-45014P-00017-R2M].wav" size="11092076" crc="b93f366e" /> | |
| 4035 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 48 of 52)[!][T-45014P-00017-R2M].wav" size="33480764" crc="1894b506" /> | |
| 4036 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 49 of 52)[!][T-45014P-00017-R2M].wav" size="3137612" crc="eb61683f" /> | |
| 4037 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 50 of 52)[!][T-45014P-00017-R2M].wav" size="5014508" crc="9c28102b" /> | |
| 4038 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 51 of 52)[!][T-45014P-00017-R2M].wav" size="1611164" crc="03534eda" /> | |
| 4039 | <rom name="Lunar - The Silver Star (1992)(Game Arts)(NTSC)(JP)(Track 52 of 52)[!][T-45014P-00017-R2M].wav" size="15299804" crc="23d1fa5b" /> | |
| 4040 | --> | |
| 4041 | <description>Lunar - The Silver Star (Jpn, R2)</description> | |
| 1767 | <!-- Diskring: T-45014P-00017-R2 --> | |
| 1768 | <description>Lunar - The Silver Star (Jpn, R2M)</description> | |
| 4042 | 1769 | <year>1992</year> |
| 4043 | 1770 | <publisher>Game Arts</publisher> |
| 4044 | 1771 | <info name="serial" value="T-45014"/> |
| 4045 | <info name="disk_ring" value="T-45014P-00017-R2"/> | |
| 4046 | 1772 | <info name="release" value="19920626"/> |
| 4047 | 1773 | <info name="alt_title" value="ルナ ザ・シルバースター"/> |
| 4048 | 1774 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 4053 | 1779 | </software> |
| 4054 | 1780 | |
| 4055 | 1781 | <software name="silkylip"> |
| 4056 | <!-- source toseciso | |
| 4057 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)[!][T-49024P-00016-R2M].cue" size="5990" crc="fdca1e36" /> | |
| 4058 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 01 of 35)[!][T-49024P-00016-R2M].iso" size="86499328" crc="11ffbe37" /> | |
| 4059 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 02 of 35)[!][T-49024P-00016-R2M].wav" size="11955260" crc="f33f94ec" /> | |
| 4060 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 03 of 35)[!][T-49024P-00016-R2M].wav" size="24519644" crc="c45534fe" /> | |
| 4061 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 04 of 35)[!][T-49024P-00016-R2M].wav" size="23548268" crc="c4de5f5a" /> | |
| 4062 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 05 of 35)[!][T-49024P-00016-R2M].wav" size="23999852" crc="e1dfbbda" /> | |
| 4063 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 06 of 35)[!][T-49024P-00016-R2M].wav" size="12467996" crc="3ffe4110" /> | |
| 4064 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 07 of 35)[!][T-49024P-00016-R2M].wav" size="25241708" crc="90393820" /> | |
| 4065 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 08 of 35)[!][T-49024P-00016-R2M].wav" size="22687436" crc="40c99075" /> | |
| 4066 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 09 of 35)[!][T-49024P-00016-R2M].wav" size="16903868" crc="59eee403" /> | |
| 4067 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 10 of 35)[!][T-49024P-00016-R2M].wav" size="1547660" crc="c249d56d" /> | |
| 4068 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 11 of 35)[!][T-49024P-00016-R2M].wav" size="1726412" crc="3324997d" /> | |
| 4069 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 12 of 35)[!][T-49024P-00016-R2M].wav" size="1561772" crc="59c1e94f" /> | |
| 4070 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 13 of 35)[!][T-49024P-00016-R2M].wav" size="1651148" crc="86f297ef" /> | |
| 4071 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 14 of 35)[!][T-49024P-00016-R2M].wav" size="7973324" crc="a004aa96" /> | |
| 4072 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 15 of 35)[!][T-49024P-00016-R2M].wav" size="6399836" crc="67da4a10" /> | |
| 4073 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 16 of 35)[!][T-49024P-00016-R2M].wav" size="23026124" crc="1bd5782c" /> | |
| 4074 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 17 of 35)[!][T-49024P-00016-R2M].wav" size="3993740" crc="df7dd58b" /> | |
| 4075 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 18 of 35)[!][T-49024P-00016-R2M].wav" size="6825548" crc="68342133" /> | |
| 4076 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 19 of 35)[!][T-49024P-00016-R2M].wav" size="5390828" crc="02338ef1" /> | |
| 4077 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 20 of 35)[!][T-49024P-00016-R2M].wav" size="12166940" crc="9c20cc57" /> | |
| 4078 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 21 of 35)[!][T-49024P-00016-R2M].wav" size="5049788" crc="503647e2" /> | |
| 4079 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 22 of 35)[!][T-49024P-00016-R2M].wav" size="39534812" crc="7793a48d" /> | |
| 4080 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 23 of 35)[!][T-49024P-00016-R2M].wav" size="21208028" crc="a5d95e2c" /> | |
| 4081 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 24 of 35)[!][T-49024P-00016-R2M].wav" size="1578236" crc="2f50c6c9" /> | |
| 4082 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 25 of 35)[!][T-49024P-00016-R2M].wav" size="1552364" crc="cfed4675" /> | |
| 4083 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 26 of 35)[!][T-49024P-00016-R2M].wav" size="1512380" crc="eeb53f67" /> | |
| 4084 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 27 of 35)[!][T-49024P-00016-R2M].wav" size="1613516" crc="95b1970f" /> | |
| 4085 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 28 of 35)[!][T-49024P-00016-R2M].wav" size="1655852" crc="f333023b" /> | |
| 4086 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 29 of 35)[!][T-49024P-00016-R2M].wav" size="1691132" crc="be760425" /> | |
| 4087 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 30 of 35)[!][T-49024P-00016-R2M].wav" size="1592348" crc="a336e8ff" /> | |
| 4088 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 31 of 35)[!][T-49024P-00016-R2M].wav" size="1801676" crc="c59c0675" /> | |
| 4089 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 32 of 35)[!][T-49024P-00016-R2M].wav" size="1622924" crc="0de636a9" /> | |
| 4090 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 33 of 35)[!][T-49024P-00016-R2M].wav" size="1721708" crc="8b533344" /> | |
| 4091 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 34 of 35)[!][T-49024P-00016-R2M].wav" size="1547660" crc="2e120947" /> | |
| 4092 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 35 of 35)[!][T-49024P-00016-R2M].wav" size="1573532" crc="a86f99bf" /> | |
| 4093 | --> | |
| 1782 | <!-- Diskring: T-49024P-00016-R2M --> | |
| 4094 | 1783 | <description>Mahou no Shoujo - Silky Lip (Jpn, R2M)</description> |
| 4095 | 1784 | <year>1992</year> |
| 4096 | 1785 | <publisher>Nihon Telenet</publisher> |
| 4097 | 1786 | <info name="serial" value="T-49024"/> |
| 4098 | <info name="disk_ring" value="T-49024P-00016-R2M"/> | |
| 4099 | 1787 | <info name="release" value="19920619"/> |
| 4100 | 1788 | <info name="alt_title" value="魔法の少女シルキーリップ"/> |
| 4101 | 1789 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 4106 | 1794 | </software> |
| 4107 | 1795 | |
| 4108 | 1796 | <software name="silkylipa" cloneof="silkylip"> |
| 4109 | <!-- source toseciso | |
| 4110 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)[!][T-49024P-00016-R1M].cue" size="5990" crc="b0840f4e" /> | |
| 4111 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 01 of 35)[!][T-49024P-00016-R1M].iso" size="86499328" crc="11ffbe37" /> | |
| 4112 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 02 of 35)[!][T-49024P-00016-R1M].wav" size="11955260" crc="f33f94ec" /> | |
| 4113 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 03 of 35)[!][T-49024P-00016-R1M].wav" size="24519644" crc="c45534fe" /> | |
| 4114 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 04 of 35)[!][T-49024P-00016-R1M].wav" size="23548268" crc="c4de5f5a" /> | |
| 4115 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 05 of 35)[!][T-49024P-00016-R1M].wav" size="23999852" crc="e1dfbbda" /> | |
| 4116 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 06 of 35)[!][T-49024P-00016-R1M].wav" size="12467996" crc="3ffe4110" /> | |
| 4117 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 07 of 35)[!][T-49024P-00016-R1M].wav" size="25241708" crc="90393820" /> | |
| 4118 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 08 of 35)[!][T-49024P-00016-R1M].wav" size="22687436" crc="40c99075" /> | |
| 4119 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 09 of 35)[!][T-49024P-00016-R1M].wav" size="16903868" crc="59eee403" /> | |
| 4120 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 10 of 35)[!][T-49024P-00016-R1M].wav" size="1547660" crc="c249d56d" /> | |
| 4121 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 11 of 35)[!][T-49024P-00016-R1M].wav" size="1726412" crc="3324997d" /> | |
| 4122 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 12 of 35)[!][T-49024P-00016-R1M].wav" size="1561772" crc="59c1e94f" /> | |
| 4123 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 13 of 35)[!][T-49024P-00016-R1M].wav" size="1651148" crc="86f297ef" /> | |
| 4124 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 14 of 35)[!][T-49024P-00016-R1M].wav" size="7973324" crc="a004aa96" /> | |
| 4125 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 15 of 35)[!][T-49024P-00016-R1M].wav" size="6399836" crc="67da4a10" /> | |
| 4126 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 16 of 35)[!][T-49024P-00016-R1M].wav" size="23026124" crc="1bd5782c" /> | |
| 4127 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 17 of 35)[!][T-49024P-00016-R1M].wav" size="3993740" crc="df7dd58b" /> | |
| 4128 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 18 of 35)[!][T-49024P-00016-R1M].wav" size="6825548" crc="68342133" /> | |
| 4129 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 19 of 35)[!][T-49024P-00016-R1M].wav" size="5390828" crc="02338ef1" /> | |
| 4130 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 20 of 35)[!][T-49024P-00016-R1M].wav" size="12166940" crc="9c20cc57" /> | |
| 4131 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 21 of 35)[!][T-49024P-00016-R1M].wav" size="5049788" crc="503647e2" /> | |
| 4132 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 22 of 35)[!][T-49024P-00016-R1M].wav" size="39534812" crc="7793a48d" /> | |
| 4133 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 23 of 35)[!][T-49024P-00016-R1M].wav" size="21208028" crc="a5d95e2c" /> | |
| 4134 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 24 of 35)[!][T-49024P-00016-R1M].wav" size="1578236" crc="2f50c6c9" /> | |
| 4135 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 25 of 35)[!][T-49024P-00016-R1M].wav" size="1552364" crc="cfed4675" /> | |
| 4136 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 26 of 35)[!][T-49024P-00016-R1M].wav" size="1512380" crc="eeb53f67" /> | |
| 4137 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 27 of 35)[!][T-49024P-00016-R1M].wav" size="1613516" crc="95b1970f" /> | |
| 4138 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 28 of 35)[!][T-49024P-00016-R1M].wav" size="1658204" crc="b6c3a9b2" /> | |
| 4139 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 29 of 35)[!][T-49024P-00016-R1M].wav" size="1688780" crc="705e8290" /> | |
| 4140 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 30 of 35)[!][T-49024P-00016-R1M].wav" size="1592348" crc="a336e8ff" /> | |
| 4141 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 31 of 35)[!][T-49024P-00016-R1M].wav" size="1801676" crc="c59c0675" /> | |
| 4142 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 32 of 35)[!][T-49024P-00016-R1M].wav" size="1622924" crc="0de636a9" /> | |
| 4143 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 33 of 35)[!][T-49024P-00016-R1M].wav" size="1721708" crc="8b533344" /> | |
| 4144 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 34 of 35)[!][T-49024P-00016-R1M].wav" size="1547660" crc="2e120947" /> | |
| 4145 | <rom name="Mahou no Shoujo - Silky Lip (1992)(Riot)(NTSC)(JP)(Track 35 of 35)[!][T-49024P-00016-R1M].wav" size="1573532" crc="a86f99bf" /> | |
| 4146 | --> | |
| 1797 | <!-- Diskring: T-49024P-00016-R1M --> | |
| 4147 | 1798 | <description>Mahou no Shoujo - Silky Lip (Jpn, R1M)</description> |
| 4148 | 1799 | <year>1992</year> |
| 4149 | 1800 | <publisher>Nihon Telenet</publisher> |
| 4150 | 1801 | <info name="serial" value="T-49024"/> |
| 4151 | <info name="disk_ring" value="T-49024P-00016-R1M"/> | |
| 4152 | 1802 | <info name="release" value="19920619"/> |
| 4153 | 1803 | <info name="alt_title" value="魔法の少女シルキーリップ"/> |
| 4154 | 1804 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 4159 | 1809 | </software> |
| 4160 | 1810 | |
| 4161 | 1811 | <software name="megaschw"> |
| 4162 | <!-- source toseciso | |
| 4163 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)[!].cue" size="2419" crc="640859a5" /> | |
| 4164 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 01 of 17)[!].iso" size="10870784" crc="f3c9fdca" /> | |
| 4165 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 02 of 17)[!].wav" size="1295996" crc="85f715b6" /> | |
| 4166 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 03 of 17)[!].wav" size="44290556" crc="b0a1c985" /> | |
| 4167 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 04 of 17)[!].wav" size="50951420" crc="06a79c97" /> | |
| 4168 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 05 of 17)[!].wav" size="31862588" crc="e1e8b9cf" /> | |
| 4169 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 06 of 17)[!].wav" size="31227548" crc="c9487fd1" /> | |
| 4170 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 07 of 17)[!].wav" size="28179356" crc="7d1e4e5e" /> | |
| 4171 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 08 of 17)[!].wav" size="42013820" crc="d013392e" /> | |
| 4172 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 09 of 17)[!].wav" size="48070220" crc="d54691c8" /> | |
| 4173 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 10 of 17)[!].wav" size="29828108" crc="8a385d19" /> | |
| 4174 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 11 of 17)[!].wav" size="28713260" crc="62423729" /> | |
| 4175 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 12 of 17)[!].wav" size="49102748" crc="b0ec68fb" /> | |
| 4176 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 13 of 17)[!].wav" size="45812300" crc="72276ea5" /> | |
| 4177 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 14 of 17)[!].wav" size="40687292" crc="812928d2" /> | |
| 4178 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 15 of 17)[!].wav" size="30383180" crc="d07a53d3" /> | |
| 4179 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 16 of 17)[!].wav" size="40115756" crc="aba41d28" /> | |
| 4180 | <rom name="Mega Schwarzschild (1993)(Sega)(NTSC)(JP)(Track 17 of 17)[!].wav" size="35395292" crc="82a9c0a0" /> | |
| 4181 | --> | |
| 4182 | 1812 | <description>Mega Schwarzschild (Jpn)</description> |
| 4183 | 1813 | <year>1993</year> |
| 4184 | 1814 | <publisher>Sega</publisher> |
| r242703 | r242704 | |
| 4192 | 1822 | </part> |
| 4193 | 1823 | </software> |
| 4194 | 1824 | |
| 1825 | <!-- | |
| 1826 | <software name="microcos"> | |
| 1827 | <description>Microcosm (Jpn)</description> | |
| 1828 | <year>1994</year> | |
| 1829 | <publisher>Psygnosis</publisher> | |
| 1830 | <part name="cdrom" interface="scd_cdrom"> | |
| 1831 | <diskarea name="cdrom"> | |
| 1832 | <disk name="microcosm (1994)(psygnosis)(ntsc)(jp)(en)[!]" sha1="4ed9b1ab36bc04102baf9341a9e311676a06529e"/> | |
| 1833 | </diskarea> | |
| 1834 | </part> | |
| 1835 | </software> | |
| 1836 | --> | |
| 1837 | ||
| 4195 | 1838 | <software name="mightmg3"> |
| 4196 | <!-- source toseciso | |
| 4197 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)[!].cue" size="7319" crc="fefc00b2" /> | |
| 4198 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 01 of 46)[!].iso" size="22312960" crc="6c82daa3" /> | |
| 4199 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 02 of 46)[!].wav" size="2721308" crc="5a44ac4c" /> | |
| 4200 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 03 of 46)[!].wav" size="3187004" crc="1373bed8" /> | |
| 4201 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 04 of 46)[!].wav" size="3114092" crc="677abfdc" /> | |
| 4202 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 05 of 46)[!].wav" size="3001196" crc="28272a91" /> | |
| 4203 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 06 of 46)[!].wav" size="3189356" crc="f37d3be3" /> | |
| 4204 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 07 of 46)[!].wav" size="3436316" crc="c50dd4db" /> | |
| 4205 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 08 of 46)[!].wav" size="3109388" crc="1f1aa8e5" /> | |
| 4206 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 09 of 46)[!].wav" size="3662108" crc="9eb1fe30" /> | |
| 4207 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 10 of 46)[!].wav" size="2700140" crc="e3a7844f" /> | |
| 4208 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 11 of 46)[!].wav" size="3161132" crc="e049bb48" /> | |
| 4209 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 12 of 46)[!].wav" size="3088220" crc="a7e38c5e" /> | |
| 4210 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 13 of 46)[!].wav" size="2904764" crc="6e255fa3" /> | |
| 4211 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 14 of 46)[!].wav" size="2822444" crc="1db41283" /> | |
| 4212 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 15 of 46)[!].wav" size="2669564" crc="b01e3ac7" /> | |
| 4213 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 16 of 46)[!].wav" size="16026572" crc="1bfb18ab" /> | |
| 4214 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 17 of 46)[!].wav" size="9958412" crc="d6320855" /> | |
| 4215 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 18 of 46)[!].wav" size="13441724" crc="221099e9" /> | |
| 4216 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 19 of 46)[!].wav" size="11729468" crc="2a0a2de9" /> | |
| 4217 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 20 of 46)[!].wav" size="15690236" crc="60c0d13b" /> | |
| 4218 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 21 of 46)[!].wav" size="25133516" crc="326d4069" /> | |
| 4219 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 22 of 46)[!].wav" size="31646204" crc="9ad39b54" /> | |
| 4220 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 23 of 46)[!].wav" size="33419612" crc="948e7a2f" /> | |
| 4221 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 24 of 46)[!].wav" size="31697948" crc="7bb14ee1" /> | |
| 4222 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 25 of 46)[!].wav" size="31914332" crc="04730d93" /> | |
| 4223 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 26 of 46)[!].wav" size="9532700" crc="cca0291f" /> | |
| 4224 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 27 of 46)[!].wav" size="11423708" crc="d6de0246" /> | |
| 4225 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 28 of 46)[!].wav" size="7846316" crc="f8773c9d" /> | |
| 4226 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 29 of 46)[!].wav" size="1905164" crc="400f62e2" /> | |
| 4227 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 30 of 46)[!].wav" size="9445676" crc="61d663ae" /> | |
| 4228 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 31 of 46)[!].wav" size="15384476" crc="d0dde117" /> | |
| 4229 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 32 of 46)[!].wav" size="8114444" crc="45206910" /> | |
| 4230 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 33 of 46)[!].wav" size="19855628" crc="8f961eec" /> | |
| 4231 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 34 of 46)[!].wav" size="11061500" crc="ebb87ffd" /> | |
| 4232 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 35 of 46)[!].wav" size="11085020" crc="74f8ecd6" /> | |
| 4233 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 36 of 46)[!].wav" size="11435468" crc="bfc71f1c" /> | |
| 4234 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 37 of 46)[!].wav" size="11390780" crc="505580e1" /> | |
| 4235 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 38 of 46)[!].wav" size="11536604" crc="99a455df" /> | |
| 4236 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 39 of 46)[!].wav" size="7843964" crc="13a2f756" /> | |
| 4237 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 40 of 46)[!].wav" size="12651452" crc="45b22955" /> | |
| 4238 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 41 of 46)[!].wav" size="16026572" crc="b6357c18" /> | |
| 4239 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 42 of 46)[!].wav" size="8996444" crc="2adb1da6" /> | |
| 4240 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 43 of 46)[!].wav" size="5310860" crc="e965b0cd" /> | |
| 4241 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 44 of 46)[!].wav" size="37759052" crc="336e565c" /> | |
| 4242 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 45 of 46)[!].wav" size="11978780" crc="265ffd1b" /> | |
| 4243 | <rom name="Might and Magic III - Isles of Terra (1993)(CRI)(NTSC)(JP)(Track 46 of 46)[!].wav" size="37799036" crc="0b0dd512" /> | |
| 4244 | --> | |
| 4245 | 1839 | <description>Might and Magic III - Isles of Terra (Jpn)</description> |
| 4246 | 1840 | <year>1993</year> |
| 4247 | 1841 | <publisher>CRI</publisher> |
| r242703 | r242704 | |
| 4256 | 1850 | </software> |
| 4257 | 1851 | |
| 4258 | 1852 | <software name="mk"> |
| 4259 | <!-- source toseciso | |
| 4260 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)[!].cue" size="3029" crc="59185e4e" /> | |
| 4261 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 01 of 21)[!].iso" size="32667648" crc="e2220577" /> | |
| 4262 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 02 of 21)[!].wav" size="6856124" crc="a6e744ee" /> | |
| 4263 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 03 of 21)[!].wav" size="13688684" crc="ab964fb8" /> | |
| 4264 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 04 of 21)[!].wav" size="11762396" crc="78731068" /> | |
| 4265 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 05 of 21)[!].wav" size="7328876" crc="7ba0a0c6" /> | |
| 4266 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 06 of 21)[!].wav" size="22329932" crc="60891f70" /> | |
| 4267 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 07 of 21)[!].wav" size="18870140" crc="f5cbb660" /> | |
| 4268 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 08 of 21)[!].wav" size="10816892" crc="c740e61d" /> | |
| 4269 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 09 of 21)[!].wav" size="1479452" crc="6e39088d" /> | |
| 4270 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 10 of 21)[!].wav" size="1978076" crc="0aa6f084" /> | |
| 4271 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 11 of 21)[!].wav" size="2883596" crc="62750c32" /> | |
| 4272 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 12 of 21)[!].wav" size="1561772" crc="4ff18f2e" /> | |
| 4273 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 13 of 21)[!].wav" size="2434364" crc="7c0af08c" /> | |
| 4274 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 14 of 21)[!].wav" size="2671916" crc="7d60f2ef" /> | |
| 4275 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 15 of 21)[!].wav" size="3854972" crc="c820d04f" /> | |
| 4276 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 16 of 21)[!].wav" size="14798828" crc="2f09be74" /> | |
| 4277 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 17 of 21)[!].wav" size="36778268" crc="7efb1aa4" /> | |
| 4278 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 18 of 21)[!].wav" size="42747644" crc="101fa8c9" /> | |
| 4279 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 19 of 21)[!].wav" size="52637804" crc="2356f98c" /> | |
| 4280 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 20 of 21)[!].wav" size="40273340" crc="8ba853c2" /> | |
| 4281 | <rom name="Mortal Kombat (1994)(Acclaim)(NTSC)(JP)(en)(Track 21 of 21)[!].wav" size="51974540" crc="de937768" /> | |
| 4282 | --> | |
| 4283 | 1853 | <description>Mortal Kombat (Jpn)</description> |
| 4284 | 1854 | <year>1994</year> |
| 4285 | 1855 | <publisher>Acclaim Japan</publisher> |
| r242703 | r242704 | |
| 4294 | 1864 | </software> |
| 4295 | 1865 | |
| 4296 | 1866 | <software name="nbajam"> |
| 4297 | <!-- source toseciso | |
| 4298 | <rom name="NBA Jam (1993)(Acclaim)(NTSC)(Jp)[!].cue" size="1193" crc="d9c8c8f1" /> | |
| 4299 | <rom name="NBA Jam (1993)(Acclaim)(NTSC)(Jp)(Track 1 of 9)[!].iso" size="44662784" crc="2ea4833c" /> | |
| 4300 | <rom name="NBA Jam (1993)(Acclaim)(NTSC)(Jp)(Track 2 of 9)[!].wav" size="51998060" crc="91c912a1" /> | |
| 4301 | <rom name="NBA Jam (1993)(Acclaim)(NTSC)(Jp)(Track 3 of 9)[!].wav" size="47197628" crc="7f4407a5" /> | |
| 4302 | <rom name="NBA Jam (1993)(Acclaim)(NTSC)(Jp)(Track 4 of 9)[!].wav" size="45998108" crc="c5da40a0" /> | |
| 4303 | <rom name="NBA Jam (1993)(Acclaim)(NTSC)(Jp)(Track 5 of 9)[!].wav" size="56036444" crc="69b3762f" /> | |
| 4304 | <rom name="NBA Jam (1993)(Acclaim)(NTSC)(Jp)(Track 6 of 9)[!].wav" size="54811052" crc="b1ad5308" /> | |
| 4305 | <rom name="NBA Jam (1993)(Acclaim)(NTSC)(Jp)(Track 7 of 9)[!].wav" size="60679292" crc="bd899bae" /> | |
| 4306 | <rom name="NBA Jam (1993)(Acclaim)(NTSC)(Jp)(Track 8 of 9)[!].wav" size="59430380" crc="8c2ae27d" /> | |
| 4307 | <rom name="NBA Jam (1993)(Acclaim)(NTSC)(Jp)(Track 9 of 9)[!].wav" size="1905164" crc="34a6ed57" /> | |
| 4308 | --> | |
| 4309 | 1867 | <description>NBA Jam (Jpn)</description> |
| 4310 | 1868 | <year>1993</year> |
| 4311 | 1869 | <publisher>Acclaim Japan</publisher> |
| r242703 | r242704 | |
| 4319 | 1877 | </part> |
| 4320 | 1878 | </software> |
| 4321 | 1879 | |
| 1880 | <!-- | |
| 1881 | <software name="nstriker"> | |
| 1882 | <description>Night Striker (Jpn)</description> | |
| 1883 | <year>1993</year> | |
| 1884 | <publisher>Taito</publisher> | |
| 1885 | <part name="cdrom" interface="scd_cdrom"> | |
| 1886 | <diskarea name="cdrom"> | |
| 1887 | <disk name="night striker (1993)(taito)(ntsc)(jp)(en)[!]" sha1="e36f6eddda24f1001e35dae80c571e7025c1139e"/> | |
| 1888 | </diskarea> | |
| 1889 | </part> | |
| 1890 | </software> | |
| 1891 | --> | |
| 1892 | ||
| 1893 | <!-- | |
| 1894 | <software name="ntrap"> | |
| 1895 | <description>Night Trap (Jpn)</description> | |
| 1896 | <year>1993</year> | |
| 1897 | <publisher>Sega</publisher> | |
| 1898 | <part name="cdrom1" interface="scd_cdrom"> | |
| 1899 | <diskarea name="cdrom"> | |
| 1900 | <disk name="night trap (1993)(sega)(ntsc)(jp)(disc 1 of 2)[!]" sha1="f842a6a258803ade3a60d93b5686bbb5f55c88b9"/> | |
| 1901 | </diskarea> | |
| 1902 | </part> | |
| 1903 | ||
| 1904 | <part name="cdrom2" interface="scd_cdrom"> | |
| 1905 | <diskarea name="cdrom"> | |
| 1906 | <disk name="night trap (1993)(sega)(ntsc)(jp)(disc 2 of 2)[!]" sha1="ce70f24bff87ec8dc6e314125cd7264ea5897437"/> | |
| 1907 | </diskarea> | |
| 1908 | </part> | |
| 1909 | </software> | |
| 1910 | --> | |
| 1911 | ||
| 4322 | 1912 | <software name="ninjawar"> |
| 4323 | <!-- source toseciso | |
| 4324 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)[!].cue" size="2945" crc="51c1f55e" /> | |
| 4325 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 01 of 20)[!].iso" size="12410880" crc="da5f9be0" /> | |
| 4326 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 02 of 20)[!].wav" size="12573836" crc="2f80b95b" /> | |
| 4327 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 03 of 20)[!].wav" size="53016476" crc="a93130ac" /> | |
| 4328 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 04 of 20)[!].wav" size="34823756" crc="9eea2746" /> | |
| 4329 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 05 of 20)[!].wav" size="23468300" crc="a7ebdf56" /> | |
| 4330 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 06 of 20)[!].wav" size="23738780" crc="855b08d1" /> | |
| 4331 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 07 of 20)[!].wav" size="35197724" crc="bf2a1f8c" /> | |
| 4332 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 08 of 20)[!].wav" size="25582748" crc="fe77b8b7" /> | |
| 4333 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 09 of 20)[!].wav" size="7260668" crc="9ab8ac98" /> | |
| 4334 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 10 of 20)[!].wav" size="47127068" crc="9fb5248e" /> | |
| 4335 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 11 of 20)[!].wav" size="33579548" crc="4f2be1f9" /> | |
| 4336 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 12 of 20)[!].wav" size="42331340" crc="f542b9be" /> | |
| 4337 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 13 of 20)[!].wav" size="39791180" crc="46eeeac7" /> | |
| 4338 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 14 of 20)[!].wav" size="30775964" crc="29acd9a0" /> | |
| 4339 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 15 of 20)[!].wav" size="27948860" crc="11cf07b3" /> | |
| 4340 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 16 of 20)[!].wav" size="11604812" crc="10d373d2" /> | |
| 4341 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 17 of 20)[!].wav" size="31763804" crc="a5bcface" /> | |
| 4342 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 18 of 20)[!].wav" size="37813148" crc="4c683610" /> | |
| 4343 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 19 of 20)[!].wav" size="1775804" crc="9bab569b" /> | |
| 4344 | <rom name="Ninjawarriors, The (1993)(Taito)(NTSC)(JP)(en)(Track 20 of 20)[!].wav" size="1298348" crc="5981f196" /> | |
| 4345 | --> | |
| 4346 | 1913 | <description>The Ninjawarriors (Jpn)</description> |
| 4347 | 1914 | <year>1993</year> |
| 4348 | 1915 | <publisher>Taito</publisher> |
| r242703 | r242704 | |
| 4357 | 1924 | </software> |
| 4358 | 1925 | |
| 4359 | 1926 | <software name="nobuhao"> |
| 4360 | <!-- source toseciso | |
| 4361 | <rom name="Nobunaga no Yabou - Haouden (1994)(KOEI)(NTSC)(JP)[!].cue" size="1968" crc="5c643cef" /> | |
| 4362 | <rom name="Nobunaga no Yabou - Haouden (1994)(KOEI)(NTSC)(JP)(Track 01 of 13)[!].iso" size="8796160" crc="93bb153f" /> | |
| 4363 | <rom name="Nobunaga no Yabou - Haouden (1994)(KOEI)(NTSC)(JP)(Track 02 of 13)[!].wav" size="35103644" crc="3a4d4bee" /> | |
| 4364 | <rom name="Nobunaga no Yabou - Haouden (1994)(KOEI)(NTSC)(JP)(Track 03 of 13)[!].wav" size="52755404" crc="5f9d4b4e" /> | |
| 4365 | <rom name="Nobunaga no Yabou - Haouden (1994)(KOEI)(NTSC)(JP)(Track 04 of 13)[!].wav" size="44020076" crc="451c4cc0" /> | |
| 4366 | <rom name="Nobunaga no Yabou - Haouden (1994)(KOEI)(NTSC)(JP)(Track 05 of 13)[!].wav" size="42724124" crc="7ae75a91" /> | |
| 4367 | <rom name="Nobunaga no Yabou - Haouden (1994)(KOEI)(NTSC)(JP)(Track 06 of 13)[!].wav" size="45979292" crc="931a0809" /> | |
| 4368 | <rom name="Nobunaga no Yabou - Haouden (1994)(KOEI)(NTSC)(JP)(Track 07 of 13)[!].wav" size="17557724" crc="c46e40cc" /> | |
| 4369 | <rom name="Nobunaga no Yabou - Haouden (1994)(KOEI)(NTSC)(JP)(Track 08 of 13)[!].wav" size="27831260" crc="b56af64d" /> | |
| 4370 | <rom name="Nobunaga no Yabou - Haouden (1994)(KOEI)(NTSC)(JP)(Track 09 of 13)[!].wav" size="30096236" crc="7aa2e3f9" /> | |
| 4371 | <rom name="Nobunaga no Yabou - Haouden (1994)(KOEI)(NTSC)(JP)(Track 10 of 13)[!].wav" size="39944060" crc="f1c2f588" /> | |
| 4372 | <rom name="Nobunaga no Yabou - Haouden (1994)(KOEI)(NTSC)(JP)(Track 11 of 13)[!].wav" size="60723980" crc="543cbbe1" /> | |
| 4373 | <rom name="Nobunaga no Yabou - Haouden (1994)(KOEI)(NTSC)(JP)(Track 12 of 13)[!].wav" size="38147132" crc="4a99b106" /> | |
| 4374 | <rom name="Nobunaga no Yabou - Haouden (1994)(KOEI)(NTSC)(JP)(Track 13 of 13)[!].wav" size="20309564" crc="f05b24f0" /> | |
| 4375 | --> | |
| 4376 | 1927 | <description>Nobunaga no Yabou - Haouden (Jpn)</description> |
| 4377 | 1928 | <year>1994</year> |
| 4378 | 1929 | <publisher>Koei</publisher> |
| r242703 | r242704 | |
| 4386 | 1937 | </part> |
| 4387 | 1938 | </software> |
| 4388 | 1939 | |
| 4389 | <software name="prizefig"> | |
| 4390 | <!-- source toseciso | |
| 4391 | <rom name="Prize Fighter (1993)(Sega)(NTSC)(JP)(Disc 1 of 2)[!].cue" size="301" crc="6caf1452" /> | |
| 4392 | <rom name="Prize Fighter (1993)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 1 of 2)[!].iso" size="346562560" crc="3c4783bc" /> | |
| 4393 | <rom name="Prize Fighter (1993)(Sega)(NTSC)(JP)(Disc 1 of 2)(Track 2 of 2)[!].wav" size="1528844" crc="409d75fa" /> | |
| 1940 | <!-- | |
| 1941 | <software name="nos1907"> | |
| 1942 | <description>Nostalgia 1907 in North Atlantic Sea (Jpn)</description> | |
| 1943 | <year>1991</year> | |
| 1944 | <publisher>Takeru</publisher> | |
| 1945 | <part name="cdrom" interface="scd_cdrom"> | |
| 1946 | <diskarea name="cdrom"> | |
| 1947 | <disk name="nostalgia 1907 in north atlantic sea (1991)(takeru)(ntsc)(jp)[!]" sha1="fafc810783ff5620de01c4f405871e184b2938ea"/> | |
| 1948 | </diskarea> | |
| 1949 | </part> | |
| 1950 | </software> | |
| 1951 | --> | |
| 4394 | 1952 | |
| 4395 | <rom name="Prize Fighter (1993)(Sega)(NTSC)(JP)(Disc 2 of 2)[!].cue" size="301" crc="58d1e74b" /> | |
| 4396 | <rom name="Prize Fighter (1993)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 1 of 2)[!].iso" size="408199168" crc="3ecc7df9" /> | |
| 4397 | <rom name="Prize Fighter (1993)(Sega)(NTSC)(JP)(Disc 2 of 2)(Track 2 of 2)[!].wav" size="1528844" crc="409d75fa" /> | |
| 4398 | --> | |
| 1953 | <!-- | |
| 1954 | <software name="popmail"> | |
| 1955 | <description>Popful Mail (Jpn)</description> | |
| 1956 | <year>1994</year> | |
| 1957 | <publisher>Sega</publisher> | |
| 1958 | <part name="cdrom" interface="scd_cdrom"> | |
| 1959 | <diskarea name="cdrom"> | |
| 1960 | <disk name="popful mail (1994)(sega)(ntsc)(jp)[!]" sha1="0980ea9d02b51096306feede7f7fbb8ad2afde1b"/> | |
| 1961 | </diskarea> | |
| 1962 | </part> | |
| 1963 | </software> | |
| 1964 | --> | |
| 1965 | ||
| 1966 | <!-- | |
| 1967 | <software name="princep"> | |
| 1968 | <description>Prince of Persia (Jpn)</description> | |
| 1969 | <year>1992</year> | |
| 1970 | <publisher>Victor Entertainment</publisher> | |
| 1971 | <part name="cdrom" interface="scd_cdrom"> | |
| 1972 | <diskarea name="cdrom"> | |
| 1973 | <disk name="prince of persia (1992)(victor)(ntsc)(jp)(en)[!]" sha1="a1dcc27e406477753f4e3c4058951d4be1174c43"/> | |
| 1974 | </diskarea> | |
| 1975 | </part> | |
| 1976 | </software> | |
| 1977 | --> | |
| 1978 | ||
| 1979 | <software name="prizefig"> | |
| 4399 | 1980 | <description>Prize Fighter (Jpn)</description> |
| 4400 | 1981 | <year>1995</year> |
| 4401 | 1982 | <publisher>Sega</publisher> |
| r242703 | r242704 | |
| 4415 | 1996 | </part> |
| 4416 | 1997 | </software> |
| 4417 | 1998 | |
| 1999 | ||
| 2000 | <!-- | |
| 2001 | <software name="suplegpy"> | |
| 2002 | <description>Pro Yakyuu Super League CD (Jpn)</description> | |
| 2003 | <year>1992</year> | |
| 2004 | <publisher>Sega</publisher> | |
| 2005 | <part name="cdrom" interface="scd_cdrom"> | |
| 2006 | <diskarea name="cdrom"> | |
| 2007 | <disk name="pro yakyuu super league cd (1992)(sega)(ntsc)(jp)[!]" sha1="c73797ec412342c5fe9dcfe3f2811ccc36990af9"/> | |
| 2008 | </diskarea> | |
| 2009 | </part> | |
| 2010 | </software> | |
| 2011 | --> | |
| 2012 | ||
| 4418 | 2013 | <software name="psychic3"> |
| 4419 | <!-- source toseciso | |
| 4420 | <rom name="Psychic Detective Series vol.3 - AYA (1993)(Data West)(NTSC)(JP)[!].cue" size="1146" crc="a10fe2a2" /> | |
| 4421 | <rom name="Psychic Detective Series vol.3 - AYA (1993)(Data West)(NTSC)(JP)(Track 1 of 7)[!].iso" size="32634880" crc="4602b34e" /> | |
| 4422 | <rom name="Psychic Detective Series vol.3 - AYA (1993)(Data West)(NTSC)(JP)(Track 2 of 7)[!].wav" size="5689532" crc="a723721c" /> | |
| 4423 | <rom name="Psychic Detective Series vol.3 - AYA (1993)(Data West)(NTSC)(JP)(Track 3 of 7)[!].wav" size="17863484" crc="ecbae13f" /> | |
| 4424 | <rom name="Psychic Detective Series vol.3 - AYA (1993)(Data West)(NTSC)(JP)(Track 4 of 7)[!].wav" size="37093436" crc="71480b86" /> | |
| 4425 | <rom name="Psychic Detective Series vol.3 - AYA (1993)(Data West)(NTSC)(JP)(Track 5 of 7)[!].wav" size="51955724" crc="7e8eba08" /> | |
| 4426 | <rom name="Psychic Detective Series vol.3 - AYA (1993)(Data West)(NTSC)(JP)(Track 6 of 7)[!].wav" size="34983692" crc="7a211cdc" /> | |
| 4427 | <rom name="Psychic Detective Series vol.3 - AYA (1993)(Data West)(NTSC)(JP)(Track 7 of 7)[!].wav" size="58724780" crc="fff3e6a0" /> | |
| 4428 | --> | |
| 4429 | 2014 | <description>Psychic Detective Series vol.3 - AYA (Jpn)</description> |
| 4430 | 2015 | <year>1993</year> |
| 4431 | 2016 | <publisher>Data West</publisher> |
| r242703 | r242704 | |
| 4440 | 2025 | </software> |
| 4441 | 2026 | |
| 4442 | 2027 | <software name="psychic4"> |
| 4443 | <!-- source toseciso | |
| 4444 | <rom name="Psychic Detective Series vol.4 - Orgel (1993)(Data West)(NTSC)(JP)[!].cue" size="1160" crc="c79a1ec1" /> | |
| 4445 | <rom name="Psychic Detective Series vol.4 - Orgel (1993)(Data West)(NTSC)(JP)(Track 1 of 7)[!].iso" size="140118016" crc="ca1c5712" /> | |
| 4446 | <rom name="Psychic Detective Series vol.4 - Orgel (1993)(Data West)(NTSC)(JP)(Track 2 of 7)[!].wav" size="6249308" crc="bcdf4a99" /> | |
| 4447 | <rom name="Psychic Detective Series vol.4 - Orgel (1993)(Data West)(NTSC)(JP)(Track 3 of 7)[!].wav" size="51791084" crc="9d6ae9b8" /> | |
| 4448 | <rom name="Psychic Detective Series vol.4 - Orgel (1993)(Data West)(NTSC)(JP)(Track 4 of 7)[!].wav" size="31634444" crc="eaf65896" /> | |
| 4449 | <rom name="Psychic Detective Series vol.4 - Orgel (1993)(Data West)(NTSC)(JP)(Track 5 of 7)[!].wav" size="22384028" crc="2cccf2ec" /> | |
| 4450 | <rom name="Psychic Detective Series vol.4 - Orgel (1993)(Data West)(NTSC)(JP)(Track 6 of 7)[!].wav" size="26570588" crc="31f96ca5" /> | |
| 4451 | <rom name="Psychic Detective Series vol.4 - Orgel (1993)(Data West)(NTSC)(JP)(Track 7 of 7)[!].wav" size="28565084" crc="3d533b3d" /> | |
| 4452 | --> | |
| 4453 | 2028 | <description>Psychic Detective Series vol.4 - Orgel (Jpn)</description> |
| 4454 | 2029 | <year>1993</year> |
| 4455 | 2030 | <publisher>Data West</publisher> |
| r242703 | r242704 | |
| 4465 | 2040 | |
| 4466 | 2041 | <!-- one of these probably matches the REDUMP image--> |
| 4467 | 2042 | <software name="quizssa" cloneof="quizss"> |
| 4468 | <!-- source toseciso | |
| 4469 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)[!][G-6003P-00014B-R1M].cue" size="6770" crc="77c402ec" /> | |
| 4470 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 01 of 41)[!][G-6003P-00014B-R1M].iso" size="24608768" crc="bf09f1f2" /> | |
| 4471 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 02 of 41)[!][G-6003P-00014B-R1M].wav" size="11999948" crc="0c9b451d" /> | |
| 4472 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 03 of 41)[!][G-6003P-00014B-R1M].wav" size="13307660" crc="1ebc5776" /> | |
| 4473 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 04 of 41)[!][G-6003P-00014B-R1M].wav" size="16400540" crc="e113ec68" /> | |
| 4474 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 05 of 41)[!][G-6003P-00014B-R1M].wav" size="6505676" crc="55167f94" /> | |
| 4475 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 06 of 41)[!][G-6003P-00014B-R1M].wav" size="18987740" crc="ed535450" /> | |
| 4476 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 07 of 41)[!][G-6003P-00014B-R1M].wav" size="1872236" crc="ba3dcb65" /> | |
| 4477 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 08 of 41)[!][G-6003P-00014B-R1M].wav" size="1827548" crc="f211bf9b" /> | |
| 4478 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 09 of 41)[!][G-6003P-00014B-R1M].wav" size="1653500" crc="fee49efd" /> | |
| 4479 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 10 of 41)[!][G-6003P-00014B-R1M].wav" size="1074908" crc="4e13addb" /> | |
| 4480 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 11 of 41)[!][G-6003P-00014B-R1M].wav" size="1067852" crc="05338bd4" /> | |
| 4481 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 12 of 41)[!][G-6003P-00014B-R1M].wav" size="8558972" crc="bd65c51e" /> | |
| 4482 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 13 of 41)[!][G-6003P-00014B-R1M].wav" size="3097628" crc="6067d929" /> | |
| 4483 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 14 of 41)[!][G-6003P-00014B-R1M].wav" size="3944348" crc="457b1a29" /> | |
| 4484 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 15 of 41)[!][G-6003P-00014B-R1M].wav" size="2650748" crc="c7e8f277" /> | |
| 4485 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 16 of 41)[!][G-6003P-00014B-R1M].wav" size="3756188" crc="4f327274" /> | |
| 4486 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 17 of 41)[!][G-6003P-00014B-R1M].wav" size="2034524" crc="524346c1" /> | |
| 4487 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 18 of 41)[!][G-6003P-00014B-R1M].wav" size="3203468" crc="e49a6720" /> | |
| 4488 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 19 of 41)[!][G-6003P-00014B-R1M].wav" size="3085868" crc="3140abf3" /> | |
| 4489 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 20 of 41)[!][G-6003P-00014B-R1M].wav" size="5738924" crc="8acc87fc" /> | |
| 4490 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 21 of 41)[!][G-6003P-00014B-R1M].wav" size="4372412" crc="5b96bcd3" /> | |
| 4491 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 22 of 41)[!][G-6003P-00014B-R1M].wav" size="3156428" crc="8873e76f" /> | |
| 4492 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 23 of 41)[!][G-6003P-00014B-R1M].wav" size="4685228" crc="05b542c0" /> | |
| 4493 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 24 of 41)[!][G-6003P-00014B-R1M].wav" size="1070204" crc="4cd3e49d" /> | |
| 4494 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 25 of 41)[!][G-6003P-00014B-R1M].wav" size="1074908" crc="cde0481f" /> | |
| 4495 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 26 of 41)[!][G-6003P-00014B-R1M].wav" size="1074908" crc="1e7fc9aa" /> | |
| 4496 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 27 of 41)[!][G-6003P-00014B-R1M].wav" size="1486508" crc="b21f4375" /> | |
| 4497 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 28 of 41)[!][G-6003P-00014B-R1M].wav" size="1248956" crc="77b0d9d6" /> | |
| 4498 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 29 of 41)[!][G-6003P-00014B-R1M].wav" size="1063148" crc="c657a70b" /> | |
| 4499 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 30 of 41)[!][G-6003P-00014B-R1M].wav" size="1063148" crc="a4cafe92" /> | |
| 4500 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 31 of 41)[!][G-6003P-00014B-R1M].wav" size="1065500" crc="f7d3a55a" /> | |
| 4501 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 32 of 41)[!][G-6003P-00014B-R1M].wav" size="1587644" crc="bca54f46" /> | |
| 4502 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 33 of 41)[!][G-6003P-00014B-R1M].wav" size="1063148" crc="94e7c60c" /> | |
| 4503 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 34 of 41)[!][G-6003P-00014B-R1M].wav" size="1077260" crc="7e46ef9d" /> | |
| 4504 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 35 of 41)[!][G-6003P-00014B-R1M].wav" size="1081964" crc="65886d5c" /> | |
| 4505 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 36 of 41)[!][G-6003P-00014B-R1M].wav" size="1070204" crc="0388661a" /> | |
| 4506 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 37 of 41)[!][G-6003P-00014B-R1M].wav" size="1237196" crc="29693798" /> | |
| 4507 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 38 of 41)[!][G-6003P-00014B-R1M].wav" size="1326572" crc="cbfec63e" /> | |
| 4508 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 39 of 41)[!][G-6003P-00014B-R1M].wav" size="1952204" crc="9dfa3d69" /> | |
| 4509 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 40 of 41)[!][G-6003P-00014B-R1M].wav" size="1067852" crc="92e6a974" /> | |
| 4510 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 41 of 41)[!][G-6003P-00014B-R1M].wav" size="1176044" crc="5cf02565" /> | |
| 4511 | --> | |
| 2043 | <!-- Diskring: G-6003P-00014B-R1M --> | |
| 4512 | 2044 | <description>Quiz Scramble Special (Jpn, R1M)</description> |
| 4513 | 2045 | <year>1992</year> |
| 4514 | 2046 | <publisher>Sega</publisher> |
| 4515 | 2047 | <info name="serial" value="G-6003"/> |
| 4516 | <info name="disk_ring" value="G-6003P-00014B-R1M"/> | |
| 4517 | 2048 | <info name="release" value="19920529"/> |
| 4518 | 2049 | <info name="alt_title" value="クイズスクランブルスペシャル"/> |
| 4519 | 2050 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 4524 | 2055 | </software> |
| 4525 | 2056 | |
| 4526 | 2057 | <software name="quizssb" cloneof="quizss"> |
| 4527 | <!-- source toseciso | |
| 4528 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)[!][G-6003P-00014B-R2M].cue" size="6770" crc="0cfc674d" /> | |
| 4529 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 01 of 41)[!][G-6003P-00014B-R2M].iso" size="24608768" crc="bf09f1f2" /> | |
| 4530 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 02 of 41)[!][G-6003P-00014B-R2M].wav" size="11999948" crc="2c6ebe67" /> | |
| 4531 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 03 of 41)[!][G-6003P-00014B-R2M].wav" size="13307660" crc="4920faca" /> | |
| 4532 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 04 of 41)[!][G-6003P-00014B-R2M].wav" size="16400540" crc="d17f090c" /> | |
| 4533 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 05 of 41)[!][G-6003P-00014B-R2M].wav" size="6505676" crc="18438cbd" /> | |
| 4534 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 06 of 41)[!][G-6003P-00014B-R2M].wav" size="18987740" crc="2fd9c8bb" /> | |
| 4535 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 07 of 41)[!][G-6003P-00014B-R2M].wav" size="1872236" crc="1750df67" /> | |
| 4536 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 08 of 41)[!][G-6003P-00014B-R2M].wav" size="1827548" crc="b2d6ffc3" /> | |
| 4537 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 09 of 41)[!][G-6003P-00014B-R2M].wav" size="1653500" crc="c7ec0188" /> | |
| 4538 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 10 of 41)[!][G-6003P-00014B-R2M].wav" size="1074908" crc="998cd623" /> | |
| 4539 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 11 of 41)[!][G-6003P-00014B-R2M].wav" size="1067852" crc="d613d12e" /> | |
| 4540 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 12 of 41)[!][G-6003P-00014B-R2M].wav" size="8558972" crc="3e88a848" /> | |
| 4541 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 13 of 41)[!][G-6003P-00014B-R2M].wav" size="3097628" crc="85a746d8" /> | |
| 4542 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 14 of 41)[!][G-6003P-00014B-R2M].wav" size="3944348" crc="516afc1f" /> | |
| 4543 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 15 of 41)[!][G-6003P-00014B-R2M].wav" size="2650748" crc="6db3ea40" /> | |
| 4544 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 16 of 41)[!][G-6003P-00014B-R2M].wav" size="3756188" crc="948d55b2" /> | |
| 4545 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 17 of 41)[!][G-6003P-00014B-R2M].wav" size="2034524" crc="7586ca9c" /> | |
| 4546 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 18 of 41)[!][G-6003P-00014B-R2M].wav" size="3201116" crc="deaf4b2d" /> | |
| 4547 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 19 of 41)[!][G-6003P-00014B-R2M].wav" size="3088220" crc="3a80f79b" /> | |
| 4548 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 20 of 41)[!][G-6003P-00014B-R2M].wav" size="5738924" crc="14402ecc" /> | |
| 4549 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 21 of 41)[!][G-6003P-00014B-R2M].wav" size="4372412" crc="e7f221a4" /> | |
| 4550 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 22 of 41)[!][G-6003P-00014B-R2M].wav" size="3156428" crc="1a899a45" /> | |
| 4551 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 23 of 41)[!][G-6003P-00014B-R2M].wav" size="4685228" crc="6bb375d8" /> | |
| 4552 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 24 of 41)[!][G-6003P-00014B-R2M].wav" size="1070204" crc="0cb7bc39" /> | |
| 4553 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 25 of 41)[!][G-6003P-00014B-R2M].wav" size="1074908" crc="bd0359c8" /> | |
| 4554 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 26 of 41)[!][G-6003P-00014B-R2M].wav" size="1074908" crc="1aa5e0cc" /> | |
| 4555 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 27 of 41)[!][G-6003P-00014B-R2M].wav" size="1486508" crc="abf9e4ba" /> | |
| 4556 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 28 of 41)[!][G-6003P-00014B-R2M].wav" size="1248956" crc="11270f36" /> | |
| 4557 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 29 of 41)[!][G-6003P-00014B-R2M].wav" size="1063148" crc="3e258a96" /> | |
| 4558 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 30 of 41)[!][G-6003P-00014B-R2M].wav" size="1063148" crc="ee1659e9" /> | |
| 4559 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 31 of 41)[!][G-6003P-00014B-R2M].wav" size="1065500" crc="bf111083" /> | |
| 4560 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 32 of 41)[!][G-6003P-00014B-R2M].wav" size="1587644" crc="ff7e3e28" /> | |
| 4561 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 33 of 41)[!][G-6003P-00014B-R2M].wav" size="1063148" crc="c6689798" /> | |
| 4562 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 34 of 41)[!][G-6003P-00014B-R2M].wav" size="1077260" crc="02a743c9" /> | |
| 4563 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 35 of 41)[!][G-6003P-00014B-R2M].wav" size="1081964" crc="a87cc285" /> | |
| 4564 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 36 of 41)[!][G-6003P-00014B-R2M].wav" size="1070204" crc="b94d7d7e" /> | |
| 4565 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 37 of 41)[!][G-6003P-00014B-R2M].wav" size="1237196" crc="e115c008" /> | |
| 4566 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 38 of 41)[!][G-6003P-00014B-R2M].wav" size="1326572" crc="fefa88d9" /> | |
| 4567 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 39 of 41)[!][G-6003P-00014B-R2M].wav" size="1952204" crc="404c7107" /> | |
| 4568 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 40 of 41)[!][G-6003P-00014B-R2M].wav" size="1067852" crc="d8ed2233" /> | |
| 4569 | <rom name="Quiz Scramble Special (1992)(Sega)(NTSC)(JP)(Track 41 of 41)[!][G-6003P-00014B-R2M].wav" size="1176044" crc="d95aae43" /> | |
| 4570 | --> | |
| 2058 | <!-- Diskring: G-6003P-00014B-R2M --> | |
| 4571 | 2059 | <description>Quiz Scramble Special (Jpn, R2M)</description> |
| 4572 | 2060 | <year>1992</year> |
| 4573 | 2061 | <publisher>Sega</publisher> |
| 4574 | 2062 | <info name="serial" value="G-6003"/> |
| 4575 | <info name="disk_ring" value="G-6003P-00014B-R2M"/> | |
| 4576 | 2063 | <info name="release" value="19920529"/> |
| 4577 | 2064 | <info name="alt_title" value="クイズスクランブルスペシャル"/> |
| 4578 | 2065 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 4582 | 2069 | </part> |
| 4583 | 2070 | </software> |
| 4584 | 2071 | |
| 2072 | <!-- | |
| 2073 | <software name="ranma"> | |
| 2074 | <description>Ranma Nibun no Ichi 1/2 - Byakuran Aika (Jpn)</description> | |
| 2075 | <year>1993</year> | |
| 2076 | <publisher>Masaya</publisher> | |
| 2077 | <part name="cdrom" interface="scd_cdrom"> | |
| 2078 | <diskarea name="cdrom"> | |
| 2079 | <disk name="ranma nibun no ichi 1-2 - byakuran aika (1993)(masaya)(ntsc)(jp)[!]" sha1="d222a6d3c8fd237671f853a4c105c59687cf642b"/> | |
| 2080 | </diskarea> | |
| 2081 | </part> | |
| 2082 | </software> | |
| 2083 | --> | |
| 2084 | ||
| 2085 | <!-- | |
| 2086 | <software name="risedrag"> | |
| 2087 | <description>Rise of the Dragon - A Blade Hunter Mystery (Jpn)</description> | |
| 2088 | <year>1992</year> | |
| 2089 | <publisher>Sega</publisher> | |
| 2090 | <part name="cdrom" interface="scd_cdrom"> | |
| 2091 | <diskarea name="cdrom"> | |
| 2092 | <disk name="rise of the dragon - a blade hunter mystery (1992)(sega)(ntsc)(jp)[!]" sha1="20715a2384f9e008e22568d1699ed377c8636927"/> | |
| 2093 | </diskarea> | |
| 2094 | </part> | |
| 2095 | </software> | |
| 2096 | --> | |
| 2097 | ||
| 4585 | 2098 | <software name="rbfx"> |
| 4586 | <!-- source toseciso | |
| 4587 | <rom name="Road Blaster FX (1992)(Wolf Team)(NTSC)(JP)(en)[!].cue" size="589" crc="78b59c82" /> | |
| 4588 | <rom name="Road Blaster FX (1992)(Wolf Team)(NTSC)(JP)(en)(Track 1 of 4)[!].iso" size="276729856" crc="0cd3a154" /> | |
| 4589 | <rom name="Road Blaster FX (1992)(Wolf Team)(NTSC)(JP)(en)(Track 2 of 4)[!].wav" size="2314412" crc="99efe690" /> | |
| 4590 | <rom name="Road Blaster FX (1992)(Wolf Team)(NTSC)(JP)(en)(Track 3 of 4)[!].wav" size="2065100" crc="8ea2a9f5" /> | |
| 4591 | <rom name="Road Blaster FX (1992)(Wolf Team)(NTSC)(JP)(en)(Track 4 of 4)[!].wav" size="13702796" crc="f104ca19" /> | |
| 4592 | --> | |
| 4593 | 2099 | <description>Road Blaster FX (Jpn)</description> |
| 4594 | 2100 | <year>1992</year> |
| 4595 | 2101 | <publisher>Wolf Team</publisher> |
| r242703 | r242704 | |
| 4603 | 2109 | </part> |
| 4604 | 2110 | </software> |
| 4605 | 2111 | |
| 2112 | <!-- | |
| 2113 | <software name="sangok3"> | |
| 2114 | <description>Sangokushi III (Jpn)</description> | |
| 2115 | <year>1993</year> | |
| 2116 | <publisher>Koei</publisher> | |
| 2117 | <part name="cdrom" interface="scd_cdrom"> | |
| 2118 | <diskarea name="cdrom"> | |
| 2119 | <disk name="sangokushi iii (1993)(koei)(ntsc)(jp)[!]" sha1="65012dc2e23400e9a6cf812448f019edae00ccc0"/> | |
| 2120 | </diskarea> | |
| 2121 | </part> | |
| 2122 | </software> | |
| 2123 | --> | |
| 2124 | ||
| 4606 | 2125 | <software name="monkey"> |
| 4607 | <!-- source toseciso | |
| 4608 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)[!].cue" size="5297" crc="711581d8" /> | |
| 4609 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 01 of 27)[!].iso" size="15982592" crc="cd805587" /> | |
| 4610 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 02 of 27)[!].wav" size="21179804" crc="c87418bc" /> | |
| 4611 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 03 of 27)[!].wav" size="22186460" crc="1b4e5efe" /> | |
| 4612 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 04 of 27)[!].wav" size="22028876" crc="bd22ffcd" /> | |
| 4613 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 05 of 27)[!].wav" size="20669420" crc="d8b69d24" /> | |
| 4614 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 06 of 27)[!].wav" size="22635692" crc="1e664725" /> | |
| 4615 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 07 of 27)[!].wav" size="2236796" crc="fd646c98" /> | |
| 4616 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 08 of 27)[!].wav" size="12820796" crc="5811cdd2" /> | |
| 4617 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 09 of 27)[!].wav" size="24660764" crc="e77a05cb" /> | |
| 4618 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 10 of 27)[!].wav" size="22113548" crc="f12fd950" /> | |
| 4619 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 11 of 27)[!].wav" size="16685132" crc="263d7e97" /> | |
| 4620 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 12 of 27)[!].wav" size="24686636" crc="7af62329" /> | |
| 4621 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 13 of 27)[!].wav" size="21859532" crc="13e76fc8" /> | |
| 4622 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 14 of 27)[!].wav" size="3473948" crc="2b54bd4b" /> | |
| 4623 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 15 of 27)[!].wav" size="27906524" crc="5e859e03" /> | |
| 4624 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 16 of 27)[!].wav" size="26575292" crc="f8c548b6" /> | |
| 4625 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 17 of 27)[!].wav" size="39290204" crc="d7413046" /> | |
| 4626 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 18 of 27)[!].wav" size="28252268" crc="78a54e52" /> | |
| 4627 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 19 of 27)[!].wav" size="28129964" crc="348174c7" /> | |
| 4628 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 20 of 27)[!].wav" size="3255212" crc="4c4b011b" /> | |
| 4629 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 21 of 27)[!].wav" size="3582140" crc="b4651379" /> | |
| 4630 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 22 of 27)[!].wav" size="23849324" crc="e1e34786" /> | |
| 4631 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 23 of 27)[!].wav" size="18028124" crc="172ad9ab" /> | |
| 4632 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 24 of 27)[!].wav" size="1773452" crc="24c048bf" /> | |
| 4633 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 25 of 27)[!].wav" size="2227388" crc="b518967a" /> | |
| 4634 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 26 of 27)[!].wav" size="11176748" crc="c68d39eb" /> | |
| 4635 | <rom name="Secret of Monkey Island, The - Monkey Island Yurei - Kaizoku Oosoudou! (1993)(Victor)(NTSC)(JP)(Track 27 of 27)[!].wav" size="10243004" crc="4f67b8c1" /> | |
| 4636 | --> | |
| 4637 | 2126 | <description>The Secret of Monkey Island - Monkey Island Yurei - Kaizoku Oosoudou! (Jpn)</description> |
| 4638 | 2127 | <year>1993</year> |
| 4639 | 2128 | <publisher>Victor Entertainment</publisher> |
| r242703 | r242704 | |
| 4649 | 2138 | |
| 4650 | 2139 | <!-- one of these probably matches the REDUMP image --> |
| 4651 | 2140 | <software name="segaaca" cloneof="segaac"> |
| 4652 | <!-- source toseciso | |
| 4653 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)[!][compilation][G-6012P-00024-2-R1M].cue" size="2477" crc="25ddd4e0" /> | |
| 4654 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 01 of 12)[!][compilation][G-6012P-00024-2-R1M].iso" size="21899264" crc="99bcfc48" /> | |
| 4655 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 02 of 12)[!][compilation][G-6012P-00024-2-R1M].wav" size="15963068" crc="f942c9a6" /> | |
| 4656 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 03 of 12)[!][compilation][G-6012P-00024-2-R1M].wav" size="3826748" crc="cfe8296e" /> | |
| 4657 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 04 of 12)[!][compilation][G-6012P-00024-2-R1M].wav" size="8996444" crc="e859876b" /> | |
| 4658 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 05 of 12)[!][compilation][G-6012P-00024-2-R1M].wav" size="28929644" crc="7be45951" /> | |
| 4659 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 06 of 12)[!][compilation][G-6012P-00024-2-R1M].wav" size="23912828" crc="fb3086b0" /> | |
| 4660 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 07 of 12)[!][compilation][G-6012P-00024-2-R1M].wav" size="15810188" crc="54cb4580" /> | |
| 4661 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 08 of 12)[!][compilation][G-6012P-00024-2-R1M].wav" size="21791324" crc="6dc730e3" /> | |
| 4662 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 09 of 12)[!][compilation][G-6012P-00024-2-R1M].wav" size="25646252" crc="9682c695" /> | |
| 4663 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 10 of 12)[!][compilation][G-6012P-00024-2-R1M].wav" size="23696444" crc="10e23f13" /> | |
| 4664 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 11 of 12)[!][compilation][G-6012P-00024-2-R1M].wav" size="3709148" crc="99a3f4e7" /> | |
| 4665 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 12 of 12)[!][compilation][G-6012P-00024-2-R1M].wav" size="12169292" crc="4df03bd7" /> | |
| 4666 | --> | |
| 4667 | 2141 | <description>Sega Classic Arcade Collection - Limited Edition (Jpn, R1M)</description> |
| 4668 | 2142 | <year>1993</year> |
| 4669 | 2143 | <publisher>Sega</publisher> |
| 4670 | 2144 | <info name="serial" value="G-6012"/> |
| 4671 | <info name="disk_ring" value="G-6012P-00024-2-R1M"/> | |
| 4672 | 2145 | <info name="release" value="19930423"/> |
| 4673 | 2146 | <info name="alt_title" value="セガクラシック"/> |
| 4674 | 2147 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 4679 | 2152 | </software> |
| 4680 | 2153 | |
| 4681 | 2154 | <software name="segaacb" cloneof="segaac"> |
| 4682 | <!-- source toseciso | |
| 4683 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)[!][compilation][G-6012P-00024-2-R2M].cue" size="2477" crc="4a60909c" /> | |
| 4684 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 01 of 12)[!][compilation][G-6012P-00024-2-R2M].iso" size="21899264" crc="99bcfc48" /> | |
| 4685 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 02 of 12)[!][compilation][G-6012P-00024-2-R2M].wav" size="15963068" crc="727c66a9" /> | |
| 4686 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 03 of 12)[!][compilation][G-6012P-00024-2-R2M].wav" size="3826748" crc="c25a25c2" /> | |
| 4687 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 04 of 12)[!][compilation][G-6012P-00024-2-R2M].wav" size="8996444" crc="b1dc92a9" /> | |
| 4688 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 05 of 12)[!][compilation][G-6012P-00024-2-R2M].wav" size="28929644" crc="19bcc621" /> | |
| 4689 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 06 of 12)[!][compilation][G-6012P-00024-2-R2M].wav" size="23912828" crc="b1472348" /> | |
| 4690 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 07 of 12)[!][compilation][G-6012P-00024-2-R2M].wav" size="15810188" crc="1624cc5f" /> | |
| 4691 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 08 of 12)[!][compilation][G-6012P-00024-2-R2M].wav" size="21791324" crc="63e8c52a" /> | |
| 4692 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 09 of 12)[!][compilation][G-6012P-00024-2-R2M].wav" size="25646252" crc="d903ac87" /> | |
| 4693 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 10 of 12)[!][compilation][G-6012P-00024-2-R2M].wav" size="23694092" crc="182fb729" /> | |
| 4694 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 11 of 12)[!][compilation][G-6012P-00024-2-R2M].wav" size="3711500" crc="684b3091" /> | |
| 4695 | <rom name="Sega Classic Arcade Collection - Limited Edition (1992)(Sega)(NTSC)(JP)(Track 12 of 12)[!][compilation][G-6012P-00024-2-R2M].wav" size="12169292" crc="9406c05f" /> | |
| 4696 | --> | |
| 4697 | 2155 | <description>Sega Classic Arcade Collection - Limited Edition (Jpn, R2M)</description> |
| 4698 | 2156 | <year>1993</year> |
| 4699 | 2157 | <publisher>Sega</publisher> |
| 4700 | 2158 | <info name="serial" value="G-6012"/> |
| 4701 | <info name="disk_ring" value="G-6012P-00024-2-R2M"/> | |
| 4702 | 2159 | <info name="release" value="19930423"/> |
| 4703 | 2160 | <info name="alt_title" value="セガクラシック"/> |
| 4704 | 2161 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 4708 | 2165 | </part> |
| 4709 | 2166 | </software> |
| 4710 | 2167 | |
| 2168 | <!-- | |
| 2169 | <software name="3x3eyes"> | |
| 2170 | <description>Seima Densetsu 3x3 Eyes (Jpn)</description> | |
| 2171 | <year>1993</year> | |
| 2172 | <publisher>Sega</publisher> | |
| 2173 | <part name="cdrom" interface="scd_cdrom"> | |
| 2174 | <diskarea name="cdrom"> | |
| 2175 | <disk name="seima densetsu 3x3 eyes (1993)(sega)(ntsc)(jp)[!]" sha1="aec46e2945a47cceeb78c9b2707bb977086da3a2"/> | |
| 2176 | </diskarea> | |
| 2177 | </part> | |
| 2178 | </software> | |
| 2179 | --> | |
| 2180 | ||
| 4711 | 2181 | <!-- one of these probably matches the REDUMP dump --> |
| 4712 | 2182 | <software name="fheyareaa" cloneof="fheyarea"> |
| 4713 | <!-- source toseciso | |
| 4714 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)[!][T-32034P-00009-R1K].cue" size="15050" crc="6c9fa1d1" /> | |
| 4715 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 01 of 85)[!][T-32034P-00009-R1K].iso" size="14180352" crc="0452b881" /> | |
| 4716 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 02 of 85)[!][T-32034P-00009-R1K].wav" size="769148" crc="8cbc0a19" /> | |
| 4717 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 03 of 85)[!][T-32034P-00009-R1K].wav" size="1150172" crc="8514fbad" /> | |
| 4718 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 04 of 85)[!][T-32034P-00009-R1K].wav" size="1286588" crc="9f92503e" /> | |
| 4719 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 05 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="7b812397" /> | |
| 4720 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 06 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="3dfdcb17" /> | |
| 4721 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 07 of 85)[!][T-32034P-00009-R1K].wav" size="1084316" crc="3c716048" /> | |
| 4722 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 08 of 85)[!][T-32034P-00009-R1K].wav" size="1143116" crc="cb460f59" /> | |
| 4723 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 09 of 85)[!][T-32034P-00009-R1K].wav" size="1201916" crc="9973c07a" /> | |
| 4724 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 10 of 85)[!][T-32034P-00009-R1K].wav" size="1223084" crc="25890d03" /> | |
| 4725 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 11 of 85)[!][T-32034P-00009-R1K].wav" size="1213676" crc="f78371fa" /> | |
| 4726 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 12 of 85)[!][T-32034P-00009-R1K].wav" size="1260716" crc="2be4e14a" /> | |
| 4727 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 13 of 85)[!][T-32034P-00009-R1K].wav" size="1074908" crc="a102aaa9" /> | |
| 4728 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 14 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="ba05bb88" /> | |
| 4729 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 15 of 85)[!][T-32034P-00009-R1K].wav" size="1164284" crc="5b27f6c1" /> | |
| 4730 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 16 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="6733991e" /> | |
| 4731 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 17 of 85)[!][T-32034P-00009-R1K].wav" size="1121948" crc="f0e3f1fa" /> | |
| 4732 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 18 of 85)[!][T-32034P-00009-R1K].wav" size="1307756" crc="128a6823" /> | |
| 4733 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 19 of 85)[!][T-32034P-00009-R1K].wav" size="1239548" crc="428d2a0e" /> | |
| 4734 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 20 of 85)[!][T-32034P-00009-R1K].wav" size="1321868" crc="cbdfb837" /> | |
| 4735 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 21 of 85)[!][T-32034P-00009-R1K].wav" size="1246604" crc="0dd4f844" /> | |
| 4736 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 22 of 85)[!][T-32034P-00009-R1K].wav" size="1225436" crc="9f953d7f" /> | |
| 4737 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 23 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="a8180aca" /> | |
| 4738 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 24 of 85)[!][T-32034P-00009-R1K].wav" size="1065500" crc="fceaac82" /> | |
| 4739 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 25 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="12c28015" /> | |
| 4740 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 26 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="7834d9ea" /> | |
| 4741 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 27 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="5f75443b" /> | |
| 4742 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 28 of 85)[!][T-32034P-00009-R1K].wav" size="1291292" crc="0a1722f7" /> | |
| 4743 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 29 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="fbe0ebfe" /> | |
| 4744 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 30 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="2d2a7e34" /> | |
| 4745 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 31 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="aaf623cd" /> | |
| 4746 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 32 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="2843dd77" /> | |
| 4747 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 33 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="d3b7b9d9" /> | |
| 4748 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 34 of 85)[!][T-32034P-00009-R1K].wav" size="1159580" crc="31fdf098" /> | |
| 4749 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 35 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="039bac1e" /> | |
| 4750 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 36 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="9724cfc3" /> | |
| 4751 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 37 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="d5d55577" /> | |
| 4752 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 38 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="89e384e8" /> | |
| 4753 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 39 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="db4e1a2d" /> | |
| 4754 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 40 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="32874af9" /> | |
| 4755 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 41 of 85)[!][T-32034P-00009-R1K].wav" size="1359500" crc="65879bad" /> | |
| 4756 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 42 of 85)[!][T-32034P-00009-R1K].wav" size="1265420" crc="09e4ace9" /> | |
| 4757 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 43 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="0e660629" /> | |
| 4758 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 44 of 85)[!][T-32034P-00009-R1K].wav" size="1580588" crc="e6d06442" /> | |
| 4759 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 45 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="ea3916c4" /> | |
| 4760 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 46 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="e32aa65b" /> | |
| 4761 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 47 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="fb19c6e9" /> | |
| 4762 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 48 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="c4958b8b" /> | |
| 4763 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 49 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="b940d6c2" /> | |
| 4764 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 50 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="5ed6c718" /> | |
| 4765 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 51 of 85)[!][T-32034P-00009-R1K].wav" size="1907516" crc="b16ff5cf" /> | |
| 4766 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 52 of 85)[!][T-32034P-00009-R1K].wav" size="1898108" crc="89b2eac6" /> | |
| 4767 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 53 of 85)[!][T-32034P-00009-R1K].wav" size="1684076" crc="78557679" /> | |
| 4768 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 54 of 85)[!][T-32034P-00009-R1K].wav" size="2601356" crc="c1a89a24" /> | |
| 4769 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 55 of 85)[!][T-32034P-00009-R1K].wav" size="2180348" crc="9d2bcfc3" /> | |
| 4770 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 56 of 85)[!][T-32034P-00009-R1K].wav" size="3208172" crc="66ad1ea1" /> | |
| 4771 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 57 of 85)[!][T-32034P-00009-R1K].wav" size="2653100" crc="b8bfd3ac" /> | |
| 4772 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 58 of 85)[!][T-32034P-00009-R1K].wav" size="2432012" crc="db0917c4" /> | |
| 4773 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 59 of 85)[!][T-32034P-00009-R1K].wav" size="4372412" crc="c6ea6d5d" /> | |
| 4774 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 60 of 85)[!][T-32034P-00009-R1K].wav" size="33139724" crc="abc2dcdd" /> | |
| 4775 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 61 of 85)[!][T-32034P-00009-R1K].wav" size="26424764" crc="cc1cb2f1" /> | |
| 4776 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 62 of 85)[!][T-32034P-00009-R1K].wav" size="17261372" crc="856c01f1" /> | |
| 4777 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 63 of 85)[!][T-32034P-00009-R1K].wav" size="43446188" crc="5e61fdab" /> | |
| 4778 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 64 of 85)[!][T-32034P-00009-R1K].wav" size="21454988" crc="d0e17094" /> | |
| 4779 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 65 of 85)[!][T-32034P-00009-R1K].wav" size="29668172" crc="d609c1c5" /> | |
| 4780 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 66 of 85)[!][T-32034P-00009-R1K].wav" size="25302860" crc="1bd454ca" /> | |
| 4781 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 67 of 85)[!][T-32034P-00009-R1K].wav" size="25533356" crc="cf025560" /> | |
| 4782 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 68 of 85)[!][T-32034P-00009-R1K].wav" size="28466300" crc="f34d1c72" /> | |
| 4783 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 69 of 85)[!][T-32034P-00009-R1K].wav" size="14620076" crc="2e827a0a" /> | |
| 4784 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 70 of 85)[!][T-32034P-00009-R1K].wav" size="20530652" crc="d8c5071e" /> | |
| 4785 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 71 of 85)[!][T-32034P-00009-R1K].wav" size="31989596" crc="0ac04283" /> | |
| 4786 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 72 of 85)[!][T-32034P-00009-R1K].wav" size="29611724" crc="b970ceb7" /> | |
| 4787 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 73 of 85)[!][T-32034P-00009-R1K].wav" size="25298156" crc="5d6a2d8a" /> | |
| 4788 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 74 of 85)[!][T-32034P-00009-R1K].wav" size="26695244" crc="54e02df4" /> | |
| 4789 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 75 of 85)[!][T-32034P-00009-R1K].wav" size="1921628" crc="2f28fa14" /> | |
| 4790 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 76 of 85)[!][T-32034P-00009-R1K].wav" size="2422604" crc="cde1fe1d" /> | |
| 4791 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 77 of 85)[!][T-32034P-00009-R1K].wav" size="2083916" crc="c01189c4" /> | |
| 4792 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 78 of 85)[!][T-32034P-00009-R1K].wav" size="1063148" crc="66b646be" /> | |
| 4793 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 79 of 85)[!][T-32034P-00009-R1K].wav" size="6926684" crc="31014cfd" /> | |
| 4794 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 80 of 85)[!][T-32034P-00009-R1K].wav" size="1808732" crc="b170e7c7" /> | |
| 4795 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 81 of 85)[!][T-32034P-00009-R1K].wav" size="2392028" crc="35246ac9" /> | |
| 4796 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 82 of 85)[!][T-32034P-00009-R1K].wav" size="1651148" crc="723fcf2b" /> | |
| 4797 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 83 of 85)[!][T-32034P-00009-R1K].wav" size="19474604" crc="972a825d" /> | |
| 4798 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 84 of 85)[!][T-32034P-00009-R1K].wav" size="23284844" crc="299f46b1" /> | |
| 4799 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 85 of 85)[!][T-32034P-00009-R1K].wav" size="51076076" crc="967acd0b" /> | |
| 4800 | --> | |
| 2183 | <!-- Diskring: T-32034P-00009-R1K --> | |
| 4801 | 2184 | <description>Seirei Shinseiki - Fhey Area (Jpn, R1K)</description> |
| 4802 | 2185 | <year>1992</year> |
| 4803 | 2186 | <publisher>Wolf Team</publisher> |
| 4804 | 2187 | <info name="serial" value="T-32034"/> |
| 4805 | <info name="disk_ring" value="T-32034P-00009-R1K"/> | |
| 4806 | 2188 | <info name="release" value="19920218"/> |
| 4807 | 2189 | <info name="alt_title" value="精霊神世紀フェイエリア"/> |
| 4808 | 2190 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 4813 | 2195 | </software> |
| 4814 | 2196 | |
| 4815 | 2197 | <software name="fheyareab" cloneof="fheyarea"> |
| 4816 | <!-- source toseciso | |
| 4817 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)[!][T-32034P-00009-R2K].cue" size="15050" crc="6c61ba62" /> | |
| 4818 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 01 of 85)[!][T-32034P-00009-R2K].iso" size="14180352" crc="0452b881" /> | |
| 4819 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 02 of 85)[!][T-32034P-00009-R2K].wav" size="769148" crc="a9d3686f" /> | |
| 4820 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 03 of 85)[!][T-32034P-00009-R2K].wav" size="1150172" crc="8c10a0f2" /> | |
| 4821 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 04 of 85)[!][T-32034P-00009-R2K].wav" size="1286588" crc="a134ad07" /> | |
| 4822 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 05 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="831e25af" /> | |
| 4823 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 06 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="27ede339" /> | |
| 4824 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 07 of 85)[!][T-32034P-00009-R2K].wav" size="1084316" crc="dd434b53" /> | |
| 4825 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 08 of 85)[!][T-32034P-00009-R2K].wav" size="1143116" crc="1793df49" /> | |
| 4826 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 09 of 85)[!][T-32034P-00009-R2K].wav" size="1201916" crc="19951152" /> | |
| 4827 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 10 of 85)[!][T-32034P-00009-R2K].wav" size="1223084" crc="cb9b0a01" /> | |
| 4828 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 11 of 85)[!][T-32034P-00009-R2K].wav" size="1213676" crc="064e7cd7" /> | |
| 4829 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 12 of 85)[!][T-32034P-00009-R2K].wav" size="1260716" crc="ba3a901d" /> | |
| 4830 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 13 of 85)[!][T-32034P-00009-R2K].wav" size="1074908" crc="86799086" /> | |
| 4831 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 14 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="22203034" /> | |
| 4832 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 15 of 85)[!][T-32034P-00009-R2K].wav" size="1164284" crc="f7572b33" /> | |
| 4833 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 16 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="11fdacd8" /> | |
| 4834 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 17 of 85)[!][T-32034P-00009-R2K].wav" size="1121948" crc="f01eedeb" /> | |
| 4835 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 18 of 85)[!][T-32034P-00009-R2K].wav" size="1307756" crc="f3453e36" /> | |
| 4836 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 19 of 85)[!][T-32034P-00009-R2K].wav" size="1239548" crc="b2fdd8a2" /> | |
| 4837 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 20 of 85)[!][T-32034P-00009-R2K].wav" size="1321868" crc="47f76985" /> | |
| 4838 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 21 of 85)[!][T-32034P-00009-R2K].wav" size="1246604" crc="b18f2283" /> | |
| 4839 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 22 of 85)[!][T-32034P-00009-R2K].wav" size="1225436" crc="bbc83e70" /> | |
| 4840 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 23 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="b6111157" /> | |
| 4841 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 24 of 85)[!][T-32034P-00009-R2K].wav" size="1065500" crc="f7d19080" /> | |
| 4842 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 25 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="0115f590" /> | |
| 4843 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 26 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="cb49d54e" /> | |
| 4844 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 27 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="072d68bd" /> | |
| 4845 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 28 of 85)[!][T-32034P-00009-R2K].wav" size="1291292" crc="332df826" /> | |
| 4846 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 29 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="db66d3a1" /> | |
| 4847 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 30 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="56b2268c" /> | |
| 4848 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 31 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="bcb990bb" /> | |
| 4849 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 32 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="50ba0d1d" /> | |
| 4850 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 33 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="89c52a91" /> | |
| 4851 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 34 of 85)[!][T-32034P-00009-R2K].wav" size="1159580" crc="bf21f448" /> | |
| 4852 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 35 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="b5a5201e" /> | |
| 4853 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 36 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="f888a97f" /> | |
| 4854 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 37 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="d515060d" /> | |
| 4855 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 38 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="cd28a931" /> | |
| 4856 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 39 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="b4586858" /> | |
| 4857 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 40 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="3943b81d" /> | |
| 4858 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 41 of 85)[!][T-32034P-00009-R2K].wav" size="1359500" crc="57762d9c" /> | |
| 4859 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 42 of 85)[!][T-32034P-00009-R2K].wav" size="1265420" crc="34435902" /> | |
| 4860 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 43 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="89c9a81b" /> | |
| 4861 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 44 of 85)[!][T-32034P-00009-R2K].wav" size="1580588" crc="8550d325" /> | |
| 4862 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 45 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="e47b0ab3" /> | |
| 4863 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 46 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="040db8d1" /> | |
| 4864 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 47 of 85)[!][T-32034P-00009-R2K].wav" size="1060796" crc="e08820e9" /> | |
| 4865 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 48 of 85)[!][T-32034P-00009-R2K].wav" size="1065500" crc="54cafdeb" /> | |
| 4866 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 49 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="968f51af" /> | |
| 4867 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 50 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="dc9da9c3" /> | |
| 4868 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 51 of 85)[!][T-32034P-00009-R2K].wav" size="1907516" crc="3da8fe0b" /> | |
| 4869 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 52 of 85)[!][T-32034P-00009-R2K].wav" size="1898108" crc="ff275972" /> | |
| 4870 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 53 of 85)[!][T-32034P-00009-R2K].wav" size="1684076" crc="7ee03d30" /> | |
| 4871 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 54 of 85)[!][T-32034P-00009-R2K].wav" size="2601356" crc="bce55fe3" /> | |
| 4872 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 55 of 85)[!][T-32034P-00009-R2K].wav" size="2180348" crc="1b2b7741" /> | |
| 4873 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 56 of 85)[!][T-32034P-00009-R2K].wav" size="3208172" crc="56868dd4" /> | |
| 4874 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 57 of 85)[!][T-32034P-00009-R2K].wav" size="2653100" crc="f3b6e2ad" /> | |
| 4875 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 58 of 85)[!][T-32034P-00009-R2K].wav" size="2432012" crc="f8ee3038" /> | |
| 4876 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 59 of 85)[!][T-32034P-00009-R2K].wav" size="4372412" crc="03245469" /> | |
| 4877 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 60 of 85)[!][T-32034P-00009-R2K].wav" size="33139724" crc="72bb1f3e" /> | |
| 4878 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 61 of 85)[!][T-32034P-00009-R2K].wav" size="26424764" crc="7855a2a1" /> | |
| 4879 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 62 of 85)[!][T-32034P-00009-R2K].wav" size="17261372" crc="546d0c2b" /> | |
| 4880 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 63 of 85)[!][T-32034P-00009-R2K].wav" size="43446188" crc="70e4a72f" /> | |
| 4881 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 64 of 85)[!][T-32034P-00009-R2K].wav" size="21454988" crc="3b52ab12" /> | |
| 4882 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 65 of 85)[!][T-32034P-00009-R2K].wav" size="29668172" crc="d1c4268c" /> | |
| 4883 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 66 of 85)[!][T-32034P-00009-R2K].wav" size="25302860" crc="f7382337" /> | |
| 4884 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 67 of 85)[!][T-32034P-00009-R2K].wav" size="25533356" crc="f8381018" /> | |
| 4885 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 68 of 85)[!][T-32034P-00009-R2K].wav" size="28466300" crc="ba4fea52" /> | |
| 4886 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 69 of 85)[!][T-32034P-00009-R2K].wav" size="14620076" crc="da659a00" /> | |
| 4887 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 70 of 85)[!][T-32034P-00009-R2K].wav" size="20530652" crc="ad5a209f" /> | |
| 4888 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 71 of 85)[!][T-32034P-00009-R2K].wav" size="31989596" crc="7f3c462f" /> | |
| 4889 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 72 of 85)[!][T-32034P-00009-R2K].wav" size="29611724" crc="0e4063a7" /> | |
| 4890 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 73 of 85)[!][T-32034P-00009-R2K].wav" size="25298156" crc="0ea3a15d" /> | |
| 4891 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 74 of 85)[!][T-32034P-00009-R2K].wav" size="26695244" crc="2faa90cd" /> | |
| 4892 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 75 of 85)[!][T-32034P-00009-R2K].wav" size="1921628" crc="c90d6563" /> | |
| 4893 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 76 of 85)[!][T-32034P-00009-R2K].wav" size="2422604" crc="de38ce16" /> | |
| 4894 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 77 of 85)[!][T-32034P-00009-R2K].wav" size="2083916" crc="6f046735" /> | |
| 4895 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 78 of 85)[!][T-32034P-00009-R2K].wav" size="1063148" crc="e4ec5c01" /> | |
| 4896 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 79 of 85)[!][T-32034P-00009-R2K].wav" size="6926684" crc="eccf786f" /> | |
| 4897 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 80 of 85)[!][T-32034P-00009-R2K].wav" size="1808732" crc="ca3bb45a" /> | |
| 4898 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 81 of 85)[!][T-32034P-00009-R2K].wav" size="2392028" crc="6d884314" /> | |
| 4899 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 82 of 85)[!][T-32034P-00009-R2K].wav" size="1651148" crc="b9bc7641" /> | |
| 4900 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 83 of 85)[!][T-32034P-00009-R2K].wav" size="19474604" crc="a6db8254" /> | |
| 4901 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 84 of 85)[!][T-32034P-00009-R2K].wav" size="23284844" crc="507327a8" /> | |
| 4902 | <rom name="Seirei Shinseiki - Fhey Area (1992)(Wolf Team)(NTSC)(JP)(Track 85 of 85)[!][T-32034P-00009-R2K].wav" size="51076076" crc="b7b3c759" /> | |
| 4903 | --> | |
| 2198 | <!-- Diskring: T-32034P-00009-R2K --> | |
| 4904 | 2199 | <description>Seirei Shinseiki - Fhey Area (Jpn, R2K)</description> |
| 4905 | 2200 | <year>1992</year> |
| 4906 | 2201 | <publisher>Wolf Team</publisher> |
| 4907 | 2202 | <info name="serial" value="T-32034"/> |
| 4908 | <info name="disk_ring" value="T-32034P-00009-R2K"/> | |
| 4909 | 2203 | <info name="release" value="19920218"/> |
| 4910 | 2204 | <info name="alt_title" value="精霊神世紀フェイエリア"/> |
| 4911 | 2205 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 4916 | 2210 | </software> |
| 4917 | 2211 | |
| 4918 | 2212 | <software name="sengoku"> |
| 4919 | <!-- source toseciso | |
| 4920 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)[!].cue" size="4345" crc="8e00a86b" /> | |
| 4921 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 01 of 31)[!].iso" size="13056000" crc="14f4cea0" /> | |
| 4922 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 02 of 31)[!].wav" size="7077212" crc="352eb41b" /> | |
| 4923 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 03 of 31)[!].wav" size="3946700" crc="a642813b" /> | |
| 4924 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 04 of 31)[!].wav" size="17687084" crc="58ef5a69" /> | |
| 4925 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 05 of 31)[!].wav" size="2053340" crc="1d3617a1" /> | |
| 4926 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 06 of 31)[!].wav" size="15318620" crc="d8ce1ccd" /> | |
| 4927 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 07 of 31)[!].wav" size="17560076" crc="f8d66ecd" /> | |
| 4928 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 08 of 31)[!].wav" size="11858828" crc="cf1cb5ac" /> | |
| 4929 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 09 of 31)[!].wav" size="17487164" crc="a7085923" /> | |
| 4930 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 10 of 31)[!].wav" size="2930636" crc="2efce5e6" /> | |
| 4931 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 11 of 31)[!].wav" size="12917228" crc="3f66960a" /> | |
| 4932 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 12 of 31)[!].wav" size="18021068" crc="85569c44" /> | |
| 4933 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 13 of 31)[!].wav" size="9937244" crc="7c71069f" /> | |
| 4934 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 14 of 31)[!].wav" size="7479404" crc="d4602090" /> | |
| 4935 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 15 of 31)[!].wav" size="10203020" crc="583d68d9" /> | |
| 4936 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 16 of 31)[!].wav" size="14521292" crc="ed1ed898" /> | |
| 4937 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 17 of 31)[!].wav" size="9629132" crc="dde0c0f3" /> | |
| 4938 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 18 of 31)[!].wav" size="11825900" crc="fb6a5847" /> | |
| 4939 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 19 of 31)[!].wav" size="8314364" crc="987f1dc2" /> | |
| 4940 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 20 of 31)[!].wav" size="10548764" crc="dc1ff8c9" /> | |
| 4941 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 21 of 31)[!].wav" size="10250060" crc="182f56f6" /> | |
| 4942 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 22 of 31)[!].wav" size="9864332" crc="eda5960c" /> | |
| 4943 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 23 of 31)[!].wav" size="8495468" crc="56f6111c" /> | |
| 4944 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 24 of 31)[!].wav" size="8537804" crc="e67c570b" /> | |
| 4945 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 25 of 31)[!].wav" size="9923132" crc="14694cf6" /> | |
| 4946 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 26 of 31)[!].wav" size="11863532" crc="a65402e7" /> | |
| 4947 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 27 of 31)[!].wav" size="2018060" crc="1f5c53d7" /> | |
| 4948 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 28 of 31)[!].wav" size="10828652" crc="9edd7ab8" /> | |
| 4949 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 29 of 31)[!].wav" size="14533052" crc="8d333360" /> | |
| 4950 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 30 of 31)[!].wav" size="2093324" crc="01968d7e" /> | |
| 4951 | <rom name="Sengoku Denshou (1993)(Sammy)(NTSC)(JP)(Track 31 of 31)[!].wav" size="1620572" crc="dec5de32" /> | |
| 4952 | --> | |
| 4953 | 2213 | <description>Sengoku Denshou (Jpn)</description> |
| 4954 | 2214 | <year>1993</year> |
| 4955 | 2215 | <publisher>Sammy</publisher> |
| r242703 | r242704 | |
| 4963 | 2223 | </part> |
| 4964 | 2224 | </software> |
| 4965 | 2225 | |
| 2226 | <!-- | |
| 2227 | <software name="beast2"> | |
| 2228 | <description>Shadow of the Beast II - Juushin no Jubaku (Jpn)</description> | |
| 2229 | <year>1994</year> | |
| 2230 | <publisher>Psygnosis</publisher> | |
| 2231 | <part name="cdrom" interface="scd_cdrom"> | |
| 2232 | <diskarea name="cdrom"> | |
| 2233 | <disk name="shadow of the beast ii - juushin no jubaku (1994)(psygnosis)(ntsc)(jp)(en)[!]" sha1="7eef71563194e44b9fc1306d392c306332b13862"/> | |
| 2234 | </diskarea> | |
| 2235 | </part> | |
| 2236 | </software> | |
| 2237 | --> | |
| 2238 | ||
| 4966 | 2239 | <software name="shadowrn"> |
| 4967 | <!-- source toseciso | |
| 4968 | <rom name="Shadowrun (1996)(Compile)(NTSC)(JP)[!].cue" size="407" crc="233c28bf" /> | |
| 4969 | <rom name="Shadowrun (1996)(Compile)(NTSC)(JP)(Track 1 of 3)[!].iso" size="190429184" crc="fa993626" /> | |
| 4970 | <rom name="Shadowrun (1996)(Compile)(NTSC)(JP)(Track 2 of 3)[!].wav" size="15337436" crc="bb86bcc4" /> | |
| 4971 | <rom name="Shadowrun (1996)(Compile)(NTSC)(JP)(Track 3 of 3)[!].wav" size="15690236" crc="27fa7931" /> | |
| 4972 | --> | |
| 4973 | 2240 | <description>Shadowrun (Jpn)</description> |
| 4974 | 2241 | <year>1996</year> |
| 4975 | 2242 | <publisher>Compile</publisher> |
| r242703 | r242704 | |
| 4983 | 2250 | </part> |
| 4984 | 2251 | </software> |
| 4985 | 2252 | |
| 2253 | <!-- | |
| 2254 | <software name="shinmega"> | |
| 2255 | <description>Shin Megami Tensei (Jpn)</description> | |
| 2256 | <year>1994</year> | |
| 2257 | <publisher>SIMS</publisher> | |
| 2258 | <part name="cdrom" interface="scd_cdrom"> | |
| 2259 | <diskarea name="cdrom"> | |
| 2260 | <disk name="shin megami tensei (1994)(sims)(ntsc)(jp)[!]" sha1="30b2146889a12e9ea104773ee4a5885d3aa35b12"/> | |
| 2261 | </diskarea> | |
| 2262 | </part> | |
| 2263 | </software> | |
| 2264 | --> | |
| 2265 | ||
| 2266 | <!-- | |
| 2267 | <software name="sforce"> | |
| 2268 | <description>Shining Force CD (Jpn)</description> | |
| 2269 | <year>1994</year> | |
| 2270 | <publisher>Sega</publisher> | |
| 2271 | <part name="cdrom" interface="scd_cdrom"> | |
| 2272 | <diskarea name="cdrom"> | |
| 2273 | <disk name="shining force cd (1994)(sega)(ntsc)(jp)[!]" sha1="2a4a93187e226ddabbc3d450aebbd74b8d2786bd"/> | |
| 2274 | </diskarea> | |
| 2275 | </part> | |
| 2276 | </software> | |
| 2277 | --> | |
| 2278 | ||
| 2279 | <!-- | |
| 2280 | <software name="silpheed"> | |
| 2281 | <description>Silpheed (Jpn)</description> | |
| 2282 | <year>1993</year> | |
| 2283 | <publisher>Game Arts</publisher> | |
| 2284 | <part name="cdrom" interface="scd_cdrom"> | |
| 2285 | <diskarea name="cdrom"> | |
| 2286 | <disk name="silpheed (1993)(game arts)(ntsc)(jp)(en)[!]" sha1="a15d226758a4fb0466e18870930915d3171f4c38"/> | |
| 2287 | </diskarea> | |
| 2288 | </part> | |
| 2289 | </software> | |
| 2290 | --> | |
| 2291 | ||
| 4986 | 2292 | <software name="simearth"> |
| 4987 | <!-- source toseciso | |
| 4988 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)[!].cue" size="2909" crc="42fbdea2" /> | |
| 4989 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 01 of 22)[!].iso" size="7634944" crc="bf542c7d" /> | |
| 4990 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 02 of 22)[!].wav" size="9692636" crc="0d0f9a33" /> | |
| 4991 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 03 of 22)[!].wav" size="6082316" crc="26ecbf05" /> | |
| 4992 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 04 of 22)[!].wav" size="6802028" crc="42132fc5" /> | |
| 4993 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 05 of 22)[!].wav" size="6722060" crc="1c8589f8" /> | |
| 4994 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 06 of 22)[!].wav" size="7107788" crc="cd061353" /> | |
| 4995 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 07 of 22)[!].wav" size="11934092" crc="fb85e771" /> | |
| 4996 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 08 of 22)[!].wav" size="7721660" crc="548b0409" /> | |
| 4997 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 09 of 22)[!].wav" size="7397084" crc="2a5b8c64" /> | |
| 4998 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 10 of 22)[!].wav" size="7655804" crc="54ea26de" /> | |
| 4999 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 11 of 22)[!].wav" size="6195212" crc="fc08a529" /> | |
| 5000 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 12 of 22)[!].wav" size="6112892" crc="c673be91" /> | |
| 5001 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 13 of 22)[!].wav" size="6087020" crc="00b05710" /> | |
| 5002 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 14 of 22)[!].wav" size="6143468" crc="abde1752" /> | |
| 5003 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 15 of 22)[!].wav" size="14925836" crc="badbc85f" /> | |
| 5004 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 16 of 22)[!].wav" size="19945004" crc="e387ac6c" /> | |
| 5005 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 17 of 22)[!].wav" size="18458540" crc="6f0f4340" /> | |
| 5006 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 18 of 22)[!].wav" size="15116348" crc="13a28f07" /> | |
| 5007 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 19 of 22)[!].wav" size="23698796" crc="5a125499" /> | |
| 5008 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 20 of 22)[!].wav" size="23418908" crc="a62c9683" /> | |
| 5009 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 21 of 22)[!].wav" size="36357260" crc="fcdb7789" /> | |
| 5010 | <rom name="SimEarth (1993)(Sega)(NTSC)(JP)(Track 22 of 22)[!].wav" size="34967228" crc="712bd72b" /> | |
| 5011 | --> | |
| 5012 | 2293 | <description>SimEarth (Jpn)</description> |
| 5013 | 2294 | <year>1993</year> |
| 5014 | 2295 | <publisher>Sega</publisher> |
| r242703 | r242704 | |
| 5022 | 2303 | </part> |
| 5023 | 2304 | </software> |
| 5024 | 2305 | |
| 2306 | <!-- | |
| 2307 | <software name="solfeace"> | |
| 2308 | <description>Sol-Feace (Jpn)</description> | |
| 2309 | <year>1991</year> | |
| 2310 | <publisher>Wolf Team</publisher> | |
| 2311 | <part name="cdrom" interface="scd_cdrom"> | |
| 2312 | <diskarea name="cdrom"> | |
| 2313 | <disk name="sol-feace (1991)(wolf team)(ntsc)(jp)[!]" sha1="8577fcfb09d10b4db296c14da9ee2abdcf55f23b"/> | |
| 2314 | </diskarea> | |
| 2315 | </part> | |
| 2316 | </software> | |
| 2317 | --> | |
| 2318 | ||
| 2319 | <!-- | |
| 2320 | <software name="soniccd"> | |
| 2321 | <description>Sonic The Hedgehog CD (Jpn)</description> | |
| 2322 | <year>1993</year> | |
| 2323 | <publisher>Sega</publisher> | |
| 2324 | <part name="cdrom" interface="scd_cdrom"> | |
| 2325 | <diskarea name="cdrom"> | |
| 2326 | <disk name="sonic the hedgehog cd (1993)(sega)(ntsc)(jp)(en)[!]" sha1="d75d5e737dbad9563521f613457699826994eb75"/> | |
| 2327 | </diskarea> | |
| 2328 | </part> | |
| 2329 | </software> | |
| 2330 | --> | |
| 2331 | ||
| 5025 | 2332 | <software name="soulstar"> |
| 5026 | <!-- source toseciso | |
| 5027 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)[!].cue" size="2351" crc="8d85b3b0" /> | |
| 5028 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 01 of 17)[!].iso" size="92135424" crc="6e37bafd" /> | |
| 5029 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 02 of 17)[!].wav" size="16522844" crc="67040ce2" /> | |
| 5030 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 03 of 17)[!].wav" size="43173356" crc="c8c7bbbb" /> | |
| 5031 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 04 of 17)[!].wav" size="55302620" crc="3bae705e" /> | |
| 5032 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 05 of 17)[!].wav" size="19404044" crc="af71eed4" /> | |
| 5033 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 06 of 17)[!].wav" size="37975436" crc="28059d58" /> | |
| 5034 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 07 of 17)[!].wav" size="39179660" crc="7b4733e4" /> | |
| 5035 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 08 of 17)[!].wav" size="41247068" crc="226f22df" /> | |
| 5036 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 09 of 17)[!].wav" size="43900124" crc="b9d822cb" /> | |
| 5037 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 10 of 17)[!].wav" size="41602220" crc="4651904a" /> | |
| 5038 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 11 of 17)[!].wav" size="21963020" crc="93ac12d7" /> | |
| 5039 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 12 of 17)[!].wav" size="30625436" crc="9a1599b5" /> | |
| 5040 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 13 of 17)[!].wav" size="36035036" crc="d41afbfa" /> | |
| 5041 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 14 of 17)[!].wav" size="7265372" crc="00ea1ee7" /> | |
| 5042 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 15 of 17)[!].wav" size="20177852" crc="21c769ff" /> | |
| 5043 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 16 of 17)[!].wav" size="39080876" crc="70e33a16" /> | |
| 5044 | <rom name="SoulStar (1994)(Victor)(NTSC)(JP)(en)(Track 17 of 17)[!].wav" size="2114492" crc="eb13e846" /> | |
| 5045 | --> | |
| 5046 | 2333 | <description>SoulStar (Jpn)</description> |
| 5047 | 2334 | <year>1994</year> |
| 5048 | 2335 | <publisher>Victor Entertainment</publisher> |
| r242703 | r242704 | |
| 5056 | 2343 | </part> |
| 5057 | 2344 | </software> |
| 5058 | 2345 | |
| 2346 | <!-- | |
| 2347 | <software name="swra"> | |
| 2348 | <description>Star Wars - Rebel Assault (Jpn)</description> | |
| 2349 | <year>1993</year> | |
| 2350 | <publisher>LucasArts</publisher> | |
| 2351 | <part name="cdrom" interface="scd_cdrom"> | |
| 2352 | <diskarea name="cdrom"> | |
| 2353 | <disk name="star wars - rebel assault (1993)(lucasarts)(ntsc)(jp)[!]" sha1="0d4261613520c4f3b5155bead08974dee6060f06"/> | |
| 2354 | </diskarea> | |
| 2355 | </part> | |
| 2356 | </software> | |
| 2357 | --> | |
| 2358 | ||
| 2359 | <!-- | |
| 2360 | <software name="starblad"> | |
| 2361 | <description>StarBlade (Jpn)</description> | |
| 2362 | <year>1994</year> | |
| 2363 | <publisher>Namcot</publisher> | |
| 2364 | <part name="cdrom" interface="scd_cdrom"> | |
| 2365 | <diskarea name="cdrom"> | |
| 2366 | <disk name="starblade (1994)(namcot)(ntsc)(jp)(en)[!]" sha1="cadd7155884e660565abfb6734cd839dc37ff298"/> | |
| 2367 | </diskarea> | |
| 2368 | </part> | |
| 2369 | </software> | |
| 2370 | --> | |
| 2371 | ||
| 2372 | <!-- | |
| 2373 | <software name="switch"> | |
| 2374 | <description>Switch (Jpn)</description> | |
| 2375 | <year>1993</year> | |
| 2376 | <publisher>Sega</publisher> | |
| 2377 | <part name="cdrom" interface="scd_cdrom"> | |
| 2378 | <diskarea name="cdrom"> | |
| 2379 | <disk name="switch (1993)(sega)(ntsc)(jp)[!]" sha1="bc3a574133629eec51a5abd6ca124ee50d047ad5"/> | |
| 2380 | </diskarea> | |
| 2381 | </part> | |
| 2382 | </software> | |
| 2383 | --> | |
| 2384 | ||
| 2385 | <!-- | |
| 2386 | <software name="tenbu"> | |
| 2387 | <description>Tenbu Mega CD Special (Jpn)</description> | |
| 2388 | <year>1992</year> | |
| 2389 | <publisher>Wolf Team</publisher> | |
| 2390 | <part name="cdrom" interface="scd_cdrom"> | |
| 2391 | <diskarea name="cdrom"> | |
| 2392 | <disk name="tenbu mega cd special (1992)(wolf team)(ntsc)(jp)[!]" sha1="8e9e7a524f68333e3c90ad2f61a780181e1673be"/> | |
| 2393 | </diskarea> | |
| 2394 | </part> | |
| 2395 | </software> | |
| 2396 | --> | |
| 2397 | ||
| 2398 | <!-- | |
| 2399 | <software name="tenkafub"> | |
| 2400 | <description>Tenkafubu - Eiyuutachi no Houkou (Jpn)</description> | |
| 2401 | <year>1991</year> | |
| 2402 | <publisher>Game Arts</publisher> | |
| 2403 | <part name="cdrom" interface="scd_cdrom"> | |
| 2404 | <diskarea name="cdrom"> | |
| 2405 | <disk name="tenkafubu - eiyuutachi no houkou (1991)(game arts)(ntsc)(jp)[!]" sha1="6f8e0895512d875c2a8d42fcc698782a0e4bc790"/> | |
| 2406 | </diskarea> | |
| 2407 | </part> | |
| 2408 | </software> | |
| 2409 | --> | |
| 2410 | ||
| 5059 | 2411 | <!-- one of these probably matches the redmup dump --> |
| 5060 | 2412 | <software name="tstormfxa" cloneof="tstormfx"> |
| 5061 | <!-- source toseciso | |
| 5062 | <rom name="Thunder Storm FX (1992)(Wolf Team)(NTSC)(JP)(en)[!][T32064P-00022-R1M].cue" size="337" crc="f1ebb25c" /> | |
| 5063 | <rom name="Thunder Storm FX (1992)(Wolf Team)(NTSC)(JP)(en)(Track 1 of 2)[!][T32064P-00022-R1M].iso" size="225912832" crc="70370315" /> | |
| 5064 | <rom name="Thunder Storm FX (1992)(Wolf Team)(NTSC)(JP)(en)(Track 2 of 2)[!][T32064P-00022-R1M].wav" size="1300700" crc="39b15913" /> | |
| 5065 | --> | |
| 2413 | <!-- Diskring: T32064P-00022-R1M --> | |
| 5066 | 2414 | <description>Thunder Storm FX (Jpn, R1)</description> |
| 5067 | 2415 | <year>19??</year> |
| 5068 | 2416 | <publisher>Sega</publisher> |
| 5069 | 2417 | <info name="serial" value="T-32064"/> |
| 5070 | <info name="disk_ring" value="T32064P-00022-R1M"/> | |
| 5071 | 2418 | <info name="release" value="19920828"/> |
| 5072 | 2419 | <info name="alt_title" value="サンダーストームFX"/> |
| 5073 | 2420 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 5078 | 2425 | </software> |
| 5079 | 2426 | |
| 5080 | 2427 | <software name="tstormfxb" cloneof="tstormfx"> |
| 5081 | <!-- source toseciso | |
| 5082 | <rom name="Thunder Storm FX (1992)(Wolf Team)(NTSC)(JP)(en)[!][T32064P-00022-R2M].cue" size="337" crc="94a23b1f" /> | |
| 5083 | <rom name="Thunder Storm FX (1992)(Wolf Team)(NTSC)(JP)(en)(Track 1 of 2)[!][T32064P-00022-R2M].iso" size="225912832" crc="70370315" /> | |
| 5084 | <rom name="Thunder Storm FX (1992)(Wolf Team)(NTSC)(JP)(en)(Track 2 of 2)[!][T32064P-00022-R2M].wav" size="1300700" crc="e511f436" /> | |
| 5085 | --> | |
| 2428 | <!-- Diskring: T32064P-00022-R2M --> | |
| 5086 | 2429 | <description>Thunder Storm FX (Jpn, R2)</description> |
| 5087 | 2430 | <year>1992</year> |
| 5088 | 2431 | <publisher>Wolf Team</publisher> |
| 5089 | 2432 | <info name="serial" value="T-32064"/> |
| 5090 | <info name="disk_ring" value="T32064P-00022-R2M"/> | |
| 5091 | 2433 | <info name="release" value="19920828"/> |
| 5092 | 2434 | <info name="alt_title" value="サンダーストームFX"/> |
| 5093 | 2435 | <part name="cdrom" interface="scd_cdrom"> |
| r242703 | r242704 | |
| 5097 | 2439 | </part> |
| 5098 | 2440 | </software> |
| 5099 | 2441 | |
| 2442 | <!-- | |
| 2443 | <software name="thawk"> | |
| 2444 | <description>Thunderhawk (Jpn)</description> | |
| 2445 | <year>1993</year> | |
| 2446 | <publisher>Victor Entertainment</publisher> | |
| 2447 | <part name="cdrom" interface="scd_cdrom"> | |
| 2448 | <diskarea name="cdrom"> | |
| 2449 | <disk name="thunderhawk (1993)(victor)(ntsc)(jp)(en)[!]" sha1="670d361364c93c91c4bffd41b1c8e5b178fd7117"/> | |
| 2450 | </diskarea> | |
| 2451 | </part> | |
| 2452 | </software> | |
| 2453 | --> | |
| 2454 | ||
| 2455 | <!-- | |
| 2456 | <software name="timegal"> | |
| 2457 | <description>Time Gal (Jpn)</description> | |
| 2458 | <year>1992</year> | |
| 2459 | <publisher>Wolf Team</publisher> | |
| 2460 | <part name="cdrom" interface="scd_cdrom"> | |
| 2461 | <diskarea name="cdrom"> | |
| 2462 | <disk name="time gal (1992)(wolf team)(ntsc)(jp)(en)[!]" sha1="e494cddd20913e3c1cc3db222028d1533237213d"/> | |
| 2463 | </diskarea> | |
| 2464 | </part> | |
| 2465 | </software> | |
| 2466 | --> | |
| 2467 | ||
| 5100 | 2468 | <software name="tcataly"> |
| 5101 | <!-- source toseciso | |
| 5102 | <rom name="Tomcat Alley (1994)(Sega)(NTSC)(JP)[!].cue" size="273" crc="909b2ba3" /> | |
| 5103 | <rom name="Tomcat Alley (1994)(Sega)(NTSC)(JP)(Track 1 of 2)[!].iso" size="463513600" crc="18499535" /> | |
| 5104 | <rom name="Tomcat Alley (1994)(Sega)(NTSC)(JP)(Track 2 of 2)[!].wav" size="1985132" crc="f5956250" /> | |
| 5105 | --> | |
| 5106 | 2469 | <description>Tomcat Alley (Jpn)</description> |
| 5107 | 2470 | <year>1994</year> |
| 5108 | 2471 | <publisher>Sega</publisher> |
| r242703 | r242704 | |
| 5116 | 2479 | </part> |
| 5117 | 2480 | </software> |
| 5118 | 2481 | |
| 2482 | <!-- | |
| 2483 | <software name="dearfrnd"> | |
| 2484 | <description>Uresei Yatsura - Dear My Friends (Jpn)</description> | |
| 2485 | <year>1994</year> | |
| 2486 | <publisher>Game Arts</publisher> | |
| 2487 | <part name="cdrom" interface="scd_cdrom"> | |
| 2488 | <diskarea name="cdrom"> | |
| 2489 | <disk name="uresei yatsura - dear my friends (1994)(game arts)(ntsc)(jp)[!]" sha1="76738aa0f01492d6fa1800992651f2af2982eb1e"/> | |
| 2490 | </diskarea> | |
| 2491 | </part> | |
| 2492 | </software> | |
| 2493 | --> | |
| 2494 | ||
| 2495 | <!-- | |
| 2496 | <software name="vay"> | |
| 2497 | <description>Vay - Ryuusei no Yoroi (Jpn)</description> | |
| 2498 | <year>1993</year> | |
| 2499 | <publisher>SIMS</publisher> | |
| 2500 | <part name="cdrom" interface="scd_cdrom"> | |
| 2501 | <diskarea name="cdrom"> | |
| 2502 | <disk name="vay - ryuusei no yoroi (1993)(sims)(ntsc)(jp)[!]" sha1="301866d0c88517be656838675a1488edba6990d4"/> | |
| 2503 | </diskarea> | |
| 2504 | </part> | |
| 2505 | </software> | |
| 2506 | --> | |
| 2507 | ||
| 2508 | <!-- | |
| 2509 | <software name="funkband"> | |
| 2510 | <description>Wakusei Woodstock - F.H.B - Funky Horror Band (Jpn)</description> | |
| 2511 | <year>1991</year> | |
| 2512 | <publisher>Sega</publisher> | |
| 2513 | <part name="cdrom" interface="scd_cdrom"> | |
| 2514 | <diskarea name="cdrom"> | |
| 2515 | <disk name="wakusei woodstock - f.h.b - funky horror band (1991)(sega)(ntsc)(jp)[!]" sha1="a6b0239325dba9a4633ed77140d755c5c12a40b9"/> | |
| 2516 | </diskarea> | |
| 2517 | </part> | |
| 2518 | </software> | |
| 2519 | --> | |
| 2520 | ||
| 5119 | 2521 | <software name="salesman"> |
| 5120 | <!-- source toseciso | |
| 5121 | <rom name="Warau Salesman (1993)(Sega)(NTSC)(JP)[!].cue" size="413" crc="a41d3029" /> | |
| 5122 | <rom name="Warau Salesman (1993)(Sega)(NTSC)(JP)(Track 1 of 3)[!].iso" size="307593216" crc="24f74d74" /> | |
| 5123 | <rom name="Warau Salesman (1993)(Sega)(NTSC)(JP)(Track 2 of 3)[!].wav" size="1178396" crc="90aba61c" /> | |
| 5124 | <rom name="Warau Salesman (1993)(Sega)(NTSC)(JP)(Track 3 of 3)[!].wav" size="1526492" crc="2bee0332" /> | |
| 5125 | --> | |
| 5126 | 2522 | <description>Warau Salesman (Jpn)</description> |
| 5127 | 2523 | <year>1993</year> |
| 5128 | 2524 | <publisher>Sega</publisher> |
| r242703 | r242704 | |
| 5136 | 2532 | </part> |
| 5137 | 2533 | </software> |
| 5138 | 2534 | |
| 2535 | <!-- | |
| 2536 | <software name="wingcomm"> | |
| 2537 | <description>Wing Commander (Jpn)</description> | |
| 2538 | <year>1994</year> | |
| 2539 | <publisher>Sega</publisher> | |
| 2540 | <part name="cdrom" interface="scd_cdrom"> | |
| 2541 | <diskarea name="cdrom"> | |
| 2542 | <disk name="wing commander (1994)(sega)(ntsc)(jp)[!]" sha1="77ad90429d49ba8037da6d96c61ef2f686446767"/> | |
| 2543 | </diskarea> | |
| 2544 | </part> | |
| 2545 | </software> | |
| 2546 | --> | |
| 5139 | 2547 | |
| 5140 | <!-- Tosec Demos, Bonus Discs etc. --> | |
| 2548 | <!-- | |
| 2549 | <software name="winningp"> | |
| 2550 | <description>Winning Post (Jpn)</description> | |
| 2551 | <year>1993</year> | |
| 2552 | <publisher>Koei</publisher> | |
| 2553 | <part name="cdrom" interface="scd_cdrom"> | |
| 2554 | <diskarea name="cdrom"> | |
| 2555 | <disk name="winning post (1993)(koei)(ntsc)(jp)[!]" sha1="cce39ec9c81539573b466c78577eec6b83194ff1"/> | |
| 2556 | </diskarea> | |
| 2557 | </part> | |
| 2558 | </software> | |
| 2559 | --> | |
| 5141 | 2560 | |
| 2561 | <!-- | |
| 2562 | <software name="wolfchld"> | |
| 2563 | <description>Wolfchild (Jpn)</description> | |
| 2564 | <year>1993</year> | |
| 2565 | <publisher>Victor Entertainment</publisher> | |
| 2566 | <part name="cdrom" interface="scd_cdrom"> | |
| 2567 | <diskarea name="cdrom"> | |
| 2568 | <disk name="wolfchild (1993)(victor)(ntsc)(jp)(en)[!]" sha1="f63907400a74e8cc1520e9de10f70c1f8f4518e9"/> | |
| 2569 | </diskarea> | |
| 2570 | </part> | |
| 2571 | </software> | |
| 2572 | --> | |
| 2573 | ||
| 2574 | <!-- | |
| 2575 | <software name="wonderdo"> | |
| 2576 | <description>Wonder Dog (Jpn)</description> | |
| 2577 | <year>1991</year> | |
| 2578 | <publisher>Victor Entertainment</publisher> | |
| 2579 | <part name="cdrom" interface="scd_cdrom"> | |
| 2580 | <diskarea name="cdrom"> | |
| 2581 | <disk name="wonder dog (1991)(victor)(ntsc)(jp)(en)[!]" sha1="5640c649cba1cefb1dbbdd213be304f60df8e8fe"/> | |
| 2582 | </diskarea> | |
| 2583 | </part> | |
| 2584 | </software> | |
| 2585 | --> | |
| 2586 | ||
| 2587 | <!-- | |
| 2588 | <software name="yumemi"> | |
| 2589 | <description>Yumemi Yakata no Monogatari (Jpn)</description> | |
| 2590 | <year>1993</year> | |
| 2591 | <publisher>Sega</publisher> | |
| 2592 | <part name="cdrom" interface="scd_cdrom"> | |
| 2593 | <diskarea name="cdrom"> | |
| 2594 | <disk name="yumemi yakata no monogatari (1993)(sega)(ntsc)(jp)[!]" sha1="af5506e29f8b4d451e85201194c56a0fb324345c"/> | |
| 2595 | </diskarea> | |
| 2596 | </part> | |
| 2597 | </software> | |
| 2598 | --> | |
| 2599 | ||
| 2600 | <!-- | |
| 2601 | <software name="yumimimx"> | |
| 2602 | <description>Yumimi Mix (Jpn)</description> | |
| 2603 | <year>1993</year> | |
| 2604 | <publisher>Game Arts</publisher> | |
| 2605 | <part name="cdrom" interface="scd_cdrom"> | |
| 2606 | <diskarea name="cdrom"> | |
| 2607 | <disk name="yumimi mix (1993)(game arts)(ntsc)(jp)[!]" sha1="564e6d5aa8889c69e94a436232d7bc26bce46ec1"/> | |
| 2608 | </diskarea> | |
| 2609 | </part> | |
| 2610 | </software> | |
| 2611 | --> | |
| 2612 | ||
| 2613 | ||
| 2614 | <!-- Tosec Demos, Bonus Discs etc. --> | |
| 5142 | 2615 | <software name="lodossdemo" cloneof="lodoss"> |
| 5143 | <!-- source toseciso | |
| 5144 | <rom name="Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (demo) (1994)(Sega)(NTSC)(JP)[!].cue" size="2595" crc="accdf24a" /> | |
| 5145 | <rom name="Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (demo) (1994)(Sega)(NTSC)(JP)(Track 01 of 14)[!].iso" size="48562176" crc="9efa4d31" /> | |
| 5146 | <rom name="Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (demo) (1994)(Sega)(NTSC)(JP)(Track 02 of 14)[!].wav" size="25862636" crc="09bb43e8" /> | |
| 5147 | <rom name="Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (demo) (1994)(Sega)(NTSC)(JP)(Track 03 of 14)[!].wav" size="25709756" crc="4ac1c4a5" /> | |
| 5148 | <rom name="Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (demo) (1994)(Sega)(NTSC)(JP)(Track 04 of 14)[!].wav" size="1465340" crc="71867226" /> | |
| 5149 | <rom name="Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (demo) (1994)(Sega)(NTSC)(JP)(Track 05 of 14)[!].wav" size="1474748" crc="d80d8fd8" /> | |
| 5150 | <rom name="Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (demo) (1994)(Sega)(NTSC)(JP)(Track 06 of 14)[!].wav" size="23157836" crc="733834cc" /> | |
| 5151 | <rom name="Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (demo) (1994)(Sega)(NTSC)(JP)(Track 07 of 14)[!].wav" size="1467692" crc="1fea8e7f" /> | |
| 5152 | <rom name="Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (demo) (1994)(Sega)(NTSC)(JP)(Track 08 of 14)[!].wav" size="1472396" crc="df15d4de" /> | |
| 5153 | <rom name="Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (demo) (1994)(Sega)(NTSC)(JP)(Track 09 of 14)[!].wav" size="1462988" crc="2ded24fa" /> | |
| 5154 | <rom name="Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (demo) (1994)(Sega)(NTSC)(JP)(Track 10 of 14)[!].wav" size="1477100" crc="cf1c4f4b" /> | |
| 5155 | <rom name="Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (demo) (1994)(Sega)(NTSC)(JP)(Track 11 of 14)[!].wav" size="1467692" crc="380c9a33" /> | |
| 5156 | <rom name="Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (demo) (1994)(Sega)(NTSC)(JP)(Track 12 of 14)[!].wav" size="20304860" crc="f04d931e" /> | |
| 5157 | <rom name="Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (demo) (1994)(Sega)(NTSC)(JP)(Track 13 of 14)[!].wav" size="1472396" crc="993eaa8f" /> | |
| 5158 | <rom name="Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (demo) (1994)(Sega)(NTSC)(JP)(Track 14 of 14)[!].wav" size="20638844" crc="8a53ec78" /> | |
| 5159 | --> | |
| 5160 | 2616 | <description>Lodoss Tou Senki - Eiyuu Sensou - Record of Lodoss War (Jpn, Demo)</description> |
| 5161 | 2617 | <year>1994</year> |
| 5162 | 2618 | <publisher>Sega</publisher> |
| r242703 | r242704 | |
| 5168 | 2624 | </software> |
| 5169 | 2625 | |
| 5170 | 2626 | <software name="lunar2bonus" cloneof="lunar2"> |
| 5171 | <!-- source toseciso | |
| 5172 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(Jp)[!][Premium CD][audio cd].cue" size="753" crc="7c1d7a67" /> | |
| 5173 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(Jp)(Track 1 of 5)[!][Premium CD][audio cd].wav" size="37526204" crc="50cfddcd" /> | |
| 5174 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(Jp)(Track 2 of 5)[!][Premium CD][audio cd].wav" size="38008364" crc="d7e9806a" /> | |
| 5175 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(Jp)(Track 3 of 5)[!][Premium CD][audio cd].wav" size="17658860" crc="90959652" /> | |
| 5176 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(Jp)(Track 4 of 5)[!][Premium CD][audio cd].wav" size="64308428" crc="955cbf79" /> | |
| 5177 | <rom name="Lunar - Eternal Blue (1994)(Game Arts)(NTSC)(Jp)(Track 5 of 5)[!][Premium CD][audio cd].wav" size="12642044" crc="59c495bf" /> | |
| 5178 | --> | |
| 5179 | 2627 | <description>Lunar - Eternal Blue - Premium CD (Jpn) [CD-Audio]</description> |
| 5180 | 2628 | <year>1994</year> |
| 5181 | 2629 | <publisher>Game Arts</publisher> |
| r242703 | r242704 | |
| 5188 | 2636 | </software> |
| 5189 | 2637 | |
| 5190 | 2638 | <software name="nost1907bonus" cloneof="nost1907"> |
| 5191 | <!-- source toseciso | |
| 5192 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)[!][Original Sound Track Ver. 2][audio cd].cue" size="2969" crc="3fc1b976" /> | |
| 5193 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)(Track 01 of 15)[!][Original Sound Track Ver. 2][audio cd].wav" size="29769308" crc="fd99238a" /> | |
| 5194 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)(Track 02 of 15)[!][Original Sound Track Ver. 2][audio cd].wav" size="33781820" crc="a3137716" /> | |
| 5195 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)(Track 03 of 15)[!][Original Sound Track Ver. 2][audio cd].wav" size="70160204" crc="86b5a51e" /> | |
| 5196 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)(Track 04 of 15)[!][Original Sound Track Ver. 2][audio cd].wav" size="71329148" crc="ae84c8ad" /> | |
| 5197 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)(Track 05 of 15)[!][Original Sound Track Ver. 2][audio cd].wav" size="29964524" crc="73457464" /> | |
| 5198 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)(Track 06 of 15)[!][Original Sound Track Ver. 2][audio cd].wav" size="41265884" crc="7c233005" /> | |
| 5199 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)(Track 07 of 15)[!][Original Sound Track Ver. 2][audio cd].wav" size="22144124" crc="c540a60a" /> | |
| 5200 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)(Track 08 of 15)[!][Original Sound Track Ver. 2][audio cd].wav" size="37568540" crc="c5c047d4" /> | |
| 5201 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)(Track 09 of 15)[!][Original Sound Track Ver. 2][audio cd].wav" size="71611388" crc="d610033e" /> | |
| 5202 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)(Track 10 of 15)[!][Original Sound Track Ver. 2][audio cd].wav" size="32316524" crc="ff57b339" /> | |
| 5203 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)(Track 11 of 15)[!][Original Sound Track Ver. 2][audio cd].wav" size="21520844" crc="66d93969" /> | |
| 5204 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)(Track 12 of 15)[!][Original Sound Track Ver. 2][audio cd].wav" size="12119900" crc="db6a8fc7" /> | |
| 5205 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)(Track 13 of 15)[!][Original Sound Track Ver. 2][audio cd].wav" size="22155884" crc="c182fb37" /> | |
| 5206 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)(Track 14 of 15)[!][Original Sound Track Ver. 2][audio cd].wav" size="20655308" crc="ee061041" /> | |
| 5207 | <rom name="Nostalgia 1907 in North Atlantic Sea (1991)(Takeru)(NTSC)(Jp)(Track 15 of 15)[!][Original Sound Track Ver. 2][audio cd].wav" size="24021020" crc="b25d006c" /> | |
| 5208 | --> | |
| 5209 | 2639 | <description>Nostalgia 1907 in North Atlantic Sea - Original Sound Track Ver. 2 (Jpn) [CD-Audio]</description> |
| 5210 | 2640 | <year>1992</year> |
| 5211 | 2641 | <publisher>Takeru</publisher> |
| r242703 | r242704 | |
| 5217 | 2647 | </software> |
| 5218 | 2648 | |
| 5219 | 2649 | <software name="tenbubonus" cloneof="tenbu"> |
| 5220 | <!-- source toseciso | |
| 5221 | <rom name="Tenbu Mega CD Special (1992)(Wolf Team)(NTSC)(Jp)[!][audio cd].cue" size="316" crc="6d4e8500" /> | |
| 5222 | <rom name="Tenbu Mega CD Special (1992)(Wolf Team)(NTSC)(Jp)(Track 1 of 2)[!][audio cd].wav" size="39765308" crc="0a7b2e1e" /> | |
| 5223 | <rom name="Tenbu Mega CD Special (1992)(Wolf Team)(NTSC)(Jp)(Track 2 of 2)[!][audio cd].wav" size="47239964" crc="d41f2e03" /> | |
| 5224 | --> | |
| 5225 | 2650 | <description>Tenbu Mega CD Special (Jpn) [CD-Audio]</description> |
| 5226 | 2651 | <year>1992</year> |
| 5227 | 2652 | <publisher>Wolf Team</publisher> |
| r242703 | r242704 | |
| 5233 | 2658 | </part> |
| 5234 | 2659 | </software> |
| 5235 | 2660 | |
| 5236 | ||
| 5237 | 2661 | <!-- Misc sourced dumps --> |
| 5238 | 2662 | |
| 5239 | 2663 | <software name="sing"> |
| r242703 | r242704 | |
|---|---|---|
| 119 | 119 | <feature name="u2" value="FANTASTIC DIZZY MD MDFD BB07"/> <!-- location not really marked on PCB, using u2 for consistency --> |
| 120 | 120 | <feature name="left" value="GD74HC00"/> |
| 121 | 121 | <feature name="right" value="GD74HC74"/> |
| 122 | <dataarea name="rom" width="16" endianness="big" size="4194304"> | |
| 123 | <rom name="fantastic dizzy md mdfd bb07.u2" size="524288" crc="46447e7a" sha1="b320174d3b43f30b477818a27b4da30462a52003" offset="0x000000"/> | |
| 124 | <rom name="cosmic spacehead md mdcs e4f7.u1" size="1048576" crc="cb89e605" sha1="b5bc4a786639d1b8ae6de76f40dbe907b3f0b642" offset="0x200000"/> | |
| 122 | <dataarea name="rom" width="16" endianness="big" size="2621440"> | |
| 123 | <rom name="cosmic spacehead md mdcs e4f7.u1" size="1048576" crc="cb89e605" sha1="b5bc4a786639d1b8ae6de76f40dbe907b3f0b642" offset="0x000000"/> | |
| 124 | <rom name="fantastic dizzy md mdfd bb07.u2" size="524288" crc="46447e7a" sha1="b320174d3b43f30b477818a27b4da30462a52003" offset="0x200000"/> | |
| 125 | 125 | </dataarea> |
| 126 | 126 | </part> |
| 127 | 127 | </software> |
| r242703 | r242704 | |
| 9602 | 9602 | <publisher>Codemasters</publisher> |
| 9603 | 9603 | <part name="cart" interface="megadriv_cart"> |
| 9604 | 9604 | <feature name="slot" value="rom_cm2in1"/> |
| 9605 | <dataarea name="rom" width="16" endianness="big" size=" | |
| 9605 | <dataarea name="rom" width="16" endianness="big" size="2621440"> | |
| 9606 | 9606 | <rom name="mdppf821.bin" size="2097152" crc="32dd8351" sha1="928f46ca87886c6e72d10f7c9db29b09e483bc49" offset="0x000000"/> |
| 9607 | 9607 | <rom name="mdmm acd3.bin" size="524288" crc="50081a0b" sha1="56a8844c376f2e79e92cf128681fa3fef81c36d6" offset="0x200000"/> |
| 9608 | 9608 | </dataarea> |
| r242703 | r242704 | |
| 17508 | 17508 | </part> |
| 17509 | 17509 | </software> |
| 17510 | 17510 | |
| 17511 | <software name="linkdrgn"> | |
| 17512 | <description>Link Dragon</description> | |
| 17513 | <year>1993</year> | |
| 17514 | <publisher>Songtly</publisher> | |
| 17515 | <info name="alt_title" value="Long (Box?)"/> | |
| 17511 | <software name="long"> | |
| 17512 | <description>Long (Chi)</description> | |
| 17513 | <year>199?</year> | |
| 17514 | <publisher><unlicensed></publisher> | |
| 17516 | 17515 | <part name="cart" interface="megadriv_cart"> |
| 17517 | 17516 | <dataarea name="rom" width="16" endianness="big" size="262144"> |
| 17518 | <rom name="l | |
| 17517 | <rom name="long (chi) (unl).bin" size="262144" crc="1b86e623" sha1="09e4b59da3344f16ce6173c432c88ee9a12a3561" offset="0x000000"/> | |
| 17519 | 17518 | </dataarea> |
| 17520 | 17519 | </part> |
| 17521 | 17520 | </software> |
| r242703 | r242704 | |
| 30174 | 30173 | </part> |
| 30175 | 30174 | </software> |
| 30176 | 30175 | |
| 30177 | <software name="tankwar"> | |
| 30178 | <description>Super Tank War</description> | |
| 30179 | <year>199?</year> | |
| 30180 | <publisher>Gamtec</publisher> | |
| 30181 | <part name="cart" interface="megadriv_cart"> | |
| 30182 | <dataarea name="rom" width="16" endianness="big" size="262144"> | |
| 30183 | <rom name="super tank war (unlicensed) [raw dump].bin" size="262144" crc="5e519ea1" sha1="7e00475f99035fb20f624a7fe0d6bb77c7e834b1" offset="0x000000"/> | |
| 30184 | </dataarea> | |
| 30185 | </part> | |
| 30186 | </software> | |
| 30187 | 30176 | |
| 30188 | ||
| 30189 | 30177 | <!-- Other Dumps to be sorted --> |
| 30190 | 30178 | |
| 30191 | 30179 | <software name="dynoblaz"> |
| r242703 | r242704 | |
|---|---|---|
| 3 | 3 | |
| 4 | 4 | <softwarelist name="mtx_cass" description="Memotech MTX cassettes"> |
| 5 | 5 | |
| 6 | <!-- | |
| 6 | <!-- | |
| 7 | 7 | TODO: find out why the driver does not recognize the program on the tapes... |
| 8 | 8 | --> |
| 9 | 9 |
| r242703 | r242704 | |
|---|---|---|
| 3084 | 3084 | </part> |
| 3085 | 3085 | </software> |
| 3086 | 3086 | |
| 3087 | <software name="conkerp" cloneof="conker" supported="no"> | |
| 3088 | <description>Conker's Bad Fur Day (Prototype Debug)</description> | |
| 3089 | <year>2001?</year> | |
| 3090 | <publisher>Rare</publisher> | |
| 3091 | <part name="cart" interface="n64_cart"> | |
| 3092 | <dataarea name="rom" size="67108864"> | |
| 3093 | <rom name="conkers bfd debug_ec.bin" size="67108864" crc="8443ff39" sha1="8b0952b9d13d2f082badfb587a97f2762600cd14" offset="0" /> | |
| 3094 | </dataarea> | |
| 3095 | </part> | |
| 3096 | </software> | |
| 3097 | ||
| 3098 | <software name="conkerd" cloneof="conker" supported="no"> | |
| 3099 | <description>Conker's Bad Fur Day (ECTS Demo)</description> | |
| 3100 | <year>2001?</year> | |
| 3101 | <publisher>Rare</publisher> | |
| 3102 | <part name="cart" interface="n64_cart"> | |
| 3103 | <dataarea name="rom" size="67108864"> | |
| 3104 | <rom name="conkers bfd ects demo_ec.bin" size="67108864" crc="99b3c27a" sha1="3bf1f052ce728ad77971efd4882ec8e18b7bf9a3" offset="0" /> | |
| 3105 | </dataarea> | |
| 3106 | </part> | |
| 3107 | </software> | |
| 3108 | ||
| 3109 | <!-- | |
| 3110 | Note from marshallh about the dongle present in the Rare proto/demo above | |
| 3111 | "The dongle is a pass-through, except that there is an Altera | |
| 3112 | MAX7000 series CPLD intercepting the AD16 bus. This lets | |
| 3113 | all normal bus transactions through, but in the special case | |
| 3114 | mentioned below, takes control of the bus and gives its own data." | |
| 3115 | ||
| 3116 | We currently don't emulate this, and thus we include also versions where the dongle checks have been | |
| 3117 | patched out (+ a fix for internal checksum) | |
| 3118 | --> | |
| 3119 | ||
| 3120 | <software name="conkerph" cloneof="conker" supported="no"> | |
| 3121 | <description>Conker's Bad Fur Day (Prototype Debug, Decrypted)</description> | |
| 3122 | <year>2001?</year> | |
| 3123 | <publisher>Rare</publisher> | |
| 3124 | <part name="cart" interface="n64_cart"> | |
| 3125 | <dataarea name="rom" size="67108864"> | |
| 3126 | <rom name="bfd_ntsc_debug_dc.bin" size="67108864" crc="c9822f5c" sha1="6956bd77351a91cdd22af454a8d410a3b9c829f0" offset="0" /> | |
| 3127 | </dataarea> | |
| 3128 | </part> | |
| 3129 | </software> | |
| 3130 | ||
| 3131 | <software name="conkerdh" cloneof="conker" supported="no"> | |
| 3132 | <description>Conker's Bad Fur Day (ECTS Demo, Decrypted)</description> | |
| 3133 | <year>2001?</year> | |
| 3134 | <publisher>Rare</publisher> | |
| 3135 | <part name="cart" interface="n64_cart"> | |
| 3136 | <dataarea name="rom" size="67108864"> | |
| 3137 | <rom name="conker_bfd_ects_dc.bin" size="67108864" crc="af9c5972" sha1="92575eed941324b9cd7d29df61e720b04d8b26cb" offset="0" /> | |
| 3138 | </dataarea> | |
| 3139 | </part> | |
| 3140 | </software> | |
| 3141 | ||
| 3142 | 3087 | <software name="crusnexo"> |
| 3143 | 3088 | <description>Cruis'n Exotica (USA)</description> |
| 3144 | 3089 | <year>2000</year> |
| r242703 | r242704 | |
| 7833 | 7778 | </part> |
| 7834 | 7779 | </software> |
| 7835 | 7780 | |
| 7836 | <software name="pdarkp" cloneof="pdark"> | |
| 7837 | <description>Perfect Dark (Euro, Prototype Debug)</description> | |
| 7838 | <year>2000</year> | |
| 7839 | <publisher>Nintendo</publisher> | |
| 7840 | <part name="cart" interface="n64_cart"> | |
| 7841 | <dataarea name="rom" size="33554432"> | |
| 7842 | <rom name="perfect dark eur debug.bin" size="33554432" crc="5c6ac287" sha1="278cec1806eb39690cd2a3ae4838cfa8b8e630d2" offset="0" /> | |
| 7843 | </dataarea> | |
| 7844 | </part> | |
| 7845 | </software> | |
| 7846 | ||
| 7847 | <software name="pdarkup" cloneof="pdark" supported="no"> | |
| 7848 | <description>Perfect Dark (USA, Prototype Debug)</description> | |
| 7849 | <year>2000</year> | |
| 7850 | <publisher>Nintendo</publisher> | |
| 7851 | <part name="cart" interface="n64_cart"> | |
| 7852 | <dataarea name="rom" size="67108864"> | |
| 7853 | <rom name="perfect dark ntsc debug_ec.bin" size="67108864" crc="571ca36e" sha1="578eef928e7f93310288ea1e319dc1d00dee51fa" offset="0" /> | |
| 7854 | </dataarea> | |
| 7855 | </part> | |
| 7856 | </software> | |
| 7857 | ||
| 7858 | <!-- | |
| 7859 | The original cart contained an Altera MAX7000 series CPLD intercepting the AD16 bus, acting as a dongle | |
| 7860 | (see notes about Conker above). | |
| 7861 | We currently don't emulate this, and thus we include also this version where the dongle checks have been | |
| 7862 | patched out (+ a fix for internal checksum) | |
| 7863 | --> | |
| 7864 | <software name="pdarkuph" cloneof="pdark"> | |
| 7865 | <description>Perfect Dark (USA, Prototype Debug, Decrypted)</description> | |
| 7866 | <year>2000</year> | |
| 7867 | <publisher>Nintendo</publisher> | |
| 7868 | <part name="cart" interface="n64_cart"> | |
| 7869 | <dataarea name="rom" size="33554432"> | |
| 7870 | <rom name="pd_ntsc_debug_dc.bin" size="33554432" crc="0ea2645f" sha1="40c60733840ee68ac60f0c951055c942a2573bfc" offset="0" /> | |
| 7871 | </dataarea> | |
| 7872 | </part> | |
| 7873 | </software> | |
| 7874 | ||
| 7875 | 7781 | <software name="pgaeurou" cloneof="pgaeuro"> |
| 7876 | 7782 | <description>PGA European Tour (USA)</description> |
| 7877 | 7783 | <year>2000</year> |
| r242703 | r242704 | |
|---|---|---|
| 438 | 438 | <dataarea name="mcu" size="0x2000"> |
| 439 | 439 | <!-- Hitachi HD6301V1 MCU --> |
| 440 | 440 | <rom offset="0x000000" size="0x02000" name="rhcom.bin" crc="e5cd6306" sha1="f6bbb8ae562804d67e137290c765c3589fa334c0" /> |
| 441 | ||
| 441 | <!-- dumped from a prototype with external ROM, not 100% confirmed as being the same on a final, or other games (lbowling, trally) --> | |
| 442 | 442 | </dataarea> |
| 443 | 443 | <dataarea name="fixed" size="0x040000"> |
| 444 | 444 | <rom offset="0x000000" size="0x020000" name="006-s1.s1" crc="eb5189f0" sha1="0239c342ea62e73140a2306052f226226461a478" /> |
| r242703 | r242704 | |
| 491 | 491 | <dataarea name="mcu" size="0x2000"> |
| 492 | 492 | <!-- Hitachi HD6301V1 MCU --> |
| 493 | 493 | <rom offset="0x000000" size="0x02000" name="rhcom.bin" crc="e5cd6306" sha1="f6bbb8ae562804d67e137290c765c3589fa334c0" /> |
| 494 | ||
| 494 | <!-- dumped from a prototype with external ROM, not 100% confirmed as being the same on a final, or other games (lbowling, trally) --> | |
| 495 | 495 | </dataarea> |
| 496 | 496 | <dataarea name="fixed" size="0x040000"> |
| 497 | 497 | <rom offset="0x000000" size="0x020000" name="006-s1.s1" crc="eb5189f0" sha1="0239c342ea62e73140a2306052f226226461a478" /> |
| r242703 | r242704 | |
|---|---|---|
| 76632 | 76632 | <year>19??</year> |
| 76633 | 76633 | <publisher><pirate></publisher> |
| 76634 | 76634 | <part name="cart" interface="nes_cart"> |
| 76635 | <feature name="slot" value="bmc_hik300" /> | |
| 76635 | <feature name="slot" value="bmc_hik300" /> <!-- mapper says 217 but it's not gc6in1 either! --> | |
| 76636 | 76636 | <dataarea name="chr" size="65536"> |
| 76637 | 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 | 76638 | </dataarea> |
| r242703 | r242704 | |
| 76647 | 76647 | <year>19??</year> |
| 76648 | 76648 | <publisher><pirate></publisher> |
| 76649 | 76649 | <part name="cart" interface="nes_cart"> |
| 76650 | <feature name="slot" value="bmc_hik300" /> | |
| 76650 | <feature name="slot" value="bmc_hik300" /> <!-- mapper says 217 but it's not gc6in1 either! --> | |
| 76651 | 76651 | <dataarea name="chr" size="65536"> |
| 76652 | 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 | 76653 | </dataarea> |
| r242703 | r242704 | |
| 77576 | 77576 | <year>19??</year> |
| 77577 | 77577 | <publisher><pirate></publisher> |
| 77578 | 77578 | <part name="cart" interface="nes_cart"> |
| 77579 | <feature name="slot" value="bmc_hik300" /> | |
| 77579 | <feature name="slot" value="bmc_hik300" /> <!-- mapper says 217 but it's not gc6in1 either! --> | |
| 77580 | 77580 | <dataarea name="chr" size="65536"> |
| 77581 | 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 | 77582 | </dataarea> |
| r242703 | r242704 | |
|---|---|---|
| 46805 | 46805 | </part> |
| 46806 | 46806 | </software> |
| 46807 | 46807 | |
| 46808 | <software name="loopyq"> | |
| 46809 | <description>LoopyQ</description> | |
| 46810 | <year>1992</year> | |
| 46811 | <publisher>日本ソフテック (Nihon Softec)</publisher> | |
| 46812 | <info name="alt_title" value="ルービーQ" /> | |
| 46813 | <info name="release" value="19921119" /> | |
| 46814 | <part name="flop1" interface="floppy_5_25"> | |
| 46815 | <dataarea name="flop" size="1261568"> | |
| 46816 | <rom name="loopyq.hdm" size="1261568" crc="5aaf0dc8" sha1="d9720bc05f91354187ff362ceefe43d81234f84d" offset="0" /> | |
| 46817 | </dataarea> | |
| 46818 | </part> | |
| 46819 | </software> | |
| 46820 | ||
| 46821 | 46808 | <software name="lotus123" supported="no"> |
| 46822 | 46809 | <description>Lotus 1-2-3 (Demo)</description> |
| 46823 | 46810 | <year>19??</year> |
| r242703 | r242704 | |
| 49276 | 49263 | </part> |
| 49277 | 49264 | </software> |
| 49278 | 49265 | |
| 49279 | <software name="ultrasak"> | |
| 49280 | <description>Ultra Sakusen - Kagaku Tokusoutai Shutsugeki Seyo!</description> | |
| 49281 | <year>1992</year> | |
| 49282 | <publisher>バンプレスト (Banpresto)</publisher> | |
| 49283 | <info name="alt_title" value="ウルトラ作戦 科学特捜隊出撃せよ!" /> | |
| 49284 | <info name="release" value="19921208" /> | |
| 49285 | <part name="flop1" interface="floppy_5_25"> | |
| 49286 | <feature name="part_id" value="System Disk"/> | |
| 49287 | <dataarea name="flop" size="1261568"> | |
| 49288 | <rom name="system.hdm" size="1261568" crc="ad35a329" sha1="db8f34d1b126dad253e44035cf295248dd8c1d1c" offset="0" /> | |
| 49289 | </dataarea> | |
| 49290 | </part> | |
| 49291 | <part name="flop2" interface="floppy_5_25"> | |
| 49292 | <feature name="part_id" value="Disk A"/> | |
| 49293 | <dataarea name="flop" size="1261568"> | |
| 49294 | <rom name="a.hdm" size="1261568" crc="8daf39f0" sha1="53a1f3290b2cd07b72fb42eb970b0120106b76fd" offset="0" /> | |
| 49295 | </dataarea> | |
| 49296 | </part> | |
| 49297 | <part name="flop3" interface="floppy_5_25"> | |
| 49298 | <feature name="part_id" value="Disk B"/> | |
| 49299 | <dataarea name="flop" size="1261568"> | |
| 49300 | <rom name="b.hdm" size="1261568" crc="bc7ebede" sha1="b6cc7d3d18198deb918556eaefb422c3f9311148" offset="0" /> | |
| 49301 | </dataarea> | |
| 49302 | </part> | |
| 49303 | <part name="flop4" interface="floppy_5_25"> | |
| 49304 | <feature name="part_id" value="Disk C"/> | |
| 49305 | <dataarea name="flop" size="1261568"> | |
| 49306 | <rom name="c.hdm" size="1261568" crc="1513def4" sha1="fabc4016c6f38e98a36a6a8b04e9e8b6a21a9599" offset="0" /> | |
| 49307 | </dataarea> | |
| 49308 | </part> | |
| 49309 | <part name="flop5" interface="floppy_5_25"> | |
| 49310 | <feature name="part_id" value="Disk D"/> | |
| 49311 | <dataarea name="flop" size="1261568"> | |
| 49312 | <rom name="d.hdm" size="1261568" crc="dfa1fbd2" sha1="22bbc1bfcbef5807241a3958a3773c959948b209" offset="0" /> | |
| 49313 | </dataarea> | |
| 49314 | </part> | |
| 49315 | <part name="flop6" interface="floppy_5_25"> | |
| 49316 | <feature name="part_id" value="Disk E"/> | |
| 49317 | <dataarea name="flop" size="1261568"> | |
| 49318 | <rom name="e.hdm" size="1261568" crc="553015ef" sha1="085e87a73ccc767ff157e0ef8342fc2dd3a69217" offset="0" /> | |
| 49319 | </dataarea> | |
| 49320 | </part> | |
| 49321 | <part name="flop7" interface="floppy_5_25"> | |
| 49322 | <feature name="part_id" value="Disk F"/> | |
| 49323 | <dataarea name="flop" size="1261568"> | |
| 49324 | <rom name="f.hdm" size="1261568" crc="1e0680ce" sha1="52fb9ecd5edab9c8f653330699849ad075344cbb" offset="0" /> | |
| 49325 | </dataarea> | |
| 49326 | </part> | |
| 49327 | </software> | |
| 49328 | ||
| 49329 | 49266 | <software name="vermiln" supported="no"> |
| 49330 | 49267 | <description>Vermilion</description> |
| 49331 | 49268 | <year>1990</year> |
| r242703 | r242704 | |
|---|---|---|
| 736 | 736 | <publisher>Samsung</publisher> |
| 737 | 737 | <info name="serial" value="T-102021-08 ~ PICO-9507S"/> |
| 738 | 738 | <part name="cart" interface="pico_cart"> |
| 739 | <feature name="pcb" value="??" /> | |
| 739 | <feature name="pcb" value="??" /> <!-- non-Sega PCB, probably by Samsung --> | |
| 740 | 740 | <feature name="ic1" value="PICO-9507S" /> |
| 741 | 741 | <dataarea name="rom" size="524288"> |
| 742 | 742 | <rom name="pico-9507s.ic1" size="524288" crc="042520ce" sha1="5dd748a1bdfc661d0b96f6a1d26babc6a0ae7f2d" offset="000000" loadflag="load16_word_swap" /> |
| r242703 | r242704 | |
|---|---|---|
| 868 | 868 | </software> |
| 869 | 869 | |
| 870 | 870 | <!-- |
| 871 | The labelling of Hi-Com multigame carts is arbitrary. The boxes appears to what was intended as unique product number | |
| 872 | but boxes are typically mixed up and patched with stickers added to change game titles (on both boxes and cartridges) | |
| 873 | making the product number rather unreliable AND realistically we may never find out the correct numbers. | |
| 871 | The labelling of Hi-Com multigame carts is arbitrary. The boxes appears to what was intended as unique product number | |
| 872 | but boxes are typically mixed up and patched with stickers added to change game titles (on both boxes and cartridges) | |
| 873 | making the product number rather unreliable AND realistically we may never find out the correct numbers. | |
| 874 | 874 | --> |
| 875 | 875 | <software name="hicom3a"> |
| 876 | 876 | <description>The Best Game Collection - Hang On + Pit Pot + Spy vs Spy (Kor)</description> |
| r242703 | r242704 | |
|---|---|---|
| 67 | 67 | <software name="solprint" supported="no"> |
| 68 | 68 | <description>Sol Printer I/O Software P/N 727056, Rev. A</description> |
| 69 | 69 | <year>19??</year> |
| 70 | <publisher>Processor Technology Corp | |
| 70 | <publisher>Processor Technology Corp.</publisher> | |
| 71 | 71 | |
| 72 | 72 | <part name="cass1" interface="sol20_cass"> |
| 73 | 73 | <dataarea name="cass" size="56307"> |
| r242703 | r242704 | |
| 145 | 145 | <software name="als8"> |
| 146 | 146 | <description>ALS-8 program development system</description> |
| 147 | 147 | <year>1977</year> |
| 148 | <publisher>Processor Technol | |
| 148 | <publisher>Processor Technolgy Corp.</publisher> | |
| 149 | 149 | |
| 150 | 150 | <part name="cass1" interface="sol20_cass"> |
| 151 | 151 | <dataarea name="cass" size="7142712"> |
| r242703 | r242704 | |
| 166 | 166 | <software name="atc"> |
| 167 | 167 | <description>Air Traffic Control</description> |
| 168 | 168 | <year>1978</year> |
| 169 | <publisher> | |
| 169 | <publisher>Processor Technolgy</publisher> | |
| 170 | 170 | |
| 171 | 171 | <part name="cass1" interface="sol20_cass"> |
| 172 | 172 | <dataarea name="cass" size="2457454"> |
| r242703 | r242704 | |
| 182 | 182 | MTCHS B 1AD9 034D ;21 matches; you play against the computer; last one to pick up a match loses |
| 183 | 183 | LUNAR B 1AD9 0953 ;Traditional text lunar lander |
| 184 | 184 | |
| 185 | In SOLOS moni | |
| 185 | In SOLOS moniotr "XEQ BASIC" to load/autorun or "GET BASIC" and then "EXEC 0". | |
| 186 | 186 | In BASIC program "XEQ MTCHS" to load/autorun or "GET MTCHS" and then "RUN". |
| 187 | 187 | In BASIC program "XEQ LUNAR" to load/autorun or "GET LUNAR" and then "RUN". (see note below) |
| 188 | 188 | |
| r242703 | r242704 | |
| 196 | 196 | <software name="basic5"> |
| 197 | 197 | <description>Sol BASIC/5</description> |
| 198 | 198 | <year>1977</year> |
| 199 | <publisher>Processor Technol | |
| 199 | <publisher>Processor Technolgy Corp.</publisher> | |
| 200 | 200 | |
| 201 | 201 | <part name="cass1" interface="sol20_cass"> |
| 202 | 202 | <dataarea name="cass" size="9203116"> |
| r242703 | r242704 | |
| 223 | 223 | <software name="chess"> |
| 224 | 224 | <description>8080 Chess Cassette; P/N 727152</description> |
| 225 | 225 | <year>19??</year> |
| 226 | <publisher>Processor Technol | |
| 226 | <publisher>Processor Technolgy Corp.</publisher> | |
| 227 | 227 | |
| 228 | 228 | <part name="cass1" interface="sol20_cass"> |
| 229 | 229 | <dataarea name="cass" size="5558420"> |
| r242703 | r242704 | |
| 251 | 251 | <software name="debug"> |
| 252 | 252 | <description>DEBUG, Advanced 8080 Debugger; P/N 727132</description> |
| 253 | 253 | <year>1978</year> |
| 254 | <publisher>Processor Technol | |
| 254 | <publisher>Processor Technolgy Corp.</publisher> | |
| 255 | 255 | |
| 256 | 256 | <part name="cass1" interface="sol20_cass"> |
| 257 | 257 | <dataarea name="cass" size="20877642"> |
| r242703 | r242704 | |
| 275 | 275 | <software name="edit"> |
| 276 | 276 | <description>EDIT, Advanced 8080 Editor; P/N 727142</description> |
| 277 | 277 | <year>1978</year> |
| 278 | <publisher>Processor Technol | |
| 278 | <publisher>Processor Technolgy Corp.</publisher> | |
| 279 | 279 | |
| 280 | 280 | <part name="cass1" interface="sol20_cass"> |
| 281 | 281 | <dataarea name="cass" size="8538414"> |
| r242703 | r242704 | |
| 307 | 307 | <software name="extbasic"> |
| 308 | 308 | <description>Extended Cassette BASIC; P/N 727019</description> |
| 309 | 309 | <year>1977</year> |
| 310 | <publisher>Processor Technol | |
| 310 | <publisher>Processor Technolgy Corp.</publisher> | |
| 311 | 311 | |
| 312 | 312 | <part name="cass1" interface="sol20_cass"> |
| 313 | 313 | <dataarea name="cass" size="13985418"> |
| r242703 | r242704 | |
| 346 | 346 | <software name="focal"> |
| 347 | 347 | <description>8080 Cassette Focal(tm); P/N 727027</description> |
| 348 | 348 | <year>1978</year> |
| 349 | <publisher>Processor Technol | |
| 349 | <publisher>Processor Technolgy Corp.</publisher> | |
| 350 | 350 | |
| 351 | 351 | <part name="cass1" interface="sol20_cass"> |
| 352 | 352 | <dataarea name="cass" size="6722676"> |
| r242703 | r242704 | |
| 370 | 370 | <software name="gamepac1"> |
| 371 | 371 | <description>GAMEPAC 1</description> |
| 372 | 372 | <year>1977</year> |
| 373 | <publisher>Processor Technol | |
| 373 | <publisher>Processor Technolgy Corp.</publisher> | |
| 374 | 374 | |
| 375 | 375 | <part name="cass1" interface="sol20_cass"> |
| 376 | 376 | <dataarea name="cass" size="4619686"> |
| r242703 | r242704 | |
| 392 | 392 | <software name="gamepac2"> |
| 393 | 393 | <description>GAMEPAC 2</description> |
| 394 | 394 | <year>1978</year> |
| 395 | <publisher>Processor Technol | |
| 395 | <publisher>Processor Technolgy Corp.</publisher> | |
| 396 | 396 | |
| 397 | 397 | <part name="cass1" interface="sol20_cass"> |
| 398 | 398 | <dataarea name="cass" size="5118738"> |
| r242703 | r242704 | |
| 442 | 442 | <software name="music"> |
| 443 | 443 | <description>Music System</description> |
| 444 | 444 | <year>1977</year> |
| 445 | <publisher>Software Technology</publisher> | |
| 445 | <publisher>Software Technology Corp.</publisher> | |
| 446 | 446 | |
| 447 | 447 | <part name="cass1" interface="sol20_cass"> |
| 448 | 448 | <dataarea name="cass" size="13654040"> |
| r242703 | r242704 | |
| 488 | 488 | <software name="pilot"> |
| 489 | 489 | <description>Cassette PILOT P/N 727112 Rev. A</description> |
| 490 | 490 | <year>1978</year> |
| 491 | <publisher>Processor Technology Corp | |
| 491 | <publisher>Processor Technology Corp.</publisher> | |
| 492 | 492 | |
| 493 | 493 | <part name="cass1" interface="sol20_cass"> |
| 494 | 494 | <dataarea name="cass" size="19764422"> |
| r242703 | r242704 | |
| 572 | 572 | <software name="trek80"> |
| 573 | 573 | <description>TREK-80</description> |
| 574 | 574 | <year>19??</year> |
| 575 | <publisher>Processor Technol | |
| 575 | <publisher>Processor Technolgy Corp.</publisher> | |
| 576 | 576 | |
| 577 | 577 | <part name="cass1" interface="sol20_cass"> |
| 578 | 578 | <dataarea name="cass" size="6757058"> |
| r242703 | r242704 | |
| 778 | 778 | <software name="acs_v1n4"> |
| 779 | 779 | <description>Access newsletter, Volume 1, issue #4</description> |
| 780 | 780 | <year>1977</year> |
| 781 | <publisher>Processor Technol | |
| 781 | <publisher>Processor Technolgy Corp.</publisher> | |
| 782 | 782 | |
| 783 | 783 | <part name="cass1" interface="sol20_cass"> |
| 784 | 784 | <dataarea name="cass" size="2151032"> |
| r242703 | r242704 | |
|---|---|---|
| 4 | 4 | <softwarelist name="timex_dock" description="Timex Sinclair TS-2068 DOCK cartridges"> |
| 5 | 5 | |
| 6 | 6 | |
| 7 | <!-- | |
| 8 | Timex Technical Docs... http://timex.comboios.info/home.html | |
| 9 | ||
| 10 | Timex Command Cartridges... http://timex.comboios.info/tscart.html | |
| 11 | ||
| 12 | NOTE: Below apply to BIN files only! (BIN file = DCK file minus the first 9 bytes of DCK header) | |
| 13 | ||
| 14 | ||
| 15 | Types of TS2068 Cartridges: | |
| 16 | ||
| 17 | Actually exists 3 types of cartridges: | |
| 18 | ||
| 19 | LROS (Language ROM Oriented Software) takes control of the computer, the internal ROMs are not used; | |
| 20 | AROS (Application ROM Oriented Software) uses BASIC interpreter; | |
| 21 | ROM is simply a ROM chip. In TS2068 to a ROM work, you must type OUT 244,3 to "page" the DOCK port. | |
| 22 | ||
| 23 | An LROS is identified by the following overhead bytes: | |
| 24 | ||
| 25 | Location Description | |
| 26 | ||
| 27 | 0000 Not Used | |
| 28 | 0001 Cartridge Type | |
| 29 | O1=LROS | |
| 30 | 0002/0003 Starting Address (LSB/MSB) | |
| 31 | Address to be jumped to after Operating System initialization is complete. | |
| 32 | Order of bytes is as for a JP instruction. | |
| 33 | 0004 Memory Chunk Specification | |
| 34 | Bits 0-7 represent Chunks 0-7 respectively in the Dock Bank in low active format: | |
| 35 | 0 if in use | |
| 36 | 1 if not in use | |
| 37 | NOTE: When writing to the Horizontal Select Register (Port F4H), the Chunk Specification is High Active | |
| 38 | ||
| 39 | ||
| 40 | An AROS is identified by the following overhead bytes: | |
| 41 | ||
| 42 | Location Description | |
| 43 | ||
| 44 | 8000H Language Type | |
| 45 | 1 = BASIC [and machine code] | |
| 46 | 2 = Machine code only | |
| 47 | (Any other value will result in Error S, Missing LROS) | |
| 48 | 8001H Cartridge Type | |
| 49 | 02=AROS | |
| 50 | 8002/8003H Starting Address(LSB/MSB) | |
| 51 | (BASIC AROS= Addrs. of First Program Line) | |
| 52 | (Machine Code AROS = Addrs. of First Z80 Instruction) | |
| 53 | 8004H Memory Chunk Specification | |
| 54 | Bits 0-7 represent Chunks 0-7 respectively in the Dock Bank in low active format as follows: | |
| 55 | 0 if in use | |
| 56 | 1 if not in use | |
| 57 | NOTE: Bits 0-3 must he set to 1 for proper execution. | |
| 58 | 8005H Autostart Specification: | |
| 59 | 0 = No Autostart | |
| 60 | 1 = Autostart | |
| 61 | 8006/8007H Number of bytes of RAM to be Reserved for Machine Code Variables | |
| 62 | (LSB/MSB - 0100H=1 byte Reserved; 0002H=512 bytes Reserved) | |
| 63 | ||
| 64 | NOTE: info about release and publisher are taken from http://www.worldofspectrum.org/tmx/ | |
| 65 | ||
| 66 | --> | |
| 67 | ||
| 68 | <!-- Cartridge Type: AROS (overhead bytes: 02 02 0C80 EF 01 0000) --> | |
| 69 | 7 | <software name="android" supported="no"> |
| 70 | 8 | <description>Androids</description> |
| 71 | <year>1983</year> | |
| 72 | <publisher>Timex Computer</publisher> | |
| 9 | <year>19??</year> | |
| 10 | <publisher><unknown></publisher> | |
| 73 | 11 | <part name="cart" interface="timex_cart"> |
| 74 | 12 | <dataarea name="rom" size="65536"> |
| 75 | 13 | <rom name="androids.bin" size="8192" crc="fec4c2b4" sha1="52b1d4c8316adf74aeb685f54c789a90015215d6" offset="0x8000" /> |
| r242703 | r242704 | |
| 77 | 15 | </part> |
| 78 | 16 | </software> |
| 79 | 17 | |
| 80 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 FC) --> | |
| 81 | 18 | <software name="backgamm" supported="no"> |
| 82 | 19 | <description>Backgammon</description> |
| 83 | <year>1983</year> | |
| 84 | <publisher>Sinclair Research</publisher> | |
| 20 | <year>19??</year> | |
| 21 | <publisher><unknown></publisher> | |
| 85 | 22 | <part name="cart" interface="timex_cart"> |
| 86 | 23 | <dataarea name="rom" size="65536"> |
| 87 | 24 | <rom name="backgammon.bin" size="16384" crc="2c125684" sha1="20d8be438259958a1f0eb0a3852b39fbd4c02c8c" offset="0x0000" /> |
| r242703 | r242704 | |
| 89 | 26 | </part> |
| 90 | 27 | </software> |
| 91 | 28 | |
| 92 | <!-- Cartridge Type: AROS (overhead bytes: 01 02 0880 CF 01 0000) --> | |
| 93 | 29 | <software name="budgeter" supported="no"> |
| 94 | 30 | <description>Budgeter</description> |
| 95 | <year>1983</year> | |
| 96 | <publisher>Timex Computer</publisher> | |
| 31 | <year>19??</year> | |
| 32 | <publisher><unknown></publisher> | |
| 97 | 33 | <part name="cart" interface="timex_cart"> |
| 98 | 34 | <dataarea name="rom" size="65536"> |
| 99 | 35 | <rom name="budgeter.bin" size="16384" crc="9b5e4565" sha1="bead4247e05f22a26cdc6a835a62b1277685b709" offset="0x8000" /> |
| r242703 | r242704 | |
| 101 | 37 | </part> |
| 102 | 38 | </software> |
| 103 | 39 | |
| 104 | <!-- Cartridge Type: AROS (overhead bytes: 02 02 00C0 8F 01 1500) --> | |
| 105 | 40 | <software name="casino1" supported="no"> |
| 106 | 41 | <description>Casino1</description> |
| 107 | <year>1983</year> | |
| 108 | <publisher>Timex Computer</publisher> | |
| 42 | <year>19??</year> | |
| 43 | <publisher><unknown></publisher> | |
| 109 | 44 | <part name="cart" interface="timex_cart"> |
| 110 | 45 | <dataarea name="rom" size="65536"> |
| 111 | 46 | <rom name="casino1.bin" size="24576" crc="3da6d3c9" sha1="f84ba979b94baf092bae70cfa1ec8f276b48885f" offset="0x8000" /> |
| r242703 | r242704 | |
| 113 | 48 | </part> |
| 114 | 49 | </software> |
| 115 | 50 | |
| 116 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 F529 FC) --> | |
| 117 | 51 | <software name="chess" supported="no"> |
| 118 | 52 | <description>Chess</description> |
| 119 | <year>1983</year> | |
| 120 | <publisher>Timex Computer</publisher> | |
| 53 | <year>19??</year> | |
| 54 | <publisher><unknown></publisher> | |
| 121 | 55 | <part name="cart" interface="timex_cart"> |
| 122 | 56 | <dataarea name="rom" size="65536"> |
| 123 | 57 | <rom name="chess.bin" size="16384" crc="e64367ef" sha1="cf7e02a6c20ee0d027f4676e2a1e7aed5d6ced95" offset="0x0000" /> |
| r242703 | r242704 | |
| 125 | 59 | </part> |
| 126 | 60 | </software> |
| 127 | 61 | |
| 128 | <!-- Cartridge Type: AROS (overhead bytes: 02 02 2892 EF 01 C017) --> | |
| 129 | 62 | <software name="crazybug" supported="no"> |
| 130 | 63 | <description>Crazy Bugs</description> |
| 131 | <year>1983</year> | |
| 132 | <publisher>Timex Computer</publisher> | |
| 64 | <year>19??</year> | |
| 65 | <publisher><unknown></publisher> | |
| 133 | 66 | <part name="cart" interface="timex_cart"> |
| 134 | 67 | <dataarea name="rom" size="65536"> |
| 135 | 68 | <rom name="crazy bugs.bin" size="8192" crc="a440e8f2" sha1="c0f63b7492e542a3bb955a787e7394dc5a3e6fde" offset="0x8000" /> |
| r242703 | r242704 | |
| 137 | 70 | </part> |
| 138 | 71 | </software> |
| 139 | 72 | |
| 140 | <!-- Cartridge Type: AROS (overhead bytes: 01 02 0A80 8F 01 0000) --> | |
| 141 | 73 | <software name="etoolkit" supported="no"> |
| 142 | <description>eToolkit | |
| 74 | <description>eToolkit</description> | |
| 143 | 75 | <year>19??</year> |
| 144 | 76 | <publisher><unknown></publisher> |
| 145 | 77 | <part name="cart" interface="timex_cart"> |
| r242703 | r242704 | |
| 149 | 81 | </part> |
| 150 | 82 | </software> |
| 151 | 83 | |
| 152 | <!-- Cartridge Type: AROS (overhead bytes: 02 02 73EC 0F 01 BF17) --> | |
| 153 | 84 | <software name="fsim" supported="no"> |
| 154 | 85 | <description>Flight Simulator</description> |
| 155 | <year>1983</year> | |
| 156 | <publisher>Timex Computer</publisher> | |
| 86 | <year>19??</year> | |
| 87 | <publisher><unknown></publisher> | |
| 157 | 88 | <part name="cart" interface="timex_cart"> |
| 158 | 89 | <dataarea name="rom" size="65536"> |
| 159 | 90 | <rom name="flight simulator.bin" size="32768" crc="e1f2e4cc" sha1="30a78405f88041d36f43e2526fb01539bb469458" offset="0x8000" /> |
| r242703 | r242704 | |
| 161 | 92 | </part> |
| 162 | 93 | </software> |
| 163 | 94 | |
| 164 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 FC) --> | |
| 165 | 95 | <software name="gyruss" supported="no"> |
| 166 | 96 | <description>Gyruss</description> |
| 167 | <year>1984</year> | |
| 168 | <publisher>Parker Software</publisher> | |
| 97 | <year>19??</year> | |
| 98 | <publisher><unknown></publisher> | |
| 169 | 99 | <part name="cart" interface="timex_cart"> |
| 170 | 100 | <dataarea name="rom" size="65536"> |
| 171 | 101 | <rom name="gyruss.bin" size="16384" crc="b2719977" sha1="d950810bf6b729edbc8a92e1e6bdc609cb4d5895" offset="0x0000" /> |
| r242703 | r242704 | |
| 173 | 103 | </part> |
| 174 | 104 | </software> |
| 175 | 105 | |
| 176 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 FC) --> | |
| 177 | 106 | <software name="horacesp" supported="no"> |
| 178 | 107 | <description>Horace & the Spiders</description> |
| 179 | <year>1983</year> | |
| 180 | <publisher>Timex Computer</publisher> | |
| 108 | <year>19??</year> | |
| 109 | <publisher><unknown></publisher> | |
| 181 | 110 | <part name="cart" interface="timex_cart"> |
| 182 | 111 | <dataarea name="rom" size="65536"> |
| 183 | 112 | <rom name="horace and the spiders.bin" size="16384" crc="86e3366d" sha1="904f4e566911b242f967f7d13a16fd81ff1255cd" offset="0x0000" /> |
| r242703 | r242704 | |
| 185 | 114 | </part> |
| 186 | 115 | </software> |
| 187 | 116 | |
| 188 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 FC) --> | |
| 189 | 117 | <software name="horace" supported="no"> |
| 190 | 118 | <description>Hungry Horace</description> |
| 191 | <year>1983</year> | |
| 192 | <publisher>Timex Computer</publisher> | |
| 119 | <year>19??</year> | |
| 120 | <publisher><unknown></publisher> | |
| 193 | 121 | <part name="cart" interface="timex_cart"> |
| 194 | 122 | <dataarea name="rom" size="65536"> |
| 195 | 123 | <rom name="hungry horace.bin" size="16384" crc="1b31125f" sha1="429270c85b5692d9cdb173a7ce6f297b8f35c4c3" offset="0x0000" /> |
| r242703 | r242704 | |
| 197 | 125 | </part> |
| 198 | 126 | </software> |
| 199 | 127 | |
| 200 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 F73F FC) --> | |
| 201 | 128 | <software name="jupitace" supported="no"> |
| 202 | 129 | <description>Jupiter ACE Emulator</description> |
| 203 | <year>1985</year> | |
| 204 | <publisher>Paul Farrow</publisher> | |
| 130 | <year>19??</year> | |
| 131 | <publisher><unknown></publisher> | |
| 205 | 132 | <part name="cart" interface="timex_cart"> |
| 206 | 133 | <dataarea name="rom" size="65536"> |
| 207 | 134 | <rom name="jupiter ace emulator.bin" size="16384" crc="905c71fc" sha1="88544ccbc8acdf23adbfb0a37f34283702b09348" offset="0x0000" /> |
| r242703 | r242704 | |
| 209 | 136 | </part> |
| 210 | 137 | </software> |
| 211 | 138 | |
| 212 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 FC) --> | |
| 213 | 139 | <software name="locomotn" supported="no"> |
| 214 | 140 | <description>Loco Motion</description> |
| 215 | <year>1984</year> | |
| 216 | <publisher>Parker Software</publisher> | |
| 141 | <year>19??</year> | |
| 142 | <publisher><unknown></publisher> | |
| 217 | 143 | <part name="cart" interface="timex_cart"> |
| 218 | 144 | <dataarea name="rom" size="65536"> |
| 219 | 145 | <rom name="loco motion.bin" size="16384" crc="0e0302ca" sha1="0974f75f99d2acb2f3e767c26a2efbef5eb93235" offset="0x0000" /> |
| r242703 | r242704 | |
| 221 | 147 | </part> |
| 222 | 148 | </software> |
| 223 | 149 | |
| 224 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 FE) --> | |
| 225 | 150 | <software name="montezum" supported="no"> |
| 226 | 151 | <description>Montezuma's Revenge</description> |
| 227 | <year>1984</year> | |
| 228 | <publisher>Parker Software</publisher> | |
| 152 | <year>19??</year> | |
| 153 | <publisher><unknown></publisher> | |
| 229 | 154 | <part name="cart" interface="timex_cart"> |
| 230 | 155 | <dataarea name="rom" size="65536"> |
| 231 | 156 | <rom name="montezuma's revenge.bin" size="8192" crc="683f9f93" sha1="406e1ba6eeb94142696d22293782bfd067b2233c" offset="0x0000" /> |
| r242703 | r242704 | |
| 233 | 158 | </part> |
| 234 | 159 | </software> |
| 235 | 160 | |
| 236 | <!-- Cartridge Type: AROS (overhead bytes: 01 02 0880 EF 01 0000) --> | |
| 237 | 161 | <software name="mterm" supported="no"> |
| 238 | <description>MTERM - Smart Terminal Program</description> | |
| 239 | <year>1983</year> | |
| 240 | <publisher>Westridge Communications</publisher> | |
| 162 | <description>MTERM</description> | |
| 163 | <year>19??</year> | |
| 164 | <publisher><unknown></publisher> | |
| 241 | 165 | <part name="cart" interface="timex_cart"> |
| 242 | 166 | <dataarea name="rom" size="65536"> |
| 243 | 167 | <rom name="mterm.bin" size="8192" crc="8e0be19f" sha1="8b18268601c895dc90e79ec9605ed40925832979" offset="0x8000" /> |
| r242703 | r242704 | |
| 245 | 169 | </part> |
| 246 | 170 | </software> |
| 247 | 171 | |
| 248 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 F0) --> | |
| 249 | 172 | <software name="penetrat" supported="no"> |
| 250 | 173 | <description>Penetrator</description> |
| 251 | <year>1983</year> | |
| 252 | <publisher>Timex Computer</publisher> | |
| 174 | <year>19??</year> | |
| 175 | <publisher><unknown></publisher> | |
| 253 | 176 | <part name="cart" interface="timex_cart"> |
| 254 | 177 | <dataarea name="rom" size="65536"> |
| 255 | 178 | <rom name="penetrator.bin" size="32768" crc="19cb2f78" sha1="826d03e2cfc176047a2e913315115d5f71c9ae2a" offset="0x0000" /> |
| r242703 | r242704 | |
| 257 | 180 | </part> |
| 258 | 181 | </software> |
| 259 | 182 | |
| 260 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 F8) --> | |
| 261 | 183 | <software name="pinball" supported="no"> |
| 262 | <description>Pro Pinball</description> | |
| 263 | <year>1983</year> | |
| 264 | <publisher>Timex Computer</publisher> | |
| 184 | <description>Pinball</description> | |
| 185 | <year>19??</year> | |
| 186 | <publisher><unknown></publisher> | |
| 265 | 187 | <part name="cart" interface="timex_cart"> |
| 266 | 188 | <dataarea name="rom" size="65536"> |
| 267 | 189 | <rom name="pinball.bin" size="24576" crc="2fb6a452" sha1="ab74fbe21df513e52aef960be018369ebfb3c33f" offset="0x0000" /> |
| r242703 | r242704 | |
| 269 | 191 | </part> |
| 270 | 192 | </software> |
| 271 | 193 | |
| 272 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 FC) --> | |
| 273 | 194 | <software name="planet" supported="no"> |
| 274 | 195 | <description>Planetoids</description> |
| 275 | <year>1983</year> | |
| 276 | <publisher>Sinclair Research</publisher> | |
| 196 | <year>19??</year> | |
| 197 | <publisher><unknown></publisher> | |
| 277 | 198 | <part name="cart" interface="timex_cart"> |
| 278 | 199 | <dataarea name="rom" size="65536"> |
| 279 | 200 | <rom name="planetoids.bin" size="16384" crc="a6c9cc94" sha1="70e05f2d1aaad79cfa2d90111ba0a58cca4cacd9" offset="0x0000" /> |
| r242703 | r242704 | |
| 281 | 202 | </part> |
| 282 | 203 | </software> |
| 283 | 204 | |
| 284 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 4302 FE) --> | |
| 285 | 205 | <software name="popeye" supported="no"> |
| 286 | 206 | <description>Popeye</description> |
| 287 | <year>1984</year> | |
| 288 | <publisher>Parker Software</publisher> | |
| 207 | <year>19??</year> | |
| 208 | <publisher><unknown></publisher> | |
| 289 | 209 | <part name="cart" interface="timex_cart"> |
| 290 | 210 | <dataarea name="rom" size="65536"> |
| 291 | 211 | <rom name="popeye.bin" size="8192" crc="dae064c0" sha1="dc0ab2c30a86647529d92a737d24f51f4de7ae19" offset="0x0000" /> |
| r242703 | r242704 | |
| 293 | 213 | </part> |
| 294 | 214 | </software> |
| 295 | 215 | |
| 296 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 FE) --> | |
| 297 | 216 | <software name="qbert" supported="no"> |
| 298 | 217 | <description>Q*Bert</description> |
| 299 | <year>1984</year> | |
| 300 | <publisher>Parker Software</publisher> | |
| 218 | <year>19??</year> | |
| 219 | <publisher><unknown></publisher> | |
| 301 | 220 | <part name="cart" interface="timex_cart"> |
| 302 | 221 | <dataarea name="rom" size="65536"> |
| 303 | 222 | <rom name="qbert.bin" size="8192" crc="58b45e9d" sha1="d748e5b504f3ea4e0cf472dca1746c2654361863" offset="0x0000" /> |
| r242703 | r242704 | |
| 305 | 224 | </part> |
| 306 | 225 | </software> |
| 307 | 226 | |
| 308 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 FE) --> | |
| 309 | 227 | <software name="jedi" supported="no"> |
| 310 | 228 | <description>Return Of The Jedi - Death Star Battle</description> |
| 311 | <year>1984</year> | |
| 312 | <publisher>Parker Software</publisher> | |
| 229 | <year>19??</year> | |
| 230 | <publisher><unknown></publisher> | |
| 313 | 231 | <part name="cart" interface="timex_cart"> |
| 314 | 232 | <dataarea name="rom" size="65536"> |
| 315 | 233 | <rom name="return of the jedi - death star battle.bin" size="8192" crc="0fafa2b8" sha1="27a50cf2a3272092f3bd350cb0d53619940f4453" offset="0x0000" /> |
| r242703 | r242704 | |
| 317 | 235 | </part> |
| 318 | 236 | </software> |
| 319 | 237 | |
| 320 | <!-- Cartridge Type: AROS (overhead bytes: 01 02 0880 EF 01 1500) --> | |
| 321 | 238 | <!-- TODO: add support for RAM in this cart (0xa000-0xffff) --> |
| 322 | 239 | <software name="rwp32" supported="no"> |
| 323 | 240 | <description>rWP32</description> |
| r242703 | r242704 | |
| 330 | 247 | </part> |
| 331 | 248 | </software> |
| 332 | 249 | |
| 333 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0080 CC) --> | |
| 334 | 250 | <software name="unicorn" supported="no"> |
| 335 | 251 | <description>Shadow of the Unicorn</description> |
| 336 | <year>1985</year> | |
| 337 | <publisher>Mikro-Gen</publisher> | |
| 252 | <year>19??</year> | |
| 253 | <publisher><unknown></publisher> | |
| 338 | 254 | <part name="cart" interface="timex_cart"> |
| 339 | 255 | <dataarea name="rom" size="65536"> |
| 340 | 256 | <rom name="shadow of the unicorn.bin" size="65536" crc="9f7af8ef" sha1="676c9142e11b3b706f64b7606aa084f1bb217d67" offset="0x0000" /> |
| r242703 | r242704 | |
| 342 | 258 | </part> |
| 343 | 259 | </software> |
| 344 | 260 | |
| 345 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 FC) --> | |
| 346 | 261 | <software name="spacerai" supported="no"> |
| 347 | 262 | <description>Space Raiders</description> |
| 348 | <year>1983</year> | |
| 349 | <publisher>Timex Computer</publisher> | |
| 263 | <year>19??</year> | |
| 264 | <publisher><unknown></publisher> | |
| 350 | 265 | <part name="cart" interface="timex_cart"> |
| 351 | 266 | <dataarea name="rom" size="65536"> |
| 352 | 267 | <rom name="space raiders.bin" size="16384" crc="86d7a08b" sha1="8e1da4c183e9af2ba11b0745820fff4017cbad19" offset="0x0000" /> |
| r242703 | r242704 | |
| 354 | 269 | </part> |
| 355 | 270 | </software> |
| 356 | 271 | |
| 357 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 FC) --> | |
| 358 | 272 | <software name="starwars" supported="no"> |
| 359 | 273 | <description>Star Wars - The Arcade Game</description> |
| 360 | <year>1984</year> | |
| 361 | <publisher>Parker Software</publisher> | |
| 274 | <year>19??</year> | |
| 275 | <publisher><unknown></publisher> | |
| 362 | 276 | <part name="cart" interface="timex_cart"> |
| 363 | 277 | <dataarea name="rom" size="65536"> |
| 364 | 278 | <rom name="star wars - the arcade game.bin" size="16384" crc="22cd482b" sha1="c12f38c382fa2a07430fe6daaa3acd96820aa76d" offset="0x0000" /> |
| r242703 | r242704 | |
| 366 | 280 | </part> |
| 367 | 281 | </software> |
| 368 | 282 | |
| 369 | <!-- Cartridge Type: AROS (overhead bytes: 01 02 0880 0F 01 0000) --> | |
| 370 | 283 | <software name="statecap" supported="no"> |
| 371 | 284 | <description>States and Capitals</description> |
| 372 | <year>1983</year> | |
| 373 | <publisher>Timex Computer</publisher> | |
| 285 | <year>19??</year> | |
| 286 | <publisher><unknown></publisher> | |
| 374 | 287 | <part name="cart" interface="timex_cart"> |
| 375 | 288 | <dataarea name="rom" size="65536"> |
| 376 | 289 | <rom name="states and capitals.bin" size="32768" crc="04bf4a3b" sha1="0ea77fb538bce31cd90f8f926deda7b90d99cf99" offset="0x8000" /> |
| r242703 | r242704 | |
| 378 | 291 | </part> |
| 379 | 292 | </software> |
| 380 | 293 | |
| 381 | <!-- Cartridge Type: AROS (overhead bytes: 02 02 0880 0F 01 1500) --> | |
| 382 | 294 | <software name="superhzd" supported="no"> |
| 383 | 295 | <description>Super Hot-Z Disassembler v2.51 (AROS)</description> |
| 384 | 296 | <year>19??</year> |
| 385 | <publisher> | |
| 297 | <publisher><unknown></publisher> | |
| 386 | 298 | <part name="cart" interface="timex_cart"> |
| 387 | 299 | <dataarea name="rom" size="65536"> |
| 388 | 300 | <rom name="superhotzdisassemblerv2.51-aros.bin" size="24576" crc="7bf239be" sha1="7c04c6e861b4b82ee3fd5bf21b17d6dd7d893386" offset="0x8000" /> |
| r242703 | r242704 | |
| 390 | 302 | </part> |
| 391 | 303 | </software> |
| 392 | 304 | |
| 393 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 F45E F8) --> | |
| 394 | 305 | <software name="swordfgt" supported="no"> |
| 395 | 306 | <description>Swordfight</description> |
| 396 | <year>1983</year> | |
| 397 | <publisher>Timex Computer</publisher> | |
| 307 | <year>19??</year> | |
| 308 | <publisher><unknown></publisher> | |
| 398 | 309 | <part name="cart" interface="timex_cart"> |
| 399 | 310 | <dataarea name="rom" size="65536"> |
| 400 | 311 | <rom name="swordfight.bin" size="24576" crc="95155511" sha1="69e7e0111ed8d8925314deb661990bf8c9eb5cc4" offset="0x0000" /> |
| r242703 | r242704 | |
| 402 | 313 | </part> |
| 403 | 314 | </software> |
| 404 | 315 | |
| 405 | <!-- Cartridge Type: AROS (overhead bytes: 01 02 0880 CF 01 0000) --> | |
| 406 | 316 | <software name="tasword2" supported="no"> |
| 407 | 317 | <description>Tasword II</description> |
| 408 | <year>1983</year> | |
| 409 | <publisher>Tasman Software</publisher> | |
| 318 | <year>19??</year> | |
| 319 | <publisher><unknown></publisher> | |
| 410 | 320 | <part name="cart" interface="timex_cart"> |
| 411 | 321 | <dataarea name="rom" size="65536"> |
| 412 | 322 | <rom name="tasword ii.bin" size="16384" crc="7b2a0e31" sha1="2bdf3c10a70e4a02410d4f20cbc1c0aaa444d1e2" offset="0x8000" /> |
| r242703 | r242704 | |
| 414 | 324 | </part> |
| 415 | 325 | </software> |
| 416 | 326 | |
| 417 | <!-- | |
| 327 | <!-- This must map on the HOME memory?!? How does this actually work? --> | |
| 418 | 328 | <software name="timeword" supported="no"> |
| 419 | 329 | <description>TimeWord</description> |
| 420 | <year>1986</year> | |
| 421 | <publisher>TMX Portugal</publisher> | |
| 330 | <year>19??</year> | |
| 331 | <publisher><unknown></publisher> | |
| 422 | 332 | <part name="cart" interface="timex_cart"> |
| 423 | 333 | <dataarea name="rom" size="65536"> |
| 424 | 334 | <rom name="timeword.bin" size="16384" crc="a767d39e" sha1="5c606380234f867aafd3d215982eabf374553118" offset="0x0000" /> |
| r242703 | r242704 | |
| 426 | 336 | </part> |
| 427 | 337 | </software> |
| 428 | 338 | |
| 429 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 FE) --> | |
| 430 | 339 | <software name="vucalc" supported="no"> |
| 431 | <description>VU-Calc</description> | |
| 432 | <year>1983</year> | |
| 433 | <publisher>Timex Computer</publisher> | |
| 340 | <description>vu-calc</description> | |
| 341 | <year>19??</year> | |
| 342 | <publisher><unknown></publisher> | |
| 434 | 343 | <part name="cart" interface="timex_cart"> |
| 435 | 344 | <dataarea name="rom" size="65536"> |
| 436 | 345 | <rom name="vu-calc.bin" size="8192" crc="7bbcc167" sha1="efc626c55125b8a8da527bd986ed9d4065973e8c" offset="0x0000" /> |
| r242703 | r242704 | |
| 438 | 347 | </part> |
| 439 | 348 | </software> |
| 440 | 349 | |
| 441 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 FC) --> | |
| 442 | 350 | <software name="vufile" supported="no"> |
| 443 | <description>VU-File</description> | |
| 444 | <year>1983</year> | |
| 445 | <publisher>Timex Computer</publisher> | |
| 351 | <description>vu-file</description> | |
| 352 | <year>19??</year> | |
| 353 | <publisher><unknown></publisher> | |
| 446 | 354 | <part name="cart" interface="timex_cart"> |
| 447 | 355 | <dataarea name="rom" size="65536"> |
| 448 | 356 | <rom name="vu-file.bin" size="16384" crc="94dafab6" sha1="1007aba595085bc46c406f933484a4dbbd0154bb" offset="0x0000" /> |
| r242703 | r242704 | |
| 450 | 358 | </part> |
| 451 | 359 | </software> |
| 452 | 360 | |
| 453 | <!-- Cartridge Type: LROS (overhead bytes: 00 01 0500 FC) --> | |
| 454 | 361 | <software name="zebraos" supported="no"> |
| 455 | 362 | <description>Zebra OS 64</description> |
| 456 | <year>1985</year> | |
| 457 | <publisher>Zebra Systems</publisher> | |
| 363 | <year>19??</year> | |
| 364 | <publisher><unknown></publisher> | |
| 458 | 365 | <part name="cart" interface="timex_cart"> |
| 459 | 366 | <dataarea name="rom" size="65536"> |
| 460 | 367 | <rom name="zebra os 64.bin" size="16384" crc="928a8207" sha1="335d2f858d5bbe63989a2df1620ab5838337cfbd" offset="0x0000" /> |
| r242703 | r242704 | |
|---|---|---|
| 5 | 5 | |
| 6 | 6 | List of known tape releases by Dick Smith in Australia: |
| 7 | 7 | |
| 8 | X-7274 Attack of the Killer Tomatoes | |
| 9 | X-7231 Match Box | |
| 10 | X-7232 Poker | |
| 11 | X-7233 Hangman | |
| 12 | X-7234 Slot Machine/Knock Off/Russian Roulette | |
| 13 | X-7235 Blackjack | |
| 14 | X-7236 Circus (*) | |
| 15 | X-7237 Biorhythm/Pair Matching/Calendar | |
| 16 | X-7238 Horse Race | |
| 17 | X-7239 Invaders (*) | |
| 18 | X-7240 Dynasty Derby | |
| 19 | X-7241 Learjet | |
| 20 | X-7242 Ghost Hunter (*) | |
| 21 | X-7243 Hoppy (*) | |
| 22 | X-7244 Super Snake | |
| 23 | X-7245 Knights and Dragons | |
| 24 | X-7247 Star Blaster (*) | |
| 25 | X-7248 VZ-Asteroids | |
| 26 | X-7249 Air Traffic Controller | |
| 27 | X-7250 Lunar Lander | |
| 28 | X-7251 Statistics 1 | |
| 29 | X-7252 Statistics 2 | |
| 30 | X-7253 Matrix | |
| 31 | X-7254 Tennis Lesson/Golf Lesson | |
| 32 | X-7255 Introduction to BASIC | |
| 33 | X-7256 Elementary Geometry | |
| 34 | X-7257 Speed Reading | |
| 35 | X-7258 Typing Teacher | |
| 36 | X-7259 Mailing List | |
| 37 | X-7261 Portfolio Management | |
| 38 | X-7262 Discounted Cash Flow Analysis | |
| 39 | X-7263 Financial Ratio Analysis | |
| 40 | X-7264 Tennis (*) | |
| 41 | X-7265 Checkers | |
| 42 | X-7266 Planet Patrol (*) | |
| 43 | X-7268 Ladder Challenge (*) | |
| 44 | X-7270 Panik (*) | |
| 45 | X-7271 Othello | |
| 46 | X-7272 Dracula's Castle | |
| 47 | X-7273 Backgammon | |
| 48 | X-7275 VZ Chess (*) | |
| 49 | X-7276 Music Writer | |
| 50 | X-7278 Disassembler | |
| 51 | X-7279 Duel | |
| 52 | X-7280 Hex Utilities | |
| 53 | X-7281 Word Processor | |
| 54 | X-7282 Editor Assembler | |
| 55 | X-7285 Spell'O'Matic 1 & 2 | |
| 56 | X-7286 Spell'O'Matic 3 & 4 | |
| 57 | X-7287 Flashword 1 & 2 | |
| 58 | X-7288 Flashword 3 & 4 | |
| 59 | X-7289 Metric Spycatcher | |
| 60 | X-7290 Whizkid Spycatcher | |
| 61 | X-7330 Sprite Generator | |
| 62 | X-7331 Formula One | |
| 63 | X-7332 Galaxon (*) | |
| 64 | X-7333 Dawn Patrol (*) | |
| 65 | X-7339 Space RAM | |
| 66 | X-7342 Crash | |
| 67 | X-7344 Maze of Argon | |
| 68 | X-7345 Word Matching | |
| 8 | X-7274 Attack of the Killer Tomatoes | |
| 9 | X-7231 Match Box | |
| 10 | X-7232 Poker | |
| 11 | X-7233 Hangman | |
| 12 | X-7234 Slot Machine/Knock Off/Russian Roulette | |
| 13 | X-7235 Blackjack | |
| 14 | X-7236 Circus (*) | |
| 15 | X-7237 Biorhythm/Pair Matching/Calendar | |
| 16 | X-7238 Horse Race | |
| 17 | X-7239 Invaders (*) | |
| 18 | X-7240 Dynasty Derby | |
| 19 | X-7241 Learjet | |
| 20 | X-7242 Ghost Hunter (*) | |
| 21 | X-7243 Hoppy (*) | |
| 22 | X-7244 Super Snake | |
| 23 | X-7245 Knights and Dragons | |
| 24 | X-7247 Star Blaster (*) | |
| 25 | X-7248 VZ-Asteroids | |
| 26 | X-7249 Air Traffic Controller | |
| 27 | X-7250 Lunar Lander | |
| 28 | X-7251 Statistics 1 | |
| 29 | X-7252 Statistics 2 | |
| 30 | X-7253 Matrix | |
| 31 | X-7254 Tennis Lesson/Golf Lesson | |
| 32 | X-7255 Introduction to BASIC | |
| 33 | X-7256 Elementary Geometry | |
| 34 | X-7257 Speed Reading | |
| 35 | X-7258 Typing Teacher | |
| 36 | X-7259 Mailing List | |
| 37 | X-7261 Portfolio Management | |
| 38 | X-7262 Discounted Cash Flow Analysis | |
| 39 | X-7263 Financial Ratio Analysis | |
| 40 | X-7264 Tennis (*) | |
| 41 | X-7265 Checkers | |
| 42 | X-7266 Planet Patrol (*) | |
| 43 | X-7268 Ladder Challenge (*) | |
| 44 | X-7270 Panik (*) | |
| 45 | X-7271 Othello | |
| 46 | X-7272 Dracula's Castle | |
| 47 | X-7273 Backgammon | |
| 48 | X-7275 VZ Chess (*) | |
| 49 | X-7276 Music Writer | |
| 50 | X-7278 Disassembler | |
| 51 | X-7279 Duel | |
| 52 | X-7280 Hex Utilities | |
| 53 | X-7281 Word Processor | |
| 54 | X-7282 Editor Assembler | |
| 55 | X-7285 Spell'O'Matic 1 & 2 | |
| 56 | X-7286 Spell'O'Matic 3 & 4 | |
| 57 | X-7287 Flashword 1 & 2 | |
| 58 | X-7288 Flashword 3 & 4 | |
| 59 | X-7289 Metric Spycatcher | |
| 60 | X-7290 Whizkid Spycatcher | |
| 61 | X-7330 Sprite Generator | |
| 62 | X-7331 Formula One | |
| 63 | X-7332 Galaxon (*) | |
| 64 | X-7333 Dawn Patrol (*) | |
| 65 | X-7339 Space RAM | |
| 66 | X-7342 Crash | |
| 67 | X-7344 Maze of Argon | |
| 68 | X-7345 Word Matching | |
| 69 | 69 | |
| 70 | 70 | * = dumped |
| 71 | 71 |
| r242703 | r242704 | |
|---|---|---|
| 340 | 340 | EXE = .exe |
| 341 | 341 | endif |
| 342 | 342 | |
| 343 | # extension for build tools | |
| 344 | BUILD_EXE = | |
| 345 | ||
| 346 | ifeq ($(OS),Windows_NT) | |
| 347 | BUILD_EXE = .exe | |
| 343 | ifndef BUILD_EXE | |
| 344 | BUILD_EXE = $(EXE) | |
| 348 | 345 | endif |
| 349 | ifneq ($(OS2_SHELL),) | |
| 350 | BUILD_EXE = .exe | |
| 351 | endif | |
| 352 | 346 | |
| 353 | 347 | # compiler, linker and utilities |
| 354 | 348 | ifneq ($(TARGETOS),emscripten) |
| r242703 | r242704 | |
| 356 | 350 | CC = @gcc |
| 357 | 351 | LD = @g++ |
| 358 | 352 | endif |
| 359 | MD = -mkdir$( | |
| 353 | MD = -mkdir$(EXE) | |
| 360 | 354 | RM = @rm -f |
| 361 | 355 | OBJDUMP = @objdump |
| 362 | 356 | PYTHON = @python |
| r242703 | r242704 | |
| 605 | 599 | ifneq (,$(findstring undefined,$(SANITIZE))) |
| 606 | 600 | ifneq (,$(findstring clang,$(CC))) |
| 607 | 601 | # TODO: check if linker is clang++ |
| 608 | # produces a lot of messages - disable it for now | |
| 609 | CCOMFLAGS += -fno-sanitize=alignment | |
| 610 | # these are false positives because of the way our delegates work | |
| 611 | CCOMFLAGS += -fno-sanitize=function | |
| 602 | CCOMFLAGS += -fno-sanitize=alignment -fno-sanitize=function -fno-sanitize=shift -fno-sanitize=null -fno-sanitize=vptr -fno-sanitize=object-size | |
| 612 | 603 | # clang takes forever to compile src/emu/cpu/tms57002/tms57002.c when this isn't disabled |
| 613 | CCOMFLAGS += -fno-sanitize=shift | |
| 614 | # clang takes forever to compile src/emu/cpu/tms57002/tms57002.c, src/emu/cpu/m6809/hd6309.c when this isn't disabled | |
| 615 | CCOMFLAGS += -fno-sanitize=object-size | |
| 616 | # clang takes forever to compile src/emu/cpu/tms57002/tms57002.c, src/emu/cpu/m6809/konami.c, src/emu/cpu/m6809/hd6309.c, src/emu/video/psx.c when this isn't disabled | |
| 617 | CCOMFLAGS += -fno-sanitize=vptr | |
| 618 | # clang takes forever to compile src/emu/video/psx.c when this isn't disabled | |
| 619 | CCOMFLAGS += -fno-sanitize=null | |
| 620 | # clang takes forever to compile src/emu/cpu/tms57002/tms57002.c when this isn't disabled | |
| 621 | 604 | CCOMFLAGS += -fno-sanitize=signed-integer-overflow |
| 622 | 605 | endif |
| 623 | 606 | endif |
| r242703 | r242704 | |
| 928 | 911 | $(CC) $(CDEFS) $(CFLAGS) -c $(SRC)/version.c -o $(VERSIONOBJ) |
| 929 | 912 | @echo Linking $@... |
| 930 | 913 | ifeq ($(TARGETOS),emscripten) |
| 931 | ||
| 914 | # Emscripten's linker seems to be stricter about the ordering of .a files | |
| 932 | 915 | $(LD) $(LDFLAGS) $(LDFLAGSEMULATOR) $(VERSIONOBJ) -Wl,--start-group $^ -Wl,--end-group $(LIBS) -o $@ |
| 933 | 916 | else |
| 934 | 917 | $(LD) $(LDFLAGS) $(LDFLAGSEMULATOR) $(VERSIONOBJ) $^ $(LIBS) -o $@ |
| r242703 | r242704 | |
|---|---|---|
| 31 | 31 | VERINFO = $(VERINFO_TARGET) |
| 32 | 32 | |
| 33 | 33 | ifneq ($(TERM),cygwin) |
| 34 | ifeq ($(OS), | |
| 34 | ifeq ($(TARGETOS),win32) | |
| 35 | 35 | MAKEDEP = $(subst /,\,$(MAKEDEP_TARGET)) |
| 36 | 36 | MAKEMAK = $(subst /,\,$(MAKEMAK_TARGET)) |
| 37 | 37 | MAKELIST = $(subst /,\,$(MAKELIST_TARGET)) |
| r242703 | r242704 | |
| 64 | 64 | |
| 65 | 65 | $(MAKEDEP_TARGET): $(MAKEDEPOBJS) $(LIBOCORE) $(ZLIB) |
| 66 | 66 | @echo Linking $@... |
| 67 | $(LD) $(LDFLAGS) $^ $( | |
| 67 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | |
| 68 | 68 | |
| 69 | 69 | |
| 70 | 70 | |
| r242703 | r242704 | |
| 83 | 83 | |
| 84 | 84 | $(MAKEMAK_TARGET): $(MAKEMAKOBJS) $(LIBOCORE) $(ZLIB) |
| 85 | 85 | @echo Linking $@... |
| 86 | $(LD) $(LDFLAGS) $^ $( | |
| 86 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | |
| 87 | 87 | |
| 88 | 88 | |
| 89 | 89 | |
| r242703 | r242704 | |
| 102 | 102 | |
| 103 | 103 | $(MAKELIST_TARGET): $(MAKELISTOBJS) $(LIBOCORE) $(ZLIB) |
| 104 | 104 | @echo Linking $@... |
| 105 | $(LD) $(LDFLAGS) $^ $( | |
| 105 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | |
| 106 | 106 | |
| 107 | 107 | |
| 108 | 108 | |
| r242703 | r242704 | |
| 122 | 122 | |
| 123 | 123 | $(PNG2BDC_TARGET): $(PNG2BDCOBJS) $(LIBOCORE) $(ZLIB) |
| 124 | 124 | @echo Linking $@... |
| 125 | $(LD) $(LDFLAGS) $^ $( | |
| 125 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | |
| 126 | 126 | |
| 127 | 127 | |
| 128 | 128 | |
| r242703 | r242704 | |
| 135 | 135 | |
| 136 | 136 | $(VERINFO_TARGET): $(VERINFOOBJS) $(LIBOCORE) |
| 137 | 137 | @echo Linking $@... |
| 138 | $(LD) $(LDFLAGS) $^ $( | |
| 138 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | |
| 139 | 139 | |
| 140 | 140 | else |
| 141 | 141 | #------------------------------------------------- |
| r242703 | r242704 | |
|---|---|---|
| 80 | 80 | //------------------------------------------------- |
| 81 | 81 | |
| 82 | 82 | ROM_START( abc99 ) |
| 83 | ROM_REGION( 0x1000, I8035_Z2_TAG, 0 ) | |
| 84 | 83 | ROM_DEFAULT_BIOS("107268") |
| 85 | 84 | ROM_SYSTEM_BIOS( 0, "107268", "107268-17" ) |
| 85 | ROM_SYSTEM_BIOS( 1, "106819", "106819-09" ) | |
| 86 | ||
| 87 | ROM_REGION( 0x1000, I8035_Z2_TAG, 0 ) | |
| 86 | 88 | ROMX_LOAD( "107268-17.z3", 0x0000, 0x0800, CRC(2f60cc35) SHA1(ebc6af9cd0a49a0d01698589370e628eebb6221c), ROM_BIOS(1) ) |
| 87 | ROM_SYSTEM_BIOS( 1, "106819", "106819-09" ) | |
| 88 | 89 | ROMX_LOAD( "106819-09.z3", 0x0000, 0x1000, CRC(ffe32a71) SHA1(fa2ce8e0216a433f9bbad0bdd6e3dc0b540f03b7), ROM_BIOS(2) ) // ABC 99 6490423-01 |
| 89 | 90 | |
| 90 | 91 | ROM_REGION( 0x800, I8035_Z5_TAG, 0 ) |
| r242703 | r242704 | |
|---|---|---|
| 45 | 45 | |
| 46 | 46 | #------------------------------------------------- |
| 47 | 47 | # |
| 48 | #@src/emu/bus/a8sio/a8sio.h,BUSES += A8SIO | |
| 49 | #------------------------------------------------- | |
| 50 | ||
| 51 | ifneq ($(filter A8SIO,$(BUSES)),) | |
| 52 | OBJDIRS += $(BUSOBJ)/a8sio | |
| 53 | BUSOBJS += $(BUSOBJ)/a8sio/a8sio.o | |
| 54 | BUSOBJS += $(BUSOBJ)/a8sio/cassette.o | |
| 55 | endif | |
| 56 | ||
| 57 | ||
| 58 | #------------------------------------------------- | |
| 59 | # | |
| 60 | 48 | #@src/emu/bus/abcbus/abcbus.h,BUSES += ABCBUS |
| 61 | 49 | #------------------------------------------------- |
| 62 | 50 | |
| r242703 | r242704 | |
| 1266 | 1254 | |
| 1267 | 1255 | #------------------------------------------------- |
| 1268 | 1256 | # |
| 1269 | #@src/emu/bus/gamegear/gear2gear.h,BUSES += GAMEGEAR | |
| 1270 | #------------------------------------------------- | |
| 1271 | ||
| 1272 | ifneq ($(filter GAMEGEAR,$(BUSES)),) | |
| 1273 | OBJDIRS += $(BUSOBJ)/gamegear | |
| 1274 | BUSOBJS += $(BUSOBJ)/gamegear/gear2gear.o | |
| 1275 | BUSOBJS += $(BUSOBJ)/gamegear/smsctrladp.o | |
| 1276 | endif | |
| 1277 | ||
| 1278 | #------------------------------------------------- | |
| 1279 | # | |
| 1280 | 1257 | #@src/emu/bus/gba/gba_slot.h,BUSES += GBA |
| 1281 | 1258 | #------------------------------------------------- |
| 1282 | 1259 |
| r242703 | r242704 | |
|---|---|---|
| 176 | 176 | MCFG_STEPPER_END_INDEX(24) |
| 177 | 177 | MCFG_STEPPER_INDEX_PATTERN(0x00) |
| 178 | 178 | MCFG_STEPPER_INIT_PHASE(2) |
| 179 | ||
| 179 | ||
| 180 | 180 | MACHINE_CONFIG_END |
| 181 | 181 | |
| 182 | 182 | //------------------------------------------------- |
| r242703 | r242704 | |
| 345 | 345 | |
| 346 | 346 | void epson_lx810l_t::device_start() |
| 347 | 347 | { |
| 348 | ||
| 348 | 349 | } |
| 349 | 350 | |
| 350 | 351 |
| r242703 | r242704 | |
|---|---|---|
| 105 | 105 | PORT_DIPNAME( 0x20, 0x20, "Detail Message" ) |
| 106 | 106 | PORT_DIPSETTING( 0x00, DEF_STR(Off) ) |
| 107 | 107 | PORT_DIPSETTING( 0x20, DEF_STR(On) ) |
| 108 | PORT_DIPNAME( 0x40, 0x40, "Contin | |
| 108 | PORT_DIPNAME( 0x40, 0x40, "Continous Run" ) | |
| 109 | 109 | PORT_DIPSETTING( 0x00, DEF_STR(Off) ) |
| 110 | 110 | PORT_DIPSETTING( 0x40, DEF_STR(On) ) |
| 111 | 111 | PORT_DIPNAME( 0x80, 0x80, "Diagnostic module" ) |
| r242703 | r242704 | |
|---|---|---|
| 20 | 20 | #define LOG 1 |
| 21 | 21 | |
| 22 | 22 | #define GCR_DECODE(_e, _i) \ |
| 23 | ||
| 23 | ((BIT(_e, 6) << 7) | (BIT(_i, 7) << 6) | (_e & 0x33) | (BIT(_e, 2) << 3) | (_i & 0x04)) | |
| 24 | 24 | |
| 25 | 25 | #define GCR_ENCODE(_e, _i) \ |
| 26 | ||
| 26 | ((_e & 0xc0) << 2 | (_i & 0x80) | (_e & 0x3c) << 1 | (_i & 0x04) | (_e & 0x03)) | |
| 27 | 27 | |
| 28 | 28 | |
| 29 | 29 |
| r242703 | r242704 | |
|---|---|---|
| 365 | 365 | astring tempstring; |
| 366 | 366 | m_chr_gen_base = memregion(subtag(tempstring, "gfx1"))->base(); |
| 367 | 367 | m_chr_gen = m_chr_gen_base + m_chr_gen_offset[1]; |
| 368 | ||
| 368 | ||
| 369 | 369 | save_item(NAME(m_framecnt)); |
| 370 | 370 | save_item(NAME(m_mode_control)); |
| 371 | 371 | save_item(NAME(m_color_select)); |
| r242703 | r242704 | |
| 374 | 374 | save_item(NAME(m_vsync)); |
| 375 | 375 | save_item(NAME(m_hsync)); |
| 376 | 376 | save_item(NAME(m_vram)); |
| 377 | save_item(NAME(m_plantronics)); | |
| 377 | save_item(NAME(m_plantronics)); | |
| 378 | 378 | } |
| 379 | 379 | |
| 380 | 380 |
| r242703 | r242704 | |
|---|---|---|
| 28 | 28 | public: |
| 29 | 29 | // construction/destruction |
| 30 | 30 | sc499_ctape_image_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 31 | ||
| 31 | ||
| 32 | 32 | // image-level overrides |
| 33 | 33 | virtual bool call_load(); |
| 34 | 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 | 35 | virtual void call_unload(); |
| 36 | 36 | virtual iodevice_t image_type() const { return IO_MAGTAPE; } |
| 37 | ||
| 37 | ||
| 38 | 38 | virtual bool is_readable() const { return 1; } |
| 39 | 39 | virtual bool is_writeable() const { return 1; } |
| 40 | 40 | virtual bool is_creatable() const { return 1; } |
| r242703 | r242704 | |
|---|---|---|
| 384 | 384 | m_type = md_get_pcb_id(slot_name); |
| 385 | 385 | |
| 386 | 386 | // handle mirroring of ROM, unless it's SSF2 or Pier Solar |
| 387 | if (m_type != SSF2 && m_type != PSOLAR | |
| 387 | if (m_type != SSF2 && m_type != PSOLAR) | |
| 388 | 388 | m_cart->rom_map_setup(length); |
| 389 | 389 | |
| 390 | 390 | return IMAGE_INIT_PASS; |
| r242703 | r242704 | |
|---|---|---|
| 531 | 531 | CODEMASTERS 2 IN 1 (RESET BASED) |
| 532 | 532 | -------------------------------------------------*/ |
| 533 | 533 | |
| 534 | #define MD_ADDR_CM2IN1(a) (m_base == 0 ? ((a << 1) & 0x1fffff)/2 : (((a << 1) & 0x | |
| 534 | #define MD_ADDR_CM2IN1(a) (m_base == 0 ? ((a << 1) & 0x1fffff)/2 : (((a << 1) & 0x7ffff) + 0x200000)/2) | |
| 535 | 535 | |
| 536 | 536 | READ16_MEMBER(md_rom_cm2in1_device::read) |
| 537 | 537 | { |
| r242703 | r242704 | |
|---|---|---|
| 899 | 899 | |
| 900 | 900 | |
| 901 | 901 | /*------------------------------------------------- |
| 902 | ||
| 902 | ||
| 903 | 903 | Hi-Com X-in-1 cart, uses writes to 0xffff to |
| 904 | 904 | change program bank in 0x0000-0x7fff |
| 905 | ||
| 905 | ||
| 906 | 906 | -------------------------------------------------*/ |
| 907 | 907 | |
| 908 | 908 | READ8_MEMBER(sega8_hicom_device::read_cart) |
| 909 | 909 | { |
| 910 | 910 | if (offset >= 0x8000) |
| 911 | 911 | return m_rom[offset & 0x3fff]; |
| 912 | ||
| 912 | ||
| 913 | 913 | return m_rom[(m_rom_bank_base * 0x8000) + offset]; |
| 914 | 914 | } |
| 915 | 915 |
| r242703 | r242704 | |
|---|---|---|
| 318 | 318 | public: |
| 319 | 319 | // construction/destruction |
| 320 | 320 | sega8_hicom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 321 | ||
| 321 | ||
| 322 | 322 | // device-level overrides |
| 323 | 323 | virtual void device_start() { save_item(NAME(m_rom_bank_base)); } |
| 324 | ||
| 324 | ||
| 325 | 325 | virtual void late_bank_setup(); |
| 326 | ||
| 326 | ||
| 327 | 327 | // reading and writing |
| 328 | 328 | virtual DECLARE_READ8_MEMBER(read_cart); |
| 329 | 329 | virtual DECLARE_WRITE8_MEMBER(write_cart) {} |
| 330 | 330 | virtual DECLARE_WRITE8_MEMBER(write_mapper); |
| 331 | ||
| 331 | ||
| 332 | 332 | protected: |
| 333 | 333 | UINT8 m_rom_bank_base; |
| 334 | 334 | }; |
| r242703 | r242704 | |
|---|---|---|
| 29 | 29 | //------------------------------------------------- |
| 30 | 30 | |
| 31 | 31 | sms_multitap_device::sms_multitap_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : |
| 32 | device_t(mconfig, SMS_MULTITAP, "Multitap", tag, owner, clock, "sms_multitap", __FILE__), | |
| 32 | device_t(mconfig, SMS_MULTITAP, "Furrtek's Multitap", tag, owner, clock, "sms_multitap", __FILE__), | |
| 33 | 33 | device_sms_control_port_interface(mconfig, *this), |
| 34 | 34 | m_subctrl1_port(*this, "ctrl1"), |
| 35 | 35 | m_subctrl2_port(*this, "ctrl2"), |
| r242703 | r242704 | |
|---|---|---|
| 1 | 1 | /********************************************************************** |
| 2 | 2 | |
| 3 | Sega Master System "Sports Pad" ( | |
| 3 | Sega Master System "Sports Pad" (japanese model) emulation | |
| 4 | 4 | |
| 5 | 5 | Copyright MESS Team. |
| 6 | 6 | Visit http://mamedev.org for licensing and usage restrictions. |
| 7 | 7 | |
| 8 | 8 | **********************************************************************/ |
| 9 | 9 | |
| 10 | // The | |
| 10 | // The japanese Sports Pad controller is only required to play the cartridge | |
| 11 | 11 | // Sports Pad Soccer, released in Japan. It uses a different mode than the |
| 12 | 12 | // used by the US model, due to missing output lines on Sega Mark III |
| 13 | 13 | // controller ports. |
| r242703 | r242704 | |
|---|---|---|
| 1 | 1 | /********************************************************************** |
| 2 | 2 | |
| 3 | Sega Master System "Sports Pad" ( | |
| 3 | Sega Master System "Sports Pad" (japanese model) emulation | |
| 4 | 4 | |
| 5 | 5 | Copyright MESS Team. |
| 6 | 6 | Visit http://mamedev.org for licensing and usage restrictions. |
| 7 | 7 | |
| 8 | 8 | **********************************************************************/ |
| 9 | 9 | |
| 10 | // The | |
| 10 | // The japanese Sports Pad controller is only required to play the cartridge | |
| 11 | 11 | // Sports Pad Soccer, released in Japan. It uses a different mode than the |
| 12 | 12 | // used by the US model, due to missing output lines on Sega Mark III |
| 13 | 13 | // controller ports. |
| r242703 | r242704 | |
|---|---|---|
| 99 | 99 | |
| 100 | 100 | void arc_device::execute_set_input(int irqline, int state) |
| 101 | 101 | { |
| 102 | ||
| 102 | 103 | } |
| 103 | 104 | |
| 104 | 105 |
| r242703 | r242704 | |
|---|---|---|
| 68 | 68 | /* 03 */ "PL", // (aka P - Positive) |
| 69 | 69 | /* 04 */ "MI", // (aka N - Negative) |
| 70 | 70 | /* 05 */ "CS", // (aka C, LO - Carry set / Lower than) (unsigned) |
| 71 | /* 06 */ "CC", // (aka CC, NC, HS - Carry Clear / Higher or Same) (unsigned) | |
| 71 | /* 06 */ "CC", // (aka CC, NC, HS - Carry Clear / Higher or Same) (unsigned) | |
| 72 | 72 | /* 07 */ "VS", // (aka V - Overflow set) |
| 73 | 73 | /* 08 */ "VC", // (aka NV - Overflow clear) |
| 74 | 74 | /* 09 */ "GT", // ( - Greater than) (signed) |
| r242703 | r242704 | |
| 204 | 204 | case 0x05: // BL |
| 205 | 205 | print("%s(%s)(%s) %08x", basic[opcode], conditions[ARC_CONDITION], delaytype[ARC_BRANCH_DELAY], (ARC_BRANCH_ADDR<<2)+pc+4); |
| 206 | 206 | break; |
| 207 | ||
| 207 | ||
| 208 | 208 | case 0x08: // ADD |
| 209 | 209 | // todo, short / long immediate formats |
| 210 | 210 | print("%s %s , %s , %s (%08x)", basic[opcode], regnames[ARC_REGOP_DEST], regnames[ARC_REGOP_OP1], regnames[ARC_REGOP_OP2], op &~ 0xfffffe00); |
| r242703 | r242704 | |
|---|---|---|
| 24 | 24 | |
| 25 | 25 | const device_type ARCA5 = &device_creator<arcompact_device>; |
| 26 | 26 | |
| 27 | ||
| 28 | READ32_MEMBER( arcompact_device::arcompact_auxreg002_LPSTART_r) { return m_LP_START&0xfffffffe; } | |
| 29 | WRITE32_MEMBER(arcompact_device::arcompact_auxreg002_LPSTART_w) { m_LP_START = data&0xfffffffe; } | |
| 30 | READ32_MEMBER( arcompact_device::arcompact_auxreg003_LPEND_r) { return m_LP_END&0xfffffffe; } | |
| 31 | WRITE32_MEMBER(arcompact_device::arcompact_auxreg003_LPEND_w) { m_LP_END = data&0xfffffffe; } | |
| 32 | ||
| 33 | READ32_MEMBER( arcompact_device::arcompact_auxreg00a_STATUS32_r) { return 0xffffdead; /*m_status32;*/ } | |
| 34 | ||
| 35 | READ32_MEMBER( arcompact_device::arcompact_auxreg025_INTVECTORBASE_r) { return m_INTVECTORBASE&0xfffffc00; } | |
| 36 | WRITE32_MEMBER(arcompact_device::arcompact_auxreg025_INTVECTORBASE_w) { m_INTVECTORBASE = data&0xfffffc00; } | |
| 37 | ||
| 38 | ||
| 39 | ||
| 40 | ||
| 41 | static ADDRESS_MAP_START( arcompact_auxreg_map, AS_IO, 32, arcompact_device ) | |
| 42 | AM_RANGE(0x000000008, 0x00000000b) AM_READWRITE(arcompact_auxreg002_LPSTART_r, arcompact_auxreg002_LPSTART_w) | |
| 43 | AM_RANGE(0x00000000c, 0x00000000f) AM_READWRITE(arcompact_auxreg003_LPEND_r, arcompact_auxreg003_LPEND_w) | |
| 44 | AM_RANGE(0x000000028, 0x00000002b) AM_READ(arcompact_auxreg00a_STATUS32_r) // r/o | |
| 45 | AM_RANGE(0x000000094, 0x000000097) AM_READWRITE(arcompact_auxreg025_INTVECTORBASE_r, arcompact_auxreg025_INTVECTORBASE_w) | |
| 46 | ADDRESS_MAP_END | |
| 47 | ||
| 48 | //#define AUX_SPACE_ADDRESS_WIDTH 34 // IO space is 32 bits of dwords, so 34-bits | |
| 49 | #define AUX_SPACE_ADDRESS_WIDTH 64 // but the MAME core requires us to use power of 2 values for >32 | |
| 50 | ||
| 51 | 27 | arcompact_device::arcompact_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 52 | 28 | : cpu_device(mconfig, ARCA5, "ARCtangent-A5", tag, owner, clock, "arca5", __FILE__) |
| 53 | 29 | , m_program_config("program", ENDIANNESS_LITTLE, 32, 32, 0) // some docs describe these as 'middle endian'?! |
| 54 | , m_io_config( "io", ENDIANNESS_LITTLE, 32, AUX_SPACE_ADDRESS_WIDTH, 0, ADDRESS_MAP_NAME( arcompact_auxreg_map ) ) | |
| 55 | 30 | { |
| 56 | 31 | } |
| 57 | 32 | |
| r242703 | r242704 | |
| 84 | 59 | m_debugger_temp = 0; |
| 85 | 60 | |
| 86 | 61 | m_program = &space(AS_PROGRAM); |
| 87 | m_io = &space(AS_IO); | |
| 88 | 62 | |
| 89 | 63 | state_add( 0, "PC", m_debugger_temp).callimport().callexport().formatstr("%08X"); |
| 90 | 64 | |
| 91 | 65 | state_add( 0x10, "STATUS32", m_debugger_temp).callimport().callexport().formatstr("%08X"); |
| 92 | state_add( 0x11, "LP_START", m_debugger_temp).callimport().callexport().formatstr("%08X"); | |
| 93 | state_add( 0x12, "LP_END", m_debugger_temp).callimport().callexport().formatstr("%08X"); | |
| 94 | 66 | |
| 95 | 67 | state_add(STATE_GENPC, "GENPC", m_debugger_temp).callexport().noshow(); |
| 96 | 68 | |
| r242703 | r242704 | |
| 116 | 88 | case 0x10: |
| 117 | 89 | m_debugger_temp = m_status32; |
| 118 | 90 | break; |
| 119 | case 0x11: | |
| 120 | m_debugger_temp = m_LP_START; | |
| 121 | break; | |
| 122 | case 0x12: | |
| 123 | m_debugger_temp = m_LP_END; | |
| 124 | break; | |
| 125 | 91 | |
| 126 | 92 | case STATE_GENPC: |
| 127 | 93 | m_debugger_temp = m_pc; |
| r242703 | r242704 | |
| 150 | 116 | case 0x10: |
| 151 | 117 | m_status32 = m_debugger_temp; |
| 152 | 118 | break; |
| 153 | case 0x11: | |
| 154 | m_LP_START = m_debugger_temp; | |
| 155 | break; | |
| 156 | case 0x12: | |
| 157 | m_LP_END = m_debugger_temp; | |
| 158 | break; | |
| 159 | 119 | |
| 160 | 120 | default: |
| 161 | 121 | if ((index >= 0x100) && (index < 0x140)) |
| r242703 | r242704 | |
| 177 | 137 | m_regs[i] = 0; |
| 178 | 138 | |
| 179 | 139 | m_status32 = 0; |
| 180 | m_LP_START = 0; | |
| 181 | m_LP_END = 0; | |
| 182 | m_INTVECTORBASE = 0; | |
| 183 | ||
| 184 | 140 | } |
| 185 | 141 | |
| 186 | ||
| 187 | 142 | /*****************************************************************************/ |
| 188 | 143 | |
| 189 | ||
| 190 | 144 | void arcompact_device::execute_set_input(int irqline, int state) |
| 191 | 145 | { |
| 146 | ||
| 192 | 147 | } |
| r242703 | r242704 | |
|---|---|---|
| 21 | 21 | ARCOMPACT_RETTYPE arcompact_handle##name##_p11(OPS_32) \ |
| 22 | 22 | { \ |
| 23 | 23 | int M = (op & 0x00000020) >> 5; \ |
| 24 | | |
| 24 | \ | |
| 25 | 25 | switch (M) \ |
| 26 | 26 | { \ |
| 27 | 27 | case 0x00: return arcompact_handle##name##_p11_m0(PARAMS); \ |
| 28 | 28 | case 0x01: return arcompact_handle##name##_p11_m1(PARAMS); \ |
| 29 | 29 | } \ |
| 30 | | |
| 30 | \ | |
| 31 | 31 | return 0; \ |
| 32 | }; | |
| 32 | }; \ | |
| 33 | ||
| 33 | 34 | #define ARCOMPACT_HANDLER04_TYPE(name) \ |
| 34 | 35 | ARCOMPACT_RETTYPE arcompact_handle##name(OPS_32) \ |
| 35 | 36 | { \ |
| r242703 | r242704 | |
| 44 | 45 | } \ |
| 45 | 46 | \ |
| 46 | 47 | return 0; \ |
| 47 | }; | |
| 48 | }; \ | |
| 48 | 49 | |
| 50 | ||
| 49 | 51 | #define ARCOMPACT_HANDLER04_TYPE_PM(name) \ |
| 50 | 52 | ARCOMPACT_RETTYPE arcompact_handle##name##_p00(OPS_32); \ |
| 51 | 53 | ARCOMPACT_RETTYPE arcompact_handle##name##_p01(OPS_32); \ |
| r242703 | r242704 | |
| 53 | 55 | ARCOMPACT_RETTYPE arcompact_handle##name##_p11_m0(OPS_32); \ |
| 54 | 56 | ARCOMPACT_RETTYPE arcompact_handle##name##_p11_m1(OPS_32); \ |
| 55 | 57 | ARCOMPACT_HANDLER04_P11_TYPE(name); \ |
| 56 | ARCOMPACT_HANDLER04_TYPE(name); | |
| 58 | ARCOMPACT_HANDLER04_TYPE(name); \ | |
| 57 | 59 | |
| 60 | ||
| 58 | 61 | class arcompact_device : public cpu_device |
| 59 | 62 | { |
| 60 | 63 | public: |
| 61 | 64 | // construction/destruction |
| 62 | 65 | arcompact_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 63 | ||
| 64 | DECLARE_READ32_MEMBER( arcompact_auxreg002_LPSTART_r); | |
| 65 | DECLARE_WRITE32_MEMBER(arcompact_auxreg002_LPSTART_w); | |
| 66 | DECLARE_READ32_MEMBER( arcompact_auxreg003_LPEND_r); | |
| 67 | DECLARE_WRITE32_MEMBER(arcompact_auxreg003_LPEND_w); | |
| 68 | ||
| 69 | DECLARE_READ32_MEMBER( arcompact_auxreg00a_STATUS32_r); | |
| 70 | DECLARE_READ32_MEMBER( arcompact_auxreg025_INTVECTORBASE_r); | |
| 71 | DECLARE_WRITE32_MEMBER( arcompact_auxreg025_INTVECTORBASE_w); | |
| 72 | 66 | |
| 73 | ||
| 74 | 67 | protected: |
| 75 | 68 | // device-level overrides |
| 76 | 69 | virtual void device_start(); |
| r242703 | r242704 | |
| 84 | 77 | virtual void execute_set_input(int inputnum, int state); |
| 85 | 78 | |
| 86 | 79 | // device_memory_interface overrides |
| 87 | virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : | |
| 80 | virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : NULL; } | |
| 88 | 81 | |
| 89 | 82 | // device_state_interface overrides |
| 90 | 83 | virtual void state_import(const device_state_entry &entry); |
| r242703 | r242704 | |
| 153 | 146 | ARCOMPACT_RETTYPE arcompact_handle01_01_01_0f(OPS_32); |
| 154 | 147 | ARCOMPACT_RETTYPE arcompact_handle02(OPS_32); |
| 155 | 148 | ARCOMPACT_RETTYPE arcompact_handle03(OPS_32); |
| 156 | // | |
| 149 | // ARCOMPACT_RETTYPE arcompact_handle04_00(OPS_32); | |
| 157 | 150 | ARCOMPACT_RETTYPE arcompact_handle04_01(OPS_32); |
| 158 | ||
| 151 | ARCOMPACT_RETTYPE arcompact_handle04_02(OPS_32); | |
| 159 | 152 | ARCOMPACT_RETTYPE arcompact_handle04_03(OPS_32); |
| 160 | // ARCOMPACT_RETTYPE arcompact_handle04_04(OPS_32); | |
| 161 | // ARCOMPACT_RETTYPE arcompact_handle04_05(OPS_32); | |
| 162 | // ARCOMPACT_RETTYPE arcompact_handle04_06(OPS_32); | |
| 163 | // ARCOMPACT_RETTYPE arcompact_handle04_07(OPS_32); | |
| 153 | // ARCOMPACT_RETTYPE arcompact_handle04_04(OPS_32); | |
| 154 | // ARCOMPACT_RETTYPE arcompact_handle04_05(OPS_32); | |
| 155 | // ARCOMPACT_RETTYPE arcompact_handle04_06(OPS_32); | |
| 156 | // ARCOMPACT_RETTYPE arcompact_handle04_07(OPS_32); | |
| 164 | 157 | ARCOMPACT_RETTYPE arcompact_handle04_08(OPS_32); |
| 165 | 158 | ARCOMPACT_RETTYPE arcompact_handle04_09(OPS_32); |
| 166 | // | |
| 159 | // ARCOMPACT_RETTYPE arcompact_handle04_0a(OPS_32); | |
| 167 | 160 | ARCOMPACT_RETTYPE arcompact_handle04_0b(OPS_32); |
| 168 | 161 | ARCOMPACT_RETTYPE arcompact_handle04_0c(OPS_32); |
| 169 | 162 | ARCOMPACT_RETTYPE arcompact_handle04_0d(OPS_32); |
| 170 | // ARCOMPACT_RETTYPE arcompact_handle04_0e(OPS_32); | |
| 171 | // ARCOMPACT_RETTYPE arcompact_handle04_0f(OPS_32); | |
| 163 | ARCOMPACT_RETTYPE arcompact_handle04_0e(OPS_32); | |
| 164 | // ARCOMPACT_RETTYPE arcompact_handle04_0f(OPS_32); | |
| 172 | 165 | ARCOMPACT_RETTYPE arcompact_handle04_10(OPS_32); |
| 173 | 166 | ARCOMPACT_RETTYPE arcompact_handle04_11(OPS_32); |
| 174 | 167 | ARCOMPACT_RETTYPE arcompact_handle04_12(OPS_32); |
| 175 | // ARCOMPACT_RETTYPE arcompact_handle04_13(OPS_32); | |
| 176 | // ARCOMPACT_RETTYPE arcompact_handle04_14(OPS_32); | |
| 177 | // ARCOMPACT_RETTYPE arcompact_handle04_15(OPS_32); | |
| 178 | // ARCOMPACT_RETTYPE arcompact_handle04_16(OPS_32); | |
| 179 | // ARCOMPACT_RETTYPE arcompact_handle04_17(OPS_32); | |
| 180 | // ARCOMPACT_RETTYPE arcompact_handle04_18(OPS_32); | |
| 181 | // ARCOMPACT_RETTYPE arcompact_handle04_19(OPS_32); | |
| 168 | ARCOMPACT_RETTYPE arcompact_handle04_13(OPS_32); | |
| 169 | ARCOMPACT_RETTYPE arcompact_handle04_14(OPS_32); | |
| 170 | ARCOMPACT_RETTYPE arcompact_handle04_15(OPS_32); | |
| 171 | // ARCOMPACT_RETTYPE arcompact_handle04_16(OPS_32); | |
| 172 | ARCOMPACT_RETTYPE arcompact_handle04_17(OPS_32); | |
| 173 | ARCOMPACT_RETTYPE arcompact_handle04_18(OPS_32); | |
| 174 | ARCOMPACT_RETTYPE arcompact_handle04_19(OPS_32); | |
| 182 | 175 | ARCOMPACT_RETTYPE arcompact_handle04_1a(OPS_32); |
| 183 | 176 | ARCOMPACT_RETTYPE arcompact_handle04_1b(OPS_32); |
| 184 | 177 | ARCOMPACT_RETTYPE arcompact_handle04_1c(OPS_32); |
| 185 | 178 | ARCOMPACT_RETTYPE arcompact_handle04_1d(OPS_32); |
| 186 | // ARCOMPACT_RETTYPE arcompact_handle04_20(OPS_32); | |
| 187 | // ARCOMPACT_RETTYPE arcompact_handle04_21(OPS_32); | |
| 179 | // ARCOMPACT_RETTYPE arcompact_handle04_20(OPS_32); | |
| 180 | ARCOMPACT_RETTYPE arcompact_handle04_21(OPS_32); | |
| 188 | 181 | ARCOMPACT_RETTYPE arcompact_handle04_22(OPS_32); |
| 189 | 182 | ARCOMPACT_RETTYPE arcompact_handle04_23(OPS_32); |
| 190 | 183 | ARCOMPACT_RETTYPE arcompact_handle04_28(OPS_32); |
| 191 | 184 | ARCOMPACT_RETTYPE arcompact_handle04_29(OPS_32); |
| 192 | // ARCOMPACT_RETTYPE arcompact_handle04_2a(OPS_32); | |
| 193 | // ARCOMPACT_RETTYPE arcompact_handle04_2b(OPS_32); | |
| 185 | ARCOMPACT_RETTYPE arcompact_handle04_2a(OPS_32); | |
| 186 | ARCOMPACT_RETTYPE arcompact_handle04_2b(OPS_32); | |
| 194 | 187 | ARCOMPACT_RETTYPE arcompact_handle04_2f_00(OPS_32); |
| 195 | 188 | ARCOMPACT_RETTYPE arcompact_handle04_2f_01(OPS_32); |
| 196 | // ARCOMPACT_RETTYPE arcompact_handle04_2f_02(OPS_32); | |
| 197 | // ARCOMPACT_RETTYPE arcompact_handle04_2f_03(OPS_32); | |
| 189 | ARCOMPACT_RETTYPE arcompact_handle04_2f_02(OPS_32); | |
| 190 | ARCOMPACT_RETTYPE arcompact_handle04_2f_03(OPS_32); | |
| 198 | 191 | ARCOMPACT_RETTYPE arcompact_handle04_2f_04(OPS_32); |
| 199 | 192 | ARCOMPACT_RETTYPE arcompact_handle04_2f_05(OPS_32); |
| 200 | 193 | ARCOMPACT_RETTYPE arcompact_handle04_2f_06(OPS_32); |
| 201 | // ARCOMPACT_RETTYPE arcompact_handle04_2f_07(OPS_32); | |
| 202 | // ARCOMPACT_RETTYPE arcompact_handle04_2f_08(OPS_32); | |
| 194 | // ARCOMPACT_RETTYPE arcompact_handle04_2f_07(OPS_32); | |
| 195 | // ARCOMPACT_RETTYPE arcompact_handle04_2f_08(OPS_32); | |
| 203 | 196 | ARCOMPACT_RETTYPE arcompact_handle04_2f_09(OPS_32); |
| 204 | 197 | ARCOMPACT_RETTYPE arcompact_handle04_2f_0a(OPS_32); |
| 205 | 198 | ARCOMPACT_RETTYPE arcompact_handle04_2f_0b(OPS_32); |
| r242703 | r242704 | |
| 770 | 763 | ARCOMPACT_RETTYPE arcompact_handle19_0x_helper(OPS_16, const char* optext, int shift, int format); |
| 771 | 764 | ARCOMPACT_RETTYPE arcompact_handle1e_0x_helper(OPS_16, const char* optext); |
| 772 | 765 | ARCOMPACT_RETTYPE arcompact_handle1e_03_0x_helper(OPS_16, const char* optext); |
| 773 | ||
| 774 | 766 | |
| 775 | UINT32 handle_jump_to_addr(int delay, int link, UINT32 address, UINT32 next_addr); | |
| 776 | UINT32 handle_jump_to_register(int delay, int link, UINT32 reg, UINT32 next_addr, int flag); | |
| 777 | ||
| 778 | 767 | ARCOMPACT_RETTYPE get_insruction(OPS_32); |
| 779 | 768 | |
| 780 | 769 | ARCOMPACT_HANDLER04_TYPE_PM(04_00); |
| 781 | ARCOMPACT_HANDLER04_TYPE_PM(04_02); | |
| 782 | 770 | ARCOMPACT_HANDLER04_TYPE_PM(04_04); |
| 783 | 771 | ARCOMPACT_HANDLER04_TYPE_PM(04_05); |
| 784 | 772 | ARCOMPACT_HANDLER04_TYPE_PM(04_06); |
| 785 | 773 | ARCOMPACT_HANDLER04_TYPE_PM(04_07); |
| 786 | 774 | ARCOMPACT_HANDLER04_TYPE_PM(04_0a); |
| 787 | ARCOMPACT_HANDLER04_TYPE_PM(04_0e); | |
| 788 | 775 | ARCOMPACT_HANDLER04_TYPE_PM(04_0f); |
| 789 | ARCOMPACT_HANDLER04_TYPE_PM(04_13); | |
| 790 | ARCOMPACT_HANDLER04_TYPE_PM(04_14); | |
| 791 | ARCOMPACT_HANDLER04_TYPE_PM(04_15); | |
| 792 | 776 | ARCOMPACT_HANDLER04_TYPE_PM(04_16); |
| 793 | ARCOMPACT_HANDLER04_TYPE_PM(04_17); | |
| 794 | ARCOMPACT_HANDLER04_TYPE_PM(04_18); | |
| 795 | ARCOMPACT_HANDLER04_TYPE_PM(04_19); | |
| 796 | 777 | ARCOMPACT_HANDLER04_TYPE_PM(04_20); |
| 797 | ARCOMPACT_HANDLER04_TYPE_PM(04_21); | |
| 798 | ARCOMPACT_HANDLER04_TYPE_PM(04_2a); | |
| 799 | ARCOMPACT_HANDLER04_TYPE_PM(04_2b); | |
| 800 | 778 | |
| 801 | ARCOMPACT_HANDLER04_TYPE_PM(04_2f_02); | |
| 802 | ARCOMPACT_HANDLER04_TYPE_PM(04_2f_03); | |
| 803 | 779 | ARCOMPACT_HANDLER04_TYPE_PM(04_2f_07); |
| 804 | 780 | ARCOMPACT_HANDLER04_TYPE_PM(04_2f_08); |
| 805 | 781 | |
| r242703 | r242704 | |
| 808 | 784 | |
| 809 | 785 | |
| 810 | 786 | private: |
| 811 | const address_space_config m_program_config; | |
| 812 | const address_space_config m_io_config; | |
| 787 | address_space_config m_program_config; | |
| 813 | 788 | |
| 814 | 789 | UINT32 m_pc; |
| 815 | 790 | |
| 816 | 791 | address_space *m_program; |
| 817 | address_space *m_io; | |
| 818 | ||
| 819 | 792 | int m_icount; |
| 820 | 793 | |
| 821 | 794 | UINT32 m_debugger_temp; |
| r242703 | r242704 | |
| 825 | 798 | inline UINT32 READ32(UINT32 address) { return m_program->read_dword(address << 2); } |
| 826 | 799 | inline void WRITE32(UINT32 address, UINT32 data) { m_program->write_dword(address << 2, data); } |
| 827 | 800 | inline UINT16 READ16(UINT32 address) { return m_program->read_word(address << 1); } |
| 828 | inline void WRITE16(UINT32 address, UINT16 data){ | |
| 801 | inline void WRITE16(UINT32 address, UINT16 data){ m_program->write_word(address << 1, data); } | |
| 829 | 802 | inline UINT8 READ8(UINT32 address) { return m_program->read_byte(address << 0); } |
| 830 | inline void WRITE8(UINT32 address, UINT8 data){ | |
| 803 | inline void WRITE8(UINT32 address, UINT8 data){ m_program->write_byte(address << 0, data); } | |
| 831 | 804 | |
| 832 | inline UINT64 READAUX(UINT64 address) { return m_io->read_dword(address *4); } | |
| 833 | inline void WRITEAUX(UINT64 address, UINT32 data) { m_io->write_dword(address *4, data); } | |
| 834 | ||
| 835 | ||
| 836 | int check_condition(UINT8 condition); | |
| 837 | ||
| 838 | 805 | UINT32 m_regs[0x40]; |
| 839 | 806 | |
| 840 | 807 | int m_delayactive; |
| 841 | 808 | int m_delaylinks; |
| 842 | 809 | UINT32 m_delayjump; |
| 843 | 810 | |
| 844 | // | |
| 811 | // f e d c| b a 9 8| 7 6 5 4| 3 2 1 0 | |
| 845 | 812 | // - - - L| Z N C V| U DE AE A2|A1 E2 E1 H |
| 846 | 813 | UINT32 m_status32; |
| 847 | ||
| 848 | UINT32 m_LP_START; | |
| 849 | UINT32 m_LP_END; | |
| 850 | UINT32 m_INTVECTORBASE; | |
| 851 | ||
| 852 | 814 | }; |
| 853 | 815 | |
| 854 | 816 | #define V_OVERFLOW_FLAG (0x00000100) |
| r242703 | r242704 | |
| 876 | 838 | #define STATUS32_CLEAR_Z (m_status32 &= ~Z_ZERO_FLAG) |
| 877 | 839 | #define STATUS32_CHECK_Z (m_status32 & Z_ZERO_FLAG) |
| 878 | 840 | |
| 879 | // Condition 0x0c (LE) | |
| 880 | #define CONDITION_LE ((STATUS32_CHECK_Z) || (STATUS32_CHECK_N && !STATUS32_CHECK_V) || (!STATUS32_CHECK_N && STATUS32_CHECK_V)) // Z or (N and /V) or (/N and V) | |
| 881 | #define CONDITION_EQ (STATUS32_CHECK_Z) | |
| 882 | #define CONDITION_CS (STATUS32_CHECK_C) | |
| 883 | #define CONDITION_LT ((STATUS32_CHECK_N && !STATUS32_CHECK_V) || (!STATUS32_CHECK_N && STATUS32_CHECK_V)) | |
| 884 | #define CONDITION_MI (STATUS32_CHECK_N) | |
| 885 | 841 | |
| 886 | 842 | extern const device_type ARCA5; |
| 887 | 843 |
| r242703 | r242704 | |
|---|---|---|
| 4 | 4 | |
| 5 | 5 | \*********************************/ |
| 6 | 6 | |
| 7 | // condition codes (basic ones are the same as arc | |
| 7 | // condition codes (basic ones are the same as arc | |
| 8 | 8 | const char *conditions[0x20] = |
| 9 | 9 | { |
| 10 | 10 | /* 00 */ "AL", // (aka RA - Always) |
| r242703 | r242704 | |
| 13 | 13 | /* 03 */ "PL", // (aka P - Positive) |
| 14 | 14 | /* 04 */ "MI", // (aka N - Negative) |
| 15 | 15 | /* 05 */ "CS", // (aka C, LO - Carry set / Lower than) (unsigned) |
| 16 | /* 06 */ "CC", // (aka CC, NC, HS - Carry Clear / Higher or Same) (unsigned) | |
| 16 | /* 06 */ "CC", // (aka CC, NC, HS - Carry Clear / Higher or Same) (unsigned) | |
| 17 | 17 | /* 07 */ "VS", // (aka V - Overflow set) |
| 18 | 18 | /* 08 */ "VC", // (aka NV - Overflow clear) |
| 19 | 19 | /* 09 */ "GT", // ( - Greater than) (signed) |
| r242703 | r242704 | |
| 44 | 44 | #define UNUSED_REG "unusedreg" |
| 45 | 45 | |
| 46 | 46 | #define AUX_UNUSED_16 \ |
| 47 | /* 0xxx0 */ UNUSED_REG, | |
| 47 | /* 0xxx0 */ UNUSED_REG, /* 0xxx1 */ UNUSED_REG, /* 0xxx2 */ UNUSED_REG, /* 0xxx3 */ UNUSED_REG, /* 0xxx4 */ UNUSED_REG, /* 0xxx5 */ UNUSED_REG, /* 0xxx6 */ UNUSED_REG, /* 0xxx7 */ UNUSED_REG, /* 0xxx8 */ UNUSED_REG, /* 0xxx9 */ UNUSED_REG, /* 0xxxa */ UNUSED_REG, /* 0xxxb */ UNUSED_REG, /* 0xxxc */ UNUSED_REG, /* 0xxxd */ UNUSED_REG, /* 0xxxe */ UNUSED_REG, /* 0xxxf */ UNUSED_REG, | |
| 48 | 48 | |
| 49 | 49 | // the Auxiliary Register set is actually a 2^32 dword address space (so 16 GB / 34-bit) |
| 50 | 50 | // this table just allows us to improve the debugger display for some of the common core / internal ones |
| r242703 | r242704 | |
| 125 | 125 | AUX_UNUSED_16 /* 0x090 - 0x09f */ |
| 126 | 126 | AUX_UNUSED_16 /* 0x0a0 - 0x0af */ |
| 127 | 127 | AUX_UNUSED_16 /* 0x0b0 - 0x0bf */ |
| 128 | | |
| 128 | // build configuration registers 0x0c0 - 0x0ff | |
| 129 | 129 | /* 0x0c0 */ "RESERVED AUX 0xc0",/* 0x0c1 */ "RESERVED AUX 0xc1",/* 0x0c2 */ "RESERVED AUX 0xc2",/* 0x0c3 */ "RESERVED AUX 0xc3",/* 0x0c4 */ "RESERVED AUX 0xc4",/* 0x0c5 */ "RESERVED AUX 0xc5",/* 0x0c6 */ "RESERVED AUX 0xc6",/* 0x0c7 */ "RESERVED AUX 0xc7",/* 0x0c8 */ "RESERVED AUX 0xc8",/* 0x0c9 */ "RESERVED AUX 0xc9",/* 0x0ca */ "RESERVED AUX 0xca",/* 0x0cb */ "RESERVED AUX 0xcb",/* 0x0cc */ "RESERVED AUX 0xcc",/* 0x0cd */ "RESERVED AUX 0xcd",/* 0x0ce */ "RESERVED AUX 0xce",/* 0x0cf */ "RESERVED AUX 0xcf", |
| 130 | 130 | /* 0x0d0 */ "RESERVED AUX 0xd0",/* 0x0d1 */ "RESERVED AUX 0xd1",/* 0x0d2 */ "RESERVED AUX 0xd2",/* 0x0d3 */ "RESERVED AUX 0xd3",/* 0x0d4 */ "RESERVED AUX 0xd4",/* 0x0d5 */ "RESERVED AUX 0xd5",/* 0x0d6 */ "RESERVED AUX 0xd6",/* 0x0d7 */ "RESERVED AUX 0xd7",/* 0x0d8 */ "RESERVED AUX 0xd8",/* 0x0d9 */ "RESERVED AUX 0xd9",/* 0x0da */ "RESERVED AUX 0xda",/* 0x0db */ "RESERVED AUX 0xdb",/* 0x0dc */ "RESERVED AUX 0xdc",/* 0x0dd */ "RESERVED AUX 0xdd",/* 0x0de */ "RESERVED AUX 0xde",/* 0x0df */ "RESERVED AUX 0xdf", |
| 131 | 131 | /* 0x0e0 */ "RESERVED AUX 0xe0",/* 0x0e1 */ "RESERVED AUX 0xe1",/* 0x0e2 */ "RESERVED AUX 0xe2",/* 0x0e3 */ "RESERVED AUX 0xe3",/* 0x0e4 */ "RESERVED AUX 0xe4",/* 0x0e5 */ "RESERVED AUX 0xe5",/* 0x0e6 */ "RESERVED AUX 0xe6",/* 0x0e7 */ "RESERVED AUX 0xe7",/* 0x0e8 */ "RESERVED AUX 0xe8",/* 0x0e9 */ "RESERVED AUX 0xe9",/* 0x0ea */ "RESERVED AUX 0xea",/* 0x0eb */ "RESERVED AUX 0xeb",/* 0x0ec */ "RESERVED AUX 0xec",/* 0x0ed */ "RESERVED AUX 0xed",/* 0x0ee */ "RESERVED AUX 0xee",/* 0x0ef */ "RESERVED AUX 0xef", |
| r242703 | r242704 | |
| 371 | 371 | /* 37 */ "r55(ext)", |
| 372 | 372 | /* 38 */ "r56(ext)", |
| 373 | 373 | /* 39 */ "r57(M-LO)", // MLO (result registers for optional multply functions) |
| 374 | /* 3a */ "r58(M-MID)", // MMID | |
| 375 | /* 3b */ "r59(M-HI)", // MHI | |
| 374 | /* 3a */ "r58(M-MID)", // MMID | |
| 375 | /* 3b */ "r59(M-HI)", // MHI | |
| 376 | 376 | /* 3c */ "r60(LP_COUNT)", |
| 377 | 377 | /* 3d */ "r61(reserved)", |
| 378 | 378 | /* 3e */ "r62(LIMM)", // use Long Immediate Data instead of register |
| r242703 | r242704 | |
| 523 | 523 | /* 3e */ "0x3e", |
| 524 | 524 | /* 3f */ "0x3f", |
| 525 | 525 | }; |
| 526 |
| r242703 | r242704 | |
|---|---|---|
| 17 | 17 | |
| 18 | 18 | #define REG_BLINK (0x1f) // r31 |
| 19 | 19 | #define REG_SP (0x1c) // r28 |
| 20 | #define REG_ILINK1 (0x1d) // r29 | |
| 21 | #define REG_ILINK2 (0x1e) // r30 | |
| 22 | #define REG_LP_COUNT (0x3c) // r60 |
| r242703 | r242704 | |
|---|---|---|
| 19 | 19 | { |
| 20 | 20 | debugger_instruction_hook(this, m_pc); |
| 21 | 21 | |
| 22 | // | |
| 22 | // printf("new pc %04x\n", m_pc); | |
| 23 | 23 | |
| 24 | 24 | if (m_delayactive) |
| 25 | 25 | { |
| r242703 | r242704 | |
| 36 | 36 | m_pc = get_insruction(op); |
| 37 | 37 | } |
| 38 | 38 | |
| 39 | // hardware loops | |
| 40 | if (m_pc == m_LP_END) | |
| 41 | { | |
| 42 | if (m_regs[REG_LP_COUNT] != 1) | |
| 43 | { | |
| 44 | m_pc = m_LP_START; | |
| 45 | } | |
| 46 | m_regs[REG_LP_COUNT]--; | |
| 47 | ||
| 48 | } | |
| 49 | ||
| 50 | 39 | m_icount--; |
| 51 | 40 | } |
| 52 | 41 | |
| r242703 | r242704 | |
| 56 | 45 | #define GET_01_01_01_BRANCH_ADDR \ |
| 57 | 46 | INT32 address = (op & 0x00fe0000) >> 17; \ |
| 58 | 47 | address |= ((op & 0x00008000) >> 15) << 7; \ |
| 59 | if (address & 0x80) address = -0x80 + (address & 0x7f); | |
| 48 | if (address & 0x80) address = -0x80 + (address & 0x7f); \ | |
| 60 | 49 | |
| 50 | ||
| 61 | 51 | #define GROUP_0e_GET_h \ |
| 62 | 52 | h = ((op & 0x0007) << 3); \ |
| 63 | h |= ((op & 0x00e0) >> 5); | |
| 53 | h |= ((op & 0x00e0) >> 5); \ | |
| 54 | ||
| 64 | 55 | #define COMMON32_GET_breg \ |
| 65 | 56 | int b_temp = (op & 0x07000000) >> 24; \ |
| 66 | 57 | int B_temp = (op & 0x00007000) >> 12; \ |
| 67 | int breg = b_temp | (B_temp << 3); | |
| 58 | int breg = b_temp | (B_temp << 3); \ | |
| 59 | ||
| 68 | 60 | #define COMMON32_GET_creg \ |
| 69 | int creg = (op & 0x00000fc0) >> 6; | |
| 61 | int creg = (op & 0x00000fc0) >> 6; \ | |
| 62 | ||
| 70 | 63 | #define COMMON32_GET_u6 \ |
| 71 | int u = (op & 0x00000fc0) >> 6; | |
| 64 | int u = (op & 0x00000fc0) >> 6; \ | |
| 65 | ||
| 72 | 66 | #define COMMON32_GET_areg \ |
| 73 | int areg = (op & 0x0000003f) >> 0; | |
| 67 | int areg = (op & 0x0000003f) >> 0; \ | |
| 68 | ||
| 74 | 69 | #define COMMON32_GET_areg_reserved \ |
| 75 | int ares = (op & 0x0000003f) >> 0; | |
| 70 | int ares = (op & 0x0000003f) >> 0; \ | |
| 71 | ||
| 76 | 72 | #define COMMON32_GET_F \ |
| 77 | int F = (op & 0x00008000) >> 15; | |
| 73 | int F = (op & 0x00008000) >> 15; \ | |
| 74 | ||
| 78 | 75 | #define COMMON32_GET_p \ |
| 79 | int p = (op & 0x00c00000) >> 22; | |
| 76 | int p = (op & 0x00c00000) >> 22; \ | |
| 80 | 77 | |
| 78 | ||
| 81 | 79 | #define COMMON32_GET_s12 \ |
| 82 | 80 | int S_temp = (op & 0x0000003f) >> 0; \ |
| 83 | 81 | int s_temp = (op & 0x00000fc0) >> 6; \ |
| 84 | 82 | INT32 S = s_temp | (S_temp<<6); \ |
| 85 | if (S & 0x800) S = -0x800 + (S&0x7ff); /* sign extend */ | |
| 83 | if (S & 0x800) S = -0x800 + (S&0x7ff); /* sign extend */ \ | |
| 84 | ||
| 86 | 85 | #define COMMON32_GET_CONDITION \ |
| 87 | 86 | UINT8 condition = op & 0x0000001f; |
| 88 | 87 | |
| 89 | 88 | |
| 90 | 89 | #define COMMON16_GET_breg \ |
| 91 | breg = ((op & 0x0700) >>8); | |
| 90 | breg = ((op & 0x0700) >>8); \ | |
| 91 | ||
| 92 | 92 | #define COMMON16_GET_creg \ |
| 93 | creg = ((op & 0x00e0) >>5); | |
| 93 | creg = ((op & 0x00e0) >>5); \ | |
| 94 | ||
| 94 | 95 | #define COMMON16_GET_areg \ |
| 95 | areg = ((op & 0x0007) >>0); | |
| 96 | areg = ((op & 0x0007) >>0); \ | |
| 97 | ||
| 96 | 98 | #define COMMON16_GET_u3 \ |
| 97 | u = ((op & 0x0007) >>0); | |
| 99 | u = ((op & 0x0007) >>0); \ | |
| 100 | ||
| 98 | 101 | #define COMMON16_GET_u5 \ |
| 99 | u = ((op & 0x001f) >>0); | |
| 102 | u = ((op & 0x001f) >>0); \ | |
| 103 | ||
| 100 | 104 | #define COMMON16_GET_u8 \ |
| 101 | u = ((op & 0x00ff) >>0); | |
| 105 | u = ((op & 0x00ff) >>0); \ | |
| 106 | ||
| 102 | 107 | #define COMMON16_GET_u7 \ |
| 103 | u = ((op & 0x007f) >>0); | |
| 108 | u = ((op & 0x007f) >>0); \ | |
| 109 | ||
| 104 | 110 | #define COMMON16_GET_s9 \ |
| 105 | s = ((op & 0x01ff) >>0); | |
| 111 | s = ((op & 0x01ff) >>0); \ | |
| 112 | ||
| 106 | 113 | // registers used in 16-bit opcodes hae a limited range |
| 107 | 114 | // and can only address registers r0-r3 and r12-r15 |
| 108 | 115 | |
| 109 | 116 | #define REG_16BIT_RANGE(_reg_) \ |
| 110 | if (_reg_>3) _reg_+= 8; | |
| 117 | if (_reg_>3) _reg_+= 8; \ | |
| 111 | 118 | |
| 119 | ||
| 112 | 120 | #define GET_LIMM_32 \ |
| 113 | 121 | limm = (READ16((m_pc + 4) >> 1) << 16); \ |
| 114 | limm |= READ16((m_pc + 6) >> 1); | |
| 122 | limm |= READ16((m_pc + 6) >> 1); \ | |
| 123 | ||
| 115 | 124 | #define GET_LIMM_16 \ |
| 116 | 125 | limm = (READ16((m_pc + 2) >> 1) << 16); \ |
| 117 | limm |= READ16((m_pc + 4) >> 1); | |
| 126 | limm |= READ16((m_pc + 4) >> 1); \ | |
| 118 | 127 | |
| 128 | ||
| 119 | 129 | #define PC_ALIGNED32 \ |
| 120 | 130 | (m_pc&0xfffffffc) |
| 121 | 131 | |
| 122 | int arcompact_device::check_condition(UINT8 condition) | |
| 123 | { | |
| 124 | switch (condition & 0x1f) | |
| 125 | { | |
| 126 | case 0x00: return 1; // AL | |
| 127 | case 0x01: return CONDITION_EQ; | |
| 128 | case 0x02: return !CONDITION_EQ; // NE | |
| 129 | case 0x03: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 130 | case 0x04: return CONDITION_MI; // MI (N) | |
| 131 | case 0x05: return CONDITION_CS; // CS (Carry Set / Lower than) | |
| 132 | case 0x06: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 133 | case 0x07: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 134 | case 0x08: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 135 | case 0x09: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 136 | case 0x0a: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 137 | case 0x0b: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 138 | case 0x0c: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 139 | case 0x0d: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 140 | case 0x0e: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 141 | case 0x0f: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 142 | case 0x10: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 143 | case 0x11: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 144 | case 0x12: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 145 | case 0x13: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 146 | case 0x14: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 147 | case 0x15: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 148 | case 0x16: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 149 | case 0x17: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 150 | case 0x18: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 151 | case 0x19: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 152 | case 0x1a: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 153 | case 0x1b: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 154 | case 0x1c: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 155 | case 0x1d: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 156 | case 0x1e: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 157 | case 0x1f: fatalerror("unhandled condition check %s", conditions[condition]); return -1; | |
| 158 | } | |
| 159 | 132 | |
| 160 | return -1; | |
| 161 | ||
| 162 | } | |
| 163 | ||
| 164 | ||
| 165 | 133 | ARCOMPACT_RETTYPE arcompact_device::get_insruction(OPS_32) |
| 166 | 134 | { |
| 167 | 135 | UINT8 instruction = ARCOMPACT_OPERATION; |
| r242703 | r242704 | |
| 173 | 141 | |
| 174 | 142 | switch (instruction) // 32-bit instructions (with optional extra dword for immediate data) |
| 175 | 143 | { |
| 176 | case 0x00: return arcompact_handle00(PARAMS); // Bcc | |
| 177 | case 0x01: return arcompact_handle01(PARAMS); // BLcc/BRcc | |
| 178 | case 0x02: return arcompact_handle02(PARAMS); // LD r+o | |
| 179 | case 0x03: return arcompact_handle03(PARAMS); // ST r+o | |
| 180 | case 0x04: return arcompact_handle04(PARAMS); // op a,b,c (basecase) | |
| 181 | case 0x05: return arcompact_handle05(PARAMS); // op a,b,c (05 ARC ext) | |
| 182 | case 0x06: return arcompact_handle06(PARAMS); // op a,b,c (06 ARC ext) | |
| 183 | case 0x07: return arcompact_handle07(PARAMS); // op a,b,c (07 User ext) | |
| 184 | case 0x08: return arcompact_handle08(PARAMS); // op a,b,c (08 User ext) | |
| 185 | case 0x09: return arcompact_handle09(PARAMS); // op a,b,c (09 Market ext) | |
| 186 | case 0x0a: return arcompact_handle0a(PARAMS); // op a,b,c (0a Market ext) | |
| 187 | case 0x0b: return arcompact_handle0b(PARAMS); // op a,b,c (0b Market ext) | |
| 144 | case 0x00: return arcompact_handle00(PARAMS); // Bcc | |
| 145 | case 0x01: return arcompact_handle01(PARAMS); // BLcc/BRcc | |
| 146 | case 0x02: return arcompact_handle02(PARAMS); // LD r+o | |
| 147 | case 0x03: return arcompact_handle03(PARAMS); // ST r+o | |
| 148 | case 0x04: return arcompact_handle04(PARAMS); // op a,b,c (basecase) | |
| 149 | case 0x05: return arcompact_handle05(PARAMS); // op a,b,c (05 ARC ext) | |
| 150 | case 0x06: return arcompact_handle06(PARAMS); // op a,b,c (06 ARC ext) | |
| 151 | case 0x07: return arcompact_handle07(PARAMS); // op a,b,c (07 User ext) | |
| 152 | case 0x08: return arcompact_handle08(PARAMS); // op a,b,c (08 User ext) | |
| 153 | case 0x09: return arcompact_handle09(PARAMS); // op a,b,c (09 Market ext) | |
| 154 | case 0x0a: return arcompact_handle0a(PARAMS); // op a,b,c (0a Market ext) | |
| 155 | case 0x0b: return arcompact_handle0b(PARAMS); // op a,b,c (0b Market ext) | |
| 188 | 156 | } |
| 189 | 157 | } |
| 190 | 158 | else |
| 191 | 159 | { |
| 192 | 160 | switch (instruction) // 16-bit instructions |
| 193 | 161 | { |
| 194 | case 0x0c: return arcompact_handle0c(PARAMS); // Load/Add reg-reg | |
| 195 | case 0x0d: return arcompact_handle0d(PARAMS); // Add/Sub/Shft imm | |
| 196 | case 0x0e: return arcompact_handle0e(PARAMS); // Mov/Cmp/Add | |
| 197 | case 0x0f: return arcompact_handle0f(PARAMS); // op_S b,b,c (single 16-bit ops) | |
| 198 | case 0x10: return arcompact_handle10(PARAMS); // LD_S | |
| 199 | case 0x11: return arcompact_handle11(PARAMS); // LDB_S | |
| 200 | case 0x12: return arcompact_handle12(PARAMS); // LDW_S | |
| 201 | case 0x13: return arcompact_handle13(PARAMS); // LSW_S.X | |
| 202 | case 0x14: return arcompact_handle14(PARAMS); // ST_S | |
| 203 | case 0x15: return arcompact_handle15(PARAMS); // STB_S | |
| 204 | case 0x16: return arcompact_handle16(PARAMS); // STW_S | |
| 205 | case 0x17: return arcompact_handle17(PARAMS); // Shift/Sub/Bit | |
| 206 | case 0x18: return arcompact_handle18(PARAMS); // Stack Instr | |
| 207 | case 0x19: return arcompact_handle19(PARAMS); // GP Instr | |
| 208 | case 0x1a: return arcompact_handle1a(PARAMS); // PCL Instr | |
| 209 | case 0x1b: return arcompact_handle1b(PARAMS); // MOV_S | |
| 210 | case 0x1c: return arcompact_handle1c(PARAMS); // ADD_S/CMP_S | |
| 211 | case 0x1d: return arcompact_handle1d(PARAMS); // BRcc_S | |
| 212 | case 0x1e: return arcompact_handle1e(PARAMS); // Bcc_S | |
| 213 | case 0x1f: return arcompact_handle1f(PARAMS); // BL_S | |
| 162 | case 0x0c: return arcompact_handle0c(PARAMS); // Load/Add reg-reg | |
| 163 | case 0x0d: return arcompact_handle0d(PARAMS); // Add/Sub/Shft imm | |
| 164 | case 0x0e: return arcompact_handle0e(PARAMS); // Mov/Cmp/Add | |
| 165 | case 0x0f: return arcompact_handle0f(PARAMS); // op_S b,b,c (single 16-bit ops) | |
| 166 | case 0x10: return arcompact_handle10(PARAMS); // LD_S | |
| 167 | case 0x11: return arcompact_handle11(PARAMS); // LDB_S | |
| 168 | case 0x12: return arcompact_handle12(PARAMS); // LDW_S | |
| 169 | case 0x13: return arcompact_handle13(PARAMS); // LSW_S.X | |
| 170 | case 0x14: return arcompact_handle14(PARAMS); // ST_S | |
| 171 | case 0x15: return arcompact_handle15(PARAMS); // STB_S | |
| 172 | case 0x16: return arcompact_handle16(PARAMS); // STW_S | |
| 173 | case 0x17: return arcompact_handle17(PARAMS); // Shift/Sub/Bit | |
| 174 | case 0x18: return arcompact_handle18(PARAMS); // Stack Instr | |
| 175 | case 0x19: return arcompact_handle19(PARAMS); // GP Instr | |
| 176 | case 0x1a: return arcompact_handle1a(PARAMS); // PCL Instr | |
| 177 | case 0x1b: return arcompact_handle1b(PARAMS); // MOV_S | |
| 178 | case 0x1c: return arcompact_handle1c(PARAMS); // ADD_S/CMP_S | |
| 179 | case 0x1d: return arcompact_handle1d(PARAMS); // BRcc_S | |
| 180 | case 0x1e: return arcompact_handle1e(PARAMS); // Bcc_S | |
| 181 | case 0x1f: return arcompact_handle1f(PARAMS); // BL_S | |
| 214 | 182 | } |
| 215 | 183 | } |
| 216 | 184 | |
| r242703 | r242704 | |
| 480 | 448 | |
| 481 | 449 | switch (subinstr2) |
| 482 | 450 | { |
| 483 | case 0x00: return arcompact_handle05_2f_00(PARAMS); // SWAP | |
| 484 | case 0x01: return arcompact_handle05_2f_01(PARAMS); // NORM | |
| 451 | case 0x00: return arcompact_handle05_2f_00(PARAMS); // SWAP | |
| 452 | case 0x01: return arcompact_handle05_2f_01(PARAMS); // NORM | |
| 485 | 453 | case 0x02: return arcompact_handle05_2f_02(PARAMS); // SAT16 |
| 486 | case 0x03: return arcompact_handle05_2f_03(PARAMS); // RND16 | |
| 487 | case 0x04: return arcompact_handle05_2f_04(PARAMS); // ABSSW | |
| 488 | case 0x05: return arcompact_handle05_2f_05(PARAMS); // ABSS | |
| 489 | case 0x06: return arcompact_handle05_2f_06(PARAMS); // NEGSW | |
| 490 | case 0x07: return arcompact_handle05_2f_07(PARAMS); // NEGS | |
| 491 | case 0x08: return arcompact_handle05_2f_08(PARAMS); // NORMW | |
| 454 | case 0x03: return arcompact_handle05_2f_03(PARAMS); // RND16 | |
| 455 | case 0x04: return arcompact_handle05_2f_04(PARAMS); // ABSSW | |
| 456 | case 0x05: return arcompact_handle05_2f_05(PARAMS); // ABSS | |
| 457 | case 0x06: return arcompact_handle05_2f_06(PARAMS); // NEGSW | |
| 458 | case 0x07: return arcompact_handle05_2f_07(PARAMS); // NEGS | |
| 459 | case 0x08: return arcompact_handle05_2f_08(PARAMS); // NORMW | |
| 492 | 460 | case 0x09: return arcompact_handle05_2f_09(PARAMS); // illegal |
| 493 | 461 | case 0x0a: return arcompact_handle05_2f_0a(PARAMS); // illegal |
| 494 | 462 | case 0x0b: return arcompact_handle05_2f_0b(PARAMS); // illegal |
| r242703 | r242704 | |
| 914 | 882 | |
| 915 | 883 | switch (subinstr) |
| 916 | 884 | { |
| 917 | case 0x00: return arcompact_handle17_00(PARAMS); // ASL_S | |
| 918 | case 0x01: return arcompact_handle17_01(PARAMS); // LSR_S | |
| 885 | case 0x00: return arcompact_handle17_00(PARAMS); // ASL_S | |
| 886 | case 0x01: return arcompact_handle17_01(PARAMS); // LSR_S | |
| 919 | 887 | case 0x02: return arcompact_handle17_02(PARAMS); // ASR_S |
| 920 | case 0x03: return arcompact_handle17_03(PARAMS); // SUB_S | |
| 921 | case 0x04: return arcompact_handle17_04(PARAMS); // BSET_S | |
| 922 | case 0x05: return arcompact_handle17_05(PARAMS); // BCLR_S | |
| 923 | case 0x06: return arcompact_handle17_06(PARAMS); // BMSK_S | |
| 888 | case 0x03: return arcompact_handle17_03(PARAMS); // SUB_S | |
| 889 | case 0x04: return arcompact_handle17_04(PARAMS); // BSET_S | |
| 890 | case 0x05: return arcompact_handle17_05(PARAMS); // BCLR_S | |
| 891 | case 0x06: return arcompact_handle17_06(PARAMS); // BMSK_S | |
| 924 | 892 | case 0x07: return arcompact_handle17_07(PARAMS); // BTST_S |
| 925 | 893 | } |
| 926 | 894 | |
| r242703 | r242704 | |
| 946 | 914 | return 0; |
| 947 | 915 | } |
| 948 | 916 | |
| 949 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05(OPS_16) | |
| 917 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05(OPS_16) | |
| 950 | 918 | { |
| 951 | 919 | UINT8 subinstr2 = (op & 0x0700) >> 8; |
| 952 | 920 | |
| r242703 | r242704 | |
| 954 | 922 | { |
| 955 | 923 | case 0x00: return arcompact_handle18_05_00(PARAMS); // ADD_S (SP) |
| 956 | 924 | case 0x01: return arcompact_handle18_05_01(PARAMS); // SUB_S (SP) |
| 957 | case 0x02: return arcompact_handle18_05_02(PARAMS); // <illegal 0x18_05_02> | |
| 925 | case 0x02: return arcompact_handle18_05_02(PARAMS); // <illegal 0x18_05_02> | |
| 958 | 926 | case 0x03: return arcompact_handle18_05_03(PARAMS); // <illegal 0x18_05_03> |
| 959 | 927 | case 0x04: return arcompact_handle18_05_04(PARAMS); // <illegal 0x18_05_04> |
| 960 | 928 | case 0x05: return arcompact_handle18_05_05(PARAMS); // <illegal 0x18_05_05> |
| r242703 | r242704 | |
| 965 | 933 | return 0; |
| 966 | 934 | } |
| 967 | 935 | |
| 968 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06(OPS_16) | |
| 936 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06(OPS_16) | |
| 969 | 937 | { |
| 970 | 938 | UINT8 subinstr2 = (op & 0x001f) >> 0; |
| 971 | 939 | |
| r242703 | r242704 | |
| 1008 | 976 | return 0; |
| 1009 | 977 | } |
| 1010 | 978 | |
| 1011 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07(OPS_16) | |
| 979 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07(OPS_16) | |
| 1012 | 980 | { |
| 1013 | 981 | UINT8 subinstr2 = (op & 0x001f) >> 0; |
| 1014 | 982 | |
| r242703 | r242704 | |
| 1114 | 1082 | switch (subinstr2) |
| 1115 | 1083 | { |
| 1116 | 1084 | case 0x00: return arcompact_handle1e_03_00(PARAMS); // BGT_S |
| 1117 | case 0x01: return arcompact_handle1e_03_01(PARAMS); // BGE_S | |
| 1085 | case 0x01: return arcompact_handle1e_03_01(PARAMS); // BGE_S | |
| 1118 | 1086 | case 0x02: return arcompact_handle1e_03_02(PARAMS); // BLT_S |
| 1119 | 1087 | case 0x03: return arcompact_handle1e_03_03(PARAMS); // BLE_S |
| 1120 | 1088 | case 0x04: return arcompact_handle1e_03_04(PARAMS); // BHI_S |
| 1121 | 1089 | case 0x05: return arcompact_handle1e_03_05(PARAMS); // BHS_S |
| 1122 | 1090 | case 0x06: return arcompact_handle1e_03_06(PARAMS); // BLO_S |
| 1123 | case 0x07: return arcompact_handle1e_03_07(PARAMS); // BLS_S | |
| 1091 | case 0x07: return arcompact_handle1e_03_07(PARAMS); // BLS_S | |
| 1124 | 1092 | } |
| 1125 | 1093 | |
| 1126 | 1094 | return 0; |
| r242703 | r242704 | |
| 1128 | 1096 | |
| 1129 | 1097 | // handlers |
| 1130 | 1098 | |
| 1131 | UINT32 arcompact_device::handle_jump_to_addr(int delay, int link, UINT32 address, UINT32 next_addr) | |
| 1132 | { | |
| 1133 | if (delay) | |
| 1134 | { | |
| 1135 | m_delayactive = 1; | |
| 1136 | m_delayjump = address; | |
| 1137 | if (link) m_delaylinks = 1; | |
| 1138 | else m_delaylinks = 0; | |
| 1139 | return next_addr; | |
| 1140 | } | |
| 1141 | else | |
| 1142 | { | |
| 1143 | if (link) m_regs[REG_BLINK] = next_addr; | |
| 1144 | return address; | |
| 1145 | } | |
| 1146 | 1099 | |
| 1147 | } | |
| 1148 | 1100 | |
| 1149 | UINT32 arcompact_device::handle_jump_to_register(int delay, int link, UINT32 reg, UINT32 next_addr, int flag) | |
| 1150 | { | |
| 1151 | if (reg == LIMM_REG) | |
| 1152 | arcompact_fatal("handle_jump_to_register called with LIMM register, call handle_jump_to_addr instead"); | |
| 1153 | ||
| 1154 | if ((reg == REG_ILINK1) || (reg == REG_ILINK2)) | |
| 1155 | { | |
| 1156 | if (flag) | |
| 1157 | { | |
| 1158 | arcompact_fatal("jump to ILINK1/ILINK2 not supported"); | |
| 1159 | return next_addr; | |
| 1160 | } | |
| 1161 | else | |
| 1162 | { | |
| 1163 | arcompact_fatal("illegal jump to ILINK1/ILINK2 not supported"); // FLAG bit must be set | |
| 1164 | return next_addr; | |
| 1165 | } | |
| 1166 | } | |
| 1167 | else | |
| 1168 | { | |
| 1169 | if (flag) | |
| 1170 | { | |
| 1171 | arcompact_fatal("illegal jump (flag bit set)"); // FLAG bit must NOT be set | |
| 1172 | return next_addr; | |
| 1173 | } | |
| 1174 | else | |
| 1175 | { | |
| 1176 | //arcompact_fatal("jump not supported"); | |
| 1177 | UINT32 target = m_regs[reg]; | |
| 1178 | return handle_jump_to_addr(delay, link, target, next_addr); | |
| 1179 | } | |
| 1180 | } | |
| 1181 | ||
| 1182 | return 0; | |
| 1183 | } | |
| 1184 | ||
| 1185 | 1101 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle00_00(OPS_32) |
| 1186 | 1102 | { |
| 1187 | 1103 | int size = 4; |
| 1188 | ||
| 1189 | COMMON32_GET_CONDITION | |
| 1190 | ||
| 1191 | if (!check_condition(condition)) | |
| 1192 | return m_pc + (size>>0); | |
| 1193 | ||
| 1194 | 1104 | // Branch Conditionally |
| 1195 | // 0000 0sss ssss sss0 SSSS SSSS SSNQ QQQQ | |
| 1196 | INT32 address = (op & 0x07fe0000) >> 17; | |
| 1197 | address |= ((op & 0x0000ffc0) >> 6) << 10; | |
| 1198 | if (address & 0x80000) address = -0x80000 + (address & 0x7ffff); | |
| 1199 | int n = (op & 0x00000020) >> 5; op &= ~0x00000020; | |
| 1200 | ||
| 1201 | UINT32 realaddress = PC_ALIGNED32 + (address * 2); | |
| 1202 | ||
| 1203 | if (n) | |
| 1204 | { | |
| 1205 | m_delayactive = 1; | |
| 1206 | m_delayjump = realaddress; | |
| 1207 | m_delaylinks = 0; // don't link | |
| 1208 | } | |
| 1209 | else | |
| 1210 | { | |
| 1211 | // m_regs[REG_BLINK] = m_pc + (size >> 0); // don't link | |
| 1212 | return realaddress; | |
| 1213 | } | |
| 1214 | ||
| 1215 | ||
| 1105 | arcompact_log("unimplemented Bcc %08x", op); | |
| 1216 | 1106 | return m_pc + (size>>0); |
| 1217 | 1107 | } |
| 1218 | 1108 | |
| r242703 | r242704 | |
| 1225 | 1115 | address |= ((op & 0x0000000f) >> 0) << 20; |
| 1226 | 1116 | if (address & 0x800000) address = -0x800000 + (address & 0x7fffff); |
| 1227 | 1117 | int n = (op & 0x00000020) >> 5; op &= ~0x00000020; |
| 1228 | // | |
| 1118 | // int res = (op & 0x00000010) >> 4; op &= ~0x00000010; // should be set to 0 | |
| 1229 | 1119 | |
| 1230 | 1120 | UINT32 realaddress = PC_ALIGNED32 + (address * 2); |
| 1231 | 1121 | |
| r242703 | r242704 | |
| 1237 | 1127 | } |
| 1238 | 1128 | else |
| 1239 | 1129 | { |
| 1240 | // | |
| 1130 | // m_regs[REG_BLINK] = m_pc + (size >> 0); // don't link | |
| 1241 | 1131 | return realaddress; |
| 1242 | 1132 | } |
| 1243 | 1133 | |
| r242703 | r242704 | |
| 1265 | 1155 | INT32 address = (op & 0x07fc0000) >> 17; |
| 1266 | 1156 | address |= ((op & 0x0000ffc0) >> 6) << 10; |
| 1267 | 1157 | address |= ((op & 0x0000000f) >> 0) << 20; |
| 1268 | if (address & 0x800000) address = -0x800000 + (address&0x7fffff); | |
| 1158 | if (address & 0x800000) address = -0x800000 + (address&0x7fffff); | |
| 1269 | 1159 | int n = (op & 0x00000020) >> 5; op &= ~0x00000020; |
| 1270 | // | |
| 1160 | // int res = (op & 0x00000010) >> 4; op &= ~0x00000010; | |
| 1271 | 1161 | |
| 1272 | 1162 | UINT32 realaddress = PC_ALIGNED32 + (address * 2); |
| 1273 | 1163 | |
| r242703 | r242704 | |
| 1302 | 1192 | |
| 1303 | 1193 | if ((breg != LIMM_REG) && (creg != LIMM_REG)) |
| 1304 | 1194 | { |
| 1195 | ||
| 1305 | 1196 | } |
| 1306 | 1197 | else |
| 1307 | 1198 | { |
| r242703 | r242704 | |
| 1335 | 1226 | UINT32 limm; \ |
| 1336 | 1227 | GET_LIMM_32; \ |
| 1337 | 1228 | size = 8; \ |
| 1338 | | |
| 1229 | \ | |
| 1339 | 1230 | if (breg == LIMM_REG) \ |
| 1340 | 1231 | b = limm; \ |
| 1341 | 1232 | else \ |
| 1342 | 1233 | b = m_regs[breg]; \ |
| 1343 | ||
| 1234 | \ | |
| 1344 | 1235 | if (creg == LIMM_REG) \ |
| 1345 | 1236 | c = limm; \ |
| 1346 | 1237 | else \ |
| 1347 | 1238 | c = m_regs[creg]; \ |
| 1348 | } | |
| 1239 | } \ | |
| 1240 | ||
| 1349 | 1241 | #define BR_TAKEJUMP \ |
| 1350 | 1242 | /* take jump */ \ |
| 1351 | 1243 | UINT32 realaddress = PC_ALIGNED32 + (address * 2); \ |
| 1352 | | |
| 1244 | \ | |
| 1353 | 1245 | if (n) \ |
| 1354 | 1246 | { \ |
| 1355 | 1247 | m_delayactive = 1; \ |
| r242703 | r242704 | |
| 1359 | 1251 | else \ |
| 1360 | 1252 | { \ |
| 1361 | 1253 | return realaddress; \ |
| 1362 | } | |
| 1254 | } \ | |
| 1363 | 1255 | |
| 1364 | 1256 | |
| 1257 | ||
| 1365 | 1258 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_00(OPS_32) // register - register BREQ |
| 1366 | 1259 | { |
| 1367 | 1260 | BR_REGREG_SETUP |
| r242703 | r242704 | |
| 1371 | 1264 | { |
| 1372 | 1265 | BR_TAKEJUMP |
| 1373 | 1266 | } |
| 1374 | ||
| 1267 | ||
| 1375 | 1268 | return m_pc + (size>>0); |
| 1376 | 1269 | } |
| 1377 | 1270 | |
| r242703 | r242704 | |
| 1384 | 1277 | { |
| 1385 | 1278 | BR_TAKEJUMP |
| 1386 | 1279 | } |
| 1387 | ||
| 1280 | ||
| 1388 | 1281 | return m_pc + (size>>0); |
| 1389 | 1282 | } |
| 1390 | 1283 | |
| r242703 | r242704 | |
| 1397 | 1290 | { |
| 1398 | 1291 | BR_TAKEJUMP |
| 1399 | 1292 | } |
| 1400 | ||
| 1293 | ||
| 1401 | 1294 | return m_pc + (size>>0); |
| 1402 | 1295 | |
| 1403 | 1296 | } |
| 1404 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_03(OPS_32) // register - register BRGE | |
| 1297 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_03(OPS_32) // register - register BRGE | |
| 1405 | 1298 | { |
| 1406 | 1299 | BR_REGREG_SETUP |
| 1407 | ||
| 1300 | ||
| 1408 | 1301 | // BRGE (signed operation) |
| 1409 | 1302 | if ((INT32)b >= (INT32)c) |
| 1410 | 1303 | { |
| 1411 | 1304 | BR_TAKEJUMP |
| 1412 | 1305 | } |
| 1413 | ||
| 1306 | ||
| 1414 | 1307 | return m_pc + (size>>0); |
| 1415 | 1308 | } |
| 1416 | 1309 | |
| r242703 | r242704 | |
| 1423 | 1316 | { |
| 1424 | 1317 | BR_TAKEJUMP |
| 1425 | 1318 | } |
| 1426 | ||
| 1319 | ||
| 1427 | 1320 | return m_pc + (size>>0); |
| 1428 | 1321 | } |
| 1429 | 1322 | |
| r242703 | r242704 | |
| 1437 | 1330 | { |
| 1438 | 1331 | BR_TAKEJUMP |
| 1439 | 1332 | } |
| 1440 | ||
| 1333 | ||
| 1441 | 1334 | return m_pc + (size>>0); |
| 1442 | 1335 | } |
| 1443 | 1336 | |
| r242703 | r242704 | |
| 1471 | 1364 | GET_LIMM_32; \ |
| 1472 | 1365 | size = 8; \ |
| 1473 | 1366 | b = limm; \ |
| 1474 | } | |
| 1367 | } \ | |
| 1475 | 1368 | |
| 1369 | ||
| 1476 | 1370 | // register -immediate cases |
| 1477 | 1371 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_00(OPS_32) // BREQ reg-imm |
| 1478 | 1372 | { |
| 1479 | 1373 | BR_REGIMM_SETUP |
| 1480 | ||
| 1374 | ||
| 1481 | 1375 | // BREQ |
| 1482 | 1376 | if (b == c) |
| 1483 | 1377 | { |
| 1484 | 1378 | BR_TAKEJUMP |
| 1485 | 1379 | } |
| 1486 | ||
| 1380 | ||
| 1487 | 1381 | return m_pc + (size>>0); |
| 1488 | 1382 | } |
| 1489 | 1383 | |
| 1490 | 1384 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_01(OPS_32) // BRNE reg-imm |
| 1491 | 1385 | { |
| 1492 | 1386 | BR_REGIMM_SETUP |
| 1493 | ||
| 1387 | ||
| 1494 | 1388 | // BRNE |
| 1495 | 1389 | if (b != c) |
| 1496 | 1390 | { |
| 1497 | 1391 | BR_TAKEJUMP |
| 1498 | 1392 | } |
| 1499 | ||
| 1393 | ||
| 1500 | 1394 | return m_pc + (size>>0); |
| 1501 | 1395 | } |
| 1502 | 1396 | |
| r242703 | r242704 | |
| 1505 | 1399 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_02(OPS_32) // BRLT reg-imm |
| 1506 | 1400 | { |
| 1507 | 1401 | BR_REGIMM_SETUP |
| 1508 | ||
| 1402 | ||
| 1509 | 1403 | // BRLT (signed operation) |
| 1510 | 1404 | if ((INT32)b < (INT32)c) |
| 1511 | 1405 | { |
| 1512 | 1406 | BR_TAKEJUMP |
| 1513 | 1407 | } |
| 1514 | ||
| 1408 | ||
| 1515 | 1409 | return m_pc + (size>>0); |
| 1516 | 1410 | |
| 1517 | 1411 | } |
| 1518 | 1412 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_03(OPS_32) |
| 1519 | 1413 | { |
| 1520 | 1414 | BR_REGIMM_SETUP |
| 1521 | ||
| 1415 | ||
| 1522 | 1416 | // BRGE (signed operation) |
| 1523 | 1417 | if ((INT32)b >= (INT32)c) |
| 1524 | 1418 | { |
| 1525 | 1419 | BR_TAKEJUMP |
| 1526 | 1420 | } |
| 1527 | ||
| 1421 | ||
| 1528 | 1422 | return m_pc + (size>>0); |
| 1529 | 1423 | } |
| 1530 | 1424 | |
| 1531 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_04(OPS_32) // register - immediate BRLO | |
| 1532 | { | |
| 1533 | BR_REGIMM_SETUP | |
| 1425 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_04(OPS_32) { return arcompact_01_01_01_helper(PARAMS, "BRLO"); } | |
| 1534 | 1426 | |
| 1535 | // BRLO (unsigned operation) | |
| 1536 | if (b < c) | |
| 1537 | { | |
| 1538 | BR_TAKEJUMP | |
| 1539 | } | |
| 1540 | ||
| 1541 | return m_pc + (size>>0); | |
| 1542 | ||
| 1543 | } | |
| 1544 | ||
| 1545 | 1427 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_05(OPS_32) // register - immediate BRHS |
| 1546 | 1428 | { |
| 1547 | 1429 | BR_REGIMM_SETUP |
| r242703 | r242704 | |
| 1551 | 1433 | { |
| 1552 | 1434 | BR_TAKEJUMP |
| 1553 | 1435 | } |
| 1554 | ||
| 1436 | ||
| 1555 | 1437 | return m_pc + (size>>0); |
| 1556 | 1438 | } |
| 1557 | 1439 | |
| r242703 | r242704 | |
| 1574 | 1456 | int X = (op & 0x00000040) >> 6; //op &= ~0x00000040; |
| 1575 | 1457 | int Z = (op & 0x00000180) >> 7; //op &= ~0x00000180; |
| 1576 | 1458 | int a = (op & 0x00000600) >> 9; //op &= ~0x00000600; |
| 1577 | // | |
| 1459 | // int D = (op & 0x00000800) >> 11;// op &= ~0x00000800; // we don't use the data cache currently | |
| 1578 | 1460 | |
| 1579 | 1461 | UINT32 address = m_regs[breg]; |
| 1580 | 1462 | |
| r242703 | r242704 | |
| 1662 | 1544 | { |
| 1663 | 1545 | int size = 4; |
| 1664 | 1546 | UINT32 limm = 0; |
| 1665 | int got_limm = 0; | |
| 1547 | int got_limm = 0; | |
| 1666 | 1548 | int S = (op & 0x00008000) >> 15; |
| 1667 | 1549 | int s = (op & 0x00ff0000) >> 16; |
| 1668 | 1550 | if (S) s = -0x100 + s; |
| 1669 | 1551 | |
| 1670 | 1552 | COMMON32_GET_breg; |
| 1671 | 1553 | COMMON32_GET_creg; |
| 1554 | ||
| 1555 | // int R = (op & 0x00000001) >> 0; // bit 0 is reserved | |
| 1556 | int Z = (op & 0x00000006) >> 1; | |
| 1557 | int a = (op & 0x00000018) >> 3; | |
| 1558 | // int D = (op & 0x00000020) >> 5; // we don't use the data cache currently | |
| 1672 | 1559 | |
| 1673 | // int R = (op & 0x00000001) >> 0; // bit 0 is reserved | |
| 1674 | int Z = (op & 0x00000006) >> 1; | |
| 1675 | int a = (op & 0x00000018) >> 3; | |
| 1676 | // int D = (op & 0x00000020) >> 5; // we don't use the data cache currently | |
| 1677 | 1560 | |
| 1678 | ||
| 1679 | 1561 | UINT32 address = m_regs[breg]; |
| 1680 | 1562 | |
| 1681 | 1563 | if (breg == LIMM_REG) |
| r242703 | r242704 | |
| 1765 | 1647 | |
| 1766 | 1648 | COMMON32_GET_p; |
| 1767 | 1649 | COMMON32_GET_breg; |
| 1768 | ||
| 1650 | ||
| 1769 | 1651 | if (!b_reserved) |
| 1770 | 1652 | { |
| 1771 | 1653 | if (breg == LIMM_REG) |
| r242703 | r242704 | |
| 1838 | 1720 | } |
| 1839 | 1721 | |
| 1840 | 1722 | |
| 1841 | #include "cpu/arcompact/arcompact.inc" | |
| 1723 | #define SETUP_HANDLE04_0x_P00 \ | |
| 1724 | int size = 4; \ | |
| 1725 | UINT32 limm = 0; \ | |
| 1726 | int got_limm = 0; \ | |
| 1727 | \ | |
| 1728 | COMMON32_GET_breg; \ | |
| 1729 | COMMON32_GET_F; \ | |
| 1730 | COMMON32_GET_creg; \ | |
| 1731 | COMMON32_GET_areg; \ | |
| 1732 | \ | |
| 1733 | UINT32 b, c; \ | |
| 1734 | \ | |
| 1735 | if (breg == LIMM_REG) \ | |
| 1736 | { \ | |
| 1737 | GET_LIMM_32; \ | |
| 1738 | size = 8; \ | |
| 1739 | got_limm = 1; \ | |
| 1740 | b = limm; \ | |
| 1741 | } \ | |
| 1742 | else \ | |
| 1743 | { \ | |
| 1744 | b = m_regs[breg]; \ | |
| 1745 | } \ | |
| 1746 | \ | |
| 1747 | if (creg == LIMM_REG) \ | |
| 1748 | { \ | |
| 1749 | if (!got_limm) \ | |
| 1750 | { \ | |
| 1751 | GET_LIMM_32; \ | |
| 1752 | size = 8; \ | |
| 1753 | } \ | |
| 1754 | c = limm; \ | |
| 1755 | } \ | |
| 1756 | else \ | |
| 1757 | { \ | |
| 1758 | c = m_regs[creg]; \ | |
| 1759 | } \ | |
| 1760 | /* todo: is the limm, limm syntax valid? (it's pointless.) */ \ | |
| 1761 | /* todo: if areg = LIMM then there is no result (but since that register can never be read, I guess it doesn't matter if we store it there anyway?) */ \ | |
| 1842 | 1762 | |
| 1843 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_01(OPS_32) | |
| 1763 | #define SETUP_HANDLE04_0x_P01 \ | |
| 1764 | int size = 4; \ | |
| 1765 | UINT32 limm = 0; \ | |
| 1766 | /* int got_limm = 0; */ \ | |
| 1767 | \ | |
| 1768 | COMMON32_GET_breg; \ | |
| 1769 | COMMON32_GET_F; \ | |
| 1770 | COMMON32_GET_u6; \ | |
| 1771 | COMMON32_GET_areg; \ | |
| 1772 | \ | |
| 1773 | UINT32 b, c; \ | |
| 1774 | \ | |
| 1775 | /* is having b as LIMM valid here? LIMM vs. fixed u6 value makes no sense */ \ | |
| 1776 | if (breg == LIMM_REG) \ | |
| 1777 | { \ | |
| 1778 | GET_LIMM_32; \ | |
| 1779 | size = 8; \ | |
| 1780 | /* got_limm = 1; */ \ | |
| 1781 | b = limm; \ | |
| 1782 | } \ | |
| 1783 | else \ | |
| 1784 | { \ | |
| 1785 | b = m_regs[breg]; \ | |
| 1786 | } \ | |
| 1787 | \ | |
| 1788 | c = u; \ | |
| 1789 | \ | |
| 1790 | /* todo: if areg = LIMM then there is no result (but since that register can never be read, I guess it doesn't matter if we store it there anyway?) */ \ | |
| 1791 | ||
| 1792 | ||
| 1793 | #define SETUP_HANDLE04_0x_P10 \ | |
| 1794 | int size = 4; \ | |
| 1795 | UINT32 limm = 0; \ | |
| 1796 | /* int got_limm = 0; */ \ | |
| 1797 | \ | |
| 1798 | COMMON32_GET_breg; \ | |
| 1799 | COMMON32_GET_F; \ | |
| 1800 | COMMON32_GET_s12; \ | |
| 1801 | COMMON32_GET_areg; \ | |
| 1802 | \ | |
| 1803 | UINT32 b, c; \ | |
| 1804 | \ | |
| 1805 | /* is having b as LIMM valid here? LIMM vs. fixed u6 value makes no sense */ \ | |
| 1806 | if (breg == LIMM_REG) \ | |
| 1807 | { \ | |
| 1808 | GET_LIMM_32; \ | |
| 1809 | size = 8; \ | |
| 1810 | /* got_limm = 1; */ \ | |
| 1811 | b = limm; \ | |
| 1812 | } \ | |
| 1813 | else \ | |
| 1814 | { \ | |
| 1815 | b = m_regs[breg]; \ | |
| 1816 | } \ | |
| 1817 | \ | |
| 1818 | c = (UINT32)S; \ | |
| 1819 | \ | |
| 1820 | /* todo: if areg = LIMM then there is no result (but since that register can never be read, I guess it doesn't matter if we store it there anyway?) */ \ | |
| 1821 | ||
| 1822 | ||
| 1823 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_00_p00(OPS_32) | |
| 1844 | 1824 | { |
| 1845 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x01], /*"ADC"*/ 0,0); | |
| 1825 | SETUP_HANDLE04_0x_P00 | |
| 1826 | ||
| 1827 | m_regs[areg] = b + c; | |
| 1828 | ||
| 1829 | if (F) | |
| 1830 | { | |
| 1831 | arcompact_fatal("arcompact_handle04_00_p00 (ADD) (F set)\n"); // not yet supported | |
| 1832 | } | |
| 1833 | ||
| 1834 | return m_pc + (size >> 0); | |
| 1846 | 1835 | } |
| 1847 | 1836 | |
| 1837 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_00_p01(OPS_32) | |
| 1838 | { | |
| 1839 | SETUP_HANDLE04_0x_P01 | |
| 1848 | 1840 | |
| 1841 | m_regs[areg] = b + c; | |
| 1849 | 1842 | |
| 1850 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_03(OPS_32) | |
| 1843 | if (F) | |
| 1844 | { | |
| 1845 | arcompact_fatal("arcompact_handle04_00_p01 (ADD) (F set)\n"); // not yet supported | |
| 1846 | } | |
| 1847 | ||
| 1848 | return m_pc + (size >> 0); | |
| 1849 | } | |
| 1850 | ||
| 1851 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_00_p10(OPS_32) | |
| 1851 | 1852 | { |
| 1853 | int size = 4; | |
| 1854 | arcompact_fatal("arcompact_handle04_00_p10 (ADD)\n"); | |
| 1855 | return m_pc + (size >> 0); | |
| 1856 | } | |
| 1857 | ||
| 1858 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_00_p11_m0(OPS_32) | |
| 1859 | { | |
| 1860 | int size = 4; | |
| 1861 | arcompact_fatal("arcompact_handle04_00_p11_m0 (ADD)\n"); | |
| 1862 | return m_pc + (size >> 0); | |
| 1863 | } | |
| 1864 | ||
| 1865 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_00_p11_m1(OPS_32) | |
| 1866 | { | |
| 1867 | int size = 4; | |
| 1868 | arcompact_fatal("arcompact_handle04_00_p11_m1 (ADD)\n"); | |
| 1869 | return m_pc + (size >> 0); | |
| 1870 | } | |
| 1871 | ||
| 1872 | ||
| 1873 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_01(OPS_32) | |
| 1874 | { | |
| 1875 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x01], /*"ADC"*/ 0,0); | |
| 1876 | } | |
| 1877 | ||
| 1878 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_02(OPS_32) | |
| 1879 | { | |
| 1880 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x02], /*"SUB"*/ 0,0); | |
| 1881 | } | |
| 1882 | ||
| 1883 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_03(OPS_32) | |
| 1884 | { | |
| 1852 | 1885 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x03], /*"SBC"*/ 0,0); |
| 1853 | 1886 | } |
| 1854 | 1887 | |
| 1855 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_08(OPS_32) | |
| 1888 | ||
| 1889 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_04_p00(OPS_32) | |
| 1856 | 1890 | { |
| 1857 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x08], /*"MAX"*/ 0,0); | |
| 1891 | SETUP_HANDLE04_0x_P00 | |
| 1892 | ||
| 1893 | m_regs[areg] = b & c; | |
| 1894 | ||
| 1895 | if (F) | |
| 1896 | { | |
| 1897 | arcompact_fatal("arcompact_handle04_04_p00 (AND) (F set)\n"); // not yet supported | |
| 1898 | } | |
| 1899 | ||
| 1900 | return m_pc + (size >> 0); | |
| 1858 | 1901 | } |
| 1859 | 1902 | |
| 1860 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0 | |
| 1903 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_04_p01(OPS_32) | |
| 1861 | 1904 | { |
| 1862 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x09], /*"MIN"*/ 0,0); | |
| 1905 | SETUP_HANDLE04_0x_P01 | |
| 1906 | m_regs[areg] = b & c; | |
| 1907 | ||
| 1908 | if (F) | |
| 1909 | { | |
| 1910 | arcompact_fatal("arcompact_handle04_04_p01 (AND) (F set)\n"); // not yet supported | |
| 1911 | } | |
| 1912 | ||
| 1913 | return m_pc + (size >> 0); | |
| 1863 | 1914 | } |
| 1864 | 1915 | |
| 1916 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_04_p10(OPS_32) | |
| 1917 | { | |
| 1918 | SETUP_HANDLE04_0x_P10 | |
| 1919 | m_regs[areg] = b & c; | |
| 1865 | 1920 | |
| 1921 | if (F) | |
| 1922 | { | |
| 1923 | arcompact_fatal("arcompact_handle04_04_p10 (AND) (F set)\n"); // not yet supported | |
| 1924 | } | |
| 1866 | 1925 | |
| 1867 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0b(OPS_32) | |
| 1926 | return m_pc + (size >> 0); | |
| 1927 | } | |
| 1928 | ||
| 1929 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_04_p11_m0(OPS_32) | |
| 1868 | 1930 | { |
| 1869 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x0b], /*"TST"*/ 1,0); | |
| 1931 | int size = 4; | |
| 1932 | arcompact_fatal("arcompact_handle04_04_p11_m0 (AND)\n"); | |
| 1933 | return m_pc + (size >> 0); | |
| 1870 | 1934 | } |
| 1871 | 1935 | |
| 1872 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0 | |
| 1936 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_04_p11_m1(OPS_32) | |
| 1873 | 1937 | { |
| 1874 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x0c], /*"CMP"*/ 1,0); | |
| 1938 | int size = 4; | |
| 1939 | arcompact_fatal("arcompact_handle04_04_p11_m1 (AND)\n"); | |
| 1940 | return m_pc + (size >> 0); | |
| 1875 | 1941 | } |
| 1876 | 1942 | |
| 1877 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0d(OPS_32) | |
| 1943 | ||
| 1944 | // OR | |
| 1945 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_05_p00(OPS_32) | |
| 1878 | 1946 | { |
| 1879 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x0d], /*"RCMP"*/ 1,0); | |
| 1947 | SETUP_HANDLE04_0x_P00 | |
| 1948 | ||
| 1949 | m_regs[areg] = b | c; | |
| 1950 | ||
| 1951 | if (F) | |
| 1952 | { | |
| 1953 | arcompact_fatal("arcompact_handle04_05_p00 (OR) (F set)\n"); // not yet supported | |
| 1954 | } | |
| 1955 | ||
| 1956 | return m_pc + (size >> 0); | |
| 1880 | 1957 | } |
| 1881 | 1958 | |
| 1959 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_05_p01(OPS_32) | |
| 1960 | { | |
| 1961 | SETUP_HANDLE04_0x_P01 | |
| 1882 | 1962 | |
| 1963 | m_regs[areg] = b | c; | |
| 1883 | 1964 | |
| 1884 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_10(OPS_32) | |
| 1965 | if (F) | |
| 1966 | { | |
| 1967 | arcompact_fatal("arcompact_handle04_05_p01 (OR) (F set)\n"); // not yet supported | |
| 1968 | } | |
| 1969 | ||
| 1970 | return m_pc + (size >> 0);} | |
| 1971 | ||
| 1972 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_05_p10(OPS_32) | |
| 1885 | 1973 | { |
| 1886 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x10], /*"BCLR"*/ 0,0); | |
| 1974 | int size = 4; | |
| 1975 | arcompact_fatal("arcompact_handle04_05_p10 (OR)\n"); | |
| 1976 | return m_pc + (size >> 0); | |
| 1887 | 1977 | } |
| 1888 | 1978 | |
| 1889 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_11(OPS_32) | |
| 1979 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_05_p11_m0(OPS_32) | |
| 1890 | 1980 | { |
| 1891 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x11], /*"BTST"*/ 0,0); | |
| 1981 | int size = 4; | |
| 1982 | arcompact_fatal("arcompact_handle04_05_p11_m0 (OR)\n"); | |
| 1983 | return m_pc + (size >> 0); | |
| 1892 | 1984 | } |
| 1893 | 1985 | |
| 1894 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_1 | |
| 1986 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_05_p11_m1(OPS_32) | |
| 1895 | 1987 | { |
| 1896 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x12], /*"BXOR"*/ 0,0); | |
| 1988 | int size = 4; | |
| 1989 | arcompact_fatal("arcompact_handle04_05_p11_m1 (OR)\n"); | |
| 1990 | return m_pc + (size >> 0); | |
| 1897 | 1991 | } |
| 1898 | 1992 | |
| 1993 | // Bitwise AND Operation with Inverted Source | |
| 1994 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_06_p00(OPS_32) // BIC | |
| 1995 | { | |
| 1996 | SETUP_HANDLE04_0x_P00 | |
| 1899 | 1997 | |
| 1998 | m_regs[areg] = b & (~c); | |
| 1900 | 1999 | |
| 2000 | if (F) | |
| 2001 | { | |
| 2002 | arcompact_fatal("arcompact_handle04_06_p00 (BIC) (F set)\n"); // not yet supported | |
| 2003 | } | |
| 1901 | 2004 | |
| 2005 | return m_pc + (size >> 0); | |
| 2006 | } | |
| 1902 | 2007 | |
| 2008 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_06_p01(OPS_32) | |
| 2009 | { | |
| 2010 | int size = 4; | |
| 2011 | arcompact_fatal("arcompact_handle04_06_p01 (BIC)\n"); | |
| 2012 | return m_pc + (size >> 0); | |
| 2013 | } | |
| 1903 | 2014 | |
| 1904 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_1 | |
| 2015 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_06_p10(OPS_32) | |
| 1905 | 2016 | { |
| 1906 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x1a], /*"MPY"*/ 0,0); | |
| 1907 | } // * | |
| 2017 | int size = 4; | |
| 2018 | arcompact_fatal("arcompact_handle04_06_p10 (BIC)\n"); | |
| 2019 | return m_pc + (size >> 0); | |
| 2020 | } | |
| 1908 | 2021 | |
| 1909 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_1 | |
| 2022 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_06_p11_m0(OPS_32) | |
| 1910 | 2023 | { |
| 1911 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x1b], /*"MPYH"*/ 0,0); | |
| 1912 | } // * | |
| 2024 | int size = 4; | |
| 2025 | arcompact_fatal("arcompact_handle04_06_p11_m0 (BIC)\n"); | |
| 2026 | return m_pc + (size >> 0); | |
| 2027 | } | |
| 1913 | 2028 | |
| 1914 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_1 | |
| 2029 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_06_p11_m1(OPS_32) | |
| 1915 | 2030 | { |
| 1916 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x1c], /*"MPYHU"*/ 0,0); | |
| 1917 | } // * | |
| 2031 | int size = 4; | |
| 2032 | arcompact_fatal("arcompact_handle04_06_p11_m1 (BIC)\n"); | |
| 2033 | return m_pc + (size >> 0); | |
| 2034 | } | |
| 1918 | 2035 | |
| 1919 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_1d(OPS_32) | |
| 2036 | ||
| 2037 | ||
| 2038 | ||
| 2039 | // XOR | |
| 2040 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_07_p00(OPS_32) // XOR | |
| 1920 | 2041 | { |
| 1921 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x1d], /*"MPYU"*/ 0,0); | |
| 1922 | } // * | |
| 2042 | SETUP_HANDLE04_0x_P00 | |
| 2043 | m_regs[areg] = b ^ c; | |
| 1923 | 2044 | |
| 1924 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p00(OPS_32) | |
| 2045 | if (F) | |
| 2046 | { | |
| 2047 | arcompact_fatal("arcompact_handle04_07_p00 (XOR) (F set)\n"); // not yet supported | |
| 2048 | } | |
| 2049 | ||
| 2050 | return m_pc + (size >> 0); | |
| 2051 | } | |
| 2052 | ||
| 2053 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_07_p01(OPS_32) | |
| 1925 | 2054 | { |
| 2055 | SETUP_HANDLE04_0x_P01 | |
| 2056 | m_regs[areg] = b ^ c; | |
| 2057 | ||
| 2058 | if (F) | |
| 2059 | { | |
| 2060 | arcompact_fatal("arcompact_handle04_07_p01 (XOR) (F set)\n"); // not yet supported | |
| 2061 | } | |
| 2062 | ||
| 2063 | return m_pc + (size >> 0); | |
| 2064 | } | |
| 2065 | ||
| 2066 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_07_p10(OPS_32) | |
| 2067 | { | |
| 1926 | 2068 | int size = 4; |
| 2069 | arcompact_fatal("arcompact_handle04_07_p10 (XOR)\n"); | |
| 2070 | return m_pc + (size >> 0); | |
| 2071 | } | |
| 2072 | ||
| 2073 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_07_p11_m0(OPS_32) | |
| 2074 | { | |
| 2075 | int size = 4; | |
| 2076 | arcompact_fatal("arcompact_handle04_07_p11_m0 (XOR)\n"); | |
| 2077 | return m_pc + (size >> 0); | |
| 2078 | } | |
| 2079 | ||
| 2080 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_07_p11_m1(OPS_32) | |
| 2081 | { | |
| 2082 | int size = 4; | |
| 2083 | arcompact_fatal("arcompact_handle04_07_p11_m1 (XOR)\n"); | |
| 2084 | return m_pc + (size >> 0); | |
| 2085 | } | |
| 2086 | ||
| 2087 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_08(OPS_32) | |
| 2088 | { | |
| 2089 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x08], /*"MAX"*/ 0,0); | |
| 2090 | } | |
| 2091 | ||
| 2092 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_09(OPS_32) | |
| 2093 | { | |
| 2094 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x09], /*"MIN"*/ 0,0); | |
| 2095 | } | |
| 2096 | ||
| 2097 | ||
| 2098 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0a_p00(OPS_32) // MOV<f> b, c | |
| 2099 | { | |
| 2100 | int size = 4; | |
| 1927 | 2101 | UINT32 limm = 0; |
| 1928 | 2102 | int got_limm = 0; |
| 1929 | 2103 | |
| 2104 | COMMON32_GET_breg | |
| 1930 | 2105 | COMMON32_GET_creg |
| 1931 | 2106 | COMMON32_GET_F |
| 1932 | 2107 | |
| 1933 | if (creg == LIMM_REG) | |
| 2108 | if (creg == LIMM_REG) | |
| 1934 | 2109 | { |
| 1935 | // opcode iiii i--- ppII IIII F--- CCCC CC-- ---- | |
| 1936 | // J limm 0010 0RRR 0010 0000 0RRR 1111 10RR RRRR [LIMM] (creg = LIMM) | |
| 2110 | // opcode iiii iBBB ppII IIII FBBB CCCC CC-- ---- | |
| 2111 | // MOV b <- limm 0010 0RRR 0000 1010 0RRR 1111 10RR RRRR [LIMM] (creg = LIMM) | |
| 2112 | // MOV.F b <- limm 0010 0RRR 0000 1010 1RRR 1111 10RR RRRR [LIMM] (creg = LIMM) | |
| 1937 | 2113 | |
| 1938 | 2114 | if (!got_limm) |
| 1939 | 2115 | { |
| r242703 | r242704 | |
| 1941 | 2117 | size = 8; |
| 1942 | 2118 | } |
| 1943 | 2119 | |
| 1944 | return limm; | |
| 2120 | m_regs[breg] = limm; | |
| 2121 | ||
| 2122 | if (F) | |
| 2123 | { // currently not supported | |
| 2124 | arcompact_fatal("unimplemented MOV.F %08x", op); | |
| 2125 | } | |
| 2126 | ||
| 2127 | return m_pc + (size>>0); | |
| 2128 | ||
| 1945 | 2129 | } |
| 1946 | 2130 | else |
| 1947 | 2131 | { |
| 1948 | // opcode iiii i--- ppII IIII F--- CCCC CC-- ---- | |
| 1949 | // J [c] 0010 0RRR 0010 0000 0RRR CCCC CCRR RRRR | |
| 1950 | // J.F [ilink1] 0010 0RRR 0010 0000 1RRR 0111 01RR RRRR (creg = ILINK1, FLAG must be set) | |
| 1951 | // J.F [ilink2] 0010 0RRR 0010 0000 1RRR 0111 10RR RRRR (creg = ILINE2, FLAG must be set) | |
| 2132 | // opcode iiii iBBB ppII IIII FBBB CCCC CC-- ---- | |
| 2133 | // MOV b <- c 0010 0RRR 0000 1010 0RRR cccc ccRR RRRR | |
| 2134 | // MOV.F b <- c 0010 0RRR 0000 1010 1RRR cccc ccRR RRRR | |
| 1952 | 2135 | |
| 2136 | m_regs[breg] = m_regs[creg]; | |
| 2137 | ||
| 1953 | 2138 | if (F) |
| 1954 | { | |
| 1955 | if ((creg == REG_ILINK1) || (creg == REG_ILINK2)) | |
| 1956 | { | |
| 1957 | arcompact_log("1 unimplemented J.F %08x", op); | |
| 1958 | } | |
| 1959 | else | |
| 1960 | { | |
| 1961 | // should not use .F unless jumping to ILINK1/2 | |
| 1962 | arcompact_fatal ("illegal 1 unimplemented J.F (F should not be set) %08x", op); | |
| 1963 | } | |
| 2139 | { // currently not supported | |
| 2140 | arcompact_fatal("unimplemented MOV.F %08x", op); | |
| 2141 | } | |
| 1964 | 2142 | |
| 1965 | } | |
| 1966 | else | |
| 1967 | { | |
| 1968 | if ((creg == REG_ILINK1) || (creg == REG_ILINK2)) | |
| 1969 | { | |
| 1970 | // should only jumping to ILINK1/2 if .F is set | |
| 1971 | arcompact_fatal("illegal 1 unimplemented J (F not set) %08x", op); | |
| 1972 | } | |
| 1973 | else | |
| 1974 | { | |
| 1975 | return m_regs[creg]; | |
| 1976 | } | |
| 1977 | } | |
| 2143 | return m_pc + (size>>0); | |
| 1978 | 2144 | } |
| 1979 | 2145 | |
| 1980 | 2146 | return m_pc + (size>>0); |
| 2147 | ||
| 1981 | 2148 | } |
| 1982 | 2149 | |
| 1983 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_ | |
| 2150 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0a_p01(OPS_32) | |
| 1984 | 2151 | { |
| 1985 | 2152 | // opcode iiii i--- ppII IIII F--- uuuu uu-- ---- |
| 1986 | // J u6 0010 0RRR 0110 0000 0RRR uuuu uuRR RRRR | |
| 2153 | // MOV b <- u6 0010 0RRR 0100 1010 0RRR uuuu uuRR RRRR | |
| 2154 | // MOV.F b <- u6 0010 0RRR 0100 1010 1RRR uuuu uuRR RRRR | |
| 2155 | ||
| 1987 | 2156 | int size = 4; |
| 1988 | arcompact_log("2 unimplemented J %08x", op); | |
| 2157 | ||
| 2158 | COMMON32_GET_breg | |
| 2159 | COMMON32_GET_u6 | |
| 2160 | COMMON32_GET_F | |
| 2161 | ||
| 2162 | m_regs[breg] = u; | |
| 2163 | ||
| 2164 | if (F) | |
| 2165 | { // currently not supported | |
| 2166 | arcompact_fatal("unimplemented MOV.F b <- u6 %08x", op); | |
| 2167 | } | |
| 2168 | ||
| 1989 | 2169 | return m_pc + (size>>0); |
| 1990 | 2170 | } |
| 1991 | 2171 | |
| 1992 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_ | |
| 2172 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0a_p10(OPS_32) | |
| 1993 | 2173 | { |
| 1994 | // opcode iiii i--- ppII IIII F--- ssss ssSS SSSS | |
| 1995 | // J s12 0010 0RRR 1010 0000 0RRR ssss ssSS SSSS | |
| 1996 | 2174 | int size = 4; |
| 1997 | arcompact_log("3 unimplemented J %08x", op); | |
| 1998 | return m_pc + (size>>0); | |
| 1999 | } | |
| 2000 | 2175 | |
| 2176 | COMMON32_GET_breg; | |
| 2177 | COMMON32_GET_s12; | |
| 2178 | COMMON32_GET_F; | |
| 2001 | 2179 | |
| 2002 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p11_m0(OPS_32) // Jcc (no link, no delay) | |
| 2180 | m_regs[breg] = S; | |
| 2181 | ||
| 2182 | if (F) | |
| 2183 | { // currently not supported | |
| 2184 | arcompact_fatal("unimplemented MOV.F b <- s12 %08x", op); | |
| 2185 | } | |
| 2186 | ||
| 2187 | return m_pc + (size>>0);} | |
| 2188 | ||
| 2189 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0a_p11_m0(OPS_32) | |
| 2003 | 2190 | { |
| 2004 | 2191 | int size = 4; |
| 2005 | UINT32 limm = 0; | |
| 2006 | int got_limm = 0; | |
| 2192 | arcompact_fatal("arcompact_handle04_0a_p11_m0\n"); | |
| 2193 | return m_pc + (size >> 0); | |
| 2194 | } | |
| 2007 | 2195 | |
| 2008 | COMMON32_GET_creg | |
| 2009 | COMMON32_GET_CONDITION; | |
| 2010 | COMMON32_GET_F | |
| 2196 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0a_p11_m1(OPS_32) | |
| 2197 | { | |
| 2198 | int size = 4; | |
| 2199 | arcompact_fatal("arcompact_handle04_0a_p11_m1\n"); | |
| 2200 | return m_pc + (size >> 0); | |
| 2201 | } | |
| 2011 | 2202 | |
| 2012 | UINT32 c = 0; | |
| 2013 | 2203 | |
| 2014 | if (creg == LIMM_REG) | |
| 2015 | { | |
| 2016 | // opcode iiii i--- ppII IIII F--- cccc ccmq qqqq | |
| 2017 | // Jcc limm 0010 0RRR 1110 0000 0RRR 1111 100Q QQQQ [LIUMM] | |
| 2018 | if (!got_limm) | |
| 2019 | { | |
| 2020 | GET_LIMM_32; | |
| 2021 | size = 8; | |
| 2022 | } | |
| 2204 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0b(OPS_32) | |
| 2205 | { | |
| 2206 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x0b], /*"TST"*/ 1,0); | |
| 2207 | } | |
| 2023 | 2208 | |
| 2024 | c = limm; | |
| 2209 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0c(OPS_32) | |
| 2210 | { | |
| 2211 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x0c], /*"CMP"*/ 1,0); | |
| 2212 | } | |
| 2025 | 2213 | |
| 2026 | } | |
| 2027 | else | |
| 2028 | { | |
| 2029 | // opcode iiii i--- ppII IIII F--- cccc ccmq qqqq | |
| 2030 | // Jcc [c] 0010 0RRR 1110 0000 0RRR CCCC CC0Q QQQQ | |
| 2031 | // no conditional links to ILINK1, ILINK2? | |
| 2214 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0d(OPS_32) | |
| 2215 | { | |
| 2216 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x0d], /*"RCMP"*/ 1,0); | |
| 2217 | } | |
| 2032 | 2218 | |
| 2033 | c = m_regs[creg]; | |
| 2034 | } | |
| 2219 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0e(OPS_32) | |
| 2220 | { | |
| 2221 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x0e], /*"RSUB"*/ 0,0); | |
| 2222 | } | |
| 2035 | 2223 | |
| 2036 | if (!check_condition(condition)) | |
| 2037 | return m_pc + (size>>0); | |
| 2038 | 2224 | |
| 2039 | if (!F) | |
| 2040 | { | |
| 2041 | // if F isn't set then the destination can't be ILINK1 or ILINK2 | |
| 2225 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0f_p00(OPS_32) | |
| 2226 | { | |
| 2227 | SETUP_HANDLE04_0x_P00 | |
| 2042 | 2228 | |
| 2043 | if ((creg == REG_ILINK1) || (creg == REG_ILINK1)) | |
| 2044 | { | |
| 2045 | arcompact_fatal ("fatal arcompact_handle04_20_p11_m0 J %08x (F not set but ILINK1 or ILINK2 used as dst)", op); | |
| 2046 | } | |
| 2047 | else | |
| 2048 | { | |
| 2049 | UINT32 realaddress = c; | |
| 2050 | return realaddress; | |
| 2051 | } | |
| 2052 | } | |
| 2229 | m_regs[areg] = b | (1 << (c & 0x1f)); | |
| 2053 | 2230 | |
| 2054 | 2231 | if (F) |
| 2055 | 2232 | { |
| 2056 | // if F is set then the destination MUST be ILINK1 or ILINK2 | |
| 2233 | arcompact_fatal("arcompact_handle04_06_p00 (BSET) (F set)\n"); // not yet supported | |
| 2234 | } | |
| 2057 | 2235 | |
| 2058 | if ((creg == REG_ILINK1) || (creg == REG_ILINK1)) | |
| 2059 | { | |
| 2060 | arcompact_log("unimplemented arcompact_handle04_20_p11_m0 J %08x (F set)", op); | |
| 2061 | } | |
| 2062 | else | |
| 2063 | { | |
| 2064 | arcompact_fatal ("fatal arcompact_handle04_20_p11_m0 J %08x (F set but not ILINK1 or ILINK2 used as dst)", op); | |
| 2236 | return m_pc + (size >> 0); | |
| 2237 | } | |
| 2065 | 2238 | |
| 2066 | } | |
| 2239 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0f_p01(OPS_32) | |
| 2240 | { | |
| 2241 | int size = 4; | |
| 2242 | arcompact_fatal("arcompact_handle04_0f_p01 (BSET)\n"); | |
| 2243 | return m_pc + (size >> 0); | |
| 2244 | } | |
| 2245 | ||
| 2246 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0f_p10(OPS_32) | |
| 2247 | { | |
| 2248 | int size = 4; | |
| 2249 | arcompact_fatal("arcompact_handle04_0f_p10 (BSET)\n"); | |
| 2250 | return m_pc + (size >> 0); | |
| 2251 | } | |
| 2252 | ||
| 2253 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0f_p11_m0(OPS_32) | |
| 2254 | { | |
| 2255 | int size = 4; | |
| 2256 | arcompact_fatal("arcompact_handle04_0f_p11_m0 (BSET)\n"); | |
| 2257 | return m_pc + (size >> 0); | |
| 2258 | } | |
| 2259 | ||
| 2260 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0f_p11_m1(OPS_32) | |
| 2261 | { | |
| 2262 | int size = 4; | |
| 2263 | arcompact_fatal("arcompact_handle04_0f_p11_m1 (BSET)\n"); | |
| 2264 | return m_pc + (size >> 0); | |
| 2265 | } | |
| 2266 | ||
| 2267 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_10(OPS_32) | |
| 2268 | { | |
| 2269 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x10], /*"BCLR"*/ 0,0); | |
| 2270 | } | |
| 2271 | ||
| 2272 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_11(OPS_32) | |
| 2273 | { | |
| 2274 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x11], /*"BTST"*/ 0,0); | |
| 2275 | } | |
| 2276 | ||
| 2277 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_12(OPS_32) | |
| 2278 | { | |
| 2279 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x12], /*"BXOR"*/ 0,0); | |
| 2280 | } | |
| 2281 | ||
| 2282 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_13(OPS_32) | |
| 2283 | { | |
| 2284 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x13], /*"BMSK"*/ 0,0); | |
| 2285 | } | |
| 2286 | ||
| 2287 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_14(OPS_32) | |
| 2288 | { | |
| 2289 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x14], /*"ADD1"*/ 0,0); | |
| 2290 | } | |
| 2291 | ||
| 2292 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_15(OPS_32) | |
| 2293 | { | |
| 2294 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x15], /*"ADD2"*/ 0,0); | |
| 2295 | } | |
| 2296 | ||
| 2297 | ||
| 2298 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_16_p00(OPS_32) // ADD3 | |
| 2299 | { | |
| 2300 | int size = 4; | |
| 2301 | arcompact_fatal("arcompact_handle04_16_p00 (ADD3)\n"); | |
| 2302 | ||
| 2303 | return m_pc + (size >> 0); | |
| 2304 | } | |
| 2305 | ||
| 2306 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_16_p01(OPS_32) | |
| 2307 | { | |
| 2308 | SETUP_HANDLE04_0x_P01 | |
| 2309 | ||
| 2310 | m_regs[areg] = b + (c << 3); // c = u | |
| 2311 | ||
| 2312 | if (F) | |
| 2313 | { | |
| 2314 | arcompact_fatal("arcompact_handle04_16_p01 (ADD3) (F set)\n"); // not yet supported | |
| 2067 | 2315 | } |
| 2068 | 2316 | |
| 2317 | return m_pc + (size >> 0); | |
| 2318 | } | |
| 2069 | 2319 | |
| 2070 | return m_pc + (size>>0); | |
| 2320 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_16_p10(OPS_32) | |
| 2321 | { | |
| 2322 | int size = 4; | |
| 2323 | arcompact_fatal("arcompact_handle04_16_p10 (ADD3)\n"); | |
| 2324 | return m_pc + (size >> 0); | |
| 2071 | 2325 | } |
| 2072 | 2326 | |
| 2073 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_ | |
| 2327 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_16_p11_m0(OPS_32) | |
| 2074 | 2328 | { |
| 2075 | // opcode iiii i--- ppII IIII F--- uuuu uumq qqqq | |
| 2076 | // Jcc u6 0010 0RRR 1110 0000 0RRR uuuu uu1Q QQQQ | |
| 2077 | 2329 | int size = 4; |
| 2078 | arcompact_log("unimplemented arcompact_handle04_20_p11_m1 J %08x (u6)", op); | |
| 2079 | return m_pc + (size>>0); | |
| 2330 | arcompact_fatal("arcompact_handle04_16_p11_m0 (ADD3)\n"); | |
| 2331 | return m_pc + (size >> 0); | |
| 2080 | 2332 | } |
| 2081 | 2333 | |
| 2334 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_16_p11_m1(OPS_32) | |
| 2335 | { | |
| 2336 | int size = 4; | |
| 2337 | arcompact_fatal("arcompact_handle04_16_p11_m1 (ADD3)\n"); | |
| 2338 | return m_pc + (size >> 0); | |
| 2339 | } | |
| 2082 | 2340 | |
| 2083 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_21_p00(OPS_32) | |
| 2341 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_17(OPS_32) | |
| 2342 | { | |
| 2343 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x17], /*"SUB1"*/ 0,0); | |
| 2344 | } | |
| 2345 | ||
| 2346 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_18(OPS_32) | |
| 2347 | { | |
| 2348 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x18], /*"SUB2"*/ 0,0); | |
| 2349 | } | |
| 2350 | ||
| 2351 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_19(OPS_32) | |
| 2352 | { | |
| 2353 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x19], /*"SUB3"*/ 0,0); | |
| 2354 | } | |
| 2355 | ||
| 2356 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_1a(OPS_32) | |
| 2357 | { | |
| 2358 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x1a], /*"MPY"*/ 0,0); | |
| 2359 | } // * | |
| 2360 | ||
| 2361 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_1b(OPS_32) | |
| 2362 | { | |
| 2363 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x1b], /*"MPYH"*/ 0,0); | |
| 2364 | } // * | |
| 2365 | ||
| 2366 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_1c(OPS_32) | |
| 2367 | { | |
| 2368 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x1c], /*"MPYHU"*/ 0,0); | |
| 2369 | } // * | |
| 2370 | ||
| 2371 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_1d(OPS_32) | |
| 2372 | { | |
| 2373 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x1d], /*"MPYU"*/ 0,0); | |
| 2374 | } // * | |
| 2375 | ||
| 2376 | /* handler template for c+p | |
| 2377 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handleXX_xx_p00(OPS_32) | |
| 2084 | 2378 | { |
| 2085 | 2379 | int size = 4; |
| 2380 | arcompact_fatal("arcompact_handleXX_xx_p00\n"); | |
| 2381 | return m_pc + (size >> 0); | |
| 2382 | } | |
| 2383 | ||
| 2384 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handleXX_xx_p01(OPS_32) | |
| 2385 | { | |
| 2386 | int size = 4; | |
| 2387 | arcompact_fatal("arcompact_handleXX_xx_p01\n"); | |
| 2388 | return m_pc + (size >> 0); | |
| 2389 | } | |
| 2390 | ||
| 2391 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handleXX_xx_p10(OPS_32) | |
| 2392 | { | |
| 2393 | int size = 4; | |
| 2394 | arcompact_fatal("arcompact_handleXX_xx_p10\n"); | |
| 2395 | return m_pc + (size >> 0); | |
| 2396 | } | |
| 2397 | ||
| 2398 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handleXX_xx_p11_m0(OPS_32) | |
| 2399 | { | |
| 2400 | int size = 4; | |
| 2401 | arcompact_fatal("arcompact_handleXX_xx_p11_m0\n"); | |
| 2402 | return m_pc + (size >> 0); | |
| 2403 | } | |
| 2404 | ||
| 2405 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handleXX_xx_p11_m1(OPS_32) | |
| 2406 | { | |
| 2407 | int size = 4; | |
| 2408 | arcompact_fatal("arcompact_handleXX_xx_p11_m1\n"); | |
| 2409 | return m_pc + (size >> 0); | |
| 2410 | } | |
| 2411 | */ | |
| 2412 | ||
| 2413 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p00(OPS_32) | |
| 2414 | { | |
| 2415 | int size = 4; | |
| 2086 | 2416 | UINT32 limm = 0; |
| 2087 | 2417 | int got_limm = 0; |
| 2088 | 2418 | |
| 2089 | 2419 | COMMON32_GET_creg |
| 2090 | COMMON32_GET_F | |
| 2091 | 2420 | |
| 2092 | if (creg == LIMM_REG) | |
| 2421 | if (creg == LIMM_REG) | |
| 2093 | 2422 | { |
| 2423 | // opcode iiii i--- ppII IIII F--- CCCC CC-- ---- | |
| 2424 | // J limm 0010 0RRR 0010 0000 0RRR 1111 10RR RRRR [LIMM] (creg = LIMM) | |
| 2425 | ||
| 2094 | 2426 | if (!got_limm) |
| 2095 | 2427 | { |
| 2096 | 2428 | GET_LIMM_32; |
| 2097 | 2429 | size = 8; |
| 2098 | 2430 | } |
| 2099 | 2431 | |
| 2100 | | |
| 2432 | return limm; | |
| 2101 | 2433 | } |
| 2102 | 2434 | else |
| 2103 | 2435 | { |
| 2104 | return handle_jump_to_register(1,0,creg, m_pc + (size>>0), F); // delay, no link | |
| 2436 | // opcode iiii i--- ppII IIII F--- CCCC CC-- ---- | |
| 2437 | // J [c] 0010 0RRR 0010 0000 0RRR CCCC CCRR RRRR | |
| 2438 | // J.F [ilink1] 0010 0RRR 0010 0000 1RRR 0111 01RR RRRR (creg = ILINK1, FLAG must be set) | |
| 2439 | // J.F [ilink2] 0010 0RRR 0010 0000 1RRR 0111 10RR RRRR (creg = ILINE2, FLAG must be set) | |
| 2440 | ||
| 2441 | arcompact_log("unimplemented J %08x", op); | |
| 2105 | 2442 | } |
| 2106 | 2443 | |
| 2107 | 2444 | return m_pc + (size>>0); |
| 2108 | 2445 | } |
| 2109 | 2446 | |
| 2110 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2 | |
| 2447 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p01(OPS_32) | |
| 2111 | 2448 | { |
| 2449 | // opcode iiii i--- ppII IIII F--- uuuu uu-- ---- | |
| 2450 | // J u6 0010 0RRR 0110 0000 0RRR uuuu uuRR RRRR | |
| 2112 | 2451 | int size = 4; |
| 2113 | arcompact_log("unimplemented J | |
| 2452 | arcompact_log("unimplemented J %08x", op); | |
| 2114 | 2453 | return m_pc + (size>>0); |
| 2115 | 2454 | } |
| 2116 | 2455 | |
| 2117 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2 | |
| 2456 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p10(OPS_32) | |
| 2118 | 2457 | { |
| 2458 | // opcode iiii i--- ppII IIII F--- ssss ssSS SSSS | |
| 2459 | // J s12 0010 0RRR 1010 0000 0RRR ssss ssSS SSSS | |
| 2119 | 2460 | int size = 4; |
| 2120 | arcompact_log("unimplemented J | |
| 2461 | arcompact_log("unimplemented J %08x", op); | |
| 2121 | 2462 | return m_pc + (size>>0); |
| 2122 | 2463 | } |
| 2123 | 2464 | |
| 2124 | 2465 | |
| 2125 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2 | |
| 2466 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p11_m0(OPS_32) | |
| 2126 | 2467 | { |
| 2127 | 2468 | int size = 4; |
| 2128 | UINT32 limm = 0; | |
| 2469 | // UINT32 limm = 0; | |
| 2129 | 2470 | int got_limm = 0; |
| 2130 | 2471 | |
| 2131 | 2472 | COMMON32_GET_creg |
| 2132 | COMMON32_GET_CONDITION; | |
| 2133 | COMMON32_GET_F | |
| 2134 | 2473 | |
| 2135 | //UINT32 c = 0; | |
| 2136 | ||
| 2137 | 2474 | if (creg == LIMM_REG) |
| 2138 | 2475 | { |
| 2476 | // opcode iiii i--- ppII IIII F--- cccc ccmq qqqq | |
| 2477 | // Jcc limm 0010 0RRR 1110 0000 0RRR 1111 100Q QQQQ [LIUMM] | |
| 2139 | 2478 | if (!got_limm) |
| 2140 | 2479 | { |
| 2141 | GET_LIMM_32; | |
| 2480 | //GET_LIMM_32; | |
| 2142 | 2481 | size = 8; |
| 2143 | 2482 | } |
| 2144 | 2483 | |
| 2145 | // c = limm; | |
| 2146 | ||
| 2484 | arcompact_log("unimplemented J %08x", op); | |
| 2147 | 2485 | } |
| 2148 | 2486 | else |
| 2149 | 2487 | { |
| 2150 | 2488 | // opcode iiii i--- ppII IIII F--- cccc ccmq qqqq |
| 2151 | 2489 | // Jcc [c] 0010 0RRR 1110 0000 0RRR CCCC CC0Q QQQQ |
| 2152 | 2490 | // no conditional links to ILINK1, ILINK2? |
| 2153 | ||
| 2154 | // c = m_regs[creg]; | |
| 2491 | arcompact_log("unimplemented J %08x", op); | |
| 2155 | 2492 | } |
| 2156 | ||
| 2157 | if (!check_condition(condition)) | |
| 2158 | return m_pc + (size>>0); | |
| 2159 | ||
| 2160 | if (!F) | |
| 2161 | { | |
| 2162 | // if F isn't set then the destination can't be ILINK1 or ILINK2 | |
| 2163 | ||
| 2164 | if ((creg == REG_ILINK1) || (creg == REG_ILINK1)) | |
| 2165 | { | |
| 2166 | arcompact_log("unimplemented Jcc.D (p11_m0 type, illegal) %08x", op); | |
| 2167 | } | |
| 2168 | else | |
| 2169 | { | |
| 2170 | arcompact_log("unimplemented Jcc.D (p11_m0 type, unimplemented) %08x", op); | |
| 2171 | } | |
| 2172 | } | |
| 2173 | ||
| 2174 | if (F) | |
| 2175 | { | |
| 2176 | // if F is set then the destination MUST be ILINK1 or ILINK2 | |
| 2177 | ||
| 2178 | if ((creg == REG_ILINK1) || (creg == REG_ILINK1)) | |
| 2179 | { | |
| 2180 | arcompact_log("unimplemented Jcc.D.F (p11_m0 type, unimplemented) %08x", op); | |
| 2181 | } | |
| 2182 | else | |
| 2183 | { | |
| 2184 | arcompact_log("unimplemented Jcc.D.F (p11_m0 type, illegal) %08x", op); | |
| 2185 | } | |
| 2186 | } | |
| 2187 | ||
| 2188 | ||
| 2189 | 2493 | return m_pc + (size>>0); |
| 2190 | 2494 | } |
| 2191 | 2495 | |
| 2192 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2 | |
| 2496 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p11_m1(OPS_32) | |
| 2193 | 2497 | { |
| 2498 | // opcode iiii i--- ppII IIII F--- uuuu uumq qqqq | |
| 2499 | // Jcc u6 0010 0RRR 1110 0000 0RRR uuuu uu1Q QQQQ | |
| 2194 | 2500 | int size = 4; |
| 2195 | arcompact_log("unimplemented | |
| 2501 | arcompact_log("unimplemented J %08x", op); | |
| 2196 | 2502 | return m_pc + (size>>0); |
| 2197 | 2503 | } |
| 2198 | 2504 | |
| 2199 | 2505 | |
| 2200 | 2506 | |
| 2507 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_21(OPS_32) | |
| 2508 | { | |
| 2509 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x21], /*"J.D"*/ 1,1); | |
| 2510 | } | |
| 2511 | ||
| 2201 | 2512 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_22(OPS_32) |
| 2202 | 2513 | { |
| 2203 | 2514 | return arcompact_handle04_helper(PARAMS, opcodes_04[0x22], /*"JL"*/ 1,1); |
| r242703 | r242704 | |
| 2214 | 2525 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_28(OPS_32) // LPcc (loop setup) |
| 2215 | 2526 | { |
| 2216 | 2527 | int size = 4; |
| 2217 | ||
| 2528 | ||
| 2218 | 2529 | COMMON32_GET_p; |
| 2219 | ||
| 2530 | ||
| 2220 | 2531 | if (p == 0x00) |
| 2221 | 2532 | { |
| 2222 | arcompact_fatal("<illegal LPcc, p = 0x00)"); | |
| 2223 | 2533 | } |
| 2224 | 2534 | else if (p == 0x01) |
| 2225 | 2535 | { |
| 2226 | arcompact_fatal("<illegal LPcc, p = 0x01)"); | |
| 2227 | 2536 | } |
| 2228 | 2537 | else if (p == 0x02) // Loop unconditional |
| 2229 | { // 0010 0RRR 1010 1000 0RRR ssss ssSS SSSS | |
| 2230 | COMMON32_GET_s12 | |
| 2231 | if (S & 0x800) S = -0x800 + (S&0x7ff); | |
| 2232 | ||
| 2233 | arcompact_fatal("Lp unconditional not supported %d", S); | |
| 2538 | { | |
| 2234 | 2539 | } |
| 2235 | 2540 | else if (p == 0x03) // Loop conditional |
| 2236 | { // 0010 0RRR 1110 1000 0RRR uuuu uu1Q QQQQ | |
| 2237 | COMMON32_GET_u6 | |
| 2238 | COMMON32_GET_CONDITION | |
| 2239 | //arcompact_fatal("Lp conditional %s not supported %d", conditions[condition], u); | |
| 2541 | { | |
| 2542 | } | |
| 2240 | 2543 | |
| 2241 | // if the loop condition fails then just jump to after the end of the loop, don't set any registers | |
| 2242 | if (!check_condition(condition)) | |
| 2544 | arcompact_log("unimplemented LPcc %08x", op); | |
| 2545 | return m_pc + (size>>0); | |
| 2546 | ||
| 2547 | } | |
| 2548 | ||
| 2549 | ||
| 2550 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2a(OPS_32) // Load FROM Auxiliary register TO register | |
| 2551 | { | |
| 2552 | int size = 4; | |
| 2553 | // UINT32 limm = 0; | |
| 2554 | int got_limm = 0; | |
| 2555 | ||
| 2556 | COMMON32_GET_p; | |
| 2557 | //COMMON32_GET_breg; | |
| 2558 | ||
| 2559 | if (p == 0) | |
| 2560 | { | |
| 2561 | ||
| 2562 | COMMON32_GET_creg | |
| 2563 | ||
| 2564 | if (creg == LIMM_REG) | |
| 2243 | 2565 | { |
| 2244 | UINT32 realoffset = PC_ALIGNED32 + (u * 2); | |
| 2245 | return realoffset; | |
| 2566 | if (!got_limm) | |
| 2567 | { | |
| 2568 | //GET_LIMM_32; | |
| 2569 | size = 8; | |
| 2570 | } | |
| 2571 | ||
| 2246 | 2572 | } |
| 2247 | 2573 | else |
| 2248 | 2574 | { |
| 2249 | // otherwise set up the loop positions | |
| 2250 | m_LP_START = m_pc + (size >> 0); | |
| 2251 | m_LP_END = PC_ALIGNED32 + (u * 2); | |
| 2252 | return m_pc + (size>>0); | |
| 2253 | 2575 | } |
| 2576 | } | |
| 2577 | else if (p == 1) | |
| 2578 | { | |
| 2579 | } | |
| 2580 | else if (p == 2) | |
| 2581 | { | |
| 2582 | } | |
| 2583 | else if (p == 3) | |
| 2584 | { | |
| 2585 | } | |
| 2254 | 2586 | |
| 2587 | arcompact_log("unimplemented LR %08x", op); | |
| 2588 | return m_pc + (size>>0); | |
| 2589 | } | |
| 2590 | ||
| 2591 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2b(OPS_32) // Store TO Auxiliary register FROM register | |
| 2592 | { | |
| 2593 | int size = 4; | |
| 2594 | // UINT32 limm = 0; | |
| 2595 | int got_limm = 0; | |
| 2596 | ||
| 2597 | COMMON32_GET_p; | |
| 2598 | COMMON32_GET_breg; | |
| 2599 | ||
| 2600 | if (breg == LIMM_REG) | |
| 2601 | { | |
| 2602 | //GET_LIMM_32; | |
| 2603 | size = 8; | |
| 2604 | got_limm = 1; | |
| 2605 | ||
| 2255 | 2606 | } |
| 2607 | else | |
| 2608 | { | |
| 2609 | } | |
| 2256 | 2610 | |
| 2611 | if (p == 0) | |
| 2612 | { | |
| 2613 | ||
| 2614 | COMMON32_GET_creg | |
| 2615 | ||
| 2616 | if (creg == LIMM_REG) | |
| 2617 | { | |
| 2618 | if (!got_limm) | |
| 2619 | { | |
| 2620 | //GET_LIMM_32; | |
| 2621 | size = 8; | |
| 2622 | } | |
| 2623 | } | |
| 2624 | else | |
| 2625 | { | |
| 2626 | } | |
| 2627 | } | |
| 2628 | else if (p == 1) | |
| 2629 | { | |
| 2630 | } | |
| 2631 | else if (p == 2) | |
| 2632 | { | |
| 2633 | } | |
| 2634 | else if (p == 3) | |
| 2635 | { | |
| 2636 | } | |
| 2637 | ||
| 2638 | arcompact_log("unimplemented SR %08x", op); | |
| 2257 | 2639 | return m_pc + (size>>0); |
| 2258 | ||
| 2259 | 2640 | } |
| 2260 | 2641 | |
| 2261 | ||
| 2262 | 2642 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_29(OPS_32) |
| 2263 | 2643 | { |
| 2264 | 2644 | // leapster bios uses formats for FLAG that are not defined, bug I guess work anyway (P modes 0 / 1) |
| r242703 | r242704 | |
| 2272 | 2652 | |
| 2273 | 2653 | COMMON32_GET_p; |
| 2274 | 2654 | //COMMON32_GET_breg; |
| 2275 | ||
| 2655 | ||
| 2276 | 2656 | if (p == 0) |
| 2277 | 2657 | { |
| 2278 | 2658 | COMMON32_GET_creg |
| r242703 | r242704 | |
| 2281 | 2661 | { |
| 2282 | 2662 | //UINT32 limm; |
| 2283 | 2663 | //GET_LIMM_32; |
| 2284 | size = 8; | |
| 2664 | size = 8; | |
| 2285 | 2665 | } |
| 2286 | 2666 | else |
| 2287 | 2667 | { |
| r242703 | r242704 | |
| 2302 | 2682 | } |
| 2303 | 2683 | |
| 2304 | 2684 | |
| 2685 | #define SETUP_HANDLE04_2f_0x_P00 \ | |
| 2686 | int size = 4; \ | |
| 2687 | UINT32 limm = 0; \ | |
| 2688 | \ | |
| 2689 | COMMON32_GET_breg; \ | |
| 2690 | COMMON32_GET_F; \ | |
| 2691 | COMMON32_GET_creg; \ | |
| 2692 | \ | |
| 2693 | UINT32 c; \ | |
| 2694 | \ | |
| 2695 | if (creg == LIMM_REG) \ | |
| 2696 | { \ | |
| 2697 | GET_LIMM_32; \ | |
| 2698 | size = 8; \ | |
| 2699 | c = limm; \ | |
| 2700 | } \ | |
| 2701 | else \ | |
| 2702 | { \ | |
| 2703 | c = m_regs[creg]; \ | |
| 2704 | } \ | |
| 2705 | /* todo: is the limm, limm syntax valid? (it's pointless.) */ \ | |
| 2706 | /* todo: if breg = LIMM then there is no result (but since that register can never be read, I guess it doesn't matter if we store it there anyway?) */ \ | |
| 2305 | 2707 | |
| 2708 | ||
| 2709 | ||
| 2306 | 2710 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_00(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "ASL"); } // ASL |
| 2307 | 2711 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_01(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "ASR"); } // ASR |
| 2308 | ||
| 2712 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_02(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "LSR"); } // LSR | |
| 2713 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_03(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "ROR"); } // ROR | |
| 2309 | 2714 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_04(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "RCC"); } // RCC |
| 2310 | 2715 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_05(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "SEXB"); } // SEXB |
| 2311 | 2716 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_06(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "SEXW"); } // SEXW |
| 2312 | 2717 | |
| 2718 | // EXTB | |
| 2719 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_07_p00(OPS_32) // note 'b' destination for 04_2f_07_xx group | |
| 2720 | { | |
| 2721 | SETUP_HANDLE04_2f_0x_P00; | |
| 2722 | ||
| 2723 | m_regs[breg] = c & 0x000000ff; | |
| 2724 | if (F) | |
| 2725 | { | |
| 2726 | arcompact_fatal("arcompact_handle04_2f_08_p00 (EXTW) (F set)\n"); // not yet supported | |
| 2727 | } | |
| 2313 | 2728 | |
| 2729 | return m_pc + (size >> 0); | |
| 2730 | } | |
| 2731 | ||
| 2732 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_07_p01(OPS_32) | |
| 2733 | { | |
| 2734 | int size = 4; | |
| 2735 | arcompact_fatal("arcompact_handle04_2f_07_p01 (EXTB)\n"); | |
| 2736 | return m_pc + (size >> 0); | |
| 2737 | } | |
| 2738 | ||
| 2739 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_07_p10(OPS_32) | |
| 2740 | { | |
| 2741 | int size = 4; | |
| 2742 | arcompact_fatal("illegal 04_2f_07_p10 (EXTB)\n"); // illegal mode because 'S' bits have already been used for opcode select | |
| 2743 | return m_pc + (size >> 0); | |
| 2744 | } | |
| 2745 | ||
| 2746 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_07_p11_m0(OPS_32) | |
| 2747 | { | |
| 2748 | int size = 4; | |
| 2749 | arcompact_fatal("arcompact_handle04_2f_07_p11_m0 (EXTB)\n"); // illegal mode because 'Q' bits have already been used for opcode select | |
| 2750 | return m_pc + (size >> 0); | |
| 2751 | } | |
| 2752 | ||
| 2753 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_07_p11_m1(OPS_32) | |
| 2754 | { | |
| 2755 | int size = 4; | |
| 2756 | arcompact_fatal("arcompact_handle04_2f_07_p11_m1 (EXTB)\n"); // illegal mode because 'Q' bits have already been used for opcode select | |
| 2757 | return m_pc + (size >> 0); | |
| 2758 | } | |
| 2759 | ||
| 2760 | // EXTW b <- c or EXTW b <- limm or EXTW limm <- c (no result) or EXTW limm, limm (invalid?) | |
| 2761 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_08_p00(OPS_32) // note 'b' destination for 04_2f_08_xx group | |
| 2762 | { | |
| 2763 | SETUP_HANDLE04_2f_0x_P00; | |
| 2764 | ||
| 2765 | m_regs[breg] = c & 0x0000ffff; | |
| 2766 | if (F) | |
| 2767 | { | |
| 2768 | arcompact_fatal("arcompact_handle04_2f_08_p00 (EXTW) (F set)\n"); // not yet supported | |
| 2769 | } | |
| 2770 | ||
| 2771 | return m_pc + (size >> 0); | |
| 2772 | } | |
| 2773 | ||
| 2774 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_08_p01(OPS_32) | |
| 2775 | { | |
| 2776 | int size = 4; | |
| 2777 | arcompact_fatal("arcompact_handle04_2f_08_p01 (EXTW)\n"); | |
| 2778 | return m_pc + (size >> 0); | |
| 2779 | } | |
| 2780 | ||
| 2781 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_08_p10(OPS_32) | |
| 2782 | { | |
| 2783 | int size = 4; | |
| 2784 | arcompact_fatal("illegal 04_2f_08_p10 (EXTW)\n"); // illegal mode because 'S' bits have already been used for opcode select | |
| 2785 | return m_pc + (size >> 0); | |
| 2786 | } | |
| 2787 | ||
| 2788 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_08_p11_m0(OPS_32) | |
| 2789 | { | |
| 2790 | int size = 4; | |
| 2791 | arcompact_fatal("arcompact_handle04_2f_08_p11_m0 (EXTW)\n"); // illegal mode because 'Q' bits have already been used for opcode select | |
| 2792 | return m_pc + (size >> 0); | |
| 2793 | } | |
| 2794 | ||
| 2795 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_08_p11_m1(OPS_32) | |
| 2796 | { | |
| 2797 | int size = 4; | |
| 2798 | arcompact_fatal("arcompact_handle04_2f_08_p11_m1 (EXTW)\n"); // illegal mode because 'Q' bits have already been used for opcode select | |
| 2799 | return m_pc + (size >> 0); | |
| 2800 | } | |
| 2801 | ||
| 2802 | ||
| 2314 | 2803 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_09(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "ABS"); } // ABS |
| 2315 | 2804 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_0a(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "NOT"); } // NOT |
| 2316 | 2805 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_0b(OPS_32) { return arcompact_handle04_2f_helper(PARAMS, "RCL"); } // RLC |
| r242703 | r242704 | |
| 2360 | 2849 | } |
| 2361 | 2850 | else |
| 2362 | 2851 | { |
| 2363 | } | |
| 2852 | } | |
| 2364 | 2853 | |
| 2365 | 2854 | arcompact_log("unimplemented LD %08x (type 04_3x)", op); |
| 2366 | 2855 | return m_pc + (size>>0); |
| r242703 | r242704 | |
| 2383 | 2872 | |
| 2384 | 2873 | |
| 2385 | 2874 | |
| 2875 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_00_p00(OPS_32) // ASL | |
| 2876 | { | |
| 2877 | SETUP_HANDLE04_0x_P00 | |
| 2386 | 2878 | |
| 2879 | m_regs[areg] = b << (c&0x1f); // c = c | |
| 2880 | ||
| 2881 | if (F) | |
| 2882 | { | |
| 2883 | arcompact_fatal("arcompact_handle05_00_p00 (ASL) (F set)\n"); // not yet supported | |
| 2884 | } | |
| 2885 | ||
| 2886 | return m_pc + (size >> 0); | |
| 2887 | } | |
| 2888 | ||
| 2889 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_00_p01(OPS_32) | |
| 2890 | { | |
| 2891 | SETUP_HANDLE04_0x_P01 | |
| 2892 | ||
| 2893 | m_regs[areg] = b << (c&0x1f); // c = u | |
| 2894 | ||
| 2895 | if (F) | |
| 2896 | { | |
| 2897 | arcompact_fatal("arcompact_handle05_00_p01 (ASL) (F set)\n"); // not yet supported | |
| 2898 | } | |
| 2899 | ||
| 2900 | return m_pc + (size >> 0);} | |
| 2901 | ||
| 2902 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_00_p10(OPS_32) | |
| 2903 | { | |
| 2904 | int size = 4; | |
| 2905 | arcompact_fatal("arcompact_handle05_00_p10 (ASL)\n"); | |
| 2906 | return m_pc + (size >> 0); | |
| 2907 | } | |
| 2908 | ||
| 2909 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_00_p11_m0(OPS_32) | |
| 2910 | { | |
| 2911 | int size = 4; | |
| 2912 | arcompact_fatal("arcompact_handle05_00_p11_m0 (ASL)\n"); | |
| 2913 | return m_pc + (size >> 0); | |
| 2914 | } | |
| 2915 | ||
| 2916 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_00_p11_m1(OPS_32) | |
| 2917 | { | |
| 2918 | int size = 4; | |
| 2919 | arcompact_fatal("arcompact_handle05_00_p11_m1 (ASL)\n"); | |
| 2920 | return m_pc + (size >> 0); | |
| 2921 | } | |
| 2922 | ||
| 2923 | ||
| 2924 | ||
| 2925 | ||
| 2926 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_01_p00(OPS_32) | |
| 2927 | { | |
| 2928 | int size = 4; | |
| 2929 | arcompact_fatal("arcompact_handle05_01_p00 (LSR)\n"); | |
| 2930 | return m_pc + (size >> 0); | |
| 2931 | } | |
| 2932 | ||
| 2933 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_01_p01(OPS_32) | |
| 2934 | { | |
| 2935 | SETUP_HANDLE04_0x_P01 | |
| 2936 | ||
| 2937 | m_regs[areg] = b >> (c&0x1f); // c = u | |
| 2938 | ||
| 2939 | if (F) | |
| 2940 | { | |
| 2941 | arcompact_fatal("arcompact_handle05_01_p01 (LSR) (F set)\n"); // not yet supported | |
| 2942 | } | |
| 2943 | ||
| 2944 | return m_pc + (size >> 0); | |
| 2945 | } | |
| 2946 | ||
| 2947 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_01_p10(OPS_32) | |
| 2948 | { | |
| 2949 | int size = 4; | |
| 2950 | arcompact_fatal("arcompact_handle05_01_p10 (LSR)\n"); | |
| 2951 | return m_pc + (size >> 0); | |
| 2952 | } | |
| 2953 | ||
| 2954 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_01_p11_m0(OPS_32) | |
| 2955 | { | |
| 2956 | int size = 4; | |
| 2957 | arcompact_fatal("arcompact_handle05_01_p11_m0 (LSR)\n"); | |
| 2958 | return m_pc + (size >> 0); | |
| 2959 | } | |
| 2960 | ||
| 2961 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_01_p11_m1(OPS_32) | |
| 2962 | { | |
| 2963 | int size = 4; | |
| 2964 | arcompact_fatal("arcompact_handle05_01_p11_m1 (LSR)\n"); | |
| 2965 | return m_pc + (size >> 0); | |
| 2966 | } | |
| 2967 | ||
| 2968 | ||
| 2387 | 2969 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_02(OPS_32) { return arcompact_handle04_helper(PARAMS, "ASR", 0,0); } |
| 2388 | 2970 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_03(OPS_32) { return arcompact_handle04_helper(PARAMS, "ROR", 0,0); } |
| 2389 | 2971 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_04(OPS_32) { return arcompact_handle04_helper(PARAMS, "MUL64", 2,0); } // special |
| r242703 | r242704 | |
| 2408 | 2990 | |
| 2409 | 2991 | COMMON32_GET_p; |
| 2410 | 2992 | //COMMON32_GET_breg; |
| 2411 | ||
| 2993 | ||
| 2412 | 2994 | if (p == 0) |
| 2413 | 2995 | { |
| 2414 | 2996 | COMMON32_GET_creg |
| r242703 | r242704 | |
| 2417 | 2999 | { |
| 2418 | 3000 | //UINT32 limm; |
| 2419 | 3001 | //GET_LIMM_32; |
| 2420 | size = 8; | |
| 3002 | size = 8; | |
| 2421 | 3003 | |
| 2422 | 3004 | } |
| 2423 | 3005 | else |
| r242703 | r242704 | |
| 2535 | 3117 | } |
| 2536 | 3118 | |
| 2537 | 3119 | |
| 3120 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0d_00(OPS_16) // ADD_S c, b, u3 (note, c destination) | |
| 3121 | { | |
| 3122 | int u, breg, creg; | |
| 2538 | 3123 | |
| 3124 | COMMON16_GET_u3; | |
| 3125 | COMMON16_GET_breg; | |
| 3126 | COMMON16_GET_creg; | |
| 3127 | ||
| 3128 | REG_16BIT_RANGE(breg); | |
| 3129 | REG_16BIT_RANGE(creg); | |
| 3130 | ||
| 3131 | m_regs[creg] = m_regs[breg] + u; | |
| 3132 | ||
| 3133 | return m_pc + (2 >> 0); | |
| 3134 | } | |
| 3135 | ||
| 3136 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0d_01(OPS_16) | |
| 3137 | { | |
| 3138 | return arcompact_handle0d_helper(PARAMS, "SUB_S"); | |
| 3139 | } | |
| 3140 | ||
| 3141 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0d_02(OPS_16) // ASL_S c, b asl u3 (note, c destination) | |
| 3142 | { | |
| 3143 | int u, breg, creg; | |
| 3144 | ||
| 3145 | COMMON16_GET_u3; | |
| 3146 | COMMON16_GET_breg; | |
| 3147 | COMMON16_GET_creg; | |
| 3148 | ||
| 3149 | REG_16BIT_RANGE(breg); | |
| 3150 | REG_16BIT_RANGE(creg); | |
| 3151 | ||
| 3152 | m_regs[creg] = m_regs[breg] << u; | |
| 3153 | ||
| 3154 | return m_pc + (2 >> 0); | |
| 3155 | } | |
| 3156 | ||
| 2539 | 3157 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0d_03(OPS_16) |
| 2540 | 3158 | { |
| 2541 | 3159 | return arcompact_handle0d_helper(PARAMS, "ASR_S"); |
| r242703 | r242704 | |
| 2549 | 3167 | int size = 2; |
| 2550 | 3168 | |
| 2551 | 3169 | GROUP_0e_GET_h; |
| 2552 | ||
| 3170 | ||
| 2553 | 3171 | if (h == LIMM_REG) |
| 2554 | 3172 | { |
| 2555 | 3173 | //UINT32 limm; |
| r242703 | r242704 | |
| 2558 | 3176 | } |
| 2559 | 3177 | else |
| 2560 | 3178 | { |
| 3179 | ||
| 2561 | 3180 | } |
| 2562 | 3181 | |
| 2563 | 3182 | arcompact_log("unimplemented %s %04x (0x0e_0x group)", optext, op); |
| r242703 | r242704 | |
| 2574 | 3193 | GROUP_0e_GET_h; |
| 2575 | 3194 | COMMON16_GET_breg; |
| 2576 | 3195 | REG_16BIT_RANGE(breg); |
| 2577 | ||
| 3196 | ||
| 2578 | 3197 | if (h == LIMM_REG) |
| 2579 | 3198 | { |
| 2580 | 3199 | UINT32 limm; |
| r242703 | r242704 | |
| 2593 | 3212 | } |
| 2594 | 3213 | |
| 2595 | 3214 | // 16-bit MOV with extended register range |
| 2596 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0e_01(OPS_16) // MOV_S b <- h | |
| 3215 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0e_01(OPS_16) // MOV_S b <- h | |
| 2597 | 3216 | { |
| 2598 | 3217 | int h,breg; |
| 2599 | 3218 | int size = 2; |
| r242703 | r242704 | |
| 2601 | 3220 | GROUP_0e_GET_h; |
| 2602 | 3221 | COMMON16_GET_breg; |
| 2603 | 3222 | REG_16BIT_RANGE(breg); |
| 2604 | ||
| 3223 | ||
| 2605 | 3224 | if (h == LIMM_REG) |
| 2606 | 3225 | { |
| 2607 | 3226 | // opcode iiii ibbb hhhI Ihhh |
| r242703 | r242704 | |
| 2637 | 3256 | GROUP_0e_GET_h; |
| 2638 | 3257 | COMMON16_GET_breg; |
| 2639 | 3258 | REG_16BIT_RANGE(breg); |
| 2640 | ||
| 3259 | ||
| 2641 | 3260 | if (h == LIMM_REG) // no result.. |
| 2642 | 3261 | { |
| 3262 | ||
| 2643 | 3263 | } |
| 2644 | 3264 | |
| 2645 | 3265 | m_regs[h] = m_regs[breg]; |
| r242703 | r242704 | |
| 2666 | 3286 | |
| 2667 | 3287 | COMMON16_GET_breg; |
| 2668 | 3288 | REG_16BIT_RANGE(breg); |
| 2669 | ||
| 3289 | ||
| 2670 | 3290 | m_regs[REG_BLINK] = m_pc + (2 >> 0); |
| 2671 | ||
| 3291 | ||
| 2672 | 3292 | return m_regs[breg]; |
| 2673 | 3293 | } |
| 2674 | 3294 | |
| r242703 | r242704 | |
| 2679 | 3299 | |
| 2680 | 3300 | COMMON16_GET_breg; |
| 2681 | 3301 | REG_16BIT_RANGE(breg); |
| 2682 | ||
| 3302 | ||
| 2683 | 3303 | m_delayactive = 1; |
| 2684 | 3304 | m_delayjump = m_regs[breg]; |
| 2685 | 3305 | m_delaylinks = 1; |
| 2686 | ||
| 3306 | ||
| 2687 | 3307 | return m_pc + (2 >> 0); |
| 2688 | 3308 | } |
| 2689 | 3309 | |
| r242703 | r242704 | |
| 2693 | 3313 | |
| 2694 | 3314 | |
| 2695 | 3315 | // Zero parameters (ZOP) |
| 2696 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_00(OPS_16) { | |
| 3316 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_00(OPS_16) { arcompact_log("NOP_S"); return m_pc + (2 >> 0);} | |
| 2697 | 3317 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_01(OPS_16) { arcompact_log("UNIMP_S"); return m_pc + (2 >> 0);} // Unimplemented Instruction, same as illegal, but recommended to fill blank space |
| 2698 | 3318 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_04(OPS_16) { arcompact_log("JEQ_S [blink]"); return m_pc + (2 >> 0);} |
| 2699 | 3319 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_05(OPS_16) { arcompact_log("JNE_S [blink]"); return m_pc + (2 >> 0);} |
| r242703 | r242704 | |
| 2709 | 3329 | m_delayactive = 1; |
| 2710 | 3330 | m_delayjump = m_regs[REG_BLINK]; |
| 2711 | 3331 | m_delaylinks = 0; |
| 2712 | ||
| 3332 | ||
| 2713 | 3333 | return m_pc + (2 >> 0); |
| 2714 | 3334 | } |
| 2715 | 3335 | |
| r242703 | r242704 | |
| 2723 | 3343 | return m_pc + (2 >> 0); |
| 2724 | 3344 | } |
| 2725 | 3345 | |
| 3346 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_02(OPS_16) // SUB_S b <- b,c | |
| 3347 | { | |
| 3348 | int breg, creg; | |
| 2726 | 3349 | |
| 3350 | COMMON16_GET_breg; | |
| 3351 | COMMON16_GET_creg; | |
| 2727 | 3352 | |
| 3353 | REG_16BIT_RANGE(breg); | |
| 3354 | REG_16BIT_RANGE(creg); | |
| 2728 | 3355 | |
| 3356 | m_regs[breg] = m_regs[breg] - m_regs[creg]; | |
| 2729 | 3357 | |
| 3358 | return m_pc + (2 >> 0); | |
| 3359 | } | |
| 2730 | 3360 | |
| 3361 | ||
| 3362 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_04(OPS_16) // AND_S b <- b, c | |
| 3363 | { | |
| 3364 | int breg, creg; | |
| 3365 | ||
| 3366 | COMMON16_GET_breg; | |
| 3367 | COMMON16_GET_creg; | |
| 3368 | ||
| 3369 | REG_16BIT_RANGE(breg); | |
| 3370 | REG_16BIT_RANGE(creg); | |
| 3371 | ||
| 3372 | m_regs[breg] = m_regs[breg] & m_regs[creg]; | |
| 3373 | ||
| 3374 | return m_pc + (2 >> 0); | |
| 3375 | } | |
| 3376 | ||
| 3377 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_05(OPS_16) // OR_S b <- b,c | |
| 3378 | { | |
| 3379 | int breg, creg; | |
| 3380 | ||
| 3381 | COMMON16_GET_breg; | |
| 3382 | COMMON16_GET_creg; | |
| 3383 | ||
| 3384 | REG_16BIT_RANGE(breg); | |
| 3385 | REG_16BIT_RANGE(creg); | |
| 3386 | ||
| 3387 | m_regs[breg] = m_regs[breg] | m_regs[creg]; | |
| 3388 | ||
| 3389 | return m_pc + (2 >> 0); | |
| 3390 | } | |
| 3391 | ||
| 3392 | ||
| 2731 | 3393 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_06(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "BIC_S",0); } |
| 2732 | ||
| 3394 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_07(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "XOR_S",0); } | |
| 2733 | 3395 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0b(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "TST_S",1); } |
| 2734 | 3396 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0c(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "MUL64_S",2); } // actual destination is special multiply registers |
| 2735 | 3397 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0d(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "SEXB_S",0); } |
| 2736 | 3398 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0e(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "SEXW_S",0); } |
| 2737 | 3399 | |
| 3400 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0f(OPS_16) // EXTB_S | |
| 3401 | { | |
| 3402 | int breg, creg; | |
| 2738 | 3403 | |
| 3404 | COMMON16_GET_breg; | |
| 3405 | COMMON16_GET_creg; | |
| 2739 | 3406 | |
| 3407 | REG_16BIT_RANGE(breg); | |
| 3408 | REG_16BIT_RANGE(creg); | |
| 2740 | 3409 | |
| 3410 | m_regs[breg] = m_regs[creg] & 0x000000ff; | |
| 3411 | ||
| 3412 | return m_pc + (2 >> 0); | |
| 3413 | ||
| 3414 | } | |
| 3415 | ||
| 3416 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_10(OPS_16) // EXTW_S | |
| 3417 | { | |
| 3418 | int breg, creg; | |
| 3419 | ||
| 3420 | COMMON16_GET_breg; | |
| 3421 | COMMON16_GET_creg; | |
| 3422 | ||
| 3423 | REG_16BIT_RANGE(breg); | |
| 3424 | REG_16BIT_RANGE(creg); | |
| 3425 | ||
| 3426 | m_regs[breg] = m_regs[creg] & 0x0000ffff; | |
| 3427 | ||
| 3428 | return m_pc + (2 >> 0); | |
| 3429 | } | |
| 3430 | ||
| 2741 | 3431 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_11(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "ABS_S",0); } |
| 2742 | 3432 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_12(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "NOT_S",0); } |
| 3433 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_13(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "NEG_S",0); } | |
| 3434 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_14(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "ADD1_S",0); } | |
| 3435 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_15(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "ADD2_S",0); } | |
| 3436 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_16(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "ADD3_S",0); } | |
| 3437 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_18(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "ASL_S",0); } | |
| 3438 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_19(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "LSR_S",0); } | |
| 3439 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_1a(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "ASR_S",0); } | |
| 2743 | 3440 | |
| 3441 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_1b(OPS_16) // ASL b, c asl 1 (can also be impleneted as b = c + c) | |
| 3442 | { | |
| 3443 | int breg, creg; | |
| 2744 | 3444 | |
| 2745 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_18(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "ASL_S",0); } | |
| 3445 | COMMON16_GET_breg; | |
| 3446 | COMMON16_GET_creg; | |
| 2746 | 3447 | |
| 2747 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_1a(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "ASR_S",0); } | |
| 3448 | REG_16BIT_RANGE(breg); | |
| 3449 | REG_16BIT_RANGE(creg); | |
| 2748 | 3450 | |
| 3451 | m_regs[breg] = m_regs[creg] << 1; | |
| 2749 | 3452 | |
| 3453 | return m_pc + (2 >> 0); | |
| 3454 | } | |
| 3455 | ||
| 2750 | 3456 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_1c(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "ASR1_S",0); } |
| 2751 | 3457 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_1d(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "LSR1_S",0); } |
| 2752 | 3458 | |
| r242703 | r242704 | |
| 2772 | 3478 | |
| 2773 | 3479 | |
| 2774 | 3480 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle10(OPS_16) |
| 2775 | { // LD_S c, [b, u7] | |
| 3481 | { // LD_S c, [b, u7] | |
| 2776 | 3482 | int breg, creg, u; |
| 2777 | 3483 | |
| 2778 | 3484 | COMMON16_GET_breg; |
| r242703 | r242704 | |
| 2790 | 3496 | |
| 2791 | 3497 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle11(OPS_16) |
| 2792 | 3498 | { |
| 2793 | ||
| 3499 | // LDB_S c, [b, u5] | |
| 2794 | 3500 | int breg, creg, u; |
| 2795 | 3501 | |
| 2796 | 3502 | COMMON16_GET_breg; |
| r242703 | r242704 | |
| 2800 | 3506 | REG_16BIT_RANGE(breg); |
| 2801 | 3507 | REG_16BIT_RANGE(creg); |
| 2802 | 3508 | |
| 2803 | // | |
| 3509 | // u <<= 0; // check | |
| 2804 | 3510 | m_regs[creg] = READ8((m_regs[breg] + u) >> 0); |
| 2805 | 3511 | |
| 2806 | 3512 | return m_pc + (2 >> 0); |
| r242703 | r242704 | |
| 2808 | 3514 | |
| 2809 | 3515 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle12(OPS_16) |
| 2810 | 3516 | { |
| 2811 | ||
| 3517 | // LDB_W c, [b, u6] | |
| 2812 | 3518 | int breg, creg, u; |
| 2813 | 3519 | |
| 2814 | 3520 | COMMON16_GET_breg; |
| r242703 | r242704 | |
| 2858 | 3564 | REG_16BIT_RANGE(breg); |
| 2859 | 3565 | REG_16BIT_RANGE(creg); |
| 2860 | 3566 | |
| 2861 | // | |
| 3567 | // u <<= 0; | |
| 2862 | 3568 | |
| 2863 | 3569 | WRITE8((m_regs[breg] + u) >> 0, m_regs[creg]); |
| 2864 | 3570 | |
| r242703 | r242704 | |
| 2891 | 3597 | return m_pc + (2 >> 0); |
| 2892 | 3598 | } |
| 2893 | 3599 | |
| 3600 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_00(OPS_16) // ASL_S b, b, u5 | |
| 3601 | { | |
| 3602 | int breg, u; | |
| 3603 | ||
| 3604 | COMMON16_GET_breg; | |
| 3605 | COMMON16_GET_u5; | |
| 3606 | ||
| 3607 | REG_16BIT_RANGE(breg); | |
| 3608 | ||
| 3609 | // only bottom 5 bits are used if ASL operations, we only have 5 bits anyway here | |
| 3610 | m_regs[breg] = m_regs[breg] << (u&0x1f); | |
| 3611 | ||
| 3612 | return m_pc + (2 >> 0); | |
| 3613 | ||
| 3614 | } | |
| 3615 | ||
| 3616 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_01(OPS_16) | |
| 3617 | { | |
| 3618 | return arcompact_handle_l7_0x_helper(PARAMS, "LSR_S"); | |
| 3619 | } | |
| 3620 | ||
| 3621 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_02(OPS_16) // ASR_S b,b,u5 | |
| 3622 | { | |
| 3623 | int breg, u; | |
| 3624 | ||
| 3625 | COMMON16_GET_breg; | |
| 3626 | COMMON16_GET_u5; | |
| 3627 | ||
| 3628 | REG_16BIT_RANGE(breg); | |
| 3629 | ||
| 3630 | // only bottom 5 bits are used if ASR operations, we only have 5 bits anyway here | |
| 3631 | INT32 temp = (INT32)m_regs[breg]; // treat it as a signed value, so sign extension occurs during shift | |
| 3632 | ||
| 3633 | m_regs[breg] = temp >> (u&0x1f); | |
| 3634 | ||
| 3635 | return m_pc + (2 >> 0); | |
| 3636 | } | |
| 3637 | ||
| 3638 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_03(OPS_16) // SUB_S b,b,u5 | |
| 3639 | { | |
| 3640 | int breg, u; | |
| 3641 | ||
| 3642 | COMMON16_GET_breg; | |
| 3643 | COMMON16_GET_u5; | |
| 3644 | ||
| 3645 | REG_16BIT_RANGE(breg); | |
| 3646 | ||
| 3647 | m_regs[breg] = m_regs[breg] - u; | |
| 3648 | ||
| 3649 | return m_pc + (2 >> 0); | |
| 3650 | } | |
| 3651 | ||
| 3652 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_04(OPS_16) // BSET_S b,b,u5 | |
| 3653 | { | |
| 3654 | int breg, u; | |
| 3655 | ||
| 3656 | COMMON16_GET_breg; | |
| 3657 | COMMON16_GET_u5; | |
| 3658 | ||
| 3659 | REG_16BIT_RANGE(breg); | |
| 3660 | ||
| 3661 | m_regs[breg] = m_regs[breg] | (1 << (u & 0x1f)); | |
| 3662 | ||
| 3663 | return m_pc + (2 >> 0); | |
| 3664 | } | |
| 3665 | ||
| 2894 | 3666 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_05(OPS_16) |
| 2895 | 3667 | { |
| 2896 | 3668 | return arcompact_handle_l7_0x_helper(PARAMS, "BCLR_S"); |
| 2897 | 3669 | } |
| 2898 | 3670 | |
| 3671 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_06(OPS_16) // BMSK b,b,u5 | |
| 3672 | { | |
| 3673 | int breg, u; | |
| 3674 | ||
| 3675 | COMMON16_GET_breg; | |
| 3676 | COMMON16_GET_u5; | |
| 3677 | ||
| 3678 | REG_16BIT_RANGE(breg); | |
| 3679 | ||
| 3680 | u &= 0x1f; | |
| 3681 | ||
| 3682 | m_regs[breg] = m_regs[breg] | ((1 << (u + 1)) - 1); | |
| 3683 | ||
| 3684 | return m_pc + (2 >> 0); | |
| 3685 | } | |
| 3686 | ||
| 2899 | 3687 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_07(OPS_16) |
| 2900 | 3688 | { |
| 2901 | 3689 | return arcompact_handle_l7_0x_helper(PARAMS, "BTST_S"); |
| 2902 | 3690 | } |
| 2903 | 3691 | |
| 2904 | ||
| 2905 | ||
| 2906 | 3692 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_0x_helper(OPS_16, const char* optext, int st) |
| 2907 | 3693 | { |
| 2908 | 3694 | arcompact_log("unimplemented %s %04x (0x18_0x group)", optext, op); |
| r242703 | r242704 | |
| 2926 | 3712 | return m_pc + (2 >> 0); |
| 2927 | 3713 | } |
| 2928 | 3714 | |
| 2929 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_01(OPS_16) | |
| 3715 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_01(OPS_16) | |
| 2930 | 3716 | { |
| 2931 | 3717 | return arcompact_handle18_0x_helper(PARAMS, "LDB_S (SP)", 0); |
| 2932 | 3718 | } |
| r242703 | r242704 | |
| 2948 | 3734 | return m_pc + (2 >> 0); |
| 2949 | 3735 | } |
| 2950 | 3736 | |
| 2951 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_03(OPS_16) | |
| 3737 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_03(OPS_16) | |
| 2952 | 3738 | { |
| 2953 | 3739 | return arcompact_handle18_0x_helper(PARAMS, "STB_S (SP)", 1); |
| 2954 | 3740 | } |
| r242703 | r242704 | |
| 2989 | 3775 | return m_pc + (2 >> 0); |
| 2990 | 3776 | } |
| 2991 | 3777 | |
| 2992 | // op bits remaining for 0x18_06_xx subgroups 0x0700 | |
| 3778 | // op bits remaining for 0x18_06_xx subgroups 0x0700 | |
| 2993 | 3779 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_01(OPS_16) // POP_S b |
| 2994 | 3780 | { |
| 2995 | 3781 | int breg; |
| 2996 | 3782 | COMMON16_GET_breg; |
| 2997 | 3783 | REG_16BIT_RANGE(breg); |
| 2998 | ||
| 3784 | ||
| 2999 | 3785 | m_regs[breg] = READ32(m_regs[REG_SP] >> 2); |
| 3000 | 3786 | m_regs[REG_SP] += 4; |
| 3001 | 3787 | |
| r242703 | r242704 | |
| 3011 | 3797 | return m_pc + (2 >> 0); |
| 3012 | 3798 | } |
| 3013 | 3799 | |
| 3014 | // op bits remaining for 0x18_07_xx subgroups 0x0700 | |
| 3800 | // op bits remaining for 0x18_07_xx subgroups 0x0700 | |
| 3015 | 3801 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_01(OPS_16) // PUSH_S b |
| 3016 | 3802 | { |
| 3017 | 3803 | int breg; |
| 3018 | 3804 | COMMON16_GET_breg; |
| 3019 | 3805 | REG_16BIT_RANGE(breg); |
| 3020 | ||
| 3806 | ||
| 3021 | 3807 | m_regs[REG_SP] -= 4; |
| 3022 | ||
| 3808 | ||
| 3023 | 3809 | WRITE32(m_regs[REG_SP] >> 2, m_regs[breg]); |
| 3024 | 3810 | |
| 3025 | 3811 | return m_pc + (2 >> 0); |
| r242703 | r242704 | |
| 3031 | 3817 | // breg bits are reserved |
| 3032 | 3818 | |
| 3033 | 3819 | m_regs[REG_SP] -= 4; |
| 3034 | ||
| 3820 | ||
| 3035 | 3821 | WRITE32(m_regs[REG_SP] >> 2, m_regs[REG_BLINK]); |
| 3036 | 3822 | |
| 3037 | 3823 | return m_pc + (2 >> 0); |
| r242703 | r242704 | |
| 3151 | 3937 | |
| 3152 | 3938 | if (!m_regs[breg]) |
| 3153 | 3939 | { |
| 3154 | int s = (op & 0x007f) >> 0; | |
| 3940 | int s = (op & 0x007f) >> 0; op &= ~0x007f; | |
| 3155 | 3941 | if (s & 0x40) s = -0x40 + (s & 0x3f); |
| 3156 | 3942 | UINT32 realaddress = PC_ALIGNED32 + (s * 2); |
| 3157 | 3943 | //m_regs[REG_BLINK] = m_pc + (2 >> 0); // don't link |
| r242703 | r242704 | |
| 3170 | 3956 | |
| 3171 | 3957 | if (m_regs[breg]) |
| 3172 | 3958 | { |
| 3173 | int s = (op & 0x007f) >> 0; | |
| 3959 | int s = (op & 0x007f) >> 0; op &= ~0x007f; | |
| 3174 | 3960 | if (s & 0x40) s = -0x40 + (s & 0x3f); |
| 3175 | 3961 | UINT32 realaddress = PC_ALIGNED32 + (s * 2); |
| 3176 | 3962 | //m_regs[REG_BLINK] = m_pc + (2 >> 0); // don't link |
| r242703 | r242704 | |
| 3191 | 3977 | |
| 3192 | 3978 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_00(OPS_16) // B_S s10 (branch always) |
| 3193 | 3979 | { |
| 3194 | int s = (op & 0x01ff) >> 0; | |
| 3980 | int s = (op & 0x01ff) >> 0; op &= ~0x01ff; | |
| 3195 | 3981 | if (s & 0x100) s = -0x100 + (s & 0xff); |
| 3196 | 3982 | UINT32 realaddress = PC_ALIGNED32 + (s * 2); |
| 3197 | 3983 | //m_regs[REG_BLINK] = m_pc + (2 >> 0); // don't link |
| r242703 | r242704 | |
| 3202 | 3988 | { |
| 3203 | 3989 | if (STATUS32_CHECK_Z) |
| 3204 | 3990 | { |
| 3205 | int s = (op & 0x01ff) >> 0; | |
| 3991 | int s = (op & 0x01ff) >> 0; op &= ~0x01ff; | |
| 3206 | 3992 | if (s & 0x100) s = -0x100 + (s & 0xff); |
| 3207 | 3993 | UINT32 realaddress = PC_ALIGNED32 + (s * 2); |
| 3208 | 3994 | //m_regs[REG_BLINK] = m_pc + (2 >> 0); // don't link |
| r242703 | r242704 | |
| 3216 | 4002 | { |
| 3217 | 4003 | if (!STATUS32_CHECK_Z) |
| 3218 | 4004 | { |
| 3219 | int s = (op & 0x01ff) >> 0; | |
| 4005 | int s = (op & 0x01ff) >> 0; op &= ~0x01ff; | |
| 3220 | 4006 | if (s & 0x100) s = -0x100 + (s & 0xff); |
| 3221 | 4007 | UINT32 realaddress = PC_ALIGNED32 + (s * 2); |
| 3222 | 4008 | //m_regs[REG_BLINK] = m_pc + (2 >> 0); // don't link |
| r242703 | r242704 | |
| 3234 | 4020 | |
| 3235 | 4021 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_00(OPS_16) { return arcompact_handle1e_03_0x_helper(PARAMS, "BGT_S"); } |
| 3236 | 4022 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_01(OPS_16) { return arcompact_handle1e_03_0x_helper(PARAMS, "BGE_S"); } |
| 3237 | ||
| 3238 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_02(OPS_16) // BLT_S | |
| 3239 | { | |
| 3240 | if (CONDITION_LT) | |
| 3241 | { | |
| 3242 | int s = (op & 0x003f) >> 0; op &= ~0x003f; | |
| 3243 | if (s & 0x020) s = -0x20 + (s & 0x1f); | |
| 3244 | UINT32 realaddress = PC_ALIGNED32 + (s * 2); | |
| 3245 | //m_regs[REG_BLINK] = m_pc + (2 >> 0); // don't link | |
| 3246 | return realaddress; | |
| 3247 | } | |
| 3248 | ||
| 3249 | return m_pc + (2 >> 0); | |
| 3250 | } | |
| 3251 | ||
| 3252 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_03(OPS_16) // BLE_S | |
| 3253 | { | |
| 3254 | if (CONDITION_LE) | |
| 3255 | { | |
| 3256 | int s = (op & 0x003f) >> 0; op &= ~0x003f; | |
| 3257 | if (s & 0x020) s = -0x20 + (s & 0x1f); | |
| 3258 | UINT32 realaddress = PC_ALIGNED32 + (s * 2); | |
| 3259 | //m_regs[REG_BLINK] = m_pc + (2 >> 0); // don't link | |
| 3260 | return realaddress; | |
| 3261 | } | |
| 3262 | ||
| 3263 | return m_pc + (2 >> 0); | |
| 3264 | } | |
| 3265 | ||
| 4023 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_02(OPS_16) { return arcompact_handle1e_03_0x_helper(PARAMS, "BLT_S"); } | |
| 4024 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_03(OPS_16) { return arcompact_handle1e_03_0x_helper(PARAMS, "BLE_S"); } | |
| 3266 | 4025 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_04(OPS_16) { return arcompact_handle1e_03_0x_helper(PARAMS, "BHI_S"); } |
| 3267 | 4026 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_05(OPS_16) { return arcompact_handle1e_03_0x_helper(PARAMS, "BHS_S"); } |
| 3268 | 4027 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_06(OPS_16) { return arcompact_handle1e_03_0x_helper(PARAMS, "BLO_S"); } |
| r242703 | r242704 | |
| 3270 | 4029 | |
| 3271 | 4030 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1f(OPS_16) // BL_S s13 |
| 3272 | 4031 | { |
| 3273 | int s = (op & 0x07ff) >> 0; | |
| 4032 | int s = (op & 0x07ff) >> 0; op &= ~0x07ff; | |
| 3274 | 4033 | if (s & 0x400) s = -0x400 + (s & 0x3ff); |
| 3275 | 4034 | |
| 3276 | 4035 | UINT32 realaddress = PC_ALIGNED32 + (s * 4); |
| r242703 | r242704 | |
| 3693 | 4452 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_1d(OPS_16) { arcompact_fatal("<illegal 0x18_07_1d> (%04x)", op); return m_pc + (2 >> 0);} |
| 3694 | 4453 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_1e(OPS_16) { arcompact_fatal("<illegal 0x18_07_1e> (%04x)", op); return m_pc + (2 >> 0);} |
| 3695 | 4454 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_1f(OPS_16) { arcompact_fatal("<illegal 0x18_07_1f> (%04x)", op); return m_pc + (2 >> 0);} |
| 4455 | ||
| 4456 | ||
| 4457 |
| r242703 | r242704 | |
|---|---|---|
| 1 | #!/usr/bin/python | |
| 2 | ||
| 3 | import sys | |
| 4 | import re | |
| 5 | ||
| 6 | def EmitGroup04_Handle_NZ_Flags(f, funcname, opname): | |
| 7 | print >>f, " if (result & 0x80000000) { STATUS32_SET_N; }" | |
| 8 | print >>f, " else { STATUS32_CLEAR_N; }" | |
| 9 | print >>f, " if (result == 0x00000000) { STATUS32_SET_Z; }" | |
| 10 | print >>f, " else { STATUS32_CLEAR_Z; }" | |
| 11 | ||
| 12 | def EmitGroup04_Handle_NZC_LSR1_Flags(f, funcname, opname): | |
| 13 | print >>f, " if (result & 0x80000000) { STATUS32_SET_N; }" | |
| 14 | print >>f, " else { STATUS32_CLEAR_N; }" | |
| 15 | print >>f, " if (result == 0x00000000) { STATUS32_SET_Z; }" | |
| 16 | print >>f, " else { STATUS32_CLEAR_Z; }" | |
| 17 | print >>f, " if (c == 0x00000001) { STATUS32_SET_C; }" | |
| 18 | print >>f, " else { STATUS32_CLEAR_C; }" | |
| 19 | ||
| 20 | def EmitGroup04_Handle_NZCV_ADD_Flags(f, funcname, opname): | |
| 21 | print >>f, " if (result & 0x80000000) { STATUS32_SET_N; }" | |
| 22 | print >>f, " else { STATUS32_CLEAR_N; }" | |
| 23 | print >>f, " if (result == 0x00000000) { STATUS32_SET_Z; }" | |
| 24 | print >>f, " else { STATUS32_CLEAR_Z; }" | |
| 25 | print >>f, " if ((b & 0x80000000) == (c & 0x80000000))" | |
| 26 | print >>f, " {" | |
| 27 | print >>f, " if ((result & 0x80000000) != (b & 0x80000000))" | |
| 28 | print >>f, " {" | |
| 29 | print >>f, " STATUS32_SET_V;" | |
| 30 | print >>f, " }" | |
| 31 | print >>f, " else" | |
| 32 | print >>f, " {" | |
| 33 | print >>f, " STATUS32_CLEAR_V;" | |
| 34 | print >>f, " }" | |
| 35 | print >>f, " }" | |
| 36 | print >>f, " if (b < c)" | |
| 37 | print >>f, " {" | |
| 38 | print >>f, " STATUS32_SET_C;" | |
| 39 | print >>f, " }" | |
| 40 | print >>f, " else" | |
| 41 | print >>f, " {" | |
| 42 | print >>f, " STATUS32_CLEAR_C;" | |
| 43 | print >>f, " }" | |
| 44 | ||
| 45 | ||
| 46 | def EmitGroup04_no_Flags(f, funcname, opname): | |
| 47 | print >>f, " // no flag changes" | |
| 48 | ||
| 49 | def EmitGroup04_unsupported_Flags(f, funcname, opname): | |
| 50 | print >>f, " arcompact_fatal(\"arcompact_handle%s (%s) (F set)\\n\"); // not yet supported" % (funcname, opname) | |
| 51 | ||
| 52 | def EmitGroup04_Flaghandler(f,funcname, opname, flagcondition, flaghandler): | |
| 53 | if flagcondition == -1: | |
| 54 | print >>f, " if (F)" | |
| 55 | print >>f, " {" | |
| 56 | flaghandler(f, funcname, opname) | |
| 57 | print >>f, " }" | |
| 58 | elif flagcondition == 0: | |
| 59 | print >>f, " if (0)" | |
| 60 | print >>f, " {" | |
| 61 | flaghandler(f, funcname, opname) | |
| 62 | print >>f, " }" | |
| 63 | elif flagcondition == 1: | |
| 64 | print >>f, " if (1)" | |
| 65 | print >>f, " {" | |
| 66 | flaghandler(f, funcname, opname) | |
| 67 | print >>f, " }" | |
| 68 | ||
| 69 | def EmitGroup04_u5fragment(f,funcname, opname, opexecute, opwrite, opwrite_alt, ignore_a, breg_is_dst_only, flagcondition, flaghandler): | |
| 70 | print >>f, " int size = 4;" | |
| 71 | ||
| 72 | if breg_is_dst_only == 0: | |
| 73 | print >>f, " UINT32 limm = 0;" | |
| 74 | ||
| 75 | print >>f, "/* int got_limm = 0; */" | |
| 76 | print >>f, " " | |
| 77 | print >>f, " COMMON32_GET_breg;" | |
| 78 | ||
| 79 | if flagcondition == -1: | |
| 80 | print >>f, " COMMON32_GET_F;" | |
| 81 | ||
| 82 | print >>f, " COMMON32_GET_u6;" | |
| 83 | ||
| 84 | if ignore_a == 0: | |
| 85 | print >>f, " COMMON32_GET_areg;" | |
| 86 | elif ignore_a == 1: | |
| 87 | print >>f, " //COMMON32_GET_areg; // areg is reserved / not used" | |
| 88 | elif ignore_a == 2: | |
| 89 | print >>f, " //COMMON32_GET_areg; // areg bits already used as opcode select" | |
| 90 | elif ignore_a == 3: | |
| 91 | print >>f, " //COMMON32_GET_areg; // areg bits already used as condition code select" | |
| 92 | print >>f, " " | |
| 93 | ||
| 94 | print >>f, " UINT32 c;" | |
| 95 | if breg_is_dst_only == 0: | |
| 96 | print >>f, " UINT32 b;" | |
| 97 | print >>f, " " | |
| 98 | print >>f, " /* is having b as LIMM valid here? LIMM vs. fixed u6 value makes no sense */" | |
| 99 | print >>f, " if (breg == LIMM_REG)" | |
| 100 | print >>f, " {" | |
| 101 | print >>f, " GET_LIMM_32;" | |
| 102 | print >>f, " size = 8;" | |
| 103 | print >>f, "/* got_limm = 1; */" | |
| 104 | print >>f, " b = limm;" | |
| 105 | print >>f, " }" | |
| 106 | print >>f, " else" | |
| 107 | print >>f, " {" | |
| 108 | print >>f, " b = m_regs[breg];" | |
| 109 | print >>f, " }" | |
| 110 | ||
| 111 | print >>f, " " | |
| 112 | print >>f, " c = u;" | |
| 113 | print >>f, " " | |
| 114 | print >>f, " /* todo: if areg = LIMM then there is no result (but since that register can never be read, I guess it doesn't matter if we store it there anyway?) */" | |
| 115 | ||
| 116 | def EmitGroup04(f,funcname, opname, opexecute, opwrite, opwrite_alt, ignore_a, breg_is_dst_only, flagcondition, flaghandler): | |
| 117 | # the mode 0x00 handler | |
| 118 | print >>f, "ARCOMPACT_RETTYPE arcompact_device::arcompact_handle%s_p00(OPS_32)" % (funcname) | |
| 119 | print >>f, "{" | |
| 120 | print >>f, " int size = 4;" | |
| 121 | ||
| 122 | print >>f, " UINT32 limm = 0;" | |
| 123 | ||
| 124 | print >>f, " int got_limm = 0;" | |
| 125 | print >>f, " " | |
| 126 | print >>f, " COMMON32_GET_breg;" | |
| 127 | ||
| 128 | if flagcondition == -1: | |
| 129 | print >>f, " COMMON32_GET_F;" | |
| 130 | ||
| 131 | print >>f, " COMMON32_GET_creg;" | |
| 132 | ||
| 133 | if ignore_a == 0: | |
| 134 | print >>f, " COMMON32_GET_areg;" | |
| 135 | elif ignore_a == 1: | |
| 136 | print >>f, " //COMMON32_GET_areg; // areg is reserved / not used" | |
| 137 | elif ignore_a == 2: | |
| 138 | print >>f, " //COMMON32_GET_areg; // areg bits already used as opcode select" | |
| 139 | ||
| 140 | print >>f, " " | |
| 141 | ||
| 142 | print >>f, " UINT32 c;" | |
| 143 | if breg_is_dst_only == 0: | |
| 144 | print >>f, " UINT32 b;" | |
| 145 | print >>f, " " | |
| 146 | print >>f, " if (breg == LIMM_REG)" | |
| 147 | print >>f, " {" | |
| 148 | print >>f, " GET_LIMM_32;" | |
| 149 | print >>f, " size = 8;" | |
| 150 | print >>f, " got_limm = 1;" | |
| 151 | print >>f, " b = limm;" | |
| 152 | print >>f, " }" | |
| 153 | print >>f, " else" | |
| 154 | print >>f, " {" | |
| 155 | print >>f, " b = m_regs[breg];" | |
| 156 | print >>f, " }" | |
| 157 | ||
| 158 | print >>f, " " | |
| 159 | print >>f, " if (creg == LIMM_REG)" | |
| 160 | print >>f, " {" | |
| 161 | print >>f, " if (!got_limm)" | |
| 162 | print >>f, " {" | |
| 163 | print >>f, " GET_LIMM_32;" | |
| 164 | print >>f, " size = 8;" | |
| 165 | print >>f, " }" | |
| 166 | print >>f, " c = limm;" | |
| 167 | print >>f, " }" | |
| 168 | print >>f, " else" | |
| 169 | print >>f, " {" | |
| 170 | print >>f, " c = m_regs[creg];" | |
| 171 | print >>f, " }" | |
| 172 | print >>f, " /* todo: is the limm, limm syntax valid? (it's pointless.) */" | |
| 173 | print >>f, " /* todo: if areg = LIMM then there is no result (but since that register can never be read, I guess it doesn't matter if we store it there anyway?) */" | |
| 174 | print >>f, " %s" % (opexecute) | |
| 175 | print >>f, " %s" % (opwrite) | |
| 176 | print >>f, " " | |
| 177 | EmitGroup04_Flaghandler(f,funcname,opname,flagcondition,flaghandler) | |
| 178 | print >>f, " return m_pc + (size >> 0);" | |
| 179 | print >>f, "}" | |
| 180 | print >>f, "" | |
| 181 | print >>f, "" | |
| 182 | # the mode 0x01 handler | |
| 183 | print >>f, "ARCOMPACT_RETTYPE arcompact_device::arcompact_handle%s_p01(OPS_32)" % (funcname) | |
| 184 | print >>f, "{" | |
| 185 | EmitGroup04_u5fragment(f,funcname, opname, opexecute, opwrite, opwrite_alt, ignore_a, breg_is_dst_only, flagcondition, flaghandler) | |
| 186 | print >>f, " %s" % (opexecute) | |
| 187 | print >>f, " %s" % (opwrite) | |
| 188 | print >>f, " " | |
| 189 | EmitGroup04_Flaghandler(f,funcname,opname,flagcondition,flaghandler) | |
| 190 | print >>f, " return m_pc + (size >> 0);" | |
| 191 | print >>f, "}" | |
| 192 | print >>f, "" | |
| 193 | print >>f, "" | |
| 194 | # the mode 0x10 handler | |
| 195 | print >>f, "ARCOMPACT_RETTYPE arcompact_device::arcompact_handle%s_p10(OPS_32)" % (funcname) | |
| 196 | if ignore_a == 2: | |
| 197 | print >>f, "{" | |
| 198 | print >>f, " int size = 4;" | |
| 199 | print >>f, " arcompact_fatal(\"illegal arcompact_handle%s_p10 (ares bits already used as opcode select, can't be used as s12) (%s)\\n\");" % (funcname, opname) | |
| 200 | print >>f, " return m_pc + (size >> 0);" | |
| 201 | print >>f, "}" | |
| 202 | else: | |
| 203 | print >>f, "{" | |
| 204 | print >>f, " int size = 4;" | |
| 205 | if breg_is_dst_only == 0: | |
| 206 | print >>f, " UINT32 limm = 0;" | |
| 207 | ||
| 208 | print >>f, "/* int got_limm = 0; */" | |
| 209 | print >>f, " " | |
| 210 | print >>f, " COMMON32_GET_breg;" | |
| 211 | ||
| 212 | if flagcondition == -1: | |
| 213 | print >>f, " COMMON32_GET_F;" | |
| 214 | ||
| 215 | print >>f, " COMMON32_GET_s12;" | |
| 216 | ||
| 217 | # areg can't be used here, it's used for s12 bits | |
| 218 | ||
| 219 | print >>f, " " | |
| 220 | print >>f, " UINT32 c;" | |
| 221 | if breg_is_dst_only == 0: | |
| 222 | print >>f, " UINT32 b;" | |
| 223 | print >>f, " " | |
| 224 | print >>f, " /* is having b as LIMM valid here? LIMM vs. fixed u6 value makes no sense */" | |
| 225 | print >>f, " if (breg == LIMM_REG)" | |
| 226 | print >>f, " {" | |
| 227 | print >>f, " GET_LIMM_32;" | |
| 228 | print >>f, " size = 8;" | |
| 229 | print >>f, "/* got_limm = 1; */" | |
| 230 | print >>f, " b = limm;" | |
| 231 | print >>f, " }" | |
| 232 | print >>f, " else" | |
| 233 | print >>f, " {" | |
| 234 | print >>f, " b = m_regs[breg];" | |
| 235 | print >>f, " }" | |
| 236 | ||
| 237 | print >>f, " " | |
| 238 | print >>f, " c = (UINT32)S;" | |
| 239 | print >>f, " " | |
| 240 | print >>f, " /* todo: if areg = LIMM then there is no result (but since that register can never be read, I guess it doesn't matter if we store it there anyway?) */" | |
| 241 | print >>f, " %s" % (opexecute) | |
| 242 | print >>f, " %s" % (opwrite_alt) | |
| 243 | print >>f, " " | |
| 244 | EmitGroup04_Flaghandler(f,funcname,opname,flagcondition,flaghandler) | |
| 245 | print >>f, " return m_pc + (size >> 0);" | |
| 246 | print >>f, "}" | |
| 247 | print >>f, "" | |
| 248 | print >>f, "" | |
| 249 | # the mode 0x11 m0 handler | |
| 250 | print >>f, "ARCOMPACT_RETTYPE arcompact_device::arcompact_handle%s_p11_m0(OPS_32)" % (funcname) | |
| 251 | if ignore_a == 2: | |
| 252 | print >>f, "{" | |
| 253 | print >>f, " int size = 4;" | |
| 254 | print >>f, " arcompact_fatal(\"illegal arcompact_handle%s_p11_m0 (ares bits already used as opcode select, can't be used as Q condition) (%s)\\n\");" % (funcname, opname) | |
| 255 | print >>f, " return m_pc + (size >> 0);" | |
| 256 | print >>f, "}" | |
| 257 | else: | |
| 258 | print >>f, "{" | |
| 259 | print >>f, " int size = 4;" | |
| 260 | print >>f, " arcompact_fatal(\"arcompact_handle%s_p11_m0 (%s)\\n\");" % (funcname, opname) | |
| 261 | print >>f, " return m_pc + (size >> 0);" | |
| 262 | print >>f, "}" | |
| 263 | print >>f, "" | |
| 264 | print >>f, "" | |
| 265 | # the mode 0x11 m1 handler | |
| 266 | print >>f, "ARCOMPACT_RETTYPE arcompact_device::arcompact_handle%s_p11_m1(OPS_32)" % (funcname) | |
| 267 | if ignore_a == 2: | |
| 268 | print >>f, "{" | |
| 269 | print >>f, " int size = 4;" | |
| 270 | print >>f, " arcompact_fatal(\"illegal arcompact_handle%s_p11_m1 (ares bits already used as opcode select, can't be used as Q condition) (%s)\\n\");" % (funcname, opname) | |
| 271 | print >>f, " return m_pc + (size >> 0);" | |
| 272 | print >>f, "}" | |
| 273 | else: | |
| 274 | print >>f, "{" | |
| 275 | EmitGroup04_u5fragment(f,funcname, opname, opexecute, opwrite, opwrite_alt, 3, breg_is_dst_only, flagcondition, flaghandler) | |
| 276 | print >>f, " COMMON32_GET_CONDITION;" | |
| 277 | print >>f, " if (!check_condition(condition))" | |
| 278 | print >>f, " return m_pc + (size>>0);" | |
| 279 | print >>f, "" | |
| 280 | print >>f, " %s" % (opexecute) | |
| 281 | print >>f, " %s" % (opwrite_alt) | |
| 282 | print >>f, " " | |
| 283 | EmitGroup04_Flaghandler(f,funcname,opname,flagcondition,flaghandler) | |
| 284 | print >>f, " return m_pc + (size >> 0);" | |
| 285 | print >>f, "}" | |
| 286 | print >>f, "" | |
| 287 | print >>f, "" | |
| 288 | ||
| 289 | ||
| 290 | # xxx_S c, b, u3 format opcodes (note c is destination) | |
| 291 | def EmitGroup0d(f,funcname, opname, opexecute, opwrite): | |
| 292 | print >>f, "ARCOMPACT_RETTYPE arcompact_device::arcompact_handle%s(OPS_16)" % (funcname) | |
| 293 | print >>f, "{" | |
| 294 | print >>f, " int u, breg, creg;" | |
| 295 | print >>f, "" | |
| 296 | print >>f, " COMMON16_GET_u3;" | |
| 297 | print >>f, " COMMON16_GET_breg;" | |
| 298 | print >>f, " COMMON16_GET_creg;" | |
| 299 | print >>f, "" | |
| 300 | print >>f, " REG_16BIT_RANGE(breg);" | |
| 301 | print >>f, " REG_16BIT_RANGE(creg);" | |
| 302 | print >>f, "" | |
| 303 | print >>f, " %s" % (opexecute) | |
| 304 | print >>f, " %s" % (opwrite) | |
| 305 | print >>f, "" | |
| 306 | print >>f, " return m_pc + (2 >> 0);" | |
| 307 | print >>f, "}" | |
| 308 | print >>f, "" | |
| 309 | print >>f, "" | |
| 310 | ||
| 311 | ||
| 312 | # xxx_S b <- b,c format opcodes | |
| 313 | def EmitGroup0f(f,funcname, opname, opexecute, opwrite): | |
| 314 | print >>f, "ARCOMPACT_RETTYPE arcompact_device::arcompact_handle%s(OPS_16)"% (funcname) | |
| 315 | print >>f, "{" | |
| 316 | print >>f, " int breg, creg;" | |
| 317 | print >>f, "" | |
| 318 | print >>f, " COMMON16_GET_breg;" | |
| 319 | print >>f, " COMMON16_GET_creg;" | |
| 320 | print >>f, "" | |
| 321 | print >>f, " REG_16BIT_RANGE(breg);" | |
| 322 | print >>f, " REG_16BIT_RANGE(creg);" | |
| 323 | print >>f, "" | |
| 324 | print >>f, " %s" % (opexecute) | |
| 325 | print >>f, " %s" % (opwrite) | |
| 326 | print >>f, "" | |
| 327 | print >>f, " return m_pc + (2 >> 0);" | |
| 328 | print >>f, "}" | |
| 329 | print >>f, "" | |
| 330 | print >>f, "" | |
| 331 | ||
| 332 | ||
| 333 | # xxx_S b, b, u5 format opcodes | |
| 334 | def EmitGroup17(f,funcname, opname, opexecute): | |
| 335 | print >>f, "ARCOMPACT_RETTYPE arcompact_device::arcompact_handle%s(OPS_16)" % (funcname) | |
| 336 | print >>f, "{" | |
| 337 | print >>f, " int breg, u;" | |
| 338 | print >>f, " " | |
| 339 | print >>f, " COMMON16_GET_breg;" | |
| 340 | print >>f, " COMMON16_GET_u5;" | |
| 341 | print >>f, " " | |
| 342 | print >>f, " REG_16BIT_RANGE(breg);" | |
| 343 | print >>f, " " | |
| 344 | print >>f, " %s" % (opexecute) | |
| 345 | print >>f, " " | |
| 346 | print >>f, " return m_pc + (2 >> 0);" | |
| 347 | print >>f, "}" | |
| 348 | print >>f, "" | |
| 349 | print >>f, "" | |
| 350 | ||
| 351 | ||
| 352 | ||
| 353 | try: | |
| 354 | f = open(sys.argv[1], "w") | |
| 355 | except Exception, err: | |
| 356 | logging.error("cannot write file %s [%s]", fname, err) | |
| 357 | sys.exit(1) | |
| 358 | ||
| 359 | ||
| 360 | EmitGroup04(f, "04_00", "ADD", "UINT32 result = b + c;", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_Handle_NZCV_ADD_Flags ) | |
| 361 | ||
| 362 | EmitGroup04(f, "04_02", "SUB", "UINT32 result = b - c;", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags ) | |
| 363 | ||
| 364 | EmitGroup04(f, "04_04", "AND", "UINT32 result = b & c;", "if (areg != LIMM_REG) { m_regs[areg] = result; }", "if (breg != LIMM_REG) { m_regs[breg] = result; }", 0,0, -1, EmitGroup04_Handle_NZ_Flags ) | |
| 365 | EmitGroup04(f, "04_05", "OR", "UINT32 result = b | c;", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags ) | |
| 366 | EmitGroup04(f, "04_06", "BIC", "UINT32 result = b & (~c);", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags ) | |
| 367 | EmitGroup04(f, "04_07", "XOR", "UINT32 result = b ^ c;", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags ) | |
| 368 | ||
| 369 | EmitGroup04(f, "04_0a", "MOV", "UINT32 result = c;", "m_regs[breg] = result;", "m_regs[breg] = result;", 1,1, -1, EmitGroup04_Handle_NZ_Flags ) # special case, result always goes to breg | |
| 370 | ||
| 371 | EmitGroup04(f, "04_0e", "RSUB", "UINT32 result = c - b;", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags ) | |
| 372 | EmitGroup04(f, "04_0f", "BSET", "UINT32 result = b | (1 << (c & 0x1f));", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags ) | |
| 373 | ||
| 374 | EmitGroup04(f, "04_13", "BMSK", "UINT32 result = b & ((1<<(c+1))-1);", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags ) | |
| 375 | ||
| 376 | ||
| 377 | EmitGroup04(f, "04_14", "ADD1", "UINT32 result = b + (c << 1);", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags ) | |
| 378 | EmitGroup04(f, "04_15", "ADD2", "UINT32 result = b + (c << 2);", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags ) | |
| 379 | EmitGroup04(f, "04_16", "ADD3", "UINT32 result = b + (c << 3);", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags ) | |
| 380 | EmitGroup04(f, "04_17", "SUB1", "UINT32 result = b - (c << 1);", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags ) | |
| 381 | EmitGroup04(f, "04_18", "SUB2", "UINT32 result = b - (c << 2);", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags ) | |
| 382 | EmitGroup04(f, "04_19", "SUB3", "UINT32 result = b - (c << 3);", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags ) | |
| 383 | ||
| 384 | EmitGroup04(f, "04_2a", "LR", "m_regs[breg] = READAUX(c);", "", "", 1,1, -1, EmitGroup04_no_Flags ) # this can't be conditional (todo) | |
| 385 | EmitGroup04(f, "04_2b", "SR", "WRITEAUX(c,b);", "", "", 1,0, -1, EmitGroup04_no_Flags ) # this can't be conditional (todo) | |
| 386 | ||
| 387 | ||
| 388 | ||
| 389 | EmitGroup04(f, "05_00", "ASL", "UINT32 result = b << (c&0x1f);", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags ) | |
| 390 | EmitGroup04(f, "05_01", "LSR", "UINT32 result = b >> (c&0x1f);", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags ) | |
| 391 | ||
| 392 | # the 04_2f subgroup uses the same encoding, but the areg is already used as sub-opcode select, so any modes relying on areg bits for other reasons (sign, condition) (modes 10, 11m0, 11m1) are illegal. the destination is also breg not areg | |
| 393 | EmitGroup04(f, "04_2f_02", "LSR1", "UINT32 result = c >> 1;", "m_regs[breg] = result;","", 2,1, -1, EmitGroup04_Handle_NZC_LSR1_Flags ) # no alt handler (invalid path) | |
| 394 | EmitGroup04(f, "04_2f_03", "ROR", "int shift = 1; UINT32 mask = (1 << (shift)) - 1; mask <<= (32-shift); UINT32 result = ((c >> shift) & ~mask) | ((c << (32-shift)) & mask);", "m_regs[breg] = result;","", 2,1, -1, EmitGroup04_Handle_NZC_LSR1_Flags ) | |
| 395 | ||
| 396 | ||
| 397 | EmitGroup04(f, "04_2f_07", "EXTB", "UINT32 result = c & 0x000000ff;", "m_regs[breg] = result;","", 2,1, -1, EmitGroup04_unsupported_Flags ) # ^ | |
| 398 | EmitGroup04(f, "04_2f_08", "EXTW", "UINT32 result = c & 0x0000ffff;", "m_regs[breg] = result;","", 2,1, -1, EmitGroup04_unsupported_Flags ) # ^ | |
| 399 | ||
| 400 | # xxx_S c, b, u3 format opcodes (note c is destination) | |
| 401 | EmitGroup0d(f, "0d_00", "ADD_S", "UINT32 result = m_regs[breg] + u;", "m_regs[creg] = result;" ) | |
| 402 | EmitGroup0d(f, "0d_01", "SUB_S", "UINT32 result = m_regs[breg] - u;", "m_regs[creg] = result;" ) | |
| 403 | EmitGroup0d(f, "0d_02", "ASL_S", "UINT32 result = m_regs[breg] << u;", "m_regs[creg] = result;" ) | |
| 404 | ||
| 405 | # xxx_S b <- b,c format opcodes (or in some cases xxx_S b,c) | |
| 406 | EmitGroup0f(f, "0f_02", "SUB_S", "UINT32 result = m_regs[breg] - m_regs[creg];", "m_regs[breg] = result;" ) | |
| 407 | EmitGroup0f(f, "0f_04", "AND_S", "UINT32 result = m_regs[breg] & m_regs[creg];", "m_regs[breg] = result;" ) | |
| 408 | EmitGroup0f(f, "0f_05", "OR_S", "UINT32 result = m_regs[breg] | m_regs[creg];", "m_regs[breg] = result;" ) | |
| 409 | EmitGroup0f(f, "0f_07", "XOR_S", "UINT32 result = m_regs[breg] ^ m_regs[creg];", "m_regs[breg] = result;" ) | |
| 410 | EmitGroup0f(f, "0f_0f", "EXTB_S","UINT32 result = m_regs[creg] & 0x000000ff;", "m_regs[breg] = result;" ) | |
| 411 | EmitGroup0f(f, "0f_10", "EXTW_S","UINT32 result = m_regs[creg] & 0x0000ffff;", "m_regs[breg] = result;" ) | |
| 412 | EmitGroup0f(f, "0f_13", "NEG_S"," UINT32 result = 0 - m_regs[creg];", "m_regs[breg] = result;" ) | |
| 413 | ||
| 414 | EmitGroup0f(f, "0f_14", "ADD1_S"," UINT32 result = m_regs[breg] + (m_regs[creg] <<1);", "m_regs[breg] = result;" ) | |
| 415 | EmitGroup0f(f, "0f_15", "ADD2_S"," UINT32 result = m_regs[breg] + (m_regs[creg] <<2);", "m_regs[breg] = result;" ) | |
| 416 | EmitGroup0f(f, "0f_16", "ADD3_S"," UINT32 result = m_regs[breg] + (m_regs[creg] <<3);", "m_regs[breg] = result;" ) | |
| 417 | ||
| 418 | EmitGroup0f(f, "0f_19", "LSR_S", "UINT32 result = m_regs[breg] >> (m_regs[creg]&0x1f);","m_regs[breg] = result;" ) | |
| 419 | EmitGroup0f(f, "0f_1b", "ASL1_S","UINT32 result = m_regs[creg] << 1;", "m_regs[breg] = result;" ) | |
| 420 | ||
| 421 | ||
| 422 | # xxx_S b, b, u5 format opcodes | |
| 423 | EmitGroup17(f, "17_00", "ASL_S", "m_regs[breg] = m_regs[breg] << (u&0x1f);" ) | |
| 424 | EmitGroup17(f, "17_01", "LSR_S", "m_regs[breg] = m_regs[breg] >> (u&0x1f);" ) | |
| 425 | EmitGroup17(f, "17_02", "ASR_S", "INT32 temp = (INT32)m_regs[breg]; m_regs[breg] = temp >> (u&0x1f); // treat it as a signed value, so sign extension occurs during shift" ) | |
| 426 | EmitGroup17(f, "17_03", "SUB_S", "m_regs[breg] = m_regs[breg] - u;" ) | |
| 427 | EmitGroup17(f, "17_04", "BSET_S", "m_regs[breg] = m_regs[breg] | (1 << (u & 0x1f));" ) | |
| 428 | ||
| 429 | EmitGroup17(f, "17_06", "BMSK_S", "m_regs[breg] = m_regs[breg] | ((1 << (u + 1)) - 1);" ) | |
| 430 | ||
| 431 | ||
| 432 | ||
| 433 |
| r242703 | r242704 | |
|---|---|---|
| 41 | 41 | |
| 42 | 42 | switch (instruction) // 32-bit instructions (with optional extra dword for immediate data) |
| 43 | 43 | { |
| 44 | case 0x00: size = arcompact_handle00_dasm(DASM_PARAMS); break; // Bcc | |
| 45 | case 0x01: size = arcompact_handle01_dasm(DASM_PARAMS); break; // BLcc/BRcc | |
| 46 | case 0x02: size = arcompact_handle02_dasm(DASM_PARAMS); break; // LD r+o | |
| 47 | case 0x03: size = arcompact_handle03_dasm(DASM_PARAMS); break; // ST r+o | |
| 48 | case 0x04: size = arcompact_handle04_dasm(DASM_PARAMS); break; // op a,b,c (basecase) | |
| 49 | case 0x05: size = arcompact_handle05_dasm(DASM_PARAMS); break; // op a,b,c (05 ARC ext) | |
| 50 | case 0x06: size = arcompact_handle06_dasm(DASM_PARAMS); break; // op a,b,c (06 ARC ext) | |
| 51 | case 0x07: size = arcompact_handle07_dasm(DASM_PARAMS); break; // op a,b,c (07 User ext) | |
| 52 | case 0x08: size = arcompact_handle08_dasm(DASM_PARAMS); break; // op a,b,c (08 User ext) | |
| 53 | case 0x09: size = arcompact_handle09_dasm(DASM_PARAMS); break; // op a,b,c (09 Market ext) | |
| 54 | case 0x0a: size = arcompact_handle0a_dasm(DASM_PARAMS); break; // op a,b,c (0a Market ext) | |
| 55 | case 0x0b: size = arcompact_handle0b_dasm(DASM_PARAMS); break; // op a,b,c (0b Market ext) | |
| 44 | case 0x00: size = arcompact_handle00_dasm(DASM_PARAMS); break; // Bcc | |
| 45 | case 0x01: size = arcompact_handle01_dasm(DASM_PARAMS); break; // BLcc/BRcc | |
| 46 | case 0x02: size = arcompact_handle02_dasm(DASM_PARAMS); break; // LD r+o | |
| 47 | case 0x03: size = arcompact_handle03_dasm(DASM_PARAMS); break; // ST r+o | |
| 48 | case 0x04: size = arcompact_handle04_dasm(DASM_PARAMS); break; // op a,b,c (basecase) | |
| 49 | case 0x05: size = arcompact_handle05_dasm(DASM_PARAMS); break; // op a,b,c (05 ARC ext) | |
| 50 | case 0x06: size = arcompact_handle06_dasm(DASM_PARAMS); break; // op a,b,c (06 ARC ext) | |
| 51 | case 0x07: size = arcompact_handle07_dasm(DASM_PARAMS); break; // op a,b,c (07 User ext) | |
| 52 | case 0x08: size = arcompact_handle08_dasm(DASM_PARAMS); break; // op a,b,c (08 User ext) | |
| 53 | case 0x09: size = arcompact_handle09_dasm(DASM_PARAMS); break; // op a,b,c (09 Market ext) | |
| 54 | case 0x0a: size = arcompact_handle0a_dasm(DASM_PARAMS); break; // op a,b,c (0a Market ext) | |
| 55 | case 0x0b: size = arcompact_handle0b_dasm(DASM_PARAMS); break; // op a,b,c (0b Market ext) | |
| 56 | 56 | } |
| 57 | 57 | } |
| 58 | 58 | else |
| 59 | { | |
| 59 | { | |
| 60 | 60 | size = 2; |
| 61 | 61 | op &= ~0xf800; |
| 62 | 62 | |
| 63 | 63 | |
| 64 | 64 | switch (instruction) // 16-bit instructions |
| 65 | 65 | { |
| 66 | case 0x0c: size = arcompact_handle0c_dasm(DASM_PARAMS); break; // Load/Add reg-reg | |
| 67 | case 0x0d: size = arcompact_handle0d_dasm(DASM_PARAMS); break; // Add/Sub/Shft imm | |
| 68 | case 0x0e: size = arcompact_handle0e_dasm(DASM_PARAMS); break; // Mov/Cmp/Add | |
| 69 | case 0x0f: size = arcompact_handle0f_dasm(DASM_PARAMS); break; // op_S b,b,c (single 16-bit ops) | |
| 70 | case 0x10: size = arcompact_handle10_dasm(DASM_PARAMS); break; // LD_S | |
| 71 | case 0x11: size = arcompact_handle11_dasm(DASM_PARAMS); break; // LDB_S | |
| 72 | case 0x12: size = arcompact_handle12_dasm(DASM_PARAMS); break; // LDW_S | |
| 73 | case 0x13: size = arcompact_handle13_dasm(DASM_PARAMS); break; // LSW_S.X | |
| 74 | case 0x14: size = arcompact_handle14_dasm(DASM_PARAMS); break; // ST_S | |
| 75 | case 0x15: size = arcompact_handle15_dasm(DASM_PARAMS); break; // STB_S | |
| 76 | case 0x16: size = arcompact_handle16_dasm(DASM_PARAMS); break; // STW_S | |
| 77 | case 0x17: size = arcompact_handle17_dasm(DASM_PARAMS); break; // Shift/Sub/Bit | |
| 78 | case 0x18: size = arcompact_handle18_dasm(DASM_PARAMS); break; // Stack Instr | |
| 79 | case 0x19: size = arcompact_handle19_dasm(DASM_PARAMS); break; // GP Instr | |
| 80 | case 0x1a: size = arcompact_handle1a_dasm(DASM_PARAMS); break; // PCL Instr | |
| 81 | case 0x1b: size = arcompact_handle1b_dasm(DASM_PARAMS); break; // MOV_S | |
| 82 | case 0x1c: size = arcompact_handle1c_dasm(DASM_PARAMS); break; // ADD_S/CMP_S | |
| 83 | case 0x1d: size = arcompact_handle1d_dasm(DASM_PARAMS); break; // BRcc_S | |
| 84 | case 0x1e: size = arcompact_handle1e_dasm(DASM_PARAMS); break; // Bcc_S | |
| 85 | case 0x1f: size = arcompact_handle1f_dasm(DASM_PARAMS); break; // BL_S | |
| 66 | case 0x0c: size = arcompact_handle0c_dasm(DASM_PARAMS); break; // Load/Add reg-reg | |
| 67 | case 0x0d: size = arcompact_handle0d_dasm(DASM_PARAMS); break; // Add/Sub/Shft imm | |
| 68 | case 0x0e: size = arcompact_handle0e_dasm(DASM_PARAMS); break; // Mov/Cmp/Add | |
| 69 | case 0x0f: size = arcompact_handle0f_dasm(DASM_PARAMS); break; // op_S b,b,c (single 16-bit ops) | |
| 70 | case 0x10: size = arcompact_handle10_dasm(DASM_PARAMS); break; // LD_S | |
| 71 | case 0x11: size = arcompact_handle11_dasm(DASM_PARAMS); break; // LDB_S | |
| 72 | case 0x12: size = arcompact_handle12_dasm(DASM_PARAMS); break; // LDW_S | |
| 73 | case 0x13: size = arcompact_handle13_dasm(DASM_PARAMS); break; // LSW_S.X | |
| 74 | case 0x14: size = arcompact_handle14_dasm(DASM_PARAMS); break; // ST_S | |
| 75 | case 0x15: size = arcompact_handle15_dasm(DASM_PARAMS); break; // STB_S | |
| 76 | case 0x16: size = arcompact_handle16_dasm(DASM_PARAMS); break; // STW_S | |
| 77 | case 0x17: size = arcompact_handle17_dasm(DASM_PARAMS); break; // Shift/Sub/Bit | |
| 78 | case 0x18: size = arcompact_handle18_dasm(DASM_PARAMS); break; // Stack Instr | |
| 79 | case 0x19: size = arcompact_handle19_dasm(DASM_PARAMS); break; // GP Instr | |
| 80 | case 0x1a: size = arcompact_handle1a_dasm(DASM_PARAMS); break; // PCL Instr | |
| 81 | case 0x1b: size = arcompact_handle1b_dasm(DASM_PARAMS); break; // MOV_S | |
| 82 | case 0x1c: size = arcompact_handle1c_dasm(DASM_PARAMS); break; // ADD_S/CMP_S | |
| 83 | case 0x1d: size = arcompact_handle1d_dasm(DASM_PARAMS); break; // BRcc_S | |
| 84 | case 0x1e: size = arcompact_handle1e_dasm(DASM_PARAMS); break; // Bcc_S | |
| 85 | case 0x1f: size = arcompact_handle1f_dasm(DASM_PARAMS); break; // BL_S | |
| 86 | 86 | } |
| 87 | 87 | } |
| 88 | 88 |
| r242703 | r242704 | |
|---|---|---|
| 141 | 141 | // 00100 bbb 00 iiiiii F BBB CCCCCC A AAAAA General Operations *UN*Conditional Register to Register |
| 142 | 142 | // 00100 bbb 01 iiiiii F BBB UUUUUU A AAAAA General Operations *UN*Conditional Register (Unsigned 6-bit IMM) |
| 143 | 143 | // 00100 bbb 10 iiiiii F BBB ssssss S SSSSS General Operations *UN*Conditional Register (Signed 12-bit IMM) |
| 144 | ||
| 145 | // 00100 bbb 11 iiiiii F BBB CCCCCC 0 QQQQQ General Operations Conditional Register | |
| 146 | // 00100 bbb 11 iiiiii F BBB UUUUUU 1 QQQQQ General Operations Conditional Register (Unsigned 6-bit IMM) | |
| 144 | ||
| 145 | // 00100 bbb 11 iiiiii F BBB CCCCCC 0 QQQQQ General Operations Conditional Register | |
| 146 | // 00100 bbb 11 iiiiii F BBB UUUUUU 1 QQQQQ General Operations Conditional Register (Unsigned 6-bit IMM) | |
| 147 | 147 | UINT8 subinstr = (op & 0x003f0000) >> 16; |
| 148 | 148 | op &= ~0x003f0000; |
| 149 | 149 | |
| r242703 | r242704 | |
| 304 | 304 | |
| 305 | 305 | switch (subinstr2) |
| 306 | 306 | { |
| 307 | case 0x00: size = arcompact_handle05_2f_00_dasm(DASM_PARAMS); break; // SWAP | |
| 308 | case 0x01: size = arcompact_handle05_2f_01_dasm(DASM_PARAMS); break; // NORM | |
| 307 | case 0x00: size = arcompact_handle05_2f_00_dasm(DASM_PARAMS); break; // SWAP | |
| 308 | case 0x01: size = arcompact_handle05_2f_01_dasm(DASM_PARAMS); break; // NORM | |
| 309 | 309 | case 0x02: size = arcompact_handle05_2f_02_dasm(DASM_PARAMS); break; // SAT16 |
| 310 | case 0x03: size = arcompact_handle05_2f_03_dasm(DASM_PARAMS); break; // RND16 | |
| 311 | case 0x04: size = arcompact_handle05_2f_04_dasm(DASM_PARAMS); break; // ABSSW | |
| 312 | case 0x05: size = arcompact_handle05_2f_05_dasm(DASM_PARAMS); break; // ABSS | |
| 313 | case 0x06: size = arcompact_handle05_2f_06_dasm(DASM_PARAMS); break; // NEGSW | |
| 314 | case 0x07: size = arcompact_handle05_2f_07_dasm(DASM_PARAMS); break; // NEGS | |
| 315 | case 0x08: size = arcompact_handle05_2f_08_dasm(DASM_PARAMS); break; // NORMW | |
| 310 | case 0x03: size = arcompact_handle05_2f_03_dasm(DASM_PARAMS); break; // RND16 | |
| 311 | case 0x04: size = arcompact_handle05_2f_04_dasm(DASM_PARAMS); break; // ABSSW | |
| 312 | case 0x05: size = arcompact_handle05_2f_05_dasm(DASM_PARAMS); break; // ABSS | |
| 313 | case 0x06: size = arcompact_handle05_2f_06_dasm(DASM_PARAMS); break; // NEGSW | |
| 314 | case 0x07: size = arcompact_handle05_2f_07_dasm(DASM_PARAMS); break; // NEGS | |
| 315 | case 0x08: size = arcompact_handle05_2f_08_dasm(DASM_PARAMS); break; // NORMW | |
| 316 | 316 | case 0x09: size = arcompact_handle05_2f_09_dasm(DASM_PARAMS); break; // illegal |
| 317 | 317 | case 0x0a: size = arcompact_handle05_2f_0a_dasm(DASM_PARAMS); break; // illegal |
| 318 | 318 | case 0x0b: size = arcompact_handle05_2f_0b_dasm(DASM_PARAMS); break; // illegal |
| r242703 | r242704 | |
| 759 | 759 | |
| 760 | 760 | switch (subinstr) |
| 761 | 761 | { |
| 762 | case 0x00: size = arcompact_handle17_00_dasm(DASM_PARAMS); break; // ASL_S | |
| 763 | case 0x01: size = arcompact_handle17_01_dasm(DASM_PARAMS); break; // LSR_S | |
| 762 | case 0x00: size = arcompact_handle17_00_dasm(DASM_PARAMS); break; // ASL_S | |
| 763 | case 0x01: size = arcompact_handle17_01_dasm(DASM_PARAMS); break; // LSR_S | |
| 764 | 764 | case 0x02: size = arcompact_handle17_02_dasm(DASM_PARAMS); break; // ASR_S |
| 765 | case 0x03: size = arcompact_handle17_03_dasm(DASM_PARAMS); break; // SUB_S | |
| 766 | case 0x04: size = arcompact_handle17_04_dasm(DASM_PARAMS); break; // BSET_S | |
| 767 | case 0x05: size = arcompact_handle17_05_dasm(DASM_PARAMS); break; // BCLR_S | |
| 768 | case 0x06: size = arcompact_handle17_06_dasm(DASM_PARAMS); break; // BMSK_S | |
| 765 | case 0x03: size = arcompact_handle17_03_dasm(DASM_PARAMS); break; // SUB_S | |
| 766 | case 0x04: size = arcompact_handle17_04_dasm(DASM_PARAMS); break; // BSET_S | |
| 767 | case 0x05: size = arcompact_handle17_05_dasm(DASM_PARAMS); break; // BCLR_S | |
| 768 | case 0x06: size = arcompact_handle17_06_dasm(DASM_PARAMS); break; // BMSK_S | |
| 769 | 769 | case 0x07: size = arcompact_handle17_07_dasm(DASM_PARAMS); break; // BTST_S |
| 770 | 770 | } |
| 771 | 771 | |
| r242703 | r242704 | |
| 795 | 795 | return size; |
| 796 | 796 | } |
| 797 | 797 | |
| 798 | int arcompact_handle18_05_dasm(DASM_OPS_16) | |
| 798 | int arcompact_handle18_05_dasm(DASM_OPS_16) | |
| 799 | 799 | { |
| 800 | 800 | int size = 2; |
| 801 | 801 | UINT8 subinstr2 = (op & 0x0700) >> 8; |
| r242703 | r242704 | |
| 805 | 805 | { |
| 806 | 806 | case 0x00: size = arcompact_handle18_05_00_dasm(DASM_PARAMS); break; // ADD_S (SP) |
| 807 | 807 | case 0x01: size = arcompact_handle18_05_01_dasm(DASM_PARAMS); break; // SUB_S (SP) |
| 808 | case 0x02: size = arcompact_handle18_05_02_dasm(DASM_PARAMS); break; // <illegal 0x18_05_02> | |
| 808 | case 0x02: size = arcompact_handle18_05_02_dasm(DASM_PARAMS); break; // <illegal 0x18_05_02> | |
| 809 | 809 | case 0x03: size = arcompact_handle18_05_03_dasm(DASM_PARAMS); break; // <illegal 0x18_05_03> |
| 810 | 810 | case 0x04: size = arcompact_handle18_05_04_dasm(DASM_PARAMS); break; // <illegal 0x18_05_04> |
| 811 | 811 | case 0x05: size = arcompact_handle18_05_05_dasm(DASM_PARAMS); break; // <illegal 0x18_05_05> |
| r242703 | r242704 | |
| 816 | 816 | return size; |
| 817 | 817 | } |
| 818 | 818 | |
| 819 | int arcompact_handle18_06_dasm(DASM_OPS_16) | |
| 819 | int arcompact_handle18_06_dasm(DASM_OPS_16) | |
| 820 | 820 | { |
| 821 | 821 | int size = 2; |
| 822 | 822 | UINT8 subinstr2 = (op & 0x001f) >> 0; |
| r242703 | r242704 | |
| 861 | 861 | return size; |
| 862 | 862 | } |
| 863 | 863 | |
| 864 | int arcompact_handle18_07_dasm(DASM_OPS_16) | |
| 864 | int arcompact_handle18_07_dasm(DASM_OPS_16) | |
| 865 | 865 | { |
| 866 | 866 | int size = 2; |
| 867 | 867 | UINT8 subinstr2 = (op & 0x001f) >> 0; |
| r242703 | r242704 | |
| 968 | 968 | |
| 969 | 969 | int arcompact_handle1e_03_dasm(DASM_OPS_16) |
| 970 | 970 | { |
| 971 | ||
| 971 | 972 | int size = 2; |
| 972 | 973 | UINT8 subinstr2 = (op & 0x01c0) >> 6; |
| 973 | 974 | op &= ~0x01c0; |
| r242703 | r242704 | |
| 975 | 976 | switch (subinstr2) |
| 976 | 977 | { |
| 977 | 978 | case 0x00: size = arcompact_handle1e_03_00_dasm(DASM_PARAMS); break; // BGT_S |
| 978 | case 0x01: size = arcompact_handle1e_03_01_dasm(DASM_PARAMS); break; // BGE_S | |
| 979 | case 0x01: size = arcompact_handle1e_03_01_dasm(DASM_PARAMS); break; // BGE_S | |
| 979 | 980 | case 0x02: size = arcompact_handle1e_03_02_dasm(DASM_PARAMS); break; // BLT_S |
| 980 | 981 | case 0x03: size = arcompact_handle1e_03_03_dasm(DASM_PARAMS); break; // BLE_S |
| 981 | 982 | case 0x04: size = arcompact_handle1e_03_04_dasm(DASM_PARAMS); break; // BHI_S |
| 982 | 983 | case 0x05: size = arcompact_handle1e_03_05_dasm(DASM_PARAMS); break; // BHS_S |
| 983 | 984 | case 0x06: size = arcompact_handle1e_03_06_dasm(DASM_PARAMS); break; // BLO_S |
| 984 | case 0x07: size = arcompact_handle1e_03_07_dasm(DASM_PARAMS); break; // BLS_S | |
| 985 | case 0x07: size = arcompact_handle1e_03_07_dasm(DASM_PARAMS); break; // BLS_S | |
| 985 | 986 | } |
| 986 | 987 | return size; |
| 987 | 988 |
| r242703 | r242704 | |
|---|---|---|
| 12 | 12 | |
| 13 | 13 | #define GET_LIMM_32 \ |
| 14 | 14 | limm = oprom[6] | (oprom[7] << 8); \ |
| 15 | limm |= (oprom[4] << 16) | (oprom[5] << 24); | |
| 15 | limm |= (oprom[4] << 16) | (oprom[5] << 24); \ | |
| 16 | 16 | |
| 17 | 17 | |
| 18 | ||
| 18 | 19 | int arcompact_handle00_dasm(DASM_OPS_32); |
| 19 | 20 | int arcompact_handle01_dasm(DASM_OPS_32); |
| 20 | 21 | int arcompact_handle01_00_dasm(DASM_OPS_32); |
| r242703 | r242704 | |
|---|---|---|
| 31 | 31 | |
| 32 | 32 | #define GROUP_0e_GET_h \ |
| 33 | 33 | h = ((op & 0x0007) << 3); \ |
| 34 | h |= ((op & 0x00e0) >> 5); \ | |
| 35 | op &= ~0x00e7; | |
| 34 | h |= ((op & 0x00e0) >> 5); \ | |
| 35 | op &= ~0x00e7; \ | |
| 36 | ||
| 36 | 37 | #define COMMON32_GET_breg \ |
| 37 | 38 | int b_temp = (op & 0x07000000) >> 24; op &= ~0x07000000; \ |
| 38 | 39 | int B_temp = (op & 0x00007000) >> 12; op &= ~0x00007000; \ |
| 39 | int breg = b_temp | (B_temp << 3); | |
| 40 | int breg = b_temp | (B_temp << 3); \ | |
| 41 | ||
| 40 | 42 | #define COMMON32_GET_creg \ |
| 41 | int creg = (op & 0x00000fc0) >> 6; op &= ~0x00000fc0; | |
| 43 | int creg = (op & 0x00000fc0) >> 6; op &= ~0x00000fc0; \ | |
| 44 | ||
| 42 | 45 | #define COMMON32_GET_u6 \ |
| 43 | int u = (op & 0x00000fc0) >> 6; op &= ~0x00000fc0; | |
| 46 | int u = (op & 0x00000fc0) >> 6; op &= ~0x00000fc0; \ | |
| 47 | ||
| 44 | 48 | #define COMMON32_GET_areg \ |
| 45 | int areg = (op & 0x0000003f) >> 0; op &= ~0x0000003f; | |
| 49 | int areg = (op & 0x0000003f) >> 0; op &= ~0x0000003f; \ | |
| 50 | ||
| 46 | 51 | #define COMMON32_GET_areg_reserved \ |
| 47 | int ares = (op & 0x0000003f) >> 0; op &= ~0x0000003f; | |
| 52 | int ares = (op & 0x0000003f) >> 0; op &= ~0x0000003f; \ | |
| 53 | ||
| 48 | 54 | #define COMMON32_GET_F \ |
| 49 | int F = (op & 0x00008000) >> 15; op &= ~0x00008000; | |
| 55 | int F = (op & 0x00008000) >> 15; op &= ~0x00008000; \ | |
| 56 | ||
| 50 | 57 | #define COMMON32_GET_p \ |
| 51 | int p = (op & 0x00c00000) >> 22; op &= ~0x00c00000; | |
| 58 | int p = (op & 0x00c00000) >> 22; op &= ~0x00c00000; \ | |
| 52 | 59 | |
| 60 | ||
| 53 | 61 | #define COMMON32_GET_s12 \ |
| 54 | 62 | int S_temp = (op & 0x0000003f) >> 0; op &= ~0x0000003f; \ |
| 55 | 63 | int s_temp = (op & 0x00000fc0) >> 6; op &= ~0x00000fc0; \ |
| 56 | int S = s_temp | (S_temp<<6); | |
| 64 | int S = s_temp | (S_temp<<6); \ | |
| 65 | ||
| 57 | 66 | #define COMMON32_GET_CONDITION \ |
| 58 | 67 | UINT8 condition = op & 0x0000001f; op &= ~0x0000001f; |
| 59 | 68 | |
| 60 | 69 | |
| 61 | 70 | #define COMMON16_GET_breg \ |
| 62 | 71 | breg = ((op & 0x0700) >>8); \ |
| 63 | op &= ~0x0700; | |
| 72 | op &= ~0x0700; \ | |
| 73 | ||
| 64 | 74 | #define COMMON16_GET_creg \ |
| 65 | 75 | creg = ((op & 0x00e0) >>5); \ |
| 66 | op &= ~0x00e0; | |
| 76 | op &= ~0x00e0; \ | |
| 77 | ||
| 67 | 78 | #define COMMON16_GET_areg \ |
| 68 | 79 | areg = ((op & 0x0007) >>0); \ |
| 69 | op &= ~0x0007; | |
| 80 | op &= ~0x0007; \ | |
| 81 | ||
| 70 | 82 | #define COMMON16_GET_u3 \ |
| 71 | 83 | u = ((op & 0x0007) >>0); \ |
| 72 | op &= ~0x0007; | |
| 84 | op &= ~0x0007; \ | |
| 85 | ||
| 73 | 86 | #define COMMON16_GET_u5 \ |
| 74 | 87 | u = ((op & 0x001f) >>0); \ |
| 75 | op &= ~0x001f; | |
| 88 | op &= ~0x001f; \ | |
| 89 | ||
| 76 | 90 | #define COMMON16_GET_u8 \ |
| 77 | 91 | u = ((op & 0x00ff) >>0); \ |
| 78 | op &= ~0x00ff; | |
| 92 | op &= ~0x00ff; \ | |
| 93 | ||
| 79 | 94 | #define COMMON16_GET_u7 \ |
| 80 | 95 | u = ((op & 0x007f) >>0); \ |
| 81 | op &= ~0x007f; | |
| 96 | op &= ~0x007f; \ | |
| 97 | ||
| 82 | 98 | #define COMMON16_GET_s9 \ |
| 83 | 99 | s = ((op & 0x01ff) >>0); \ |
| 84 | op &= ~0x01ff; | |
| 100 | op &= ~0x01ff; \ | |
| 101 | ||
| 85 | 102 | // registers used in 16-bit opcodes hae a limited range |
| 86 | 103 | // and can only address registers r0-r3 and r12-r15 |
| 87 | 104 | |
| 88 | 105 | #define REG_16BIT_RANGE(_reg_) \ |
| 89 | if (_reg_>3) _reg_+= 8; | |
| 106 | if (_reg_>3) _reg_+= 8; \ | |
| 90 | 107 | |
| 108 | ||
| 91 | 109 | // this is as messed up as the rest of the 16-bit alignment in LE mode... |
| 92 | 110 | |
| 93 | 111 | #define GET_LIMM \ |
| 94 | 112 | limm = oprom[4] | (oprom[5] << 8); \ |
| 95 | limm |= (oprom[2] << 16) | (oprom[3] << 24); | |
| 113 | limm |= (oprom[2] << 16) | (oprom[3] << 24); \ | |
| 114 | ||
| 96 | 115 | #define PC_ALIGNED32 \ |
| 97 | 116 | (pc&0xfffffffc) |
| 98 | 117 | |
| r242703 | r242704 | |
| 110 | 129 | // 0000 0sss ssss sss0 SSSS SSSS SSNQ QQQQ |
| 111 | 130 | INT32 address = (op & 0x07fe0000) >> 17; |
| 112 | 131 | address |= ((op & 0x0000ffc0) >> 6) << 10; |
| 113 | if (address & 0x80000) address = -0x80000 + (address & 0x7ffff); | |
| 132 | if (address & 0x800000) address = -0x800000 + (address & 0x7fffff); | |
| 114 | 133 | int n = (op & 0x00000020) >> 5; op &= ~0x00000020; |
| 115 | 134 | COMMON32_GET_CONDITION |
| 116 | 135 | |
| r242703 | r242704 | |
| 144 | 163 | // 00001 sssssssss 00 SSSSSSSSSS N QQQQQ |
| 145 | 164 | INT32 address = (op & 0x07fc0000) >> 17; |
| 146 | 165 | address |= ((op & 0x0000ffc0) >> 6) << 10; |
| 147 | if (address & 0x800000) address = -0x800000 + (address&0x7fffff); | |
| 166 | if (address & 0x800000) address = -0x800000 + (address&0x7fffff); | |
| 148 | 167 | int n = (op & 0x00000020) >> 5; op &= ~0x00000020; |
| 149 | 168 | |
| 150 | 169 | COMMON32_GET_CONDITION |
| r242703 | r242704 | |
| 161 | 180 | INT32 address = (op & 0x07fc0000) >> 17; |
| 162 | 181 | address |= ((op & 0x0000ffc0) >> 6) << 10; |
| 163 | 182 | address |= ((op & 0x0000000f) >> 0) << 20; |
| 164 | if (address & 0x800000) address = -0x800000 + (address&0x7fffff); | |
| 183 | if (address & 0x800000) address = -0x800000 + (address&0x7fffff); | |
| 165 | 184 | int n = (op & 0x00000020) >> 5; op &= ~0x00000020; |
| 166 | 185 | int res = (op & 0x00000010) >> 4; op &= ~0x00000010; |
| 167 | 186 | |
| r242703 | r242704 | |
| 246 | 265 | op &= ~0x07007fe0; |
| 247 | 266 | |
| 248 | 267 | print("%s%s %s, 0x%02x %08x (%08x)", optext, delaybit[n], regnames[breg], u, PC_ALIGNED32 + (address * 2), op & ~0xf8fe800f); |
| 249 | ||
| 268 | ||
| 250 | 269 | return size; |
| 251 | 270 | } |
| 252 | 271 | |
| r242703 | r242704 | |
| 308 | 327 | { |
| 309 | 328 | int size = 4; |
| 310 | 329 | UINT32 limm = 0; |
| 311 | int got_limm = 0; | |
| 330 | int got_limm = 0; | |
| 312 | 331 | // bitpos |
| 313 | 332 | // 1111 1111 1111 1111 0000 0000 0000 0000 |
| 314 | 333 | // fedc ba98 7654 3210 fedc ba98 7654 3210 |
| r242703 | r242704 | |
| 382 | 401 | |
| 383 | 402 | output += sprintf(output, "%s", optext); |
| 384 | 403 | output += sprintf(output, "%s", flagbit[F]); |
| 385 | // | |
| 404 | // output += sprintf( output, " p(%d)", p); | |
| 386 | 405 | |
| 387 | 406 | |
| 388 | 407 | if ((!b_reserved) && (breg == LIMM_REG)) |
| r242703 | r242704 | |
| 410 | 429 | } |
| 411 | 430 | else if (ignore_dst == 1) // certain opcode types ignore the 'a' field entirely, it should be set to 0. |
| 412 | 431 | { |
| 413 | | |
| 432 | if (areg) output += sprintf(output, " <reserved %d> <-", areg); | |
| 414 | 433 | } |
| 415 | 434 | else if (ignore_dst == 2) // for multiply operations areg should always be set to LIMM |
| 416 | 435 | { |
| r242703 | r242704 | |
| 445 | 464 | // 0010 0bbb 01ii iiii FBBB uuuu uuAA AAAA |
| 446 | 465 | int size = 4; |
| 447 | 466 | UINT32 limm = 0; |
| 448 | // | |
| 467 | // int got_limm = 0; | |
| 449 | 468 | |
| 450 | 469 | COMMON32_GET_breg; |
| 451 | 470 | COMMON32_GET_F; |
| r242703 | r242704 | |
| 454 | 473 | |
| 455 | 474 | output += sprintf(output, "%s", optext); |
| 456 | 475 | output += sprintf(output, "%s", flagbit[F]); |
| 457 | // | |
| 476 | // output += sprintf( output, " p(%d)", p); | |
| 458 | 477 | |
| 459 | 478 | |
| 460 | 479 | if ((!b_reserved) && (breg == LIMM_REG)) |
| 461 | 480 | { |
| 462 | 481 | GET_LIMM_32; |
| 463 | 482 | size = 8; |
| 464 | // | |
| 483 | // got_limm = 1; | |
| 465 | 484 | } |
| 466 | 485 | |
| 467 | 486 | // areg can be LIMM too, but in that case LIMM indicates 'no destination' rather than an actual LIMM value following |
| r242703 | r242704 | |
| 473 | 492 | } |
| 474 | 493 | else if (ignore_dst == 1) // certain opcode types ignore the 'a' field entirely, it should be set to 0. |
| 475 | 494 | { |
| 476 | | |
| 495 | if (areg) output += sprintf(output, " <reserved %d> <-", areg); | |
| 477 | 496 | } |
| 478 | 497 | else if (ignore_dst == 2) // for multiply operations areg should always be set to LIMM |
| 479 | 498 | { |
| r242703 | r242704 | |
| 511 | 530 | |
| 512 | 531 | output += sprintf(output, "%s", optext); |
| 513 | 532 | output += sprintf(output, "%s", flagbit[F]); |
| 514 | // | |
| 533 | // output += sprintf( output, " p(%d)", p); | |
| 515 | 534 | |
| 516 | 535 | |
| 517 | 536 | if (!b_reserved) |
| r242703 | r242704 | |
| 551 | 570 | |
| 552 | 571 | output += sprintf(output, "%s", optext); |
| 553 | 572 | output += sprintf(output, "%s", flagbit[F]); |
| 554 | // | |
| 573 | // output += sprintf( output, " p(%d)", p); | |
| 555 | 574 | |
| 556 | 575 | if (!b_reserved) |
| 557 | 576 | { |
| r242703 | r242704 | |
| 575 | 594 | |
| 576 | 595 | |
| 577 | 596 | output += sprintf(output, " Cond<%s> ", conditions[condition]); |
| 597 | ||
| 578 | 598 | |
| 579 | ||
| 580 | 599 | if (creg == LIMM_REG) |
| 581 | 600 | { |
| 582 | 601 | if (!got_limm) |
| r242703 | r242704 | |
| 607 | 626 | |
| 608 | 627 | output += sprintf(output, "%s", optext); |
| 609 | 628 | output += sprintf(output, "%s", flagbit[F]); |
| 610 | // | |
| 629 | // output += sprintf( output, " p(%d)", p); | |
| 611 | 630 | |
| 612 | 631 | if (!b_reserved) |
| 613 | 632 | { |
| r242703 | r242704 | |
| 666 | 685 | return 0; |
| 667 | 686 | } |
| 668 | 687 | |
| 669 | int arcompact_handle04_00_dasm(DASM_OPS_32) | |
| 688 | int arcompact_handle04_00_dasm(DASM_OPS_32) | |
| 670 | 689 | { |
| 671 | 690 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "ADD", 0,0); |
| 672 | 691 | } |
| 673 | 692 | |
| 674 | int arcompact_handle04_01_dasm(DASM_OPS_32) | |
| 675 | { | |
| 693 | int arcompact_handle04_01_dasm(DASM_OPS_32) | |
| 694 | { | |
| 676 | 695 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "ADC", 0,0); |
| 677 | 696 | } |
| 678 | 697 | |
| 679 | int arcompact_handle04_02_dasm(DASM_OPS_32) | |
| 680 | { | |
| 698 | int arcompact_handle04_02_dasm(DASM_OPS_32) | |
| 699 | { | |
| 681 | 700 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "SUB", 0,0); |
| 682 | 701 | } |
| 683 | 702 | |
| 684 | int arcompact_handle04_03_dasm(DASM_OPS_32) | |
| 703 | int arcompact_handle04_03_dasm(DASM_OPS_32) | |
| 685 | 704 | { |
| 686 | 705 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "SBC", 0,0); |
| 687 | 706 | } |
| 688 | 707 | |
| 689 | int arcompact_handle04_04_dasm(DASM_OPS_32) | |
| 708 | int arcompact_handle04_04_dasm(DASM_OPS_32) | |
| 690 | 709 | { |
| 691 | 710 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "AND", 0,0); |
| 692 | 711 | } |
| 693 | 712 | |
| 694 | int arcompact_handle04_05_dasm(DASM_OPS_32) | |
| 713 | int arcompact_handle04_05_dasm(DASM_OPS_32) | |
| 695 | 714 | { |
| 696 | 715 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "OR", 0,0); |
| 697 | 716 | } |
| 698 | 717 | |
| 699 | int arcompact_handle04_06_dasm(DASM_OPS_32) | |
| 718 | int arcompact_handle04_06_dasm(DASM_OPS_32) | |
| 700 | 719 | { |
| 701 | 720 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "BIC", 0,0); |
| 702 | 721 | } |
| 703 | 722 | |
| 704 | int arcompact_handle04_07_dasm(DASM_OPS_32) | |
| 723 | int arcompact_handle04_07_dasm(DASM_OPS_32) | |
| 705 | 724 | { |
| 706 | 725 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "XOR", 0,0); |
| 707 | 726 | } |
| 708 | 727 | |
| 709 | int arcompact_handle04_08_dasm(DASM_OPS_32) | |
| 728 | int arcompact_handle04_08_dasm(DASM_OPS_32) | |
| 710 | 729 | { |
| 711 | 730 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "MAX", 0,0); |
| 712 | 731 | } |
| 713 | 732 | |
| 714 | int arcompact_handle04_09_dasm(DASM_OPS_32) | |
| 733 | int arcompact_handle04_09_dasm(DASM_OPS_32) | |
| 715 | 734 | { |
| 716 | 735 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "MIN", 0,0); |
| 717 | 736 | } |
| r242703 | r242704 | |
| 733 | 752 | } |
| 734 | 753 | |
| 735 | 754 | int arcompact_handle04_0d_dasm(DASM_OPS_32) |
| 736 | { | |
| 755 | { | |
| 737 | 756 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "RCMP", 1,0); |
| 738 | 757 | } |
| 739 | 758 | |
| 740 | 759 | int arcompact_handle04_0e_dasm(DASM_OPS_32) |
| 741 | { | |
| 760 | { | |
| 742 | 761 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "RSUB", 0,0); |
| 743 | 762 | } |
| 744 | 763 | |
| 745 | int arcompact_handle04_0f_dasm(DASM_OPS_32) | |
| 746 | { | |
| 764 | int arcompact_handle04_0f_dasm(DASM_OPS_32) | |
| 765 | { | |
| 747 | 766 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "BSET", 0,0); |
| 748 | 767 | } |
| 749 | 768 | |
| 750 | int arcompact_handle04_10_dasm(DASM_OPS_32) | |
| 751 | { | |
| 769 | int arcompact_handle04_10_dasm(DASM_OPS_32) | |
| 770 | { | |
| 752 | 771 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "BCLR", 0,0); |
| 753 | 772 | } |
| 754 | 773 | |
| 755 | int arcompact_handle04_11_dasm(DASM_OPS_32) | |
| 756 | { | |
| 774 | int arcompact_handle04_11_dasm(DASM_OPS_32) | |
| 775 | { | |
| 757 | 776 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "BTST", 0,0); |
| 758 | 777 | } |
| 759 | 778 | |
| 760 | int arcompact_handle04_12_dasm(DASM_OPS_32) | |
| 761 | { | |
| 779 | int arcompact_handle04_12_dasm(DASM_OPS_32) | |
| 780 | { | |
| 762 | 781 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "BXOR", 0,0); |
| 763 | 782 | } |
| 764 | 783 | |
| 765 | int arcompact_handle04_13_dasm(DASM_OPS_32) | |
| 766 | { | |
| 784 | int arcompact_handle04_13_dasm(DASM_OPS_32) | |
| 785 | { | |
| 767 | 786 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "BMSK", 0,0); |
| 768 | 787 | } |
| 769 | 788 | |
| 770 | int arcompact_handle04_14_dasm(DASM_OPS_32) | |
| 771 | { | |
| 789 | int arcompact_handle04_14_dasm(DASM_OPS_32) | |
| 790 | { | |
| 772 | 791 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "ADD1", 0,0); |
| 773 | 792 | } |
| 774 | 793 | |
| 775 | int arcompact_handle04_15_dasm(DASM_OPS_32) | |
| 776 | { | |
| 794 | int arcompact_handle04_15_dasm(DASM_OPS_32) | |
| 795 | { | |
| 777 | 796 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "ADD2", 0,0); |
| 778 | 797 | } |
| 779 | 798 | |
| 780 | int arcompact_handle04_16_dasm(DASM_OPS_32) | |
| 781 | { | |
| 799 | int arcompact_handle04_16_dasm(DASM_OPS_32) | |
| 800 | { | |
| 782 | 801 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "ADD3", 0,0); |
| 783 | 802 | } |
| 784 | 803 | |
| 785 | int arcompact_handle04_17_dasm(DASM_OPS_32) | |
| 786 | { | |
| 804 | int arcompact_handle04_17_dasm(DASM_OPS_32) | |
| 805 | { | |
| 787 | 806 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "SUB1", 0,0); |
| 788 | 807 | } |
| 789 | 808 | |
| 790 | int arcompact_handle04_18_dasm(DASM_OPS_32) | |
| 791 | { | |
| 809 | int arcompact_handle04_18_dasm(DASM_OPS_32) | |
| 810 | { | |
| 792 | 811 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "SUB2", 0,0); |
| 793 | 812 | } |
| 794 | 813 | |
| 795 | int arcompact_handle04_19_dasm(DASM_OPS_32) | |
| 796 | { | |
| 814 | int arcompact_handle04_19_dasm(DASM_OPS_32) | |
| 815 | { | |
| 797 | 816 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "SUB3", 0,0); |
| 798 | 817 | } |
| 799 | 818 | |
| 800 | int arcompact_handle04_1a_dasm(DASM_OPS_32) | |
| 801 | { | |
| 819 | int arcompact_handle04_1a_dasm(DASM_OPS_32) | |
| 820 | { | |
| 802 | 821 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "MPY", 0,0); |
| 803 | 822 | } // * |
| 804 | 823 | |
| 805 | int arcompact_handle04_1b_dasm(DASM_OPS_32) | |
| 806 | { | |
| 824 | int arcompact_handle04_1b_dasm(DASM_OPS_32) | |
| 825 | { | |
| 807 | 826 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "MPYH", 0,0); |
| 808 | 827 | } // * |
| 809 | 828 | |
| 810 | int arcompact_handle04_1c_dasm(DASM_OPS_32) | |
| 811 | { | |
| 829 | int arcompact_handle04_1c_dasm(DASM_OPS_32) | |
| 830 | { | |
| 812 | 831 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "MPYHU", 0,0); |
| 813 | 832 | } // * |
| 814 | 833 | |
| 815 | int arcompact_handle04_1d_dasm(DASM_OPS_32) | |
| 816 | { | |
| 834 | int arcompact_handle04_1d_dasm(DASM_OPS_32) | |
| 835 | { | |
| 817 | 836 | return arcompact_handle04_helper_dasm(DASM_PARAMS, "MPYU", 0,0); |
| 818 | 837 | } // * |
| 819 | 838 | |
| r242703 | r242704 | |
| 868 | 887 | { // 0010 0RRR 1110 1000 0RRR uuuu uu1Q QQQQ |
| 869 | 888 | COMMON32_GET_u6 |
| 870 | 889 | COMMON32_GET_CONDITION |
| 871 | output += sprintf(output, "LP<%s> (start %08x, end %08x)", conditions[condition], pc + 4, | |
| 890 | output += sprintf(output, "LP<%s> (start %08x, end %08x)", conditions[condition], pc + 4, pc + u*2); | |
| 872 | 891 | |
| 873 | 892 | int unused = (op & 0x00000020)>>5; |
| 874 | if (unused==0) | |
| 893 | if (unused==0) output += sprintf(output, "(unused bit not set)"); | |
| 875 | 894 | |
| 876 | 895 | } |
| 877 | 896 | |
| r242703 | r242704 | |
| 889 | 908 | output += sprintf( output, "[%03x]", auxreg); \ |
| 890 | 909 | } \ |
| 891 | 910 | else \ |
| 892 | output += sprintf( output, "[%03x]", auxreg); | |
| 911 | output += sprintf( output, "[%03x]", auxreg); \ | |
| 912 | ||
| 893 | 913 | int arcompact_handle04_2a_dasm(DASM_OPS_32) // Load FROM Auxiliary register TO register |
| 894 | 914 | { |
| 915 | ||
| 895 | 916 | // pp F |
| 896 | 917 | // 0010 0bbb 0010 1010 0BBB CCCC CCRR RRRR |
| 897 | 918 | // 0010 0bbb 0010 1010 0BBB 1111 10RR RRRR |
| r242703 | r242704 | |
| 909 | 930 | |
| 910 | 931 | output += sprintf( output, "LR"); |
| 911 | 932 | if (F) output += sprintf( output, ".<F set, illegal>"); |
| 912 | // output += sprintf( output, " p(%d)", p); | |
| 933 | // output += sprintf( output, " p(%d)", p); | |
| 934 | ||
| 935 | ||
| 913 | 936 | |
| 914 | ||
| 915 | ||
| 916 | 937 | if (breg == LIMM_REG) |
| 917 | 938 | { |
| 918 | 939 | output += sprintf( output, "<no dest>" ); // illegal encoding? |
| r242703 | r242704 | |
| 926 | 947 | |
| 927 | 948 | if (p == 0) |
| 928 | 949 | { |
| 950 | ||
| 929 | 951 | COMMON32_GET_creg |
| 930 | 952 | COMMON32_GET_areg_reserved |
| 931 | 953 | |
| r242703 | r242704 | |
| 938 | 960 | } |
| 939 | 961 | |
| 940 | 962 | output += sprintf( output, "(%08x) ", limm ); |
| 941 | ||
| 963 | ||
| 942 | 964 | } |
| 943 | 965 | else |
| 944 | 966 | { |
| r242703 | r242704 | |
| 954 | 976 | |
| 955 | 977 | int auxreg = u; |
| 956 | 978 | PRINT_AUX_REGNAME |
| 957 | ||
| 979 | ||
| 958 | 980 | if (ares) output += sprintf( output, "reserved(%02x) ", ares ); |
| 959 | 981 | } |
| 960 | 982 | else if (p == 2) |
| r242703 | r242704 | |
| 974 | 996 | } |
| 975 | 997 | |
| 976 | 998 | int arcompact_handle04_2b_dasm(DASM_OPS_32) // Store TO Auxiliary register FROM register |
| 977 | { | |
| 999 | { | |
| 978 | 1000 | // code at ~ 40073DFE in leapster bios is manually setting up a loop this way |
| 979 | 1001 | // rather than using the lPcc opcode |
| 980 | 1002 | |
| r242703 | r242704 | |
| 988 | 1010 | |
| 989 | 1011 | output += sprintf( output, "SR"); |
| 990 | 1012 | if (F) output += sprintf( output, ".<F set, illegal>"); |
| 991 | // output += sprintf( output, " p(%d)", p); | |
| 1013 | // output += sprintf( output, " p(%d)", p); | |
| 1014 | ||
| 1015 | ||
| 992 | 1016 | |
| 993 | ||
| 994 | ||
| 995 | 1017 | if (breg == LIMM_REG) |
| 996 | 1018 | { |
| 997 | 1019 | GET_LIMM_32; |
| r242703 | r242704 | |
| 1009 | 1031 | |
| 1010 | 1032 | if (p == 0) |
| 1011 | 1033 | { |
| 1034 | ||
| 1012 | 1035 | COMMON32_GET_creg |
| 1013 | 1036 | COMMON32_GET_areg_reserved |
| 1014 | 1037 | |
| r242703 | r242704 | |
| 1072 | 1095 | |
| 1073 | 1096 | int arcompact_handle04_2f_helper_dasm(DASM_OPS_32, const char* optext) |
| 1074 | 1097 | { |
| 1075 | // | |
| 1098 | // | |
| 1076 | 1099 | // 0010 0bbb pp10 1111 FBBB CCCC CCII IIII |
| 1077 | 1100 | int size = 4; |
| 1078 | 1101 | |
| r242703 | r242704 | |
| 1082 | 1105 | |
| 1083 | 1106 | output += sprintf( output, "%s", optext); |
| 1084 | 1107 | output += sprintf( output, "%s", flagbit[F]); |
| 1085 | // output += sprintf( output, " p(%d)", p); | |
| 1086 | ||
| 1108 | // output += sprintf( output, " p(%d)", p); | |
| 1109 | ||
| 1087 | 1110 | if (breg == LIMM_REG) |
| 1088 | 1111 | { |
| 1089 | 1112 | output += sprintf(output, " <no dst>, "); |
| r242703 | r242704 | |
| 1102 | 1125 | { |
| 1103 | 1126 | UINT32 limm; |
| 1104 | 1127 | GET_LIMM_32; |
| 1105 | size = 8; | |
| 1128 | size = 8; | |
| 1106 | 1129 | output += sprintf( output, "(%08x) ", limm ); |
| 1107 | 1130 | |
| 1108 | 1131 | } |
| r242703 | r242704 | |
| 1209 | 1232 | else |
| 1210 | 1233 | { |
| 1211 | 1234 | output += sprintf( output, "%s]", regnames[creg]); |
| 1212 | } | |
| 1235 | } | |
| 1213 | 1236 | |
| 1214 | 1237 | |
| 1215 | 1238 | return size; |
| 1239 | ||
| 1216 | 1240 | |
| 1217 | 1241 | |
| 1218 | ||
| 1219 | 1242 | } |
| 1220 | 1243 | |
| 1221 | 1244 | int arcompact_handle04_30_dasm(DASM_OPS_32) { return arcompact_handle04_3x_helper_dasm(DASM_PARAMS,0,0); } |
| r242703 | r242704 | |
| 1256 | 1279 | |
| 1257 | 1280 | int arcompact_handle05_2f_0x_helper_dasm(DASM_OPS_32, const char* optext) |
| 1258 | 1281 | { |
| 1259 | // | |
| 1282 | // | |
| 1260 | 1283 | // 0010 1bbb pp10 1111 FBBB CCCC CCII IIII when pp == 0x00 |
| 1261 | 1284 | // or |
| 1262 | 1285 | // 0010 1bbb pp10 1111 FBBB UUUU UUII IIII when pp == 0x01 |
| r242703 | r242704 | |
| 1270 | 1293 | |
| 1271 | 1294 | output += sprintf( output, "%s", optext); |
| 1272 | 1295 | output += sprintf( output, "%s", flagbit[F]); |
| 1273 | // output += sprintf( output, " p(%d)", p); | |
| 1274 | ||
| 1275 | ||
| 1296 | // output += sprintf( output, " p(%d)", p); | |
| 1297 | ||
| 1298 | ||
| 1276 | 1299 | output += sprintf(output, " %s, ", regnames[breg]); |
| 1277 | 1300 | |
| 1278 | 1301 | if (p == 0) |
| r242703 | r242704 | |
| 1283 | 1306 | { |
| 1284 | 1307 | UINT32 limm; |
| 1285 | 1308 | GET_LIMM_32; |
| 1286 | size = 8; | |
| 1309 | size = 8; | |
| 1287 | 1310 | output += sprintf( output, "(%08x) ", limm ); |
| 1288 | 1311 | |
| 1289 | 1312 | } |
| r242703 | r242704 | |
| 1446 | 1469 | GROUP_0e_GET_h; |
| 1447 | 1470 | COMMON16_GET_breg; |
| 1448 | 1471 | REG_16BIT_RANGE(breg); |
| 1449 | ||
| 1472 | ||
| 1450 | 1473 | if (h == LIMM_REG) |
| 1451 | 1474 | { |
| 1452 | 1475 | UINT32 limm; |
| r242703 | r242704 | |
| 1494 | 1517 | |
| 1495 | 1518 | COMMON16_GET_breg; |
| 1496 | 1519 | REG_16BIT_RANGE(breg); |
| 1497 | ||
| 1520 | ||
| 1498 | 1521 | print("%s %s", optext, regnames[breg]); |
| 1499 | 1522 | |
| 1500 | 1523 | return 2; |
| r242703 | r242704 | |
| 1701 | 1724 | } |
| 1702 | 1725 | |
| 1703 | 1726 | |
| 1704 | // op bits remaining for 0x18_xx subgroups 0x071f | |
| 1727 | // op bits remaining for 0x18_xx subgroups 0x071f | |
| 1705 | 1728 | |
| 1706 | 1729 | int arcompact_handle18_0x_helper_dasm(DASM_OPS_16, const char* optext, int st, int format) |
| 1707 | 1730 | { |
| r242703 | r242704 | |
| 1723 | 1746 | return 2; |
| 1724 | 1747 | } |
| 1725 | 1748 | |
| 1726 | int arcompact_handle18_00_dasm(DASM_OPS_16) | |
| 1749 | int arcompact_handle18_00_dasm(DASM_OPS_16) | |
| 1727 | 1750 | { |
| 1728 | 1751 | return arcompact_handle18_0x_helper_dasm(DASM_PARAMS, "LD_S", 0,0); |
| 1729 | 1752 | } |
| 1730 | 1753 | |
| 1731 | int arcompact_handle18_01_dasm(DASM_OPS_16) | |
| 1754 | int arcompact_handle18_01_dasm(DASM_OPS_16) | |
| 1732 | 1755 | { |
| 1733 | 1756 | return arcompact_handle18_0x_helper_dasm(DASM_PARAMS, "LDB_S", 0,0); |
| 1734 | 1757 | } |
| 1735 | 1758 | |
| 1736 | int arcompact_handle18_02_dasm(DASM_OPS_16) | |
| 1759 | int arcompact_handle18_02_dasm(DASM_OPS_16) | |
| 1737 | 1760 | { |
| 1738 | 1761 | return arcompact_handle18_0x_helper_dasm(DASM_PARAMS, "ST_S", 1,0); |
| 1739 | 1762 | } |
| 1740 | 1763 | |
| 1741 | int arcompact_handle18_03_dasm(DASM_OPS_16) | |
| 1764 | int arcompact_handle18_03_dasm(DASM_OPS_16) | |
| 1742 | 1765 | { |
| 1743 | 1766 | return arcompact_handle18_0x_helper_dasm(DASM_PARAMS, "STB_S", 1,0); |
| 1744 | 1767 | } |
| 1745 | 1768 | |
| 1746 | int arcompact_handle18_04_dasm(DASM_OPS_16) | |
| 1769 | int arcompact_handle18_04_dasm(DASM_OPS_16) | |
| 1747 | 1770 | { |
| 1748 | 1771 | return arcompact_handle18_0x_helper_dasm(DASM_PARAMS, "ADD_S", 1,1); // check format |
| 1749 | 1772 | } |
| r242703 | r242704 | |
| 1768 | 1791 | return 2; |
| 1769 | 1792 | } |
| 1770 | 1793 | |
| 1771 | // op bits remaining for 0x18_06_xx subgroups 0x0700 | |
| 1772 | int arcompact_handle18_06_01_dasm(DASM_OPS_16) | |
| 1794 | // op bits remaining for 0x18_06_xx subgroups 0x0700 | |
| 1795 | int arcompact_handle18_06_01_dasm(DASM_OPS_16) | |
| 1773 | 1796 | { |
| 1774 | 1797 | int breg; |
| 1775 | 1798 | COMMON16_GET_breg |
| r242703 | r242704 | |
| 1780 | 1803 | return 2; |
| 1781 | 1804 | } |
| 1782 | 1805 | |
| 1783 | int arcompact_handle18_06_11_dasm(DASM_OPS_16) | |
| 1806 | int arcompact_handle18_06_11_dasm(DASM_OPS_16) | |
| 1784 | 1807 | { |
| 1785 | 1808 | int res = (op & 0x0700) >> 8; |
| 1786 | 1809 | op &= ~0x0700; // all bits now used |
| r242703 | r242704 | |
| 1793 | 1816 | return 2; |
| 1794 | 1817 | } |
| 1795 | 1818 | |
| 1796 | // op bits remaining for 0x18_07_xx subgroups 0x0700 | |
| 1797 | int arcompact_handle18_07_01_dasm(DASM_OPS_16) | |
| 1819 | // op bits remaining for 0x18_07_xx subgroups 0x0700 | |
| 1820 | int arcompact_handle18_07_01_dasm(DASM_OPS_16) | |
| 1798 | 1821 | { |
| 1799 | 1822 | int breg; |
| 1800 | 1823 | COMMON16_GET_breg |
| r242703 | r242704 | |
| 1806 | 1829 | } |
| 1807 | 1830 | |
| 1808 | 1831 | |
| 1809 | int arcompact_handle18_07_11_dasm(DASM_OPS_16) | |
| 1832 | int arcompact_handle18_07_11_dasm(DASM_OPS_16) | |
| 1810 | 1833 | { |
| 1811 | 1834 | int res = (op & 0x0700) >> 8; |
| 1812 | 1835 | op &= ~0x0700; // all bits now used |
| r242703 | r242704 | |
| 1898 | 1921 | COMMON16_GET_breg; |
| 1899 | 1922 | REG_16BIT_RANGE(breg); |
| 1900 | 1923 | |
| 1901 | int s = (op & 0x007f) >> 0; | |
| 1924 | int s = (op & 0x007f) >> 0; op &= ~0x007f; | |
| 1902 | 1925 | if (s & 0x40) s = -0x40 + (s & 0x3f); |
| 1903 | 1926 | |
| 1904 | 1927 | print("%s %s, 0 to 0x%08x", optext, regnames[breg], PC_ALIGNED32 + s*2); |
| r242703 | r242704 | |
| 1912 | 1935 | |
| 1913 | 1936 | int arcompact_handle1e_0x_helper_dasm(DASM_OPS_16, const char* optext) |
| 1914 | 1937 | { |
| 1915 | int s = (op & 0x01ff) >> 0; | |
| 1938 | int s = (op & 0x01ff) >> 0; op &= ~0x01ff; | |
| 1916 | 1939 | if (s & 0x100) s = -0x100 + (s & 0xff); |
| 1917 | 1940 | |
| 1918 | 1941 | print("%s %08x", optext, PC_ALIGNED32 + s*2); |
| r242703 | r242704 | |
| 1927 | 1950 | |
| 1928 | 1951 | int arcompact_handle1e_03_0x_helper_dasm(DASM_OPS_16, const char* optext) |
| 1929 | 1952 | { |
| 1930 | int s = (op & 0x003f) >> 0; | |
| 1953 | int s = (op & 0x003f) >> 0; op &= ~0x003f; | |
| 1931 | 1954 | if (s & 0x020) s = -0x20 + (s & 0x1f); |
| 1932 | 1955 | |
| 1933 | 1956 | print("%s %08x", optext, PC_ALIGNED32 + s*2); |
| r242703 | r242704 | |
| 1945 | 1968 | |
| 1946 | 1969 | int arcompact_handle1f_dasm(DASM_OPS_16) |
| 1947 | 1970 | { |
| 1948 | int s = (op & 0x07ff) >> 0; | |
| 1971 | int s = (op & 0x07ff) >> 0; op &= ~0x07ff; | |
| 1949 | 1972 | if (s & 0x400) s = -0x400 + (s & 0x3ff); |
| 1950 | 1973 | |
| 1951 | 1974 | print("BL_S %08x", PC_ALIGNED32 + (s*4)); |
| r242703 | r242704 | |
| 2366 | 2389 | int arcompact_handle18_07_1d_dasm(DASM_OPS_16) { print("<illegal 0x18_07_1d> (%04x)", op); return 2;} |
| 2367 | 2390 | int arcompact_handle18_07_1e_dasm(DASM_OPS_16) { print("<illegal 0x18_07_1e> (%04x)", op); return 2;} |
| 2368 | 2391 | int arcompact_handle18_07_1f_dasm(DASM_OPS_16) { print("<illegal 0x18_07_1f> (%04x)", op); return 2;} |
| 2392 |
| r242703 | r242704 | |
|---|---|---|
| 15 | 15 | |
| 16 | 16 | #define GET_LIMM_32 \ |
| 17 | 17 | limm = oprom[6] | (oprom[7] << 8); \ |
| 18 | limm |= (oprom[4] << 16) | (oprom[5] << 24); | |
| 18 | limm |= (oprom[4] << 16) | (oprom[5] << 24); \ | |
| 19 | 19 | |
| 20 | ||
| 20 | 21 | int arcompact_handle00_00_dasm(DASM_OPS_32); |
| 21 | 22 | int arcompact_handle00_01_dasm(DASM_OPS_32); |
| 22 | 23 | int arcompact_handle01_00_00dasm(DASM_OPS_32); |
| r242703 | r242704 | |
| 366 | 367 | int arcompact_handle04_2f_3f_3b_dasm(DASM_OPS_32); |
| 367 | 368 | int arcompact_handle04_2f_3f_3c_dasm(DASM_OPS_32); |
| 368 | 369 | int arcompact_handle04_2f_3f_3d_dasm(DASM_OPS_32); |
| 369 | int arcompact_handle04_2f_3f_3e_dasm(DASM_OPS_32); | |
| 370 | int arcompact_handle04_2f_3f_3e_dasm(DASM_OPS_32); | |
| 370 | 371 | int arcompact_handle04_2f_3f_3f_dasm(DASM_OPS_32); |
| 371 | 372 | |
| 372 | 373 | int arcompact_handle05_2f_00_dasm(DASM_OPS_32); |
| r242703 | r242704 | |
| 631 | 632 | int arcompact_handle18_07_16_dasm(DASM_OPS_16); |
| 632 | 633 | int arcompact_handle18_07_17_dasm(DASM_OPS_16); |
| 633 | 634 | int arcompact_handle18_07_18_dasm(DASM_OPS_16); |
| 634 | int arcompact_handle18_07_19_dasm(DASM_OPS_16); | |
| 635 | int arcompact_handle18_07_19_dasm(DASM_OPS_16); | |
| 635 | 636 | int arcompact_handle18_07_1a_dasm(DASM_OPS_16); |
| 636 | 637 | int arcompact_handle18_07_1b_dasm(DASM_OPS_16); |
| 637 | 638 | int arcompact_handle18_07_1c_dasm(DASM_OPS_16); |
| r242703 | r242704 | |
|---|---|---|
| 106 | 106 | |
| 107 | 107 | $(CPUOBJ)/arcompact/arcompact.o: $(CPUSRC)/arcompact/arcompact.c \ |
| 108 | 108 | $(CPUSRC)/arcompact/arcompact.h \ |
| 109 | $(CPUSRC)/arcompact/arcompact_common.h \ | |
| 110 | $(CPUOBJ)/arcompact/arcompact.inc | |
| 109 | $(CPUSRC)/arcompact/arcompact_common.h | |
| 111 | 110 | |
| 112 | 111 | $(CPUOBJ)/arcompact/arcompact_execute.o: $(CPUSRC)/arcompact/arcompact_execute.c \ |
| 113 | 112 | $(CPUSRC)/arcompact/arcompact.h \ |
| 114 | $(CPUSRC)/arcompact/arcompact_common.h \ | |
| 115 | $(CPUOBJ)/arcompact/arcompact.inc | |
| 113 | $(CPUSRC)/arcompact/arcompact_common.h | |
| 116 | 114 | |
| 117 | 115 | $(CPUOBJ)/arcompact/arcompactdasm_dispatch.o: $(CPUSRC)/arcompact/arcompactdasm_dispatch.c \ |
| 118 | 116 | $(CPUSRC)/arcompact/arcompactdasm_dispatch.h \ |
| r242703 | r242704 | |
| 125 | 123 | $(CPUOBJ)/arcompact/arcompact_common.o: $(CPUSRC)/arcompact/arcompact_common.c \ |
| 126 | 124 | $(CPUSRC)/arcompact/arcompact_common.h |
| 127 | 125 | |
| 128 | # rule to generate the C files | |
| 129 | $(CPUOBJ)/arcompact/arcompact.inc: $(CPUSRC)/arcompact/arcompact_make.py | |
| 130 | @echo Generating arcompact source .inc files... | |
| 131 | $(PYTHON) $(CPUSRC)/arcompact/arcompact_make.py $@ | |
| 132 | 126 | |
| 133 | 127 | #------------------------------------------------- |
| 134 | 128 | # Acorn ARM series |
| r242703 | r242704 | |
| 1597 | 1591 | |
| 1598 | 1592 | $(M68KMAKE): $(CPUOBJ)/m68000/m68kmake.o $(LIBOCORE) |
| 1599 | 1593 | @echo Linking $@... |
| 1600 | $(LD) $(LDFLAGS) $(OSDBGLDFLAGS) $^ $( | |
| 1594 | $(LD) $(LDFLAGS) $(OSDBGLDFLAGS) $^ $(LIBS) -o $@ | |
| 1601 | 1595 | endif |
| 1602 | 1596 | |
| 1603 | 1597 | # rule to ensure we build the header before building the core CPU file |
| r242703 | r242704 | |
|---|---|---|
| 591 | 591 | ssr |= SSR_TDRE; |
| 592 | 592 | rx_parity = smr & SMR_OE ? 0 : 1; |
| 593 | 593 | rsr = 0x00; |
| 594 | logerror("%s: start rec | |
| 594 | logerror("%s: start recieve\n", tag()); | |
| 595 | 595 | if(smr & SMR_CA) { |
| 596 | 596 | rx_state = ST_BIT; |
| 597 | 597 | rx_bit = 8; |
| r242703 | r242704 | |
| 609 | 609 | if(!(ssr & SSR_FER)) { |
| 610 | 610 | if((smr & SMR_PE) && rx_parity) { |
| 611 | 611 | ssr |= SSR_PER; |
| 612 | logerror("%s: Rec | |
| 612 | logerror("%s: Recieve parity error\n", tag()); | |
| 613 | 613 | } else if(ssr & SSR_RDRF) { |
| 614 | 614 | ssr |= SSR_ORER; |
| 615 | logerror("%s: Rec | |
| 615 | logerror("%s: Recieve overrun\n", tag()); | |
| 616 | 616 | } else { |
| 617 | 617 | ssr |= SSR_RDRF; |
| 618 | logerror("%s: Rec | |
| 618 | logerror("%s: Recieved %02x\n", tag(), rsr); | |
| 619 | 619 | rdr = rsr; |
| 620 | 620 | } |
| 621 | 621 | } |
| r242703 | r242704 | |
|---|---|---|
| 347 | 347 | sprintf(tm, "%d", i); |
| 348 | 348 | timer_channel[i] = subdevice<h8_timer16_channel_device>(tm); |
| 349 | 349 | } |
| 350 | ||
| 350 | ||
| 351 | 351 | save_item(NAME(tstr)); |
| 352 | 352 | } |
| 353 | 353 |
| r242703 | r242704 | |
|---|---|---|
| 376 | 376 | void init_cpu_m68008(void); |
| 377 | 377 | void init_cpu_m68010(void); |
| 378 | 378 | void init_cpu_m68020(void); |
| 379 | void init_cpu_m68020fpu(void); | |
| 380 | 379 | void init_cpu_m68020pmmu(void); |
| 381 | 380 | void init_cpu_m68020hmmu(void); |
| 382 | 381 | void init_cpu_m68ec020(void); |
| r242703 | r242704 | |
| 555 | 554 | protected: |
| 556 | 555 | }; |
| 557 | 556 | |
| 558 | class m68020fpu_device : public m68000_base_device | |
| 559 | { | |
| 560 | public: | |
| 561 | // construction/destruction | |
| 562 | m68020fpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
| 563 | ||
| 564 | virtual UINT32 disasm_min_opcode_bytes() const { return 2; }; | |
| 565 | virtual UINT32 disasm_max_opcode_bytes() const { return 20; }; | |
| 566 | virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options); | |
| 567 | ||
| 568 | virtual UINT32 execute_min_cycles() const { return 2; }; | |
| 569 | virtual UINT32 execute_max_cycles() const { return 158; }; | |
| 570 | ||
| 571 | virtual UINT32 execute_default_irq_vector() const { return -1; }; | |
| 572 | ||
| 573 | // device-level overrides | |
| 574 | virtual void device_start(); | |
| 575 | protected: | |
| 576 | }; | |
| 577 | ||
| 578 | 557 | class m68020pmmu_device : public m68000_base_device |
| 579 | 558 | { |
| 580 | 559 | public: |
| r242703 | r242704 | |
| 794 | 773 | extern const device_type M68010; |
| 795 | 774 | extern const device_type M68EC020; |
| 796 | 775 | extern const device_type M68020; |
| 797 | extern const device_type M68020FPU; | |
| 798 | 776 | extern const device_type M68020PMMU; |
| 799 | 777 | extern const device_type M68020HMMU; |
| 800 | 778 | extern const device_type M68EC030; |
| r242703 | r242704 | |
|---|---|---|
| 272 | 272 | extern void m68040_fpu_op0(m68000_base_device *m68k); |
| 273 | 273 | extern void m68040_fpu_op1(m68000_base_device *m68k); |
| 274 | 274 | extern void m68881_mmu_ops(m68000_base_device *m68k); |
| 275 | extern void m68881_ftrap(m68000_base_device *m68k); | |
| 276 | 275 | |
| 277 | 276 | /* ======================================================================== */ |
| 278 | 277 | /* ========================= INSTRUCTION HANDLERS ========================= */ |
| r242703 | r242704 | |
| 552 | 551 | cpgen 32 . . 1111...000...... .......... . . U U . . U . . 4 4 . . . |
| 553 | 552 | cpscc 32 . . 1111...001...... .......... . . U U . . U . . 4 4 . . . |
| 554 | 553 | cptrapcc 32 . . 1111...001111... .......... . . U U . . U . . 4 4 . . . |
| 555 | ftrapcc 32 . . 1111001001111... .......... . . U U . . U . . 4 4 . . . | |
| 556 | 554 | dbt 16 . . 0101000011001... .......... U U U U U U U 12 12 6 6 6 6 6 |
| 557 | 555 | dbf 16 . . 0101000111001... .......... U U U U U U U 12 12 6 4 4 4 4 |
| 558 | 556 | dbcc 16 . . 0101....11001... .......... U U U U U U U 12 12 6 6 6 6 6 |
| r242703 | r242704 | |
| 4479 | 4477 | m68ki_exception_1111(mc68kcpu); |
| 4480 | 4478 | } |
| 4481 | 4479 | |
| 4482 | M68KMAKE_OP(ftrapcc, 32, ., .) | |
| 4483 | { | |
| 4484 | if((mc68kcpu)->has_fpu) | |
| 4485 | { | |
| 4486 | m68881_ftrap(mc68kcpu); | |
| 4487 | return; | |
| 4488 | } | |
| 4489 | m68ki_exception_1111(mc68kcpu); | |
| 4490 | } | |
| 4491 | ||
| 4492 | 4480 | M68KMAKE_OP(dbt, 16, ., .) |
| 4493 | 4481 | { |
| 4494 | 4482 | REG_PC(mc68kcpu) += 2; |
| r242703 | r242704 | |
|---|---|---|
| 690 | 690 | |
| 691 | 691 | m68k->run_mode = RUN_MODE_BERR_AERR_RESET; |
| 692 | 692 | |
| 693 | if (!CPU_TYPE_IS_0 | |
| 693 | if (!CPU_TYPE_IS_020_PLUS(m68k->cpu_type)) | |
| 694 | 694 | { |
| 695 | 695 | /* Note: This is implemented for 68000 only! */ |
| 696 | 696 | m68ki_stack_frame_buserr(m68k, sr); |
| 697 | 697 | } |
| 698 | else if (CPU_TYPE_IS_010(m68k->cpu_type)) | |
| 699 | { | |
| 700 | /* only the 68010 throws this unique type-1000 frame */ | |
| 701 | m68ki_stack_frame_1000(m68k, REG_PPC(m68k), sr, EXCEPTION_BUS_ERROR); | |
| 702 | } | |
| 703 | 698 | else if (m68k->mmu_tmp_buserror_address == REG_PPC(m68k)) |
| 704 | 699 | { |
| 705 | 700 | m68ki_stack_frame_1010(m68k, sr, EXCEPTION_BUS_ERROR, REG_PPC(m68k), m68k->mmu_tmp_buserror_address); |
| r242703 | r242704 | |
| 1885 | 1880 | define_state(); |
| 1886 | 1881 | } |
| 1887 | 1882 | |
| 1888 | void m68000_base_device::init_cpu_m68020fpu(void) | |
| 1889 | { | |
| 1890 | init_cpu_m68020(); | |
| 1891 | 1883 | |
| 1892 | has_fpu = 1; | |
| 1893 | } | |
| 1894 | ||
| 1895 | 1884 | void m68000_base_device::init_cpu_m68020pmmu(void) |
| 1896 | 1885 | { |
| 1897 | 1886 | init_cpu_m68020(); |
| r242703 | r242704 | |
| 2249 | 2238 | offs_t m68010_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) { return CPU_DISASSEMBLE_NAME(dasm_m68010)(this, buffer, pc, oprom, opram, options); }; |
| 2250 | 2239 | offs_t m68ec020_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) { return CPU_DISASSEMBLE_NAME(dasm_m68020)(this, buffer, pc, oprom, opram, options); }; |
| 2251 | 2240 | offs_t m68020_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) { return CPU_DISASSEMBLE_NAME(dasm_m68020)(this, buffer, pc, oprom, opram, options); }; |
| 2252 | offs_t m68020fpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) { return CPU_DISASSEMBLE_NAME(dasm_m68020)(this, buffer, pc, oprom, opram, options); }; | |
| 2253 | 2241 | offs_t m68020pmmu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) { return CPU_DISASSEMBLE_NAME(dasm_m68020)(this, buffer, pc, oprom, opram, options); }; |
| 2254 | 2242 | offs_t m68020hmmu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) { return CPU_DISASSEMBLE_NAME(dasm_m68020)(this, buffer, pc, oprom, opram, options); }; |
| 2255 | 2243 | offs_t m68ec030_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) { return CPU_DISASSEMBLE_NAME(dasm_m68ec030)(this, buffer, pc, oprom, opram, options); }; |
| r242703 | r242704 | |
| 2554 | 2542 | const device_type M68010 = &device_creator<m68010_device>; |
| 2555 | 2543 | const device_type M68EC020 = &device_creator<m68ec020_device>; |
| 2556 | 2544 | const device_type M68020 = &device_creator<m68020_device>; |
| 2557 | const device_type M68020FPU = &device_creator<m68020fpu_device>; | |
| 2558 | 2545 | const device_type M68020PMMU = &device_creator<m68020pmmu_device>; |
| 2559 | 2546 | const device_type M68020HMMU = &device_creator<m68020hmmu_device>; |
| 2560 | 2547 | const device_type M68EC030 = &device_creator<m68ec030_device>; |
| r242703 | r242704 | |
| 2654 | 2641 | init_cpu_m68020(); |
| 2655 | 2642 | } |
| 2656 | 2643 | |
| 2657 | ||
| 2658 | m68020fpu_device::m68020fpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
| 2659 | : m68000_base_device(mconfig, "M68020FPU", tag, owner, clock, M68020, 32,32, "m68020fpu", __FILE__) | |
| 2660 | { | |
| 2661 | } | |
| 2662 | ||
| 2663 | void m68020fpu_device::device_start() | |
| 2664 | { | |
| 2665 | init_cpu_m68020fpu(); | |
| 2666 | } | |
| 2667 | ||
| 2668 | 2644 | // 68020 with 68851 PMMU |
| 2669 | 2645 | m68020pmmu_device::m68020pmmu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 2670 | 2646 | : m68000_base_device(mconfig, "M68020PMMU", tag, owner, clock, M68020PMMU, 32,32, "m68020pmmu", __FILE__) |
| r242703 | r242704 | |
|---|---|---|
| 1728 | 1728 | |
| 1729 | 1729 | switch (g_cpu_ir & 0x7) |
| 1730 | 1730 | { |
| 1731 | case 2: | |
| 1731 | case 2: // word operand | |
| 1732 | 1732 | w3 = read_imm_16(); |
| 1733 | 1733 | sprintf(g_dasm_str, "ftrap%s.w $%04x", g_cpcc[w2 & 0x3f], w3); |
| 1734 | 1734 | break; |
| 1735 | 1735 | |
| 1736 | case 3: | |
| 1736 | case 3: // long word operand | |
| 1737 | 1737 | l2 = read_imm_32(); |
| 1738 | 1738 | sprintf(g_dasm_str, "ftrap%s.l $%08x", g_cpcc[w2 & 0x3f], l2); |
| 1739 | 1739 | break; |
| r242703 | r242704 | |
|---|---|---|
| 2166 | 2166 | default: fatalerror("m68040_fpu_op1: unimplemented op %d at %08X\n", (m68k->ir >> 6) & 0x3, REG_PC(m68k)-2); |
| 2167 | 2167 | } |
| 2168 | 2168 | } |
| 2169 | ||
| 2170 | void m68881_ftrap(m68000_base_device *m68k) | |
| 2171 | { | |
| 2172 | UINT16 w2 = OPER_I_16(m68k); | |
| 2173 | ||
| 2174 | // now check the condition | |
| 2175 | if (TEST_CONDITION(m68k, w2 & 0x3f)) | |
| 2176 | { | |
| 2177 | // trap here | |
| 2178 | m68ki_exception_trap(m68k, EXCEPTION_TRAPV); | |
| 2179 | } | |
| 2180 | else // fall through, requires eating the operand | |
| 2181 | { | |
| 2182 | switch (m68k->ir & 0x7) | |
| 2183 | { | |
| 2184 | case 2: // word operand | |
| 2185 | OPER_I_16(m68k); | |
| 2186 | break; | |
| 2187 | ||
| 2188 | case 3: // long word operand | |
| 2189 | OPER_I_32(m68k); | |
| 2190 | break; | |
| 2191 | ||
| 2192 | case 4: // no operand | |
| 2193 | break; | |
| 2194 | } | |
| 2195 | } | |
| 2196 | } | |
| 2197 |
| r242703 | r242704 | |
|---|---|---|
| 71 | 71 | const device_type PPS4 = &device_creator<pps4_device>; |
| 72 | 72 | |
| 73 | 73 | pps4_device::pps4_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 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 | |
| 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 | |
| 78 | 78 | { |
| 79 | 79 | } |
| 80 | 80 | |
| r242703 | r242704 | |
| 84 | 84 | */ |
| 85 | 85 | UINT8 pps4_device::M() |
| 86 | 86 | { |
| 87 | UINT8 ret = m_data->read_byte(m_B & ~m_SAG); | |
| 88 | m_SAG = 0; | |
| 89 | return ret; | |
| 87 | UINT8 ret = m_data->read_byte(m_B & ~m_SAG); | |
| 88 | m_SAG = 0; | |
| 89 | return ret; | |
| 90 | 90 | } |
| 91 | 91 | |
| 92 | 92 | |
| r242703 | r242704 | |
| 96 | 96 | */ |
| 97 | 97 | void pps4_device::W(UINT8 data) |
| 98 | 98 | { |
| 99 | m_data->write_byte(m_B & ~m_SAG, data); | |
| 100 | m_SAG = 0; | |
| 99 | m_data->write_byte(m_B & ~m_SAG, data); | |
| 100 | m_SAG = 0; | |
| 101 | 101 | } |
| 102 | 102 | |
| 103 | 103 | offs_t pps4_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) |
| 104 | 104 | { |
| 105 | extern CPU_DISASSEMBLE( pps4 ); | |
| 106 | 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); | |
| 107 | 107 | } |
| 108 | 108 | |
| 109 | 109 | /** |
| r242703 | r242704 | |
| 115 | 115 | */ |
| 116 | 116 | inline UINT8 pps4_device::ROP() |
| 117 | 117 | { |
| 118 | const UINT8 op = m_direct->read_decrypted_byte(m_P & 0xFFF); | |
| 119 | m_Ip = m_I1; // save previous opcode | |
| 120 | m_P = (m_P + 1) & 0xFFF; | |
| 121 | m_icount -= 1; | |
| 122 | return op; | |
| 118 | const UINT8 op = m_direct->read_decrypted_byte(m_P & 0xFFF); | |
| 119 | m_Ip = m_I1; // save previous opcode | |
| 120 | m_P = (m_P + 1) & 0xFFF; | |
| 121 | m_icount -= 1; | |
| 122 | return op; | |
| 123 | 123 | } |
| 124 | 124 | |
| 125 | 125 | /** |
| r242703 | r242704 | |
| 131 | 131 | */ |
| 132 | 132 | inline UINT8 pps4_device::ARG() |
| 133 | 133 | { |
| 134 | const UINT8 arg = m_direct->read_raw_byte(m_P & 0xFFF); | |
| 135 | m_P = (m_P + 1) & 0xFFF; | |
| 136 | m_icount -= 1; | |
| 137 | return arg; | |
| 134 | const UINT8 arg = m_direct->read_raw_byte(m_P & 0xFFF); | |
| 135 | m_P = (m_P + 1) & 0xFFF; | |
| 136 | m_icount -= 1; | |
| 137 | return arg; | |
| 138 | 138 | } |
| 139 | 139 | |
| 140 | 140 | /** |
| r242703 | r242704 | |
| 173 | 173 | */ |
| 174 | 174 | void pps4_device::iAD() |
| 175 | 175 | { |
| 176 | m_A = m_A + M(); | |
| 177 | m_C = (m_A >> 4) & 1; | |
| 178 | m_A = m_A & 15; | |
| 176 | m_A = m_A + M(); | |
| 177 | m_C = (m_A >> 4) & 1; | |
| 178 | m_A = m_A & 15; | |
| 179 | 179 | } |
| 180 | 180 | |
| 181 | 181 | /** |
| r242703 | r242704 | |
| 193 | 193 | */ |
| 194 | 194 | void pps4_device::iADC() |
| 195 | 195 | { |
| 196 | m_A = m_A + M() + m_C; | |
| 197 | m_C = m_A >> 4; | |
| 198 | m_A = m_A & 15; | |
| 196 | m_A = m_A + M() + m_C; | |
| 197 | m_C = m_A >> 4; | |
| 198 | m_A = m_A & 15; | |
| 199 | 199 | } |
| 200 | 200 | |
| 201 | 201 | /** |
| r242703 | r242704 | |
| 214 | 214 | */ |
| 215 | 215 | void pps4_device::iADSK() |
| 216 | 216 | { |
| 217 | m_A = m_A + M(); | |
| 218 | m_C = m_A >> 4; | |
| 219 | m_Skip = m_C; | |
| 220 | m_A = m_A & 15; | |
| 217 | m_A = m_A + M(); | |
| 218 | m_C = m_A >> 4; | |
| 219 | m_Skip = m_C; | |
| 220 | m_A = m_A & 15; | |
| 221 | 221 | } |
| 222 | 222 | |
| 223 | 223 | /** |
| r242703 | r242704 | |
| 236 | 236 | */ |
| 237 | 237 | void pps4_device::iADCSK() |
| 238 | 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; | |
| 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 | 243 | } |
| 244 | 244 | |
| 245 | 245 | /** |
| r242703 | r242704 | |
| 265 | 265 | */ |
| 266 | 266 | void pps4_device::iADI() |
| 267 | 267 | { |
| 268 | const UINT8 imm = ~m_I1 & 15; | |
| 269 | m_A = m_A + imm; | |
| 270 | m_Skip = (m_A >> 4) & 1; | |
| 271 | m_A = m_A & 15; | |
| 268 | const UINT8 imm = ~m_I1 & 15; | |
| 269 | m_A = m_A + imm; | |
| 270 | m_Skip = (m_A >> 4) & 1; | |
| 271 | m_A = m_A & 15; | |
| 272 | 272 | } |
| 273 | 273 | |
| 274 | 274 | /** |
| r242703 | r242704 | |
| 288 | 288 | */ |
| 289 | 289 | void pps4_device::iDC() |
| 290 | 290 | { |
| 291 | ||
| 291 | m_A = m_A + 10; | |
| 292 | 292 | } |
| 293 | 293 | |
| 294 | 294 | /** |
| r242703 | r242704 | |
| 307 | 307 | */ |
| 308 | 308 | void pps4_device::iAND() |
| 309 | 309 | { |
| 310 | ||
| 310 | m_A = m_A & M(); | |
| 311 | 311 | } |
| 312 | 312 | |
| 313 | 313 | /** |
| r242703 | r242704 | |
| 326 | 326 | */ |
| 327 | 327 | void pps4_device::iOR() |
| 328 | 328 | { |
| 329 | ||
| 329 | m_A = m_A | M(); | |
| 330 | 330 | } |
| 331 | 331 | |
| 332 | 332 | /** |
| r242703 | r242704 | |
| 346 | 346 | */ |
| 347 | 347 | void pps4_device::iEOR() |
| 348 | 348 | { |
| 349 | ||
| 349 | m_A = m_A ^ M(); | |
| 350 | 350 | } |
| 351 | 351 | |
| 352 | 352 | /** |
| r242703 | r242704 | |
| 364 | 364 | */ |
| 365 | 365 | void pps4_device::iCOMP() |
| 366 | 366 | { |
| 367 | ||
| 367 | m_A = m_A ^ 15; | |
| 368 | 368 | } |
| 369 | 369 | |
| 370 | 370 | /** |
| r242703 | r242704 | |
| 381 | 381 | */ |
| 382 | 382 | void pps4_device::iSC() |
| 383 | 383 | { |
| 384 | ||
| 384 | m_C = 1; | |
| 385 | 385 | } |
| 386 | 386 | |
| 387 | 387 | /** |
| r242703 | r242704 | |
| 398 | 398 | */ |
| 399 | 399 | void pps4_device::iRC() |
| 400 | 400 | { |
| 401 | ||
| 401 | m_C = 0; | |
| 402 | 402 | } |
| 403 | 403 | |
| 404 | 404 | /** |
| r242703 | r242704 | |
| 415 | 415 | */ |
| 416 | 416 | void pps4_device::iSF1() |
| 417 | 417 | { |
| 418 | ||
| 418 | m_FF1 = 1; | |
| 419 | 419 | } |
| 420 | 420 | |
| 421 | 421 | /** |
| r242703 | r242704 | |
| 432 | 432 | */ |
| 433 | 433 | void pps4_device::iRF1() |
| 434 | 434 | { |
| 435 | ||
| 435 | m_FF1 = 0; | |
| 436 | 436 | } |
| 437 | 437 | |
| 438 | 438 | /** |
| r242703 | r242704 | |
| 449 | 449 | */ |
| 450 | 450 | void pps4_device::iSF2() |
| 451 | 451 | { |
| 452 | ||
| 452 | m_FF2 = 1; | |
| 453 | 453 | } |
| 454 | 454 | |
| 455 | 455 | /** |
| r242703 | r242704 | |
| 466 | 466 | */ |
| 467 | 467 | void pps4_device::iRF2() |
| 468 | 468 | { |
| 469 | ||
| 469 | m_FF2 = 0; | |
| 470 | 470 | } |
| 471 | 471 | |
| 472 | 472 | /** |
| r242703 | r242704 | |
| 490 | 490 | */ |
| 491 | 491 | void pps4_device::iLD() |
| 492 | 492 | { |
| 493 | const UINT16 i3c = ~m_I1 & 7; | |
| 494 | m_A = M(); | |
| 495 | m_B = m_B ^ (i3c << 4); | |
| 493 | const UINT16 i3c = ~m_I1 & 7; | |
| 494 | m_A = M(); | |
| 495 | m_B = m_B ^ (i3c << 4); | |
| 496 | 496 | } |
| 497 | 497 | |
| 498 | 498 | /** |
| r242703 | r242704 | |
| 513 | 513 | */ |
| 514 | 514 | void pps4_device::iEX() |
| 515 | 515 | { |
| 516 | const UINT16 i3c = ~m_I1 & 7; | |
| 517 | const UINT8 mem = M(); | |
| 518 | W(m_A); | |
| 519 | m_A = mem; | |
| 520 | m_B = m_B ^ (i3c << 4); | |
| 516 | const UINT16 i3c = ~m_I1 & 7; | |
| 517 | const UINT8 mem = M(); | |
| 518 | W(m_A); | |
| 519 | m_A = mem; | |
| 520 | m_B = m_B ^ (i3c << 4); | |
| 521 | 521 | } |
| 522 | 522 | |
| 523 | 523 | /** |
| r242703 | r242704 | |
| 542 | 542 | */ |
| 543 | 543 | void pps4_device::iEXD() |
| 544 | 544 | { |
| 545 | const UINT8 i3c = ~m_I1 & 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; | |
| 545 | const UINT8 i3c = ~m_I1 & 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 | 559 | } |
| 560 | 560 | |
| 561 | 561 | /** |
| r242703 | r242704 | |
| 579 | 579 | */ |
| 580 | 580 | void pps4_device::iLDI() |
| 581 | 581 | { |
| 582 | // previous LDI instruction? | |
| 583 | if (0x70 == (m_Ip & 0xf0)) { | |
| 584 | LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I1)); | |
| 585 | return; | |
| 586 | } | |
| 587 | m_A = ~m_I1 & 15; | |
| 582 | // previous LDI instruction? | |
| 583 | if (0x70 == (m_Ip & 0xf0)) { | |
| 584 | LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I1)); | |
| 585 | return; | |
| 586 | } | |
| 587 | m_A = ~m_I1 & 15; | |
| 588 | 588 | } |
| 589 | 589 | |
| 590 | 590 | /** |
| r242703 | r242704 | |
| 602 | 602 | */ |
| 603 | 603 | void pps4_device::iLAX() |
| 604 | 604 | { |
| 605 | ||
| 605 | m_A = m_X; | |
| 606 | 606 | } |
| 607 | 607 | |
| 608 | 608 | /** |
| r242703 | r242704 | |
| 620 | 620 | */ |
| 621 | 621 | void pps4_device::iLXA() |
| 622 | 622 | { |
| 623 | ||
| 623 | m_X = m_A; | |
| 624 | 624 | } |
| 625 | 625 | |
| 626 | 626 | /** |
| r242703 | r242704 | |
| 638 | 638 | */ |
| 639 | 639 | void pps4_device::iLABL() |
| 640 | 640 | { |
| 641 | ||
| 641 | m_A = m_B & 15; | |
| 642 | 642 | } |
| 643 | 643 | |
| 644 | 644 | /** |
| r242703 | r242704 | |
| 656 | 656 | */ |
| 657 | 657 | void pps4_device::iLBMX() |
| 658 | 658 | { |
| 659 | ||
| 659 | m_B = (m_B & ~(15 << 4)) | (m_X << 4); | |
| 660 | 660 | } |
| 661 | 661 | |
| 662 | 662 | /** |
| r242703 | r242704 | |
| 676 | 676 | */ |
| 677 | 677 | void pps4_device::iLBUA() |
| 678 | 678 | { |
| 679 | m_B = (m_B & ~(15 << 8)) | (m_A << 8); | |
| 680 | m_A = M(); | |
| 679 | m_B = (m_B & ~(15 << 8)) | (m_A << 8); | |
| 680 | m_A = M(); | |
| 681 | 681 | } |
| 682 | 682 | |
| 683 | 683 | /** |
| r242703 | r242704 | |
| 695 | 695 | */ |
| 696 | 696 | void pps4_device::iXABL() |
| 697 | 697 | { |
| 698 | // swap A and BL | |
| 699 | UINT8 bl = m_B & 15; | |
| 700 | m_B = (m_B & ~15) | m_A; | |
| 701 | m_A = bl; | |
| 698 | // swap A and BL | |
| 699 | UINT8 bl = m_B & 15; | |
| 700 | m_B = (m_B & ~15) | m_A; | |
| 701 | m_A = bl; | |
| 702 | 702 | } |
| 703 | 703 | |
| 704 | 704 | /** |
| r242703 | r242704 | |
| 716 | 716 | */ |
| 717 | 717 | void pps4_device::iXBMX() |
| 718 | 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; | |
| 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 | 723 | } |
| 724 | 724 | |
| 725 | 725 | /** |
| r242703 | r242704 | |
| 737 | 737 | */ |
| 738 | 738 | void pps4_device::iXAX() |
| 739 | 739 | { |
| 740 | // swap A and X | |
| 741 | m_A ^= m_X; | |
| 742 | m_X ^= m_A; | |
| 743 | m_A ^= m_X; | |
| 740 | // swap A and X | |
| 741 | m_A ^= m_X; | |
| 742 | m_X ^= m_A; | |
| 743 | m_A ^= m_X; | |
| 744 | 744 | } |
| 745 | 745 | |
| 746 | 746 | /** |
| r242703 | r242704 | |
| 758 | 758 | */ |
| 759 | 759 | void pps4_device::iXS() |
| 760 | 760 | { |
| 761 | // swap SA and SB | |
| 762 | m_SA ^= m_SB; | |
| 763 | m_SB ^= m_SA; | |
| 764 | m_SA ^= m_SB; | |
| 761 | // swap SA and SB | |
| 762 | m_SA ^= m_SB; | |
| 763 | m_SB ^= m_SA; | |
| 764 | m_SA ^= m_SB; | |
| 765 | 765 | } |
| 766 | 766 | |
| 767 | 767 | /** |
| r242703 | r242704 | |
| 786 | 786 | */ |
| 787 | 787 | void pps4_device::iCYS() |
| 788 | 788 | { |
| 789 | const UINT16 sa = (m_SA >> 4) | (m_A << 8); | |
| 790 | m_A = m_SA & 15; | |
| 791 | m_SA = sa; | |
| 789 | const UINT16 sa = (m_SA >> 4) | (m_A << 8); | |
| 790 | m_A = m_SA & 15; | |
| 791 | m_SA = sa; | |
| 792 | 792 | } |
| 793 | 793 | |
| 794 | 794 | /** |
| r242703 | r242704 | |
| 826 | 826 | */ |
| 827 | 827 | void pps4_device::iLB() |
| 828 | 828 | { |
| 829 | // previous LB or LBL instruction? | |
| 830 | if (0xc0 == (m_Ip & 0xf0) || 0x00 == m_Ip) { | |
| 831 | LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I1)); | |
| 832 | return; | |
| 833 | } | |
| 834 | m_SB = m_SA; | |
| 835 | m_SA = (m_P + 1) & 0xFFF; | |
| 836 | m_P = (3 << 6) | (m_I1 & 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; | |
| 829 | // previous LB or LBL instruction? | |
| 830 | if (0xc0 == (m_Ip & 0xf0) || 0x00 == m_Ip) { | |
| 831 | LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I1)); | |
| 832 | return; | |
| 833 | } | |
| 834 | m_SB = m_SA; | |
| 835 | m_SA = (m_P + 1) & 0xFFF; | |
| 836 | m_P = (3 << 6) | (m_I1 & 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 | 843 | } |
| 844 | 844 | |
| 845 | 845 | /** |
| r242703 | r242704 | |
| 867 | 867 | */ |
| 868 | 868 | void pps4_device::iLBL() |
| 869 | 869 | { |
| 870 | m_I2 = ARG(); | |
| 871 | // previous LB or LBL instruction? | |
| 872 | if (0xc0 == (m_Ip & 0xf0) || 0x00 == m_Ip) { | |
| 873 | LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I1)); | |
| 874 | return; | |
| 875 | } | |
| 876 | m_B = ~m_I2 & 255; // Note: immediate is 1's complement | |
| 870 | m_I2 = ARG(); | |
| 871 | // previous LB or LBL instruction? | |
| 872 | if (0xc0 == (m_Ip & 0xf0) || 0x00 == m_Ip) { | |
| 873 | LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I1)); | |
| 874 | return; | |
| 875 | } | |
| 876 | m_B = ~m_I2 & 255; // Note: immediate is 1's complement | |
| 877 | 877 | } |
| 878 | 878 | |
| 879 | 879 | /** |
| r242703 | r242704 | |
| 893 | 893 | */ |
| 894 | 894 | void pps4_device::iINCB() |
| 895 | 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; | |
| 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 | 903 | } |
| 904 | 904 | |
| 905 | 905 | /** |
| r242703 | r242704 | |
| 919 | 919 | */ |
| 920 | 920 | void pps4_device::iDECB() |
| 921 | 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; | |
| 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 | 929 | } |
| 930 | 930 | |
| 931 | 931 | /** |
| r242703 | r242704 | |
| 945 | 945 | */ |
| 946 | 946 | void pps4_device::iT() |
| 947 | 947 | { |
| 948 | const UINT16 p = (m_P & ~63) | (m_I1 & 63); | |
| 949 | LOG(("%s: P=%03x I=%02x -> P=%03x\n", __FUNCTION__, m_P, m_I1, p)); | |
| 950 | m_P = p; | |
| 948 | const UINT16 p = (m_P & ~63) | (m_I1 & 63); | |
| 949 | LOG(("%s: P=%03x I=%02x -> P=%03x\n", __FUNCTION__, m_P, m_I1, p)); | |
| 950 | m_P = p; | |
| 951 | 951 | } |
| 952 | 952 | |
| 953 | 953 | /** |
| r242703 | r242704 | |
| 977 | 977 | */ |
| 978 | 978 | void pps4_device::iTM() |
| 979 | 979 | { |
| 980 | m_SB = m_SA; | |
| 981 | m_SA = m_P; | |
| 982 | m_P = (3 << 6) | (m_I1 & 63); | |
| 983 | m_I2 = ARG(); | |
| 984 | m_P = (1 << 8) | m_I2; | |
| 980 | m_SB = m_SA; | |
| 981 | m_SA = m_P; | |
| 982 | m_P = (3 << 6) | (m_I1 & 63); | |
| 983 | m_I2 = ARG(); | |
| 984 | m_P = (1 << 8) | m_I2; | |
| 985 | 985 | } |
| 986 | 986 | |
| 987 | 987 | /** |
| r242703 | r242704 | |
| 1003 | 1003 | */ |
| 1004 | 1004 | void pps4_device::iTL() |
| 1005 | 1005 | { |
| 1006 | m_I2 = ARG(); | |
| 1007 | m_P = ((m_I1 & 15) << 8) | m_I2; | |
| 1006 | m_I2 = ARG(); | |
| 1007 | m_P = ((m_I1 & 15) << 8) | m_I2; | |
| 1008 | 1008 | } |
| 1009 | 1009 | |
| 1010 | 1010 | /** |
| r242703 | r242704 | |
| 1028 | 1028 | */ |
| 1029 | 1029 | void pps4_device::iTML() |
| 1030 | 1030 | { |
| 1031 | m_I2 = ARG(); | |
| 1032 | m_SB = m_SA; | |
| 1033 | m_SA = m_P; | |
| 1034 | m_P = ((m_I1 & 15) << 8) | m_I2; | |
| 1031 | m_I2 = ARG(); | |
| 1032 | m_SB = m_SA; | |
| 1033 | m_SA = m_P; | |
| 1034 | m_P = ((m_I1 & 15) << 8) | m_I2; | |
| 1035 | 1035 | } |
| 1036 | 1036 | |
| 1037 | 1037 | /** |
| r242703 | r242704 | |
| 1048 | 1048 | */ |
| 1049 | 1049 | void pps4_device::iSKC() |
| 1050 | 1050 | { |
| 1051 | ||
| 1051 | m_Skip = m_C; | |
| 1052 | 1052 | } |
| 1053 | 1053 | |
| 1054 | 1054 | /** |
| r242703 | r242704 | |
| 1065 | 1065 | */ |
| 1066 | 1066 | void pps4_device::iSKZ() |
| 1067 | 1067 | { |
| 1068 | ||
| 1068 | m_Skip = (0 == m_A) ? 1 : 0; | |
| 1069 | 1069 | } |
| 1070 | 1070 | |
| 1071 | 1071 | /** |
| r242703 | r242704 | |
| 1084 | 1084 | */ |
| 1085 | 1085 | void pps4_device::iSKBI() |
| 1086 | 1086 | { |
| 1087 | const UINT8 i4 = m_I1 & 15; | |
| 1088 | const UINT8 bl = m_B & 15; | |
| 1089 | m_Skip = bl == i4 ? 1 : 0; | |
| 1087 | const UINT8 i4 = m_I1 & 15; | |
| 1088 | const UINT8 bl = m_B & 15; | |
| 1089 | m_Skip = bl == i4 ? 1 : 0; | |
| 1090 | 1090 | } |
| 1091 | 1091 | |
| 1092 | 1092 | /** |
| r242703 | r242704 | |
| 1101 | 1101 | */ |
| 1102 | 1102 | void pps4_device::iSKF1() |
| 1103 | 1103 | { |
| 1104 | ||
| 1104 | m_Skip = m_FF1; | |
| 1105 | 1105 | } |
| 1106 | 1106 | |
| 1107 | 1107 | /** |
| r242703 | r242704 | |
| 1116 | 1116 | */ |
| 1117 | 1117 | void pps4_device::iSKF2() |
| 1118 | 1118 | { |
| 1119 | ||
| 1119 | m_Skip = m_FF2; | |
| 1120 | 1120 | } |
| 1121 | 1121 | |
| 1122 | 1122 | /** |
| r242703 | r242704 | |
| 1135 | 1135 | */ |
| 1136 | 1136 | void pps4_device::iRTN() |
| 1137 | 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; | |
| 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 | 1143 | } |
| 1144 | 1144 | |
| 1145 | 1145 | /** |
| r242703 | r242704 | |
| 1158 | 1158 | */ |
| 1159 | 1159 | void pps4_device::iRTNSK() |
| 1160 | 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 | |
| 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 | 1167 | } |
| 1168 | 1168 | |
| 1169 | 1169 | /** |
| r242703 | r242704 | |
| 1195 | 1195 | */ |
| 1196 | 1196 | void pps4_device::iIOL() |
| 1197 | 1197 | { |
| 1198 | UINT8 ac = ((m_B & 15) << 4) | (~m_A & 15); | |
| 1199 | m_I2 = ARG(); | |
| 1200 | m_io->write_byte(m_I2, ac); | |
| 1201 | LOG(("%s: port:%02x <- %x\n", __FUNCTION__, m_I2, ac)); | |
| 1202 | ac = m_io->read_byte(m_I2) & 15; | |
| 1203 | LOG(("%s: port:%02x -> %x\n", __FUNCTION__, m_I2, ac)); | |
| 1204 | m_A = ~ac & 15; | |
| 1198 | UINT8 ac = ((m_B & 15) << 4) | (~m_A & 15); | |
| 1199 | m_I2 = ARG(); | |
| 1200 | m_io->write_byte(m_I2, ac); | |
| 1201 | LOG(("%s: port:%02x <- %x\n", __FUNCTION__, m_I2, ac)); | |
| 1202 | ac = m_io->read_byte(m_I2) & 15; | |
| 1203 | LOG(("%s: port:%02x -> %x\n", __FUNCTION__, m_I2, ac)); | |
| 1204 | m_A = ~ac & 15; | |
| 1205 | 1205 | } |
| 1206 | 1206 | |
| 1207 | 1207 | /** |
| r242703 | r242704 | |
| 1219 | 1219 | */ |
| 1220 | 1220 | void pps4_device::iDIA() |
| 1221 | 1221 | { |
| 1222 | ||
| 1222 | m_A = m_io->read_byte(PPS4_PORT_A) & 15; | |
| 1223 | 1223 | } |
| 1224 | 1224 | |
| 1225 | 1225 | /** |
| r242703 | r242704 | |
| 1237 | 1237 | */ |
| 1238 | 1238 | void pps4_device::iDIB() |
| 1239 | 1239 | { |
| 1240 | ||
| 1240 | m_A = m_io->read_byte(PPS4_PORT_B) & 15; | |
| 1241 | 1241 | } |
| 1242 | 1242 | |
| 1243 | 1243 | /** |
| r242703 | r242704 | |
| 1255 | 1255 | */ |
| 1256 | 1256 | void pps4_device::iDOA() |
| 1257 | 1257 | { |
| 1258 | ||
| 1258 | m_io->write_byte(PPS4_PORT_A, m_A); | |
| 1259 | 1259 | } |
| 1260 | 1260 | |
| 1261 | 1261 | /** |
| r242703 | r242704 | |
| 1277 | 1277 | */ |
| 1278 | 1278 | void pps4_device::iSAG() |
| 1279 | 1279 | { |
| 1280 | // mask bits 12:5 on next memory access | |
| 1281 | m_SAG = 0xff0; | |
| 1280 | // mask bits 12:5 on next memory access | |
| 1281 | m_SAG = 0xff0; | |
| 1282 | 1282 | } |
| 1283 | 1283 | |
| 1284 | 1284 | /*************************************************************************** |
| r242703 | r242704 | |
| 1286 | 1286 | ***************************************************************************/ |
| 1287 | 1287 | void pps4_device::execute_one() |
| 1288 | 1288 | { |
| 1289 | m_I1 = ROP(); | |
| 1290 | if (m_Skip) { | |
| 1291 | m_Skip = 0; | |
| 1292 | LOG(("%s: skip op:%02x\n", __FUNCTION__, m_I1)); | |
| 1293 | return; | |
| 1294 | } | |
| 1295 | switch (m_I1) { | |
| 1296 | case 0x00: | |
| 1297 | iLBL(); | |
| 1298 | break; | |
| 1299 | case 0x01: | |
| 1300 | iTML(); | |
| 1301 | break; | |
| 1302 | case 0x02: | |
| 1303 | iTML(); | |
| 1304 | break; | |
| 1305 | case 0x03: | |
| 1306 | iTML(); | |
| 1307 | break; | |
| 1308 | case 0x04: | |
| 1309 | iLBUA(); | |
| 1310 | break; | |
| 1311 | case 0x05: | |
| 1312 | iRTN(); | |
| 1313 | break; | |
| 1314 | case 0x06: | |
| 1315 | iXS(); | |
| 1316 | break; | |
| 1317 | case 0x07: | |
| 1318 | iRTNSK(); | |
| 1319 | break; | |
| 1320 | case 0x08: | |
| 1321 | iADCSK(); | |
| 1322 | break; | |
| 1323 | case 0x09: | |
| 1324 | iADSK(); | |
| 1325 | break; | |
| 1326 | case 0x0a: | |
| 1327 | iADC(); | |
| 1328 | break; | |
| 1329 | case 0x0b: | |
| 1330 | iAD(); | |
| 1331 | break; | |
| 1332 | case 0x0c: | |
| 1333 | iEOR(); | |
| 1334 | break; | |
| 1335 | case 0x0d: | |
| 1336 | iAND(); | |
| 1337 | break; | |
| 1338 | case 0x0e: | |
| 1339 | iCOMP(); | |
| 1340 | break; | |
| 1341 | case 0x0f: | |
| 1342 | iOR(); | |
| 1343 | break; | |
| 1289 | m_I1 = ROP(); | |
| 1290 | if (m_Skip) { | |
| 1291 | m_Skip = 0; | |
| 1292 | LOG(("%s: skip op:%02x\n", __FUNCTION__, m_I1)); | |
| 1293 | return; | |
| 1294 | } | |
| 1295 | switch (m_I1) { | |
| 1296 | case 0x00: | |
| 1297 | iLBL(); | |
| 1298 | break; | |
| 1299 | case 0x01: | |
| 1300 | iTML(); | |
| 1301 | break; | |
| 1302 | case 0x02: | |
| 1303 | iTML(); | |
| 1304 | break; | |
| 1305 | case 0x03: | |
| 1306 | iTML(); | |
| 1307 | break; | |
| 1308 | case 0x04: | |
| 1309 | iLBUA(); | |
| 1310 | break; | |
| 1311 | case 0x05: | |
| 1312 | iRTN(); | |
| 1313 | break; | |
| 1314 | case 0x06: | |
| 1315 | iXS(); | |
| 1316 | break; | |
| 1317 | case 0x07: | |
| 1318 | iRTNSK(); | |
| 1319 | break; | |
| 1320 | case 0x08: | |
| 1321 | iADCSK(); | |
| 1322 | break; | |
| 1323 | case 0x09: | |
| 1324 | iADSK(); | |
| 1325 | break; | |
| 1326 | case 0x0a: | |
| 1327 | iADC(); | |
| 1328 | break; | |
| 1329 | case 0x0b: | |
| 1330 | iAD(); | |
| 1331 | break; | |
| 1332 | case 0x0c: | |
| 1333 | iEOR(); | |
| 1334 | break; | |
| 1335 | case 0x0d: | |
| 1336 | iAND(); | |
| 1337 | break; | |
| 1338 | case 0x0e: | |
| 1339 | iCOMP(); | |
| 1340 | break; | |
| 1341 | case 0x0f: | |
| 1342 | iOR(); | |
| 1343 | break; | |
| 1344 | 1344 | |
| 1345 | case 0x10: | |
| 1346 | iLBMX(); | |
| 1347 | break; | |
| 1348 | case 0x11: | |
| 1349 | iLABL(); | |
| 1350 | break; | |
| 1351 | case 0x12: | |
| 1352 | iLAX(); | |
| 1353 | break; | |
| 1354 | case 0x13: | |
| 1355 | iSAG(); | |
| 1356 | break; | |
| 1357 | case 0x14: | |
| 1358 | iSKF2(); | |
| 1359 | break; | |
| 1360 | case 0x15: | |
| 1361 | iSKC(); | |
| 1362 | break; | |
| 1363 | case 0x16: | |
| 1364 | iSKF1(); | |
| 1365 | break; | |
| 1366 | case 0x17: | |
| 1367 | iINCB(); | |
| 1368 | break; | |
| 1369 | case 0x18: | |
| 1370 | iXBMX(); | |
| 1371 | break; | |
| 1372 | case 0x19: | |
| 1373 | iXABL(); | |
| 1374 | break; | |
| 1375 | case 0x1a: | |
| 1376 | iXAX(); | |
| 1377 | break; | |
| 1378 | case 0x1b: | |
| 1379 | iLXA(); | |
| 1380 | break; | |
| 1381 | case 0x1c: | |
| 1382 | iIOL(); | |
| 1383 | break; | |
| 1384 | case 0x1d: | |
| 1385 | iDOA(); | |
| 1386 | break; | |
| 1387 | case 0x1e: | |
| 1388 | iSKZ(); | |
| 1389 | break; | |
| 1390 | case 0x1f: | |
| 1391 | iDECB(); | |
| 1392 | break; | |
| 1345 | case 0x10: | |
| 1346 | iLBMX(); | |
| 1347 | break; | |
| 1348 | case 0x11: | |
| 1349 | iLABL(); | |
| 1350 | break; | |
| 1351 | case 0x12: | |
| 1352 | iLAX(); | |
| 1353 | break; | |
| 1354 | case 0x13: | |
| 1355 | iSAG(); | |
| 1356 | break; | |
| 1357 | case 0x14: | |
| 1358 | iSKF2(); | |
| 1359 | break; | |
| 1360 | case 0x15: | |
| 1361 | iSKC(); | |
| 1362 | break; | |
| 1363 | case 0x16: | |
| 1364 | iSKF1(); | |
| 1365 | break; | |
| 1366 | case 0x17: | |
| 1367 | iINCB(); | |
| 1368 | break; | |
| 1369 | case 0x18: | |
| 1370 | iXBMX(); | |
| 1371 | break; | |
| 1372 | case 0x19: | |
| 1373 | iXABL(); | |
| 1374 | break; | |
| 1375 | case 0x1a: | |
| 1376 | iXAX(); | |
| 1377 | break; | |
| 1378 | case 0x1b: | |
| 1379 | iLXA(); | |
| 1380 | break; | |
| 1381 | case 0x1c: | |
| 1382 | iIOL(); | |
| 1383 | break; | |
| 1384 | case 0x1d: | |
| 1385 | iDOA(); | |
| 1386 | break; | |
| 1387 | case 0x1e: | |
| 1388 | iSKZ(); | |
| 1389 | break; | |
| 1390 | case 0x1f: | |
| 1391 | iDECB(); | |
| 1392 | break; | |
| 1393 | 1393 | |
| 1394 | case 0x20: | |
| 1395 | iSC(); | |
| 1396 | break; | |
| 1397 | case 0x21: | |
| 1398 | iSF2(); | |
| 1399 | break; | |
| 1400 | case 0x22: | |
| 1401 | iSF1(); | |
| 1402 | break; | |
| 1403 | case 0x23: | |
| 1404 | iDIB(); | |
| 1405 | break; | |
| 1406 | case 0x24: | |
| 1407 | iRC(); | |
| 1408 | break; | |
| 1409 | case 0x25: | |
| 1410 | iRF2(); | |
| 1411 | break; | |
| 1412 | case 0x26: | |
| 1413 | iRF1(); | |
| 1414 | break; | |
| 1415 | case 0x27: | |
| 1416 | iDIA(); | |
| 1417 | break; | |
| 1394 | case 0x20: | |
| 1395 | iSC(); | |
| 1396 | break; | |
| 1397 | case 0x21: | |
| 1398 | iSF2(); | |
| 1399 | break; | |
| 1400 | case 0x22: | |
| 1401 | iSF1(); | |
| 1402 | break; | |
| 1403 | case 0x23: | |
| 1404 | iDIB(); | |
| 1405 | break; | |
| 1406 | case 0x24: | |
| 1407 | iRC(); | |
| 1408 | break; | |
| 1409 | case 0x25: | |
| 1410 | iRF2(); | |
| 1411 | break; | |
| 1412 | case 0x26: | |
| 1413 | iRF1(); | |
| 1414 | break; | |
| 1415 | case 0x27: | |
| 1416 | iDIA(); | |
| 1417 | break; | |
| 1418 | 1418 | |
| 1419 | case 0x28: case 0x29: case 0x2a: case 0x2b: | |
| 1420 | case 0x2c: case 0x2d: case 0x2e: case 0x2f: | |
| 1421 | iEXD(); | |
| 1422 | break; | |
| 1419 | case 0x28: case 0x29: case 0x2a: case 0x2b: | |
| 1420 | case 0x2c: case 0x2d: case 0x2e: case 0x2f: | |
| 1421 | iEXD(); | |
| 1422 | break; | |
| 1423 | 1423 | |
| 1424 | case 0x30: case 0x31: case 0x32: case 0x33: | |
| 1425 | case 0x34: case 0x35: case 0x36: case 0x37: | |
| 1426 | iLD(); | |
| 1427 | break; | |
| 1424 | case 0x30: case 0x31: case 0x32: case 0x33: | |
| 1425 | case 0x34: case 0x35: case 0x36: case 0x37: | |
| 1426 | iLD(); | |
| 1427 | break; | |
| 1428 | 1428 | |
| 1429 | case 0x38: case 0x39: case 0x3a: case 0x3b: | |
| 1430 | case 0x3c: case 0x3d: case 0x3e: case 0x3f: | |
| 1431 | iEX(); | |
| 1432 | break; | |
| 1429 | case 0x38: case 0x39: case 0x3a: case 0x3b: | |
| 1430 | case 0x3c: case 0x3d: case 0x3e: case 0x3f: | |
| 1431 | iEX(); | |
| 1432 | break; | |
| 1433 | 1433 | |
| 1434 | case 0x40: case 0x41: case 0x42: case 0x43: | |
| 1435 | case 0x44: case 0x45: case 0x46: case 0x47: | |
| 1436 | case 0x48: case 0x49: case 0x4a: case 0x4b: | |
| 1437 | case 0x4c: case 0x4d: case 0x4e: case 0x4f: | |
| 1438 | iSKBI(); | |
| 1439 | break; | |
| 1434 | case 0x40: case 0x41: case 0x42: case 0x43: | |
| 1435 | case 0x44: case 0x45: case 0x46: case 0x47: | |
| 1436 | case 0x48: case 0x49: case 0x4a: case 0x4b: | |
| 1437 | case 0x4c: case 0x4d: case 0x4e: case 0x4f: | |
| 1438 | iSKBI(); | |
| 1439 | break; | |
| 1440 | 1440 | |
| 1441 | case 0x50: case 0x51: case 0x52: case 0x53: | |
| 1442 | case 0x54: case 0x55: case 0x56: case 0x57: | |
| 1443 | case 0x58: case 0x59: case 0x5a: case 0x5b: | |
| 1444 | case 0x5c: case 0x5d: case 0x5e: case 0x5f: | |
| 1445 | iTL(); | |
| 1446 | break; | |
| 1441 | case 0x50: case 0x51: case 0x52: case 0x53: | |
| 1442 | case 0x54: case 0x55: case 0x56: case 0x57: | |
| 1443 | case 0x58: case 0x59: case 0x5a: case 0x5b: | |
| 1444 | case 0x5c: case 0x5d: case 0x5e: case 0x5f: | |
| 1445 | iTL(); | |
| 1446 | break; | |
| 1447 | 1447 | |
| 1448 | case 0x65: | |
| 1449 | iDC(); | |
| 1450 | break; | |
| 1448 | case 0x65: | |
| 1449 | iDC(); | |
| 1450 | break; | |
| 1451 | 1451 | |
| 1452 | case 0x60: case 0x61: case 0x62: case 0x63: | |
| 1453 | case 0x64: case 0x66: case 0x67: | |
| 1454 | case 0x68: case 0x69: case 0x6a: case 0x6b: | |
| 1455 | case 0x6c: case 0x6d: case 0x6e: | |
| 1456 | iADI(); | |
| 1457 | break; | |
| 1452 | case 0x60: case 0x61: case 0x62: case 0x63: | |
| 1453 | case 0x64: case 0x66: case 0x67: | |
| 1454 | case 0x68: case 0x69: case 0x6a: case 0x6b: | |
| 1455 | case 0x6c: case 0x6d: case 0x6e: | |
| 1456 | iADI(); | |
| 1457 | break; | |
| 1458 | 1458 | |
| 1459 | case 0x6f: | |
| 1460 | iCYS(); | |
| 1461 | break; | |
| 1459 | case 0x6f: | |
| 1460 | iCYS(); | |
| 1461 | break; | |
| 1462 | 1462 | |
| 1463 | case 0x70: case 0x71: case 0x72: case 0x73: | |
| 1464 | case 0x74: case 0x75: case 0x76: case 0x77: | |
| 1465 | case 0x78: case 0x79: case 0x7a: case 0x7b: | |
| 1466 | case 0x7c: case 0x7d: case 0x7e: case 0x7f: | |
| 1467 | iLDI(); | |
| 1468 | break; | |
| 1463 | case 0x70: case 0x71: case 0x72: case 0x73: | |
| 1464 | case 0x74: case 0x75: case 0x76: case 0x77: | |
| 1465 | case 0x78: case 0x79: case 0x7a: case 0x7b: | |
| 1466 | case 0x7c: case 0x7d: case 0x7e: case 0x7f: | |
| 1467 | iLDI(); | |
| 1468 | break; | |
| 1469 | 1469 | |
| 1470 | case 0x80: case 0x81: case 0x82: case 0x83: | |
| 1471 | case 0x84: case 0x85: case 0x86: case 0x87: | |
| 1472 | case 0x88: case 0x89: case 0x8a: case 0x8b: | |
| 1473 | case 0x8c: case 0x8d: case 0x8e: case 0x8f: | |
| 1474 | case 0x90: case 0x91: case 0x92: case 0x93: | |
| 1475 | case 0x94: case 0x95: case 0x96: case 0x97: | |
| 1476 | case 0x98: case 0x99: case 0x9a: case 0x9b: | |
| 1477 | case 0x9c: case 0x9d: case 0x9e: case 0x9f: | |
| 1478 | case 0xa0: case 0xa1: case 0xa2: case 0xa3: | |
| 1479 | case 0xa4: case 0xa5: case 0xa6: case 0xa7: | |
| 1480 | case 0xa8: case 0xa9: case 0xaa: case 0xab: | |
| 1481 | case 0xac: case 0xad: case 0xae: case 0xaf: | |
| 1482 | case 0xb0: case 0xb1: case 0xb2: case 0xb3: | |
| 1483 | case 0xb4: case 0xb5: case 0xb6: case 0xb7: | |
| 1484 | case 0xb8: case 0xb9: case 0xba: case 0xbb: | |
| 1485 | case 0xbc: case 0xbd: case 0xbe: case 0xbf: | |
| 1486 | iT(); | |
| 1487 | break; | |
| 1470 | case 0x80: case 0x81: case 0x82: case 0x83: | |
| 1471 | case 0x84: case 0x85: case 0x86: case 0x87: | |
| 1472 | case 0x88: case 0x89: case 0x8a: case 0x8b: | |
| 1473 | case 0x8c: case 0x8d: case 0x8e: case 0x8f: | |
| 1474 | case 0x90: case 0x91: case 0x92: case 0x93: | |
| 1475 | case 0x94: case 0x95: case 0x96: case 0x97: | |
| 1476 | case 0x98: case 0x99: case 0x9a: case 0x9b: | |
| 1477 | case 0x9c: case 0x9d: case 0x9e: case 0x9f: | |
| 1478 | case 0xa0: case 0xa1: case 0xa2: case 0xa3: | |
| 1479 | case 0xa4: case 0xa5: case 0xa6: case 0xa7: | |
| 1480 | case 0xa8: case 0xa9: case 0xaa: case 0xab: | |
| 1481 | case 0xac: case 0xad: case 0xae: case 0xaf: | |
| 1482 | case 0xb0: case 0xb1: case 0xb2: case 0xb3: | |
| 1483 | case 0xb4: case 0xb5: case 0xb6: case 0xb7: | |
| 1484 | case 0xb8: case 0xb9: case 0xba: case 0xbb: | |
| 1485 | case 0xbc: case 0xbd: case 0xbe: case 0xbf: | |
| 1486 | iT(); | |
| 1487 | break; | |
| 1488 | 1488 | |
| 1489 | 1489 | |
| 1490 | case 0xc0: case 0xc1: case 0xc2: case 0xc3: | |
| 1491 | case 0xc4: case 0xc5: case 0xc6: case 0xc7: | |
| 1492 | case 0xc8: case 0xc9: case 0xca: case 0xcb: | |
| 1493 | case 0xcc: case 0xcd: case 0xce: case 0xcf: | |
| 1494 | iLB(); | |
| 1495 | break; | |
| 1490 | case 0xc0: case 0xc1: case 0xc2: case 0xc3: | |
| 1491 | case 0xc4: case 0xc5: case 0xc6: case 0xc7: | |
| 1492 | case 0xc8: case 0xc9: case 0xca: case 0xcb: | |
| 1493 | case 0xcc: case 0xcd: case 0xce: case 0xcf: | |
| 1494 | iLB(); | |
| 1495 | break; | |
| 1496 | 1496 | |
| 1497 | default: | |
| 1498 | iTM(); | |
| 1499 | } | |
| 1497 | default: | |
| 1498 | iTM(); | |
| 1499 | } | |
| 1500 | 1500 | } |
| 1501 | 1501 | |
| 1502 | 1502 | void pps4_device::execute_run() |
| 1503 | 1503 | { |
| 1504 | do | |
| 1505 | { | |
| 1506 | debugger_instruction_hook(this, m_P); | |
| 1507 | execute_one(); | |
| 1504 | do | |
| 1505 | { | |
| 1506 | debugger_instruction_hook(this, m_P); | |
| 1507 | execute_one(); | |
| 1508 | 1508 | |
| 1509 | ||
| 1509 | } while (m_icount > 0); | |
| 1510 | 1510 | } |
| 1511 | 1511 | |
| 1512 | 1512 | /*************************************************************************** |
| r242703 | r242704 | |
| 1515 | 1515 | |
| 1516 | 1516 | void pps4_device::device_start() |
| 1517 | 1517 | { |
| 1518 | m_program = &space(AS_PROGRAM); | |
| 1519 | m_direct = &m_program->direct(); | |
| 1520 | m_data = &space(AS_DATA); | |
| 1521 | m_io = &space(AS_IO); | |
| 1518 | m_program = &space(AS_PROGRAM); | |
| 1519 | m_direct = &m_program->direct(); | |
| 1520 | m_data = &space(AS_DATA); | |
| 1521 | m_io = &space(AS_IO); | |
| 1522 | 1522 | |
| 1523 | save_item(NAME(m_A)); | |
| 1524 | save_item(NAME(m_X)); | |
| 1525 | save_item(NAME(m_P)); | |
| 1526 | save_item(NAME(m_SA)); | |
| 1527 | save_item(NAME(m_SB)); | |
| 1528 | save_item(NAME(m_Skip)); | |
| 1529 | save_item(NAME(m_SAG)); | |
| 1530 | save_item(NAME(m_B)); | |
| 1531 | save_item(NAME(m_C)); | |
| 1532 | save_item(NAME(m_FF1)); | |
| 1533 | save_item(NAME(m_FF2)); | |
| 1534 | save_item(NAME(m_I1)); | |
| 1535 | save_item(NAME(m_I2)); | |
| 1536 | save_item(NAME(m_Ip)); | |
| 1523 | save_item(NAME(m_A)); | |
| 1524 | save_item(NAME(m_X)); | |
| 1525 | save_item(NAME(m_P)); | |
| 1526 | save_item(NAME(m_SA)); | |
| 1527 | save_item(NAME(m_SB)); | |
| 1528 | save_item(NAME(m_Skip)); | |
| 1529 | save_item(NAME(m_SAG)); | |
| 1530 | save_item(NAME(m_B)); | |
| 1531 | save_item(NAME(m_C)); | |
| 1532 | save_item(NAME(m_FF1)); | |
| 1533 | save_item(NAME(m_FF2)); | |
| 1534 | save_item(NAME(m_I1)); | |
| 1535 | save_item(NAME(m_I2)); | |
| 1536 | save_item(NAME(m_Ip)); | |
| 1537 | 1537 | |
| 1538 | state_add( PPS4_PC, "PC", m_P ).mask(0xFFF).formatstr("%03X"); | |
| 1539 | state_add( PPS4_A, "A", m_A ).formatstr("%01X"); | |
| 1540 | state_add( PPS4_X, "X", m_X ).formatstr("%01X"); | |
| 1541 | state_add( PPS4_SA, "SA", m_SA ).formatstr("%03X"); | |
| 1542 | state_add( PPS4_SB, "SB", m_SB ).formatstr("%03X"); | |
| 1543 | state_add( PPS4_Skip, "Skip", m_Skip ).formatstr("%01X"); | |
| 1544 | state_add( PPS4_SAG, "SAG", m_SAG ).formatstr("%03X"); | |
| 1545 | state_add( PPS4_B, "B", m_B ).formatstr("%03X"); | |
| 1546 | state_add( PPS4_I1, "I1", m_I1 ).formatstr("%02X").noshow(); | |
| 1547 | state_add( PPS4_I2, "I2", m_I2 ).formatstr("%02X").noshow(); | |
| 1548 | state_add( PPS4_Ip, "Ip", m_Ip ).formatstr("%02X").noshow(); | |
| 1549 | state_add( STATE_GENPC, "GENPC", m_P ).noshow(); | |
| 1550 | state_add( STATE_GENFLAGS, "GENFLAGS", m_C).formatstr("%3s").noshow(); | |
| 1538 | state_add( PPS4_PC, "PC", m_P ).mask(0xFFF).formatstr("%03X"); | |
| 1539 | state_add( PPS4_A, "A", m_A ).formatstr("%01X"); | |
| 1540 | state_add( PPS4_X, "X", m_X ).formatstr("%01X"); | |
| 1541 | state_add( PPS4_SA, "SA", m_SA ).formatstr("%03X"); | |
| 1542 | state_add( PPS4_SB, "SB", m_SB ).formatstr("%03X"); | |
| 1543 | state_add( PPS4_Skip, "Skip", m_Skip ).formatstr("%01X"); | |
| 1544 | state_add( PPS4_SAG, "SAG", m_SAG ).formatstr("%03X"); | |
| 1545 | state_add( PPS4_B, "B", m_B ).formatstr("%03X"); | |
| 1546 | state_add( PPS4_I1, "I1", m_I1 ).formatstr("%02X").noshow(); | |
| 1547 | state_add( PPS4_I2, "I2", m_I2 ).formatstr("%02X").noshow(); | |
| 1548 | state_add( PPS4_Ip, "Ip", m_Ip ).formatstr("%02X").noshow(); | |
| 1549 | state_add( STATE_GENPC, "GENPC", m_P ).noshow(); | |
| 1550 | state_add( STATE_GENFLAGS, "GENFLAGS", m_C).formatstr("%3s").noshow(); | |
| 1551 | 1551 | |
| 1552 | ||
| 1552 | m_icountptr = &m_icount; | |
| 1553 | 1553 | } |
| 1554 | 1554 | |
| 1555 | 1555 | void pps4_device::state_string_export(const device_state_entry &entry, astring &string) |
| 1556 | 1556 | { |
| 1557 | switch (entry.index()) | |
| 1558 | { | |
| 1559 | case STATE_GENFLAGS: | |
| 1560 | string.printf("%c%c%c", | |
| 1561 | m_C ? 'C':'.', | |
| 1562 | m_FF1 ? '1':'.', | |
| 1563 | m_FF2 ? '2':'.'); | |
| 1564 | break; | |
| 1565 | } | |
| 1557 | switch (entry.index()) | |
| 1558 | { | |
| 1559 | case STATE_GENFLAGS: | |
| 1560 | string.printf("%c%c%c", | |
| 1561 | m_C ? 'C':'.', | |
| 1562 | m_FF1 ? '1':'.', | |
| 1563 | m_FF2 ? '2':'.'); | |
| 1564 | break; | |
| 1565 | } | |
| 1566 | 1566 | } |
| 1567 | 1567 | |
| 1568 | 1568 | /*************************************************************************** |
| r242703 | r242704 | |
| 1571 | 1571 | |
| 1572 | 1572 | void pps4_device::device_reset() |
| 1573 | 1573 | { |
| 1574 | m_A = 0; // Accumulator A(4:1) | |
| 1575 | m_X = 0; // X register X(4:1) | |
| 1576 | m_P = 0; // program counter P(12:1) | |
| 1577 | m_SA = 0; // Shift register SA(12:1) | |
| 1578 | m_SB = 0; // Shift register SB(12:1) | |
| 1579 | m_SAG = 0; // Special address generation mask | |
| 1580 | m_B = 0; // B address register B(12:1) (BL, BM and BU) | |
| 1581 | m_C = 0; // Carry flip-flop | |
| 1582 | m_FF1 = 0; // Flip-flop 1 | |
| 1583 | m_FF2 = 0; // Flip-flop 2 | |
| 1584 | m_I1 = 0; // Most recent instruction I(8:1) | |
| 1585 | m_I2 = 0; // Most recent parameter I2(8:1) | |
| 1586 | m_Ip = 0; // Previous instruction I(8:1) | |
| 1574 | m_A = 0; // Accumulator A(4:1) | |
| 1575 | m_X = 0; // X register X(4:1) | |
| 1576 | m_P = 0; // program counter P(12:1) | |
| 1577 | m_SA = 0; // Shift register SA(12:1) | |
| 1578 | m_SB = 0; // Shift register SB(12:1) | |
| 1579 | m_SAG = 0; // Special address generation mask | |
| 1580 | m_B = 0; // B address register B(12:1) (BL, BM and BU) | |
| 1581 | m_C = 0; // Carry flip-flop | |
| 1582 | m_FF1 = 0; // Flip-flop 1 | |
| 1583 | m_FF2 = 0; // Flip-flop 2 | |
| 1584 | m_I1 = 0; // Most recent instruction I(8:1) | |
| 1585 | m_I2 = 0; // Most recent parameter I2(8:1) | |
| 1586 | m_Ip = 0; // Previous instruction I(8:1) | |
| 1587 | 1587 | } |
| r242703 | r242704 | |
|---|---|---|
| 9 | 9 | ***************************************************************************/ |
| 10 | 10 | enum |
| 11 | 11 | { |
| 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_I1, | |
| 21 | PPS4_I2, | |
| 22 | PPS4_Ip, | |
| 23 | PPS4_GENPC = STATE_GENPC, | |
| 24 | PPS4_GENSP = STATE_GENSP, | |
| 25 | PPS4_GENPCBASE = STATE_GENPCBASE, | |
| 26 | PPS4_PORT_A = 256, | |
| 27 | PPS4_PORT_B = 257 | |
| 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_I1, | |
| 21 | PPS4_I2, | |
| 22 | PPS4_Ip, | |
| 23 | PPS4_GENPC = STATE_GENPC, | |
| 24 | PPS4_GENSP = STATE_GENSP, | |
| 25 | PPS4_GENPCBASE = STATE_GENPCBASE, | |
| 26 | PPS4_PORT_A = 256, | |
| 27 | PPS4_PORT_B = 257 | |
| 28 | 28 | }; |
| 29 | 29 | |
| 30 | 30 | /*************************************************************************** |
| r242703 | r242704 | |
| 40 | 40 | class pps4_device : public cpu_device |
| 41 | 41 | { |
| 42 | 42 | public: |
| 43 | // construction/destruction | |
| 44 | pps4_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
| 43 | // construction/destruction | |
| 44 | pps4_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
| 45 | 45 | |
| 46 | 46 | protected: |
| 47 | // device-level overrides | |
| 48 | virtual void device_start(); | |
| 49 | virtual void device_reset(); | |
| 47 | // device-level overrides | |
| 48 | virtual void device_start(); | |
| 49 | virtual void device_reset(); | |
| 50 | 50 | |
| 51 | // device_execute_interface overrides | |
| 52 | virtual UINT32 execute_min_cycles() const { return 1; } | |
| 53 | virtual UINT32 execute_max_cycles() const { return 3; } | |
| 54 | virtual UINT32 execute_input_lines() const { return 0; } | |
| 55 | virtual UINT32 execute_default_irq_vector() const { return 0; } | |
| 56 | virtual void execute_run(); | |
| 51 | // device_execute_interface overrides | |
| 52 | virtual UINT32 execute_min_cycles() const { return 1; } | |
| 53 | virtual UINT32 execute_max_cycles() const { return 3; } | |
| 54 | virtual UINT32 execute_input_lines() const { return 0; } | |
| 55 | virtual UINT32 execute_default_irq_vector() const { return 0; } | |
| 56 | virtual void execute_run(); | |
| 57 | 57 | |
| 58 | // device_memory_interface overrides | |
| 59 | virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const | |
| 60 | { | |
| 61 | return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : ( (spacenum == AS_DATA) ? &m_data_config : NULL ) ); | |
| 62 | } | |
| 58 | // device_memory_interface overrides | |
| 59 | virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const | |
| 60 | { | |
| 61 | return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : ( (spacenum == AS_DATA) ? &m_data_config : NULL ) ); | |
| 62 | } | |
| 63 | 63 | |
| 64 | // device_state_interface overrides | |
| 65 | void state_string_export(const device_state_entry &entry, astring &string); | |
| 64 | // device_state_interface overrides | |
| 65 | void state_string_export(const device_state_entry &entry, astring &string); | |
| 66 | 66 | |
| 67 | // device_disasm_interface overrides | |
| 68 | virtual UINT32 disasm_min_opcode_bytes() const { return 1; } | |
| 69 | virtual UINT32 disasm_max_opcode_bytes() const { return 2; } | |
| 70 | virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options); | |
| 67 | // device_disasm_interface overrides | |
| 68 | virtual UINT32 disasm_min_opcode_bytes() const { return 1; } | |
| 69 | virtual UINT32 disasm_max_opcode_bytes() const { return 2; } | |
| 70 | virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options); | |
| 71 | 71 | |
| 72 | 72 | private: |
| 73 | address_space_config m_program_config; | |
| 74 | address_space_config m_data_config; | |
| 75 | address_space_config m_io_config; | |
| 73 | address_space_config m_program_config; | |
| 74 | address_space_config m_data_config; | |
| 75 | address_space_config m_io_config; | |
| 76 | 76 | |
| 77 | address_space *m_program; | |
| 78 | direct_read_data *m_direct; | |
| 79 | address_space *m_data; | |
| 80 | address_space *m_io; | |
| 81 | int m_icount; | |
| 77 | address_space *m_program; | |
| 78 | direct_read_data *m_direct; | |
| 79 | address_space *m_data; | |
| 80 | address_space *m_io; | |
| 81 | int m_icount; | |
| 82 | 82 | |
| 83 | UINT8 m_A; //!< Accumulator A(4:1) | |
| 84 | UINT8 m_X; //!< X register X(4:1) | |
| 85 | UINT16 m_P; //!< program counter P(12:1) | |
| 86 | UINT16 m_SA; //!< Shift register SA(12:1) | |
| 87 | UINT16 m_SB; //!< Shift register SB(12:1) | |
| 88 | UINT8 m_Skip; //!< Skip next instruction | |
| 89 | UINT16 m_SAG; //!< Special address generation mask | |
| 90 | UINT16 m_B; //!< B register B(12:1) (BL, BM and BH) | |
| 91 | UINT8 m_C; //!< Carry flip-flop | |
| 92 | UINT8 m_FF1; //!< Flip-flop 1 | |
| 93 | UINT8 m_FF2; //!< Flip-flop 2 | |
| 94 | UINT8 m_I1; //!< Most recent instruction I(8:1) | |
| 95 | UINT8 m_I2; //!< Most recent parameter I2(8:1) | |
| 96 | UINT8 m_Ip; //!< Previous instruction I(8:1) | |
| 83 | UINT8 m_A; //!< Accumulator A(4:1) | |
| 84 | UINT8 m_X; //!< X register X(4:1) | |
| 85 | UINT16 m_P; //!< program counter P(12:1) | |
| 86 | UINT16 m_SA; //!< Shift register SA(12:1) | |
| 87 | UINT16 m_SB; //!< Shift register SB(12:1) | |
| 88 | UINT8 m_Skip; //!< Skip next instruction | |
| 89 | UINT16 m_SAG; //!< Special address generation mask | |
| 90 | UINT16 m_B; //!< B register B(12:1) (BL, BM and BH) | |
| 91 | UINT8 m_C; //!< Carry flip-flop | |
| 92 | UINT8 m_FF1; //!< Flip-flop 1 | |
| 93 | UINT8 m_FF2; //!< Flip-flop 2 | |
| 94 | UINT8 m_I1; //!< Most recent instruction I(8:1) | |
| 95 | UINT8 m_I2; //!< Most recent parameter I2(8:1) | |
| 96 | UINT8 m_Ip; //!< Previous instruction I(8:1) | |
| 97 | 97 | |
| 98 | //! return the contents of B register (made of BU, BM and BL) | |
| 99 | inline UINT16 B() const; | |
| 98 | //! return the contents of B register (made of BU, BM and BL) | |
| 99 | inline UINT16 B() const; | |
| 100 | 100 | |
| 101 | //! return memory at address B(12:1) | |
| 102 | inline UINT8 M(); | |
| 101 | //! return memory at address B(12:1) | |
| 102 | inline UINT8 M(); | |
| 103 | 103 | |
| 104 | //! write to memory at address B(12:1) | |
| 105 | inline void W(UINT8 data); | |
| 104 | //! write to memory at address B(12:1) | |
| 105 | inline void W(UINT8 data); | |
| 106 | 106 | |
| 107 | //! return the next opcode (also in m_I) | |
| 108 | inline UINT8 ROP(); | |
| 107 | //! return the next opcode (also in m_I) | |
| 108 | inline UINT8 ROP(); | |
| 109 | 109 | |
| 110 | //! return the next argument (also in m_I2) | |
| 111 | inline UINT8 ARG(); | |
| 110 | //! return the next argument (also in m_I2) | |
| 111 | inline UINT8 ARG(); | |
| 112 | 112 | |
| 113 | void iAD(); //!< Add | |
| 114 | void iADC(); //!< Add with carry-in | |
| 115 | void iADSK(); //!< Add and skip on carry-out | |
| 116 | void iADCSK(); //!< Add with carry-in and skip on carry-out | |
| 117 | void iADI(); //!< Add immediate | |
| 118 | void iDC(); //!< Decimal correction | |
| 119 | void iAND(); //!< Logical AND | |
| 120 | void iOR(); //!< Logical OR | |
| 121 | void iEOR(); //!< Logical Exclusive-OR | |
| 122 | void iCOMP(); //!< Complement | |
| 123 | void iSC(); //!< Set Carry flip-flop | |
| 124 | void iRC(); //!< Reset Carry flip-flop | |
| 125 | void iSF1(); //!< Set FF1 | |
| 126 | void iRF1(); //!< Reset FF1 | |
| 127 | void iSF2(); //!< Set FF2 | |
| 128 | void iRF2(); //!< Reset FF2 | |
| 129 | void iLD(); //!< Load accumulator from memory | |
| 130 | void iEX(); //!< Exchange accumulator and memory | |
| 131 | void iEXD(); //!< Exchange accumulator and memory and decrement BL | |
| 132 | void iLDI(); //!< Load accumulator immediate | |
| 133 | void iLAX(); //!< Load accumulator from X register | |
| 134 | void iLXA(); //!< Load X register from accumulator | |
| 135 | void iLABL(); //!< Load accumulator with BL | |
| 136 | void iLBMX(); //!< Load BM with X | |
| 137 | void iLBUA(); //!< Load BU with A | |
| 138 | void iXABL(); //!< Exchange accumulator and BL | |
| 139 | void iXBMX(); //!< Exchange BM and X registers | |
| 140 | void iXAX(); //!< Exchange accumulator and X | |
| 141 | void iXS(); //!< Eychange SA and SB registers | |
| 142 | void iCYS(); //!< Cycle SA register and accumulaor | |
| 143 | void iLB(); //!< Load B indirect | |
| 144 | void iLBL(); //!< Load B long | |
| 145 | void iINCB(); //!< Increment BL | |
| 146 | void iDECB(); //!< Decrement BL | |
| 147 | void iT(); //!< Transfer | |
| 148 | void iTM(); //!< Transfer and mark indirect | |
| 149 | void iTL(); //!< Transfer long | |
| 150 | void iTML(); //!< Transfer and mark long | |
| 151 | void iSKC(); //!< Skip on carry flip-flop | |
| 152 | void iSKZ(); //!< Skip on accumulator zero | |
| 153 | void iSKBI(); //!< Skip if BL equal to immediate | |
| 154 | void iSKF1(); //!< Skip if FF1 equals 1 | |
| 155 | void iSKF2(); //!< Skip if FF2 equals 1 | |
| 156 | void iRTN(); //!< Return | |
| 157 | void iRTNSK(); //!< Return and skip | |
| 158 | void iIOL(); //!< Input/Output long | |
| 159 | void iDIA(); //!< Discrete input group A | |
| 160 | void iDIB(); //!< Discrete input group B | |
| 161 | void iDOA(); //!< Discrete output group A | |
| 162 | void iSAG(); //!< Special address generation | |
| 113 | void iAD(); //!< Add | |
| 114 | void iADC(); //!< Add with carry-in | |
| 115 | void iADSK(); //!< Add and skip on carry-out | |
| 116 | void iADCSK(); //!< Add with carry-in and skip on carry-out | |
| 117 | void iADI(); //!< Add immediate | |
| 118 | void iDC(); //!< Decimal correction | |
| 119 | void iAND(); //!< Logical AND | |
| 120 | void iOR(); //!< Logical OR | |
| 121 | void iEOR(); //!< Logical Exclusive-OR | |
| 122 | void iCOMP(); //!< Complement | |
| 123 | void iSC(); //!< Set Carry flip-flop | |
| 124 | void iRC(); //!< Reset Carry flip-flop | |
| 125 | void iSF1(); //!< Set FF1 | |
| 126 | void iRF1(); //!< Reset FF1 | |
| 127 | void iSF2(); //!< Set FF2 | |
| 128 | void iRF2(); //!< Reset FF2 | |
| 129 | void iLD(); //!< Load accumulator from memory | |
| 130 | void iEX(); //!< Exchange accumulator and memory | |
| 131 | void iEXD(); //!< Exchange accumulator and memory and decrement BL | |
| 132 | void iLDI(); //!< Load accumulator immediate | |
| 133 | void iLAX(); //!< Load accumulator from X register | |
| 134 | void iLXA(); //!< Load X register from accumulator | |
| 135 | void iLABL(); //!< Load accumulator with BL | |
| 136 | void iLBMX(); //!< Load BM with X | |
| 137 | void iLBUA(); //!< Load BU with A | |
| 138 | void iXABL(); //!< Exchange accumulator and BL | |
| 139 | void iXBMX(); //!< Exchange BM and X registers | |
| 140 | void iXAX(); //!< Exchange accumulator and X | |
| 141 | void iXS(); //!< Eychange SA and SB registers | |
| 142 | void iCYS(); //!< Cycle SA register and accumulaor | |
| 143 | void iLB(); //!< Load B indirect | |
| 144 | void iLBL(); //!< Load B long | |
| 145 | void iINCB(); //!< Increment BL | |
| 146 | void iDECB(); //!< Decrement BL | |
| 147 | void iT(); //!< Transfer | |
| 148 | void iTM(); //!< Transfer and mark indirect | |
| 149 | void iTL(); //!< Transfer long | |
| 150 | void iTML(); //!< Transfer and mark long | |
| 151 | void iSKC(); //!< Skip on carry flip-flop | |
| 152 | void iSKZ(); //!< Skip on accumulator zero | |
| 153 | void iSKBI(); //!< Skip if BL equal to immediate | |
| 154 | void iSKF1(); //!< Skip if FF1 equals 1 | |
| 155 | void iSKF2(); //!< Skip if FF2 equals 1 | |
| 156 | void iRTN(); //!< Return | |
| 157 | void iRTNSK(); //!< Return and skip | |
| 158 | void iIOL(); //!< Input/Output long | |
| 159 | void iDIA(); //!< Discrete input group A | |
| 160 | void iDIB(); //!< Discrete input group B | |
| 161 | void iDOA(); //!< Discrete output group A | |
| 162 | void iSAG(); //!< Special address generation | |
| 163 | 163 | |
| 164 | ||
| 164 | void execute_one(); //!< execute one instruction | |
| 165 | 165 | }; |
| 166 | 166 | |
| 167 | 167 | #endif // __PPS4_H__ |
| r242703 | r242704 | |
|---|---|---|
| 16 | 16 | #define ARG(A) opram[(A) - PC] |
| 17 | 17 | |
| 18 | 18 | typedef 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_I6i = 1 << 11, /* immediate 6 bit indirect page 3 offset (16 ... 63) + followed by page 1 address */ | |
| 37 | t_I8 = 1 << 12, /* immediate 8 bit constant (I/O port number) */ | |
| 38 | t_I8c = 1 << 13, /* immediate 8 bit constant inverted */ | |
| 39 | t_OVER = 1 << 14, /* Debugger step over (CALL) */ | |
| 40 | t_OUT = 1 << 15 /* Debugger step out (RETURN) */ | |
| 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_I6i = 1 << 11, /* immediate 6 bit indirect page 3 offset (16 ... 63) + followed by page 1 address */ | |
| 37 | t_I8 = 1 << 12, /* immediate 8 bit constant (I/O port number) */ | |
| 38 | t_I8c = 1 << 13, /* immediate 8 bit constant inverted */ | |
| 39 | t_OVER = 1 << 14, /* Debugger step over (CALL) */ | |
| 40 | t_OUT = 1 << 15 /* Debugger step out (RETURN) */ | |
| 41 | 41 | } pps4_token_e; |
| 42 | 42 | |
| 43 | 43 | static const char *token_str[t_COUNT] = { |
| 44 | "ad", /* add */ | |
| 45 | "adc", /* add with carry-in */ | |
| 46 | "adsk", /* add and skip on carry-out */ | |
| 47 | "adcsk", /* add with carry-in and skip on carry-out */ | |
| 48 | "adi", /* add immediate */ | |
| 49 | "dc", /* decimal correction */ | |
| 50 | "and", /* logical and */ | |
| 51 | "or", /* logical or */ | |
| 52 | "eor", /* logical exclusive-orf */ | |
| 53 | "comp", /* complement */ | |
| 54 | "sc", /* set C flip-flop */ | |
| 55 | "rc", /* reset C flip-flop */ | |
| 56 | "sf1", /* set FF1 flip-flop */ | |
| 57 | "rf1", /* reset FF1 flip-flop */ | |
| 58 | "sf2", /* set FF2 flip-flop */ | |
| 59 | "rf2", /* reset FF2 flip-flop */ | |
| 60 | "ld", /* load accumulator from memory */ | |
| 61 | "ex", /* exchange accumulator and memory */ | |
| 62 | "exd", /* exchange accumulator and memory and decrement BL */ | |
| 63 | "ldi", /* load accumulator immediate */ | |
| 64 | "lax", /* load accumulator from X register */ | |
| 65 | "lxa", /* load X register from accumulator */ | |
| 66 | "labl", /* load accumulator with BL */ | |
| 67 | "lbmx", /* load BM with X */ | |
| 68 | "lbua", /* load BU with A */ | |
| 69 | "xabl", /* exchange accumulator and BL */ | |
| 70 | "xbmx", /* exchange BM and X */ | |
| 71 | "xax", /* exchange accumulator and X */ | |
| 72 | "xs", /* exchange SA and SB */ | |
| 73 | "cys", /* cycle SA register and accumulator */ | |
| 74 | "lb", /* load B indirect */ | |
| 75 | "lbl", /* load B long */ | |
| 76 | "incb", /* increment BL */ | |
| 77 | "decb", /* decrement BL */ | |
| 78 | "t", /* transfer */ | |
| 79 | "tm", /* transfer and mark indirect */ | |
| 80 | "tl", /* transfer long */ | |
| 81 | "tml", /* transfer and mark long */ | |
| 82 | "skc", /* skip on C flip-flop equals 1 */ | |
| 83 | "skz", /* skip on accumulator zero */ | |
| 84 | "skbi", /* skip on BL equal to immediate */ | |
| 85 | "skf1", /* skip on FF1 flip-flop equals 1 */ | |
| 86 | "skf2", /* skip on FF2 flip-flop equals 1 */ | |
| 87 | "rtn", /* return */ | |
| 88 | "rtnsk", /* return and skip */ | |
| 89 | "iol", /* input/output long */ | |
| 90 | "dia", /* discrete input group A */ | |
| 91 | "dib", /* discrete input group B */ | |
| 92 | "doa", /* discrete output */ | |
| 93 | "sag" /* special address generation */ | |
| 44 | "ad", /* add */ | |
| 45 | "adc", /* add with carry-in */ | |
| 46 | "adsk", /* add and skip on carry-out */ | |
| 47 | "adcsk", /* add with carry-in and skip on carry-out */ | |
| 48 | "adi", /* add immediate */ | |
| 49 | "dc", /* decimal correction */ | |
| 50 | "and", /* logical and */ | |
| 51 | "or", /* logical or */ | |
| 52 | "eor", /* logical exclusive-orf */ | |
| 53 | "comp", /* complement */ | |
| 54 | "sc", /* set C flip-flop */ | |
| 55 | "rc", /* reset C flip-flop */ | |
| 56 | "sf1", /* set FF1 flip-flop */ | |
| 57 | "rf1", /* reset FF1 flip-flop */ | |
| 58 | "sf2", /* set FF2 flip-flop */ | |
| 59 | "rf2", /* reset FF2 flip-flop */ | |
| 60 | "ld", /* load accumulator from memory */ | |
| 61 | "ex", /* exchange accumulator and memory */ | |
| 62 | "exd", /* exchange accumulator and memory and decrement BL */ | |
| 63 | "ldi", /* load accumulator immediate */ | |
| 64 | "lax", /* load accumulator from X register */ | |
| 65 | "lxa", /* load X register from accumulator */ | |
| 66 | "labl", /* load accumulator with BL */ | |
| 67 | "lbmx", /* load BM with X */ | |
| 68 | "lbua", /* load BU with A */ | |
| 69 | "xabl", /* exchange accumulator and BL */ | |
| 70 | "xbmx", /* exchange BM and X */ | |
| 71 | "xax", /* exchange accumulator and X */ | |
| 72 | "xs", /* exchange SA and SB */ | |
| 73 | "cys", /* cycle SA register and accumulator */ | |
| 74 | "lb", /* load B indirect */ | |
| 75 | "lbl", /* load B long */ | |
| 76 | "incb", /* increment BL */ | |
| 77 | "decb", /* decrement BL */ | |
| 78 | "t", /* transfer */ | |
| 79 | "tm", /* transfer and mark indirect */ | |
| 80 | "tl", /* transfer long */ | |
| 81 | "tml", /* transfer and mark long */ | |
| 82 | "skc", /* skip on C flip-flop equals 1 */ | |
| 83 | "skz", /* skip on accumulator zero */ | |
| 84 | "skbi", /* skip on BL equal to immediate */ | |
| 85 | "skf1", /* skip on FF1 flip-flop equals 1 */ | |
| 86 | "skf2", /* skip on FF2 flip-flop equals 1 */ | |
| 87 | "rtn", /* return */ | |
| 88 | "rtnsk", /* return and skip */ | |
| 89 | "iol", /* input/output long */ | |
| 90 | "dia", /* discrete input group A */ | |
| 91 | "dib", /* discrete input group B */ | |
| 92 | "doa", /* discrete output */ | |
| 93 | "sag" /* special address generation */ | |
| 94 | 94 | }; |
| 95 | 95 | |
| 96 | 96 | static const UINT16 table[] = { |
| r242703 | r242704 | |
| 369 | 369 | |
| 370 | 370 | CPU_DISASSEMBLE( pps4 ) |
| 371 | 371 | { |
| 372 | UINT32 flags = 0; | |
| 373 | unsigned PC = pc; | |
| 374 | UINT8 op = OP(pc++); | |
| 375 | UINT32 tok = table[op]; | |
| 376 | char *dst = 0; | |
| 372 | UINT32 flags = 0; | |
| 373 | unsigned PC = pc; | |
| 374 | UINT8 op = OP(pc++); | |
| 375 | UINT32 tok = table[op]; | |
| 376 | char *dst = 0; | |
| 377 | 377 | |
| 378 | if (0 == (tok & t_MASK)) { | |
| 379 | sprintf(buffer, "%s", token_str[tok & t_MASK]); | |
| 380 | } else { | |
| 381 | dst = buffer + sprintf(buffer, "%-7s", token_str[tok & t_MASK]); | |
| 382 | } | |
| 378 | if (0 == (tok & t_MASK)) { | |
| 379 | sprintf(buffer, "%s", token_str[tok & t_MASK]); | |
| 380 | } else { | |
| 381 | dst = buffer + sprintf(buffer, "%-7s", token_str[tok & t_MASK]); | |
| 382 | } | |
| 383 | 383 | |
| 384 | if (tok & t_I3c) { | |
| 385 | // 3 bit immediate, complemented | |
| 386 | UINT8 i = ~op & 7; | |
| 387 | if (0 != i) // only print if non-zero | |
| 388 | dst += sprintf(dst, "%x", i); | |
| 389 | } | |
| 384 | if (tok & t_I3c) { | |
| 385 | // 3 bit immediate, complemented | |
| 386 | UINT8 i = ~op & 7; | |
| 387 | if (0 != i) // only print if non-zero | |
| 388 | dst += sprintf(dst, "%x", i); | |
| 389 | } | |
| 390 | 390 | |
| 391 | if (tok & t_I4) { | |
| 392 | // 4 bit immediate | |
| 393 | UINT8 i = op & 15; | |
| 394 | dst += sprintf(dst, "%x", i); | |
| 395 | } | |
| 391 | if (tok & t_I4) { | |
| 392 | // 4 bit immediate | |
| 393 | UINT8 i = op & 15; | |
| 394 | dst += sprintf(dst, "%x", i); | |
| 395 | } | |
| 396 | 396 | |
| 397 | if (tok & t_I4c) { | |
| 398 | // 4 bit immediate, complemented | |
| 399 | UINT8 i = ~op & 15; | |
| 400 | dst += sprintf(dst, "%x", i); | |
| 401 | } | |
| 397 | if (tok & t_I4c) { | |
| 398 | // 4 bit immediate, complemented | |
| 399 | UINT8 i = ~op & 15; | |
| 400 | dst += sprintf(dst, "%x", i); | |
| 401 | } | |
| 402 | 402 | |
| 403 | if (tok & t_I4p) { | |
| 404 | // 4 bit immediate offset into page 3 | |
| 405 | UINT8 i = op & 15; | |
| 406 | dst += sprintf(dst, "[%x]", 0x0c0 | i); | |
| 407 | } | |
| 403 | if (tok & t_I4p) { | |
| 404 | // 4 bit immediate offset into page 3 | |
| 405 | UINT8 i = op & 15; | |
| 406 | dst += sprintf(dst, "[%x]", 0x0c0 | i); | |
| 407 | } | |
| 408 | 408 | |
| 409 | if (tok & t_I6p) { | |
| 410 | // 6 bit immediate offset into current page | |
| 411 | UINT8 i = op & 63; | |
| 412 | dst += sprintf(dst, "%x", (PC & ~63) | i); | |
| 413 | } | |
| 409 | if (tok & t_I6p) { | |
| 410 | // 6 bit immediate offset into current page | |
| 411 | UINT8 i = op & 63; | |
| 412 | dst += sprintf(dst, "%x", (PC & ~63) | i); | |
| 413 | } | |
| 414 | 414 | |
| 415 | if (tok & t_I6i) { | |
| 416 | // 6 bit immediate offset into page 3 | |
| 417 | UINT16 i6p3 = (3 << 6) | (op & 63); | |
| 418 | // 8 bit absolute offset at 0x0100 | |
| 419 | UINT16 addr = (1 << 8) | 0; // ROM[ip3] can't be reached!? | |
| 420 | (void)addr; // avoid unused variable warning | |
| 421 | dst += sprintf(dst, "[%x]", i6p3); | |
| 422 | } | |
| 415 | if (tok & t_I6i) { | |
| 416 | // 6 bit immediate offset into page 3 | |
| 417 | UINT16 i6p3 = (3 << 6) | (op & 63); | |
| 418 | // 8 bit absolute offset at 0x0100 | |
| 419 | UINT16 addr = (1 << 8) | 0; // ROM[ip3] can't be reached!? | |
| 420 | (void)addr; // avoid unused variable warning | |
| 421 | dst += sprintf(dst, "[%x]", i6p3); | |
| 422 | } | |
| 423 | 423 | |
| 424 | if (tok & t_I8) { | |
| 425 | // 8 bit immediate I/O port address | |
| 426 | UINT8 arg = ARG(pc++); | |
| 427 | dst += sprintf(dst, "%02x", arg); | |
| 428 | } | |
| 424 | if (tok & t_I8) { | |
| 425 | // 8 bit immediate I/O port address | |
| 426 | UINT8 arg = ARG(pc++); | |
| 427 | dst += sprintf(dst, "%02x", arg); | |
| 428 | } | |
| 429 | 429 | |
| 430 | if (tok & t_I8c) { | |
| 431 | // 8 bit immediate offset into page | |
| 432 | UINT16 arg = ~ARG(pc++) & 255; | |
| 433 | dst += sprintf(dst, "%02x", arg); | |
| 434 | } | |
| 430 | if (tok & t_I8c) { | |
| 431 | // 8 bit immediate offset into page | |
| 432 | UINT16 arg = ~ARG(pc++) & 255; | |
| 433 | dst += sprintf(dst, "%02x", arg); | |
| 434 | } | |
| 435 | 435 | |
| 436 | if (tok & t_OVER) // TL or TML | |
| 437 | flags |= DASMFLAG_STEP_OVER; | |
| 436 | if (tok & t_OVER) // TL or TML | |
| 437 | flags |= DASMFLAG_STEP_OVER; | |
| 438 | 438 | |
| 439 | if (tok & t_OUT) // RTN or RTNSK | |
| 440 | flags |= DASMFLAG_STEP_OUT; | |
| 439 | if (tok & t_OUT) // RTN or RTNSK | |
| 440 | flags |= DASMFLAG_STEP_OUT; | |
| 441 | 441 | |
| 442 | ||
| 442 | return (pc - PC) | flags | DASMFLAG_SUPPORTED; | |
| 443 | 443 | } |
| r242703 | r242704 | |
|---|---|---|
| 699 | 699 | case 0x00: |
| 700 | 700 | break; |
| 701 | 701 | case 0x01: |
| 702 | // | |
| 702 | // return m_m[1] | 0; // bit31 is TDRE: Trasmit Data Register Empty. Forcing it to be '1' breaks Saturn ... | |
| 703 | 703 | return m_m[1] | (0x84 << 24); // ... but this is actually needed to make EGWord on SS to boot? |
| 704 | 704 | |
| 705 | 705 | case 0x04: // TIER, FTCSR, FRC |
| r242703 | r242704 | |
|---|---|---|
| 250 | 250 | |
| 251 | 251 | |
| 252 | 252 | static MACHINE_CONFIG_FRAGMENT(tms1000) |
| 253 | ||
| 253 | ||
| 254 | 254 | // microinstructions PLA, output PLA |
| 255 | 255 | MCFG_PLA_ADD("mpla", 8, 16, 30) |
| 256 | 256 | MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY) |
| r242703 | r242704 | |
| 374 | 374 | m_r_mask = (1 << m_r_pins) - 1; |
| 375 | 375 | m_pc_mask = (1 << m_pc_bits) - 1; |
| 376 | 376 | m_x_mask = (1 << m_x_bits) - 1; |
| 377 | ||
| 377 | ||
| 378 | 378 | // zerofill |
| 379 | 379 | m_pc = 0; |
| 380 | 380 | m_sr = 0; |
| r242703 | r242704 | |
| 401 | 401 | m_clatch = 0; |
| 402 | 402 | m_add = 0; |
| 403 | 403 | m_bl = 0; |
| 404 | ||
| 404 | ||
| 405 | 405 | m_ram_in = 0; |
| 406 | 406 | m_dam_in = 0; |
| 407 | 407 | m_ram_out = 0; |
| r242703 | r242704 | |
| 484 | 484 | m_o_latch_low = 0; |
| 485 | 485 | m_o_latch = 0; |
| 486 | 486 | m_o_latch_prev = 0; |
| 487 | ||
| 487 | ||
| 488 | 488 | // register for savestates |
| 489 | 489 | save_item(NAME(m_r_prev)); |
| 490 | 490 | save_item(NAME(m_chipsel)); |
| r242703 | r242704 | |
| 535 | 535 | { |
| 536 | 536 | // common reset |
| 537 | 537 | tms1xxx_cpu_device::device_reset(); |
| 538 | ||
| 538 | ||
| 539 | 539 | // pre-decode instructionset |
| 540 | 540 | m_fixed_decode.resize_and_clear(0x100); |
| 541 | 541 | m_micro_decode.resize_and_clear(0x100); |
| 542 | ||
| 542 | ||
| 543 | 543 | for (int op = 0; op < 0x100; op++) |
| 544 | 544 | { |
| 545 | 545 | // _____ _____ ______ _____ ______ _____ _____ _____ _____ |
| 546 | 546 | 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 }; |
| 547 | 547 | UINT16 mask = m_mpla->read(op); |
| 548 | 548 | mask ^= 0x3fc8; // invert active-negative |
| 549 | ||
| 549 | ||
| 550 | 550 | for (int bit = 0; bit < 16; bit++) |
| 551 | 551 | if (mask & (1 << bit)) |
| 552 | 552 | m_micro_decode[op] |= md[bit]; |
| r242703 | r242704 | |
| 559 | 559 | m_fixed_decode[0x0c] = F_RSTR; |
| 560 | 560 | m_fixed_decode[0x0d] = F_SETR; |
| 561 | 561 | m_fixed_decode[0x0f] = F_RETN; |
| 562 | ||
| 562 | ||
| 563 | 563 | for (int i = 0x10; i < 0x20; i++) m_fixed_decode[i] = F_LDP; |
| 564 | 564 | for (int i = 0x30; i < 0x34; i++) m_fixed_decode[i] = F_SBIT; |
| 565 | 565 | for (int i = 0x34; i < 0x38; i++) m_fixed_decode[i] = F_RBIT; |
| r242703 | r242704 | |
| 572 | 572 | void tms1100_cpu_device::device_reset() |
| 573 | 573 | { |
| 574 | 574 | tms1000_cpu_device::device_reset(); |
| 575 | ||
| 575 | ||
| 576 | 576 | // small differences in 00-3f area |
| 577 | 577 | m_fixed_decode[0x00] = 0; |
| 578 | 578 | m_fixed_decode[0x09] = F_COMX8; // ! |
| r242703 | r242704 | |
| 597 | 597 | // upper half of the opcodes is always branch/call |
| 598 | 598 | if (op & 0x80) |
| 599 | 599 | m_fixed_decode[op] = (op & 0x40) ? F_CALL: F_BR; |
| 600 | ||
| 600 | ||
| 601 | 601 | // 5 output bits select a microinstruction index |
| 602 | 602 | UINT32 imask = m_ipla->read(op); |
| 603 | 603 | UINT8 msel = imask & 0x1f; |
| 604 | ||
| 604 | ||
| 605 | 605 | // but if (from bottom to top) term 1 is active and output bit 5 is 0, R2,R4-R7 directly select a microinstruction index |
| 606 | 606 | if (imask & 0x40 && (imask & 0x20) == 0) |
| 607 | 607 | msel = (op & 0xf) | (op >> 1 & 0x10); |
| 608 | ||
| 608 | ||
| 609 | 609 | msel = BITSWAP8(msel,7,6,5,0,1,2,3,4); // lines are reversed |
| 610 | 610 | UINT32 mmask = m_mpla->read(msel); |
| 611 | 611 | mmask ^= 0x09fe; // invert active-negative |
| 612 | ||
| 612 | ||
| 613 | 613 | // _____ _____ _____ _____ ______ _____ ______ _____ _____ |
| 614 | 614 | 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 }; |
| 615 | 615 | |
| 616 | 616 | for (int bit = 0; bit < 15; bit++) |
| 617 | 617 | if (mmask & (1 << bit)) |
| 618 | 618 | m_micro_decode[op] |= md[bit]; |
| 619 | ||
| 619 | ||
| 620 | 620 | // the other ipla terms each select a fixed instruction |
| 621 | 621 | const UINT32 id[8] = { F_LDP, F_TDO, F_COMX, F_LDX, F_SBIT, F_RBIT, F_SETR, F_RETN }; |
| 622 | ||
| 622 | ||
| 623 | 623 | for (int bit = 0; bit < 8; bit++) |
| 624 | 624 | if (imask & (0x80 << bit)) |
| 625 | 625 | m_fixed_decode[op] |= id[bit]; |
| r242703 | r242704 | |
| 630 | 630 | UINT32 tms0980_cpu_device::decode_micro(UINT8 sel) |
| 631 | 631 | { |
| 632 | 632 | UINT32 decode = 0; |
| 633 | ||
| 633 | ||
| 634 | 634 | sel = BITSWAP8(sel,7,6,0,1,2,3,4,5); // lines are reversed |
| 635 | 635 | UINT32 mask = m_mpla->read(sel); |
| 636 | 636 | mask ^= 0x43fc3; // invert active-negative |
| 637 | ||
| 637 | ||
| 638 | 638 | // M_RSTR is specific to TMS02x0, it redirects to F_RSTR |
| 639 | 639 | // M_UNK1 is specific to TMS0270, unknown yet |
| 640 | 640 | // _______ ______ _____ _____ _____ _____ ______ _____ ______ _____ _____ |
| 641 | 641 | const UINT32 md[22] = { 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, M_RSTR, M_UNK1 }; |
| 642 | ||
| 642 | ||
| 643 | 643 | for (int bit = 0; bit < 22 && bit < m_mpla->outputs(); bit++) |
| 644 | 644 | if (mask & (1 << bit)) |
| 645 | 645 | decode |= md[bit]; |
| 646 | ||
| 646 | ||
| 647 | 647 | return decode; |
| 648 | 648 | } |
| 649 | 649 | |
| r242703 | r242704 | |
| 651 | 651 | { |
| 652 | 652 | // common reset |
| 653 | 653 | tms1xxx_cpu_device::device_reset(); |
| 654 | ||
| 654 | ||
| 655 | 655 | // pre-decode instructionset |
| 656 | 656 | m_fixed_decode.resize_and_clear(0x200); |
| 657 | 657 | m_micro_decode.resize_and_clear(0x200); |
| r242703 | r242704 | |
| 661 | 661 | // upper half of the opcodes is always branch/call |
| 662 | 662 | if (op & 0x100) |
| 663 | 663 | m_fixed_decode[op] = (op & 0x80) ? F_CALL: F_BR; |
| 664 | ||
| 664 | ||
| 665 | 665 | UINT32 imask = m_ipla->read(op); |
| 666 | 666 | |
| 667 | 667 | // 6 output bits select a microinstruction index |
| 668 | 668 | m_micro_decode[op] = decode_micro(imask & 0x3f); |
| 669 | ||
| 669 | ||
| 670 | 670 | // the other ipla terms each select a fixed instruction |
| 671 | 671 | 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 }; |
| 672 | ||
| 672 | ||
| 673 | 673 | for (int bit = 0; bit < 15; bit++) |
| 674 | 674 | if (imask & (0x80 << bit)) |
| 675 | 675 | m_fixed_decode[op] |= id[bit]; |
| 676 | 676 | } |
| 677 | ||
| 677 | ||
| 678 | 678 | // like on TMS0970, one of the terms directly select a microinstruction index (via R4-R8), |
| 679 | 679 | // but it can't be pre-determined when it's active |
| 680 | 680 | m_micro_direct.resize_and_clear(0x40); |
| r242703 | r242704 | |
| 710 | 710 | fb = 1; |
| 711 | 711 | else if (m_pc == m_pc_mask) |
| 712 | 712 | fb = 0; |
| 713 | ||
| 713 | ||
| 714 | 714 | m_pc = (m_pc << 1 | fb) & m_pc_mask; |
| 715 | 715 | } |
| 716 | 716 | |
| r242703 | r242704 | |
| 731 | 731 | debugger_instruction_hook(this, m_rom_address << 1); |
| 732 | 732 | m_opcode = m_program->read_word(m_rom_address << 1) & 0x1ff; |
| 733 | 733 | m_c4 = BITSWAP8(m_opcode,7,6,5,4,0,1,2,3) & 0xf; // opcode operand is bitswapped for most opcodes |
| 734 | ||
| 734 | ||
| 735 | 735 | m_fixed = m_fixed_decode[m_opcode]; |
| 736 | ||
| 736 | ||
| 737 | 737 | // if ipla term 0 is active, R4-R8 directly select a microinstruction index when R0 or R0^BL is 0 |
| 738 | 738 | int r0 = m_opcode >> 8 & 1; |
| 739 | 739 | if (m_ipla->read(m_opcode) & 0x40 && !((r0 & m_bl) ^ r0)) |
| r242703 | r242704 | |
| 747 | 747 | void tms0270_cpu_device::read_opcode() |
| 748 | 748 | { |
| 749 | 749 | tms0980_cpu_device::read_opcode(); |
| 750 | ||
| 750 | ||
| 751 | 751 | // RSTR is on the mpla |
| 752 | 752 | if (m_micro & M_RSTR) |
| 753 | 753 | m_fixed |= F_RSTR; |
| r242703 | r242704 | |
| 780 | 780 | // R13: power off, trigger on falling edge |
| 781 | 781 | if ((m_r_prev >> 13 & 1) && !(m_r >> 13 & 1)) |
| 782 | 782 | m_power_off(1); |
| 783 | ||
| 783 | ||
| 784 | 784 | // R11: TMS5100 CTL port direction (0=read from TMS5100, 1=write to TMS5100) |
| 785 | 785 | m_ctl_dir = m_r >> 11 & 1; |
| 786 | 786 | |
| 787 | 787 | // R12: chip select (off=display via OPLA, on=TMS5100 via ACC/CKB) |
| 788 | 788 | m_chipsel = m_r >> 12 & 1; |
| 789 | ||
| 789 | ||
| 790 | 790 | if (m_chipsel) |
| 791 | 791 | { |
| 792 | 792 | // ACC via SEG B,C,D,G: TMS5100 CTL pins |
| r242703 | r242704 | |
| 812 | 812 | m_o_latch_prev = m_o_latch; |
| 813 | 813 | } |
| 814 | 814 | } |
| 815 | ||
| 815 | ||
| 816 | 816 | // standard R-output |
| 817 | 817 | if (m_r != m_r_prev) |
| 818 | 818 | { |
| r242703 | r242704 | |
| 860 | 860 | case 0x30: case 0x38: |
| 861 | 861 | m_cki_bus = 1 << (m_c4 >> 2) ^ 0xf; |
| 862 | 862 | break; |
| 863 | ||
| 863 | ||
| 864 | 864 | // 01XXXXXX: constant |
| 865 | 865 | case 0x00: // R2,3,4 are NANDed with eachother, and then ORed with R1, making 00000XXX valid too |
| 866 | 866 | case 0x40: case 0x48: case 0x50: case 0x58: case 0x60: case 0x68: case 0x70: case 0x78: |
| r242703 | r242704 | |
| 886 | 886 | case 0x020: case 0x0a0: |
| 887 | 887 | m_cki_bus = 1 << (m_c4 >> 2) ^ 0xf; |
| 888 | 888 | break; |
| 889 | ||
| 889 | ||
| 890 | 890 | // 0X1XXXXXX: constant |
| 891 | 891 | case 0x040: case 0x048: case 0x050: case 0x058: case 0x060: case 0x068: case 0x070: case 0x078: |
| 892 | 892 | case 0x0c0: case 0x0c8: case 0x0d0: case 0x0d8: case 0x0e0: case 0x0e8: case 0x0f0: case 0x0f8: |
| r242703 | r242704 | |
| 1080 | 1080 | m_o_latch_low = m_a; |
| 1081 | 1081 | else |
| 1082 | 1082 | m_o_latch = m_o_latch_low | (m_a << 4 & 0x30); |
| 1083 | ||
| 1083 | ||
| 1084 | 1084 | // write to output is done in dynamic_output |
| 1085 | 1085 | } |
| 1086 | 1086 | |
| r242703 | r242704 | |
| 1111 | 1111 | if (m_status) |
| 1112 | 1112 | { |
| 1113 | 1113 | UINT8 new_pc = m_opcode & m_pc_mask; |
| 1114 | ||
| 1114 | ||
| 1115 | 1115 | // BR: conditional branch |
| 1116 | 1116 | if (m_fixed & F_BR) |
| 1117 | 1117 | { |
| r242703 | r242704 | |
| 1120 | 1120 | m_ca = m_cb; |
| 1121 | 1121 | m_pc = new_pc; |
| 1122 | 1122 | } |
| 1123 | ||
| 1123 | ||
| 1124 | 1124 | // CALL: conditional call |
| 1125 | 1125 | if (m_fixed & F_CALL) |
| 1126 | 1126 | { |
| r242703 | r242704 | |
| 1166 | 1166 | case 1: |
| 1167 | 1167 | // fetch: rom address 2/2 |
| 1168 | 1168 | m_rom_address = (m_ca << (m_pc_bits+4)) | (m_pa << m_pc_bits) | m_pc; |
| 1169 | ||
| 1169 | ||
| 1170 | 1170 | // execute: update alu inputs |
| 1171 | 1171 | // N inputs |
| 1172 | 1172 | if (m_micro & M_15TN) m_n |= 0xf; |
| r242703 | r242704 | |
| 1233 | 1233 | if (m_fixed & F_SAL) op_sal(); |
| 1234 | 1234 | if (m_fixed & F_SBL) op_sbl(); |
| 1235 | 1235 | if (m_fixed & F_XDA) op_xda(); |
| 1236 | ||
| 1236 | ||
| 1237 | 1237 | // after fixed opcode handling: store status, write ram |
| 1238 | 1238 | m_status = status; |
| 1239 | 1239 | if (m_ram_out != -1) |
| r242703 | r242704 | |
|---|---|---|
| 77 | 77 | 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); } |
| 78 | 78 | 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); } |
| 79 | 79 | static void set_output_pla(device_t &device, const UINT16 *output_pla) { downcast<tms1xxx_cpu_device &>(device).c_output_pla = output_pla; } |
| 80 | ||
| 80 | ||
| 81 | 81 | protected: |
| 82 | 82 | // device-level overrides |
| 83 | 83 | virtual void device_start(); |
| r242703 | r242704 | |
| 184 | 184 | devcb_write16 m_write_o; |
| 185 | 185 | devcb_write16 m_write_r; |
| 186 | 186 | devcb_write_line m_power_off; |
| 187 | ||
| 187 | ||
| 188 | 188 | UINT32 m_o_mask; |
| 189 | 189 | UINT32 m_r_mask; |
| 190 | 190 | UINT32 m_k_mask; |
| r242703 | r242704 | |
| 239 | 239 | virtual void device_reset(); |
| 240 | 240 | |
| 241 | 241 | virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options); |
| 242 | ||
| 242 | ||
| 243 | 243 | virtual void op_setr(); |
| 244 | 244 | virtual void op_rstr(); |
| 245 | 245 | }; |
| r242703 | r242704 | |
| 263 | 263 | virtual machine_config_constructor device_mconfig_additions() const; |
| 264 | 264 | |
| 265 | 265 | virtual void write_o_output(UINT8 index); |
| 266 | ||
| 266 | ||
| 267 | 267 | virtual void op_setr(); |
| 268 | 268 | virtual void op_tdo(); |
| 269 | 269 | }; |
| r242703 | r242704 | |
| 284 | 284 | virtual UINT32 disasm_min_opcode_bytes() const { return 2; } |
| 285 | 285 | virtual UINT32 disasm_max_opcode_bytes() const { return 2; } |
| 286 | 286 | virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options); |
| 287 | ||
| 287 | ||
| 288 | 288 | virtual UINT8 read_k_input(); |
| 289 | 289 | virtual void set_cki_bus(); |
| 290 | 290 | virtual void read_opcode(); |
| 291 | ||
| 291 | ||
| 292 | 292 | virtual void op_comx(); |
| 293 | 293 | |
| 294 | 294 | UINT32 decode_micro(UINT8 sel); |
| r242703 | r242704 | |
| 299 | 299 | { |
| 300 | 300 | public: |
| 301 | 301 | tms0270_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 302 | ||
| 302 | ||
| 303 | 303 | // static configuration helpers |
| 304 | 304 | template<class _Object> static devcb_base &set_read_ctl_callback(device_t &device, _Object object) { return downcast<tms0270_cpu_device &>(device).m_read_ctl.set_callback(object); } |
| 305 | 305 | template<class _Object> static devcb_base &set_write_ctl_callback(device_t &device, _Object object) { return downcast<tms0270_cpu_device &>(device).m_write_ctl.set_callback(object); } |
| r242703 | r242704 | |
| 316 | 316 | virtual UINT8 read_k_input(); |
| 317 | 317 | virtual void dynamic_output(); |
| 318 | 318 | virtual void read_opcode(); |
| 319 | ||
| 319 | ||
| 320 | 320 | virtual void op_setr(); |
| 321 | 321 | virtual void op_rstr(); |
| 322 | 322 | virtual void op_tdo(); |
| r242703 | r242704 | |
|---|---|---|
| 21 | 21 | #include <stdlib.h> |
| 22 | 22 | #include <stdarg.h> |
| 23 | 23 | |
| 24 | #include <sstream> | |
| 25 | ||
| 26 | 24 | // some cleanups for Solaris for things defined in stdlib.h |
| 27 | 25 | #ifdef SDLMAME_SOLARIS |
| 28 | 26 | #undef si_status |
| r242703 | r242704 | |
|---|---|---|
| 17 | 17 | #include "emuopts.h" |
| 18 | 18 | #include "osdepend.h" |
| 19 | 19 | #include "drivenum.h" |
| 20 | #include "ui/ui.h" | |
| 20 | 21 | #include "web/mongoose.h" |
| 21 | 22 | |
| 22 | 23 | //************************************************************************** |
| r242703 | r242704 | |
| 337 | 338 | } |
| 338 | 339 | |
| 339 | 340 | //------------------------------------------------- |
| 341 | // machine_get_screens - return table of available screens userdata | |
| 342 | // -> manager:machine().screens[":screen"] | |
| 343 | //------------------------------------------------- | |
| 344 | ||
| 345 | luabridge::LuaRef lua_engine::l_machine_get_screens(const running_machine *r) | |
| 346 | { | |
| 347 | lua_State *L = luaThis->m_lua_state; | |
| 348 | luabridge::LuaRef screens_table = luabridge::LuaRef::newTable(L); | |
| 349 | ||
| 350 | for (device_t *dev = r->first_screen(); dev != NULL; dev = dev->next()) { | |
| 351 | screen_device *sc = dynamic_cast<screen_device *>(dev); | |
| 352 | if (sc && sc->configured() && sc->started() && sc->type()) { | |
| 353 | screens_table[sc->tag()] = sc; | |
| 354 | } | |
| 355 | } | |
| 356 | ||
| 357 | return screens_table; | |
| 358 | } | |
| 359 | ||
| 360 | //------------------------------------------------- | |
| 340 | 361 | // machine_get_devices - return table of available devices userdata |
| 341 | 362 | // -> manager:machine().devices[":maincpu"] |
| 342 | 363 | //------------------------------------------------- |
| r242703 | r242704 | |
| 348 | 369 | luabridge::LuaRef devs_table = luabridge::LuaRef::newTable(L); |
| 349 | 370 | |
| 350 | 371 | device_t *root = &(m->root_device()); |
| 351 | ||
| 372 | devs_table = devtree_dfs(root, devs_table); | |
| 352 | 373 | |
| 353 | 374 | return devs_table; |
| 354 | 375 | } |
| r242703 | r242704 | |
| 438 | 459 | |
| 439 | 460 | } |
| 440 | 461 | |
| 462 | //------------------------------------------------- | |
| 463 | // draw_box - draw a box on a screen container | |
| 464 | // -> manager:machine().screens[":screen"]:draw_box(x1, y1, x2, y2, bgcolor, linecolor) | |
| 465 | //------------------------------------------------- | |
| 466 | ||
| 467 | int lua_engine::lua_screen::l_draw_box(lua_State *L) | |
| 468 | { | |
| 469 | screen_device *sc = luabridge::Stack<screen_device *>::get(L, 1); | |
| 470 | if(!sc) { | |
| 471 | return 0; | |
| 472 | } | |
| 473 | ||
| 474 | // ensure that we got 6 numerical parameters | |
| 475 | luaL_argcheck(L, lua_isnumber(L, 2), 2, "x1 (integer) expected"); | |
| 476 | luaL_argcheck(L, lua_isnumber(L, 3), 3, "y1 (integer) expected"); | |
| 477 | luaL_argcheck(L, lua_isnumber(L, 4), 4, "x2 (integer) expected"); | |
| 478 | luaL_argcheck(L, lua_isnumber(L, 5), 5, "y2 (integer) expected"); | |
| 479 | luaL_argcheck(L, lua_isnumber(L, 6), 6, "background color (integer) expected"); | |
| 480 | luaL_argcheck(L, lua_isnumber(L, 7), 7, "outline color (integer) expected"); | |
| 481 | ||
| 482 | // retrieve all parameters | |
| 483 | float x1, y1, x2, y2; | |
| 484 | x1 = MIN(lua_tounsigned(L, 2) / static_cast<float>(sc->width()) , 1.0f); | |
| 485 | y1 = MIN(lua_tounsigned(L, 3) / static_cast<float>(sc->height()), 1.0f); | |
| 486 | x2 = MIN(lua_tounsigned(L, 4) / static_cast<float>(sc->width()) , 1.0f); | |
| 487 | y2 = MIN(lua_tounsigned(L, 5) / static_cast<float>(sc->height()), 1.0f); | |
| 488 | UINT32 bgcolor = lua_tounsigned(L, 6); | |
| 489 | UINT32 fgcolor = lua_tounsigned(L, 7); | |
| 490 | ||
| 491 | // draw the box | |
| 492 | render_container &rc = sc->container(); | |
| 493 | ui_manager &ui = sc->machine().ui(); | |
| 494 | ui.draw_outlined_box(&rc, x1, y1, x2, y2, fgcolor, bgcolor); | |
| 495 | ||
| 496 | return 0; | |
| 497 | } | |
| 498 | ||
| 499 | //------------------------------------------------- | |
| 500 | // draw_line - draw a line on a screen container | |
| 501 | // -> manager:machine().screens[":screen"]:draw_line(x1, y1, x2, y2, linecolor) | |
| 502 | //------------------------------------------------- | |
| 503 | ||
| 504 | int lua_engine::lua_screen::l_draw_line(lua_State *L) | |
| 505 | { | |
| 506 | screen_device *sc = luabridge::Stack<screen_device *>::get(L, 1); | |
| 507 | if(!sc) { | |
| 508 | return 0; | |
| 509 | } | |
| 510 | ||
| 511 | // ensure that we got 5 numerical parameters | |
| 512 | luaL_argcheck(L, lua_isnumber(L, 2), 2, "x1 (integer) expected"); | |
| 513 | luaL_argcheck(L, lua_isnumber(L, 3), 3, "y1 (integer) expected"); | |
| 514 | luaL_argcheck(L, lua_isnumber(L, 4), 4, "x2 (integer) expected"); | |
| 515 | luaL_argcheck(L, lua_isnumber(L, 5), 5, "y2 (integer) expected"); | |
| 516 | luaL_argcheck(L, lua_isnumber(L, 6), 6, "color (integer) expected"); | |
| 517 | ||
| 518 | // retrieve all parameters | |
| 519 | float x1, y1, x2, y2; | |
| 520 | x1 = MIN(lua_tounsigned(L, 2) / static_cast<float>(sc->width()) , 1.0f); | |
| 521 | y1 = MIN(lua_tounsigned(L, 3) / static_cast<float>(sc->height()), 1.0f); | |
| 522 | x2 = MIN(lua_tounsigned(L, 4) / static_cast<float>(sc->width()) , 1.0f); | |
| 523 | y2 = MIN(lua_tounsigned(L, 5) / static_cast<float>(sc->height()), 1.0f); | |
| 524 | UINT32 color = lua_tounsigned(L, 6); | |
| 525 | ||
| 526 | // draw the line | |
| 527 | sc->container().add_line(x1, y1, x2, y2, UI_LINE_WIDTH, rgb_t(color), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); | |
| 528 | return 0; | |
| 529 | } | |
| 530 | ||
| 531 | //------------------------------------------------- | |
| 532 | // draw_text - draw text on a screen container | |
| 533 | // -> manager:machine().screens[":screen"]:draw_text(x, y, message) | |
| 534 | //------------------------------------------------- | |
| 535 | ||
| 536 | int lua_engine::lua_screen::l_draw_text(lua_State *L) | |
| 537 | { | |
| 538 | screen_device *sc = luabridge::Stack<screen_device *>::get(L, 1); | |
| 539 | if(!sc) { | |
| 540 | return 0; | |
| 541 | } | |
| 542 | ||
| 543 | // ensure that we got proper parameters | |
| 544 | luaL_argcheck(L, lua_isnumber(L, 2), 2, "x (integer) expected"); | |
| 545 | luaL_argcheck(L, lua_isnumber(L, 3), 3, "y (integer) expected"); | |
| 546 | luaL_argcheck(L, lua_isstring(L, 4), 4, "message (string) expected"); | |
| 547 | ||
| 548 | // retrieve all parameters | |
| 549 | float x = MIN(lua_tounsigned(L, 2) / static_cast<float>(sc->width()) , 1.0f); | |
| 550 | float y = MIN(lua_tounsigned(L, 3) / static_cast<float>(sc->height()), 1.0f); | |
| 551 | const char *msg = luaL_checkstring(L,4); | |
| 552 | // TODO: add optional parameters (colors, etc.) | |
| 553 | ||
| 554 | // draw the text | |
| 555 | render_container &rc = sc->container(); | |
| 556 | ui_manager &ui = sc->machine().ui(); | |
| 557 | ui.draw_text_full(&rc, msg, x, y , (1.0f - x), | |
| 558 | JUSTIFY_LEFT, WRAP_WORD, DRAW_NORMAL, UI_TEXT_COLOR, | |
| 559 | UI_TEXT_BG_COLOR, NULL, NULL); | |
| 560 | ||
| 561 | return 0; | |
| 562 | } | |
| 563 | ||
| 441 | 564 | void *lua_engine::checkparam(lua_State *L, int idx, const char *tname) |
| 442 | 565 | { |
| 443 | 566 | const char *name; |
| r242703 | r242704 | |
| 667 | 790 | .addFunction ("soft_reset", &running_machine::schedule_soft_reset) |
| 668 | 791 | .addFunction ("system", &running_machine::system) |
| 669 | 792 | .addProperty <luabridge::LuaRef, void> ("devices", &lua_engine::l_machine_get_devices) |
| 793 | .addProperty <luabridge::LuaRef, void> ("screens", &lua_engine::l_machine_get_screens) | |
| 670 | 794 | .endClass () |
| 671 | 795 | .beginClass <game_driver> ("game_driver") |
| 672 | 796 | .addData ("name", &game_driver::name) |
| r242703 | r242704 | |
| 691 | 815 | .deriveClass <address_space, lua_addr_space> ("addr_space") |
| 692 | 816 | .addFunction("name", &address_space::name) |
| 693 | 817 | .endClass() |
| 694 | .endNamespace (); | |
| 818 | .beginClass <lua_screen> ("lua_screen_dev") | |
| 819 | .addCFunction ("draw_box", &lua_screen::l_draw_box) | |
| 820 | .addCFunction ("draw_line", &lua_screen::l_draw_line) | |
| 821 | .addCFunction ("draw_text", &lua_screen::l_draw_text) | |
| 822 | .endClass() | |
| 823 | .deriveClass <screen_device, lua_screen> ("screen_dev") | |
| 824 | .addFunction ("name", &screen_device::name) | |
| 825 | .addFunction ("height", &screen_device::height) | |
| 826 | .addFunction ("width", &screen_device::width) | |
| 827 | .endClass() | |
| 828 | .endNamespace(); | |
| 695 | 829 | |
| 696 | 830 | luabridge::push (m_lua_state, machine_manager::instance()); |
| 697 | 831 | lua_setglobal(m_lua_state, "manager"); |
| r242703 | r242704 | |
|---|---|---|
| 105 | 105 | struct lua_addr_space { |
| 106 | 106 | template<typename T> int l_mem_read(lua_State *L); |
| 107 | 107 | }; |
| 108 | static luabridge::LuaRef l_machine_get_screens(const running_machine *r); | |
| 109 | struct lua_screen { | |
| 110 | int l_draw_box(lua_State *L); | |
| 111 | int l_draw_line(lua_State *L); | |
| 112 | int l_draw_text(lua_State *L); | |
| 113 | }; | |
| 108 | 114 | |
| 109 | 115 | void resume(void *L, INT32 param); |
| 110 | 116 | void report_errors(int status); |
| r242703 | r242704 | |
|---|---|---|
| 255 | 255 | primary_screen->register_vblank_callback(vblank_state_delegate(FUNC(running_machine::watchdog_vblank), this)); |
| 256 | 256 | save().save_item(NAME(m_watchdog_enabled)); |
| 257 | 257 | save().save_item(NAME(m_watchdog_counter)); |
| 258 | ||
| 258 | ||
| 259 | 259 | // save the random seed or save states might be broken in drivers that use the rand() method |
| 260 | 260 | save().save_item(NAME(m_rand_seed)); |
| 261 | ||
| 261 | ||
| 262 | 262 | // initialize image devices |
| 263 | 263 | image_init(*this); |
| 264 | 264 | m_tilemap.reset(global_alloc(tilemap_manager(*this))); |
| r242703 | r242704 | |
|---|---|---|
| 227 | 227 | |
| 228 | 228 | rv |= (ourCh->txUnderrun) ? 0x40 : 0; |
| 229 | 229 | rv |= (ourCh->syncHunt) ? 0x10 : 0; |
| 230 | rv |= channel[0].reg_val[0] & 0x0 | |
| 230 | rv |= channel[0].reg_val[0] & 0x05; // pick up TXBE and RXBF bits | |
| 231 | 231 | |
| 232 | 232 | return rv; |
| 233 | 233 | } |
| r242703 | r242704 | |
| 258 | 258 | |
| 259 | 259 | rv |= (ourCh->txUnderrun) ? 0x40 : 0; |
| 260 | 260 | rv |= (ourCh->syncHunt) ? 0x10 : 0; |
| 261 | rv |= channel[1].reg_val[0] & 0x0 | |
| 261 | rv |= channel[1].reg_val[0] & 0x05; // pick up TXBE and RXBF bits | |
| 262 | 262 | |
| 263 | 263 | return rv; |
| 264 | 264 | } |
| r242703 | r242704 | |
|---|---|---|
| 523 | 523 | save_item(NAME(m_status)); |
| 524 | 524 | save_item(NAME(m_temp)); |
| 525 | 525 | save_item(NAME(m_request)); |
| 526 | ||
| 526 | ||
| 527 | 527 | for (int i = 0; i < 4; i++) |
| 528 | 528 | { |
| 529 | 529 | save_item(NAME(m_channel[i].m_address), i); |
| r242703 | r242704 | |
|---|---|---|
| 151 | 151 | WRITE_LINE_MEMBER( e05a30_device::centronics_input_strobe ) |
| 152 | 152 | { |
| 153 | 153 | if (m_centronics_strobe == TRUE && state == FALSE && !m_centronics_busy) { |
| 154 | ||
| 154 | 155 | m_centronics_data_latch = m_centronics_data; |
| 155 | 156 | |
| 156 | 157 | m_centronics_data_latched = TRUE; |
| r242703 | r242704 | |
|---|---|---|
| 83 | 83 | AM_RANGE(0x00ec, 0x00ef) AM_WRITE8( nop_w, 0x0000ff00) // Non-existing, used for delays by the bios/os |
| 84 | 84 | ADDRESS_MAP_END |
| 85 | 85 | |
| 86 | ||
| 86 | ||
| 87 | 87 | i6300esb_lpc_device::i6300esb_lpc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 88 | 88 | : pci_device(mconfig, I6300ESB_LPC, "i6300ESB southbridge ISA/LPC bridge", tag, owner, clock, "i6300esb_lpc", __FILE__), |
| 89 | acpi(*this, "acpi"), | |
| 90 | rtc (*this, "rtc"), | |
| 91 | pit (*this, "pit") | |
| 89 | acpi(*this, "acpi"), | |
| 90 | rtc (*this, "rtc"), | |
| 91 | pit (*this, "pit") | |
| 92 | 92 | { |
| 93 | 93 | } |
| 94 | 94 |
| r242703 | r242704 | |
|---|---|---|
| 107 | 107 | public: |
| 108 | 108 | i82875p_overflow_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 109 | 109 | |
| 110 | ||
| 110 | ||
| 111 | 111 | DECLARE_READ8_MEMBER (dram_row_boundary_r); |
| 112 | 112 | DECLARE_WRITE8_MEMBER (dram_row_boundary_w); |
| 113 | 113 | DECLARE_READ8_MEMBER (dram_row_attribute_r); |
| r242703 | r242704 | |
|---|---|---|
| 34 | 34 | #include "emu.h" |
| 35 | 35 | #include "machine/r10696.h" |
| 36 | 36 | |
| 37 | #define | |
| 37 | #define VERBOSE 1 | |
| 38 | 38 | #if VERBOSE |
| 39 | 39 | #define LOG(x) logerror x |
| 40 | 40 | #else |
| r242703 | r242704 | |
| 50 | 50 | const device_type R10696 = &device_creator<r10696_device>; |
| 51 | 51 | |
| 52 | 52 | r10696_device::r10696_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 53 | : device_t(mconfig, R10696, "Rockwell 10696", tag, owner, clock, "r10696", __FILE__), | |
| 54 | m_io_a(0), m_io_b(0), m_io_c(0), | |
| 55 | m_iord(*this), m_iowr(*this) | |
| 53 | : device_t(mconfig, R10696, "Rockwell 10696", tag, owner, clock, "r10696", __FILE__), | |
| 54 | m_io_a(0), m_io_b(0), m_io_c(0), | |
| 55 | m_iord(*this), m_iowr(*this) | |
| 56 | 56 | { |
| 57 | 57 | } |
| 58 | 58 | |
| r242703 | r242704 | |
| 61 | 61 | */ |
| 62 | 62 | void r10696_device::device_start() |
| 63 | 63 | { |
| 64 | m_iord.resolve(); | |
| 65 | m_iowr.resolve(); | |
| 64 | m_iord.resolve(); | |
| 65 | m_iowr.resolve(); | |
| 66 | 66 | |
| 67 | save_item(NAME(m_io_a)); | |
| 68 | save_item(NAME(m_io_b)); | |
| 69 | save_item(NAME(m_io_c)); | |
| 67 | save_item(NAME(m_io_a)); | |
| 68 | save_item(NAME(m_io_b)); | |
| 69 | save_item(NAME(m_io_c)); | |
| 70 | 70 | } |
| 71 | 71 | |
| 72 | 72 | /** |
| r242703 | r242704 | |
| 87 | 87 | |
| 88 | 88 | WRITE8_MEMBER( r10696_device::io_w ) |
| 89 | 89 | { |
| 90 | assert(offset < 16); | |
| 91 | const UINT8 io_a = m_io_a; | |
| 92 | const UINT8 io_b = m_io_b; | |
| 93 | const UINT8 io_c = m_io_c; | |
| 94 | switch (offset) | |
| 95 | { | |
| 96 | case 0x0A: // Read Group A | |
| 97 | case 0x09: // Read Group B | |
| 98 | case 0x03: // Read Group C | |
| 99 | case 0x00: // Read Groups A | B | C | |
| 100 | case 0x01: // Read Groups B | C | |
| 101 | case 0x02: // Read Groups A | C | |
| 102 | case 0x08: // Read Groups A | B | |
| 103 | break; | |
| 90 | assert(offset < 16); | |
| 91 | const UINT8 io_a = m_io_a; | |
| 92 | const UINT8 io_b = m_io_b; | |
| 93 | const UINT8 io_c = m_io_c; | |
| 94 | switch (offset) | |
| 95 | { | |
| 96 | case 0x0A: // Read Group A | |
| 97 | case 0x09: // Read Group B | |
| 98 | case 0x03: // Read Group C | |
| 99 | case 0x00: // Read Groups A | B | C | |
| 100 | case 0x01: // Read Groups B | C | |
| 101 | case 0x02: // Read Groups A | C | |
| 102 | case 0x08: // Read Groups A | B | |
| 103 | break; | |
| 104 | 104 | |
| 105 | case 0x0E: // Set Group A | |
| 106 | m_io_a = data & 0x0f; | |
| 107 | break; | |
| 108 | case 0x0D: // Set Group B | |
| 109 | m_io_b = data & 0x0f; | |
| 110 | break; | |
| 111 | case 0x07: // Set Group C | |
| 112 | m_io_c = data & 0x0f; | |
| 113 | break; | |
| 114 | case 0x04: // Set Groups A, B and C | |
| 115 | m_io_a = m_io_b = m_io_c = data & 0x0f; | |
| 116 | break; | |
| 117 | case 0x05: // Set Groups B and C | |
| 118 | m_io_b = m_io_c = data & 0x0f; | |
| 119 | break; | |
| 120 | case 0x06: // Set Groups A and C | |
| 121 | m_io_a = m_io_c = data & 0x0f; | |
| 122 | break; | |
| 123 | case 0x0C: // Set Groups A and B | |
| 124 | m_io_a = m_io_b = data & 0x0f; | |
| 125 | break; | |
| 126 | } | |
| 127 | if (io_a != m_io_a) | |
| 128 | m_iowr(0, m_io_a, 0x0f); | |
| 129 | if (io_b != m_io_b) | |
| 130 | m_iowr(1, m_io_b, 0x0f); | |
| 131 | if (io_c != m_io_c) | |
| 132 | m_iowr(2, m_io_c, 0x0f); | |
| 105 | case 0x0E: // Set Group A | |
| 106 | m_io_a = data & 0x0f; | |
| 107 | break; | |
| 108 | case 0x0D: // Set Group B | |
| 109 | m_io_b = data & 0x0f; | |
| 110 | break; | |
| 111 | case 0x07: // Set Group C | |
| 112 | m_io_c = data & 0x0f; | |
| 113 | break; | |
| 114 | case 0x04: // Set Groups A, B and C | |
| 115 | m_io_a = m_io_b = m_io_c = data & 0x0f; | |
| 116 | break; | |
| 117 | case 0x05: // Set Groups B and C | |
| 118 | m_io_b = m_io_c = data & 0x0f; | |
| 119 | break; | |
| 120 | case 0x06: // Set Groups A and C | |
| 121 | m_io_a = m_io_c = data & 0x0f; | |
| 122 | break; | |
| 123 | case 0x0C: // Set Groups A and B | |
| 124 | m_io_a = m_io_b = data & 0x0f; | |
| 125 | break; | |
| 126 | } | |
| 127 | if (io_a != m_io_a) | |
| 128 | m_iowr(0, m_io_a, 0x0f); | |
| 129 | if (io_b != m_io_b) | |
| 130 | m_iowr(1, m_io_b, 0x0f); | |
| 131 | if (io_c != m_io_c) | |
| 132 | m_iowr(2, m_io_c, 0x0f); | |
| 133 | 133 | } |
| 134 | 134 | |
| 135 | 135 | |
| 136 | 136 | READ8_MEMBER( r10696_device::io_r ) |
| 137 | 137 | { |
| 138 | assert(offset < 16); | |
| 139 | UINT8 io_a, io_b, io_c; | |
| 140 | UINT8 data = 0xf; | |
| 141 | switch (offset) | |
| 142 | { | |
| 143 | case 0x0A: // Read Group A | |
| 144 | io_a = m_iord(0); | |
| 145 | data = io_a & 0x0f; | |
| 146 | break; | |
| 147 | case 0x09: // Read Group B | |
| 148 | io_b = m_iord(1); | |
| 149 | data = io_b & 0x0f; | |
| 150 | break; | |
| 151 | case 0x03: // Read Group C | |
| 152 | io_c = m_iord(2); | |
| 153 | data = io_c & 0x0f; | |
| 154 | break; | |
| 155 | case 0x00: // Read Groups A | B | C | |
| 156 | io_a = m_iord(0); | |
| 157 | io_b = m_iord(1); | |
| 158 | io_c = m_iord(2); | |
| 159 | data = (io_a | io_b | io_a) & 0x0f; | |
| 160 | break; | |
| 161 | case 0x01: // Read Groups B | C | |
| 162 | io_b = m_iord(1); | |
| 163 | io_c = m_iord(2); | |
| 164 | data = (io_b | io_c) & 0x0f; | |
| 165 | break; | |
| 166 | case 0x02: // Read Groups A | C | |
| 167 | io_a = m_iord(0); | |
| 168 | io_c = m_iord(2); | |
| 169 | data = (io_a | io_c) & 0x0f; | |
| 170 | break; | |
| 171 | case 0x08: // Read Groups A | B | |
| 172 | io_a = m_iord(0); | |
| 173 | io_b = m_iord(1); | |
| 174 | data = (io_a | io_b) & 0x0f; | |
| 175 | break; | |
| 138 | assert(offset < 16); | |
| 139 | UINT8 io_a, io_b, io_c; | |
| 140 | UINT8 data = 0xf; | |
| 141 | switch (offset) | |
| 142 | { | |
| 143 | case 0x0A: // Read Group A | |
| 144 | io_a = m_iord(0); | |
| 145 | data = io_a & 0x0f; | |
| 146 | break; | |
| 147 | case 0x09: // Read Group B | |
| 148 | io_b = m_iord(1); | |
| 149 | data = io_b & 0x0f; | |
| 150 | break; | |
| 151 | case 0x03: // Read Group C | |
| 152 | io_c = m_iord(2); | |
| 153 | data = io_c & 0x0f; | |
| 154 | break; | |
| 155 | case 0x00: // Read Groups A | B | C | |
| 156 | io_a = m_iord(0); | |
| 157 | io_b = m_iord(1); | |
| 158 | io_c = m_iord(2); | |
| 159 | data = (io_a | io_b | io_a) & 0x0f; | |
| 160 | break; | |
| 161 | case 0x01: // Read Groups B | C | |
| 162 | io_b = m_iord(1); | |
| 163 | io_c = m_iord(2); | |
| 164 | data = (io_b | io_c) & 0x0f; | |
| 165 | break; | |
| 166 | case 0x02: // Read Groups A | C | |
| 167 | io_a = m_iord(0); | |
| 168 | io_c = m_iord(2); | |
| 169 | data = (io_a | io_c) & 0x0f; | |
| 170 | break; | |
| 171 | case 0x08: // Read Groups A | B | |
| 172 | io_a = m_iord(0); | |
| 173 | io_b = m_iord(1); | |
| 174 | data = (io_a | io_b) & 0x0f; | |
| 175 | break; | |
| 176 | 176 | |
| 177 | case 0x0E: // Set Group A | |
| 178 | case 0x0D: // Set Group B | |
| 179 | case 0x07: // Set Group C | |
| 180 | case 0x04: // Set Groups A, B and C | |
| 181 | case 0x05: // Set Groups B and C | |
| 182 | case 0x06: // Set Groups A and C | |
| 183 | case 0x0C: // Set Groups A and B | |
| 184 | break; | |
| 185 | } | |
| 186 | return data; | |
| 177 | case 0x0E: // Set Group A | |
| 178 | case 0x0D: // Set Group B | |
| 179 | case 0x07: // Set Group C | |
| 180 | case 0x04: // Set Groups A, B and C | |
| 181 | case 0x05: // Set Groups B and C | |
| 182 | case 0x06: // Set Groups A and C | |
| 183 | case 0x0C: // Set Groups A and B | |
| 184 | break; | |
| 185 | } | |
| 186 | return data; | |
| 187 | 187 | } |
| r242703 | r242704 | |
|---|---|---|
| 24 | 24 | |
| 25 | 25 | /* Set the read and write group (4-bit; nibble) delegates */ |
| 26 | 26 | #define MCFG_R10696_IO(_devcb_rd,_devcb_wr) \ |
| 27 | r10696_device::set_iord(*device, DEVCB_##_devcb_rd); \ | |
| 28 | r10696_device::set_iowr(*device, DEVCB_##_devcb_wr); | |
| 27 | r10696_device::set_iord(*device, DEVCB_##_devcb_rd); \ | |
| 28 | r10696_device::set_iowr(*device, DEVCB_##_devcb_wr); | |
| 29 | 29 | |
| 30 | 30 | class r10696_device : public device_t |
| 31 | 31 | { |
| 32 | 32 | public: |
| 33 | r10696_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
| 34 | ~r10696_device() {} | |
| 33 | r10696_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
| 34 | ~r10696_device() {} | |
| 35 | 35 | |
| 36 | DECLARE_READ8_MEMBER ( io_r ); | |
| 37 | DECLARE_WRITE8_MEMBER( io_w ); | |
| 36 | DECLARE_READ8_MEMBER ( io_r ); | |
| 37 | DECLARE_WRITE8_MEMBER( io_w ); | |
| 38 | 38 | |
| 39 | template<class _Object> static devcb_base &set_iord(device_t &device, _Object object) { return downcast<r10696_device &>(device).m_iord.set_callback(object); } | |
| 40 | template<class _Object> static devcb_base &set_iowr(device_t &device, _Object object) { return downcast<r10696_device &>(device).m_iowr.set_callback(object); } | |
| 39 | template<class _Object> static devcb_base &set_iord(device_t &device, _Object object) { return downcast<r10696_device &>(device).m_iord.set_callback(object); } | |
| 40 | template<class _Object> static devcb_base &set_iowr(device_t &device, _Object object) { return downcast<r10696_device &>(device).m_iowr.set_callback(object); } | |
| 41 | 41 | protected: |
| 42 | // device-level overrides | |
| 43 | virtual void device_start(); | |
| 44 | virtual void device_reset(); | |
| 42 | // device-level overrides | |
| 43 | virtual void device_start(); | |
| 44 | virtual void device_reset(); | |
| 45 | 45 | |
| 46 | 46 | private: |
| 47 | UINT8 m_io_a; //!< input/output flip-flops group A | |
| 48 | UINT8 m_io_b; //!< input/output flip-flops group B | |
| 49 | UINT8 m_io_c; //!< input/output flip-flops group C | |
| 50 | devcb_read8 m_iord; //!< input line (read, offset = group, data = 4 bits) | |
| 51 | devcb_write8 m_iowr; //!< output line (write, offset = group, data = 4 bits) | |
| 47 | UINT8 m_io_a; //!< input/output flip-flops group A | |
| 48 | UINT8 m_io_b; //!< input/output flip-flops group B | |
| 49 | UINT8 m_io_c; //!< input/output flip-flops group C | |
| 50 | devcb_read8 m_iord; //!< input line (read, offset = group, data = 4 bits) | |
| 51 | devcb_write8 m_iowr; //!< output line (write, offset = group, data = 4 bits) | |
| 52 | 52 | }; |
| 53 | 53 | |
| 54 | 54 | extern const device_type R10696; |
| r242703 | r242704 | |
|---|---|---|
| 41 | 41 | #include "emu.h" |
| 42 | 42 | #include "machine/r10788.h" |
| 43 | 43 | |
| 44 | #define | |
| 44 | #define VERBOSE 0 | |
| 45 | 45 | #if VERBOSE |
| 46 | 46 | #define LOG(x) logerror x |
| 47 | 47 | #else |
| r242703 | r242704 | |
| 57 | 57 | const device_type R10788 = &device_creator<r10788_device>; |
| 58 | 58 | |
| 59 | 59 | r10788_device::r10788_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 60 | : device_t(mconfig, R10788, "Rockwell 10788", tag, owner, clock, "r10788", __FILE__), | |
| 61 | m_ktr(0), m_kts(0), m_kla(0), m_klb(0), m_mask_a(15), m_mask_b(15), m_ker(0), | |
| 62 | m_io_counter(0), m_scan_counter(0), | |
| 63 | m_display(*this) | |
| 60 | : device_t(mconfig, R10788, "Rockwell 10788", tag, owner, clock, "r10788", __FILE__), | |
| 61 | m_ktr(0), m_kts(0), m_kla(0), m_klb(0), m_mask_a(15), m_mask_b(15), m_ker(0), | |
| 62 | m_io_counter(0), m_scan_counter(0), | |
| 63 | m_display(*this) | |
| 64 | 64 | { |
| 65 | 65 | } |
| 66 | 66 | |
| r242703 | r242704 | |
| 69 | 69 | */ |
| 70 | 70 | void r10788_device::device_start() |
| 71 | 71 | { |
| 72 | ||
| 72 | m_display.resolve(); | |
| 73 | 73 | |
| 74 | save_item(NAME(m_reg)); | |
| 75 | save_item(NAME(m_ktr)); | |
| 76 | save_item(NAME(m_kts)); | |
| 77 | save_item(NAME(m_kla)); | |
| 78 | save_item(NAME(m_klb)); | |
| 79 | save_item(NAME(m_mask_a)); | |
| 80 | save_item(NAME(m_mask_b)); | |
| 81 | save_item(NAME(m_ker)); | |
| 82 | save_item(NAME(m_io_counter)); | |
| 83 | save_item(NAME(m_scan_counter)); | |
| 74 | save_item(NAME(m_reg)); | |
| 75 | save_item(NAME(m_ktr)); | |
| 76 | save_item(NAME(m_kts)); | |
| 77 | save_item(NAME(m_kla)); | |
| 78 | save_item(NAME(m_klb)); | |
| 79 | save_item(NAME(m_mask_a)); | |
| 80 | save_item(NAME(m_mask_b)); | |
| 81 | save_item(NAME(m_ker)); | |
| 82 | save_item(NAME(m_io_counter)); | |
| 83 | save_item(NAME(m_scan_counter)); | |
| 84 | 84 | |
| 85 | m_timer = timer_alloc(TIMER_DISPLAY); | |
| 86 | // recurring timer every 36 cycles | |
| 87 | m_timer->adjust(clocks_to_attotime(36), 0, clocks_to_attotime(36)); | |
| 85 | m_timer = timer_alloc(TIMER_DISPLAY); | |
| 86 | // recurring timer every 36 cycles | |
| 87 | m_timer->adjust(clocks_to_attotime(36), 0, clocks_to_attotime(36)); | |
| 88 | 88 | } |
| 89 | 89 | |
| 90 | 90 | /** |
| r242703 | r242704 | |
| 93 | 93 | void r10788_device::device_reset() |
| 94 | 94 | { |
| 95 | 95 | memset(m_reg, 0x00, sizeof(m_reg)); |
| 96 | m_ktr = 0; | |
| 97 | m_kts = 0; | |
| 98 | m_kla = 0; | |
| 99 | m_klb = 0; | |
| 100 | m_mask_a = 15; | |
| 101 | m_mask_b = 15; | |
| 102 | m_ker = 0; | |
| 103 | m_scan_counter = 0; | |
| 96 | m_ktr = 0; | |
| 97 | m_kts = 0; | |
| 98 | m_kla = 0; | |
| 99 | m_klb = 0; | |
| 100 | m_mask_a = 15; | |
| 101 | m_mask_b = 15; | |
| 102 | m_ker = 0; | |
| 103 | m_scan_counter = 0; | |
| 104 | 104 | } |
| 105 | 105 | |
| 106 | 106 | |
| r242703 | r242704 | |
| 113 | 113 | */ |
| 114 | 114 | void r10788_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) |
| 115 | 115 | { |
| 116 | UINT8 data; | |
| 117 | switch (id) | |
| 118 | { | |
| 119 | case TIMER_DISPLAY: | |
| 120 | data = (m_reg[0][m_scan_counter] & m_mask_a) + | |
| 121 | 16 * (m_reg[1][m_scan_counter] & m_mask_b); | |
| 122 | LOG(("%s: scan counter:%2d data:%02x\n", __FUNCTION__, m_scan_counter, data)); | |
| 123 | m_display(m_scan_counter, data, 0xff); | |
| 124 | break; | |
| 125 | default: | |
| 126 | LOG(("%s: invalid timer id:%d\n", __FUNCTION__, id)); | |
| 127 | } | |
| 128 | m_scan_counter = (m_scan_counter + 1) % 16; | |
| 116 | UINT8 data; | |
| 117 | switch (id) | |
| 118 | { | |
| 119 | case TIMER_DISPLAY: | |
| 120 | data = (m_reg[0][m_scan_counter] & m_mask_a) + | |
| 121 | 16 * (m_reg[1][m_scan_counter] & m_mask_b); | |
| 122 | LOG(("%s: scan counter:%2d data:%02x\n", __FUNCTION__, m_scan_counter, data)); | |
| 123 | m_display(m_scan_counter, data, 0xff); | |
| 124 | break; | |
| 125 | default: | |
| 126 | LOG(("%s: invalid timer id:%d\n", __FUNCTION__, id)); | |
| 127 | } | |
| 128 | m_scan_counter = (m_scan_counter + 1) % 16; | |
| 129 | 129 | } |
| 130 | 130 | |
| 131 | 131 | /************************************* |
| r242703 | r242704 | |
| 142 | 142 | |
| 143 | 143 | WRITE8_MEMBER( r10788_device::io_w ) |
| 144 | 144 | { |
| 145 | assert(offset < 16); | |
| 146 | switch (offset) | |
| 147 | { | |
| 148 | case KTR: // Transfer Keyboard Return | |
| 149 | LOG(("%s: KTR data:%02x\n", __FUNCTION__, data)); | |
| 150 | m_ktr = data; | |
| 151 | break; | |
| 152 | case KTS: // Transfer Keyboard Strobe | |
| 153 | LOG(("%s: KTS data:%02x\n", __FUNCTION__, data)); | |
| 154 | m_kts = data; | |
| 155 | break; | |
| 156 | case KLA: // Load Display Register A | |
| 157 | LOG(("%s: KLA [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); | |
| 158 | m_kla = data; | |
| 159 | m_reg[0][m_io_counter] = m_kla; | |
| 160 | break; | |
| 161 | case KLB: // Load Display Register B | |
| 162 | LOG(("%s: KLB [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); | |
| 163 | m_klb = data; | |
| 164 | m_reg[1][m_io_counter] = m_kla; | |
| 165 | break; | |
| 166 | case KDN: // Turn On Display | |
| 167 | LOG(("%s: KDN data:%02x\n", __FUNCTION__, data)); | |
| 168 | m_mask_a = 15; | |
| 169 | m_mask_b = 15; | |
| 170 | break; | |
| 171 | case KAF: // Turn Off A | |
| 172 | LOG(("%s: KAF data:%02x\n", __FUNCTION__, data)); | |
| 173 | m_mask_a = 0; | |
| 174 | m_mask_b &= ~3; | |
| 175 | break; | |
| 176 | case KBF: // Turn Off B | |
| 177 | LOG(("%s: KBF data:%02x\n", __FUNCTION__, data)); | |
| 178 | m_mask_b &= ~12; | |
| 179 | break; | |
| 180 | case KER: // Reset Keyboard Error | |
| 181 | LOG(("%s: KER data:%02x\n", __FUNCTION__, data)); | |
| 182 | m_ker = 10; | |
| 183 | break; | |
| 184 | } | |
| 145 | assert(offset < 16); | |
| 146 | switch (offset) | |
| 147 | { | |
| 148 | case KTR: // Transfer Keyboard Return | |
| 149 | LOG(("%s: KTR data:%02x\n", __FUNCTION__, data)); | |
| 150 | m_ktr = data; | |
| 151 | break; | |
| 152 | case KTS: // Transfer Keyboard Strobe | |
| 153 | LOG(("%s: KTS data:%02x\n", __FUNCTION__, data)); | |
| 154 | m_kts = data; | |
| 155 | break; | |
| 156 | case KLA: // Load Display Register A | |
| 157 | LOG(("%s: KLA [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); | |
| 158 | m_kla = data; | |
| 159 | m_reg[0][m_io_counter] = m_kla; | |
| 160 | break; | |
| 161 | case KLB: // Load Display Register B | |
| 162 | LOG(("%s: KLB [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); | |
| 163 | m_klb = data; | |
| 164 | m_reg[1][m_io_counter] = m_kla; | |
| 165 | break; | |
| 166 | case KDN: // Turn On Display | |
| 167 | LOG(("%s: KDN data:%02x\n", __FUNCTION__, data)); | |
| 168 | m_mask_a = 15; | |
| 169 | m_mask_b = 15; | |
| 170 | break; | |
| 171 | case KAF: // Turn Off A | |
| 172 | LOG(("%s: KAF data:%02x\n", __FUNCTION__, data)); | |
| 173 | m_mask_a = 0; | |
| 174 | m_mask_b &= ~3; | |
| 175 | break; | |
| 176 | case KBF: // Turn Off B | |
| 177 | LOG(("%s: KBF data:%02x\n", __FUNCTION__, data)); | |
| 178 | m_mask_b &= ~12; | |
| 179 | break; | |
| 180 | case KER: // Reset Keyboard Error | |
| 181 | LOG(("%s: KER data:%02x\n", __FUNCTION__, data)); | |
| 182 | m_ker = 10; | |
| 183 | break; | |
| 184 | } | |
| 185 | 185 | } |
| 186 | 186 | |
| 187 | 187 | |
| 188 | 188 | READ8_MEMBER( r10788_device::io_r ) |
| 189 | 189 | { |
| 190 | assert(offset < 16); | |
| 191 | UINT8 data = 0xf; | |
| 192 | switch (offset) | |
| 193 | { | |
| 194 | case KTR: // Transfer Keyboard Return | |
| 195 | data = m_ktr; | |
| 196 | LOG(("%s: KTR data:%02x\n", __FUNCTION__, data)); | |
| 197 | break; | |
| 198 | case KTS: // Transfer Keyboard Strobe | |
| 199 | data = m_kts; | |
| 200 | LOG(("%s: KTS data:%02x\n", __FUNCTION__, data)); | |
| 201 | break; | |
| 202 | case KLA: // Load Display Register A | |
| 203 | m_kla = m_reg[0][m_io_counter]; | |
| 204 | data = m_kla; | |
| 205 | LOG(("%s: KLA [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); | |
| 206 | break; | |
| 207 | case KLB: // Load Display Register B | |
| 208 | m_klb = m_reg[1][m_io_counter]; | |
| 209 | data = m_klb; | |
| 210 | LOG(("%s: KLB [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); | |
| 211 | // FIXME: does it automagically increment at KLB write? | |
| 212 | m_io_counter = (m_io_counter + 1) % 16; | |
| 213 | break; | |
| 214 | case KDN: // Turn On Display | |
| 215 | LOG(("%s: KDN data:%02x\n", __FUNCTION__, data)); | |
| 216 | break; | |
| 217 | case KAF: // Turn Off A | |
| 218 | LOG(("%s: KAF data:%02x\n", __FUNCTION__, data)); | |
| 219 | break; | |
| 220 | case KBF: // Turn Off B | |
| 221 | LOG(("%s: KBF data:%02x\n", __FUNCTION__, data)); | |
| 222 | break; | |
| 223 | case KER: // Reset Keyboard Error | |
| 224 | LOG(("%s: KER data:%02x\n", __FUNCTION__, data)); | |
| 225 | break; | |
| 226 | } | |
| 227 | return data; | |
| 190 | assert(offset < 16); | |
| 191 | UINT8 data = 0xf; | |
| 192 | switch (offset) | |
| 193 | { | |
| 194 | case KTR: // Transfer Keyboard Return | |
| 195 | data = m_ktr; | |
| 196 | LOG(("%s: KTR data:%02x\n", __FUNCTION__, data)); | |
| 197 | break; | |
| 198 | case KTS: // Transfer Keyboard Strobe | |
| 199 | data = m_kts; | |
| 200 | LOG(("%s: KTS data:%02x\n", __FUNCTION__, data)); | |
| 201 | break; | |
| 202 | case KLA: // Load Display Register A | |
| 203 | m_kla = m_reg[0][m_io_counter]; | |
| 204 | data = m_kla; | |
| 205 | LOG(("%s: KLA [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); | |
| 206 | break; | |
| 207 | case KLB: // Load Display Register B | |
| 208 | m_klb = m_reg[1][m_io_counter]; | |
| 209 | data = m_klb; | |
| 210 | LOG(("%s: KLB [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data)); | |
| 211 | // FIXME: does it automagically increment at KLB write? | |
| 212 | m_io_counter = (m_io_counter + 1) % 16; | |
| 213 | break; | |
| 214 | case KDN: // Turn On Display | |
| 215 | LOG(("%s: KDN data:%02x\n", __FUNCTION__, data)); | |
| 216 | break; | |
| 217 | case KAF: // Turn Off A | |
| 218 | LOG(("%s: KAF data:%02x\n", __FUNCTION__, data)); | |
| 219 | break; | |
| 220 | case KBF: // Turn Off B | |
| 221 | LOG(("%s: KBF data:%02x\n", __FUNCTION__, data)); | |
| 222 | break; | |
| 223 | case KER: // Reset Keyboard Error | |
| 224 | LOG(("%s: KER data:%02x\n", __FUNCTION__, data)); | |
| 225 | break; | |
| 226 | } | |
| 227 | return data; | |
| 228 | 228 | } |
| r242703 | r242704 | |
|---|---|---|
| 23 | 23 | |
| 24 | 24 | /* Set the writer used to update a display digit */ |
| 25 | 25 | #define MCFG_R10788_UPDATE(_devcb) \ |
| 26 | ||
| 26 | r10788_device::set_update(*device, DEVCB_##_devcb); | |
| 27 | 27 | |
| 28 | 28 | class r10788_device : public device_t |
| 29 | 29 | { |
| 30 | 30 | public: |
| 31 | r10788_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
| 32 | ~r10788_device() {} | |
| 31 | r10788_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
| 32 | ~r10788_device() {} | |
| 33 | 33 | |
| 34 | enum { | |
| 35 | KTR = 0xc, //!< Transfer Keyboard Return | |
| 36 | KTS = 0xa, //!< Transfer Keyboard Strobe | |
| 37 | KLA = 0xe, //!< Load Display Register A | |
| 38 | KLB = 0xd, //!< Load Display Register B | |
| 39 | KDN = 0x3, //!< Turn On Display | |
| 40 | KAF = 0xb, //!< Turn Off A | |
| 41 | KBF = 0x7, //!< Turn Off B | |
| 42 | KER = 0x6 //!< Reset Keyboard Error | |
| 43 | }; | |
| 34 | enum { | |
| 35 | KTR = 0xc, //!< Transfer Keyboard Return | |
| 36 | KTS = 0xa, //!< Transfer Keyboard Strobe | |
| 37 | KLA = 0xe, //!< Load Display Register A | |
| 38 | KLB = 0xd, //!< Load Display Register B | |
| 39 | KDN = 0x3, //!< Turn On Display | |
| 40 | KAF = 0xb, //!< Turn Off A | |
| 41 | KBF = 0x7, //!< Turn Off B | |
| 42 | KER = 0x6 //!< Reset Keyboard Error | |
| 43 | }; | |
| 44 | 44 | |
| 45 | DECLARE_READ8_MEMBER ( io_r ); | |
| 46 | DECLARE_WRITE8_MEMBER( io_w ); | |
| 45 | DECLARE_READ8_MEMBER ( io_r ); | |
| 46 | DECLARE_WRITE8_MEMBER( io_w ); | |
| 47 | 47 | |
| 48 | ||
| 48 | template<class _Object> static devcb_base &set_update(device_t &device, _Object object) { return downcast<r10788_device &>(device).m_display.set_callback(object); } | |
| 49 | 49 | protected: |
| 50 | // device-level overrides | |
| 51 | virtual void device_start(); | |
| 52 | virtual void device_reset(); | |
| 53 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); | |
| 50 | // device-level overrides | |
| 51 | virtual void device_start(); | |
| 52 | virtual void device_reset(); | |
| 53 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); | |
| 54 | 54 | |
| 55 | 55 | private: |
| 56 | ||
| 56 | static const device_timer_id TIMER_DISPLAY = 0; | |
| 57 | 57 | |
| 58 | UINT8 m_reg[2][16]; //!< display registers | |
| 59 | UINT8 m_ktr; //!< transfer keyboard return value | |
| 60 | UINT8 m_kts; //!< transfer keyboard strobe value | |
| 61 | UINT8 m_kla; //!< display register A value | |
| 62 | UINT8 m_klb; //!< display register B value | |
| 63 | UINT8 m_mask_a; //!< display enable bits for A | |
| 64 | UINT8 m_mask_b; //!< display enable bits for B | |
| 65 | UINT8 m_ker; //!< keyboard error value | |
| 66 | int m_io_counter; //!< current I/O register index | |
| 67 | int m_scan_counter; //!< current display scan | |
| 68 | devcb_write8 m_display; //!< display updater | |
| 69 | emu_timer* m_timer; //!< timer running at clock / 18 / 36 | |
| 58 | UINT8 m_reg[2][16]; //!< display registers | |
| 59 | UINT8 m_ktr; //!< transfer keyboard return value | |
| 60 | UINT8 m_kts; //!< transfer keyboard strobe value | |
| 61 | UINT8 m_kla; //!< display register A value | |
| 62 | UINT8 m_klb; //!< display register B value | |
| 63 | UINT8 m_mask_a; //!< display enable bits for A | |
| 64 | UINT8 m_mask_b; //!< display enable bits for B | |
| 65 | UINT8 m_ker; //!< keyboard error value | |
| 66 | int m_io_counter; //!< current I/O register index | |
| 67 | int m_scan_counter; //!< current display scan | |
| 68 | devcb_write8 m_display; //!< display updater | |
| 69 | emu_timer* m_timer; //!< timer running at clock / 18 / 36 | |
| 70 | 70 | }; |
| 71 | 71 | |
| 72 | 72 | extern const device_type R10788; |
| r242703 | r242704 | |
|---|---|---|
| 40 | 40 | #include "emu.h" |
| 41 | 41 | #include "machine/ra17xx.h" |
| 42 | 42 | |
| 43 | #define | |
| 43 | #define VERBOSE 1 | |
| 44 | 44 | #if VERBOSE |
| 45 | 45 | #define LOG(x) logerror x |
| 46 | 46 | #else |
| r242703 | r242704 | |
| 56 | 56 | const device_type RA17XX = &device_creator<ra17xx_device>; |
| 57 | 57 | |
| 58 | 58 | ra17xx_device::ra17xx_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 59 | : device_t(mconfig, RA17XX, "Rockwell A17XX", tag, owner, clock, "ra17xx", __FILE__), | |
| 60 | m_enable(false), | |
| 61 | m_iord(*this), | |
| 62 | m_iowr(*this) | |
| 59 | : device_t(mconfig, RA17XX, "Rockwell A17XX", tag, owner, clock, "ra17xx", __FILE__), | |
| 60 | m_enable(false), | |
| 61 | m_iord(*this), | |
| 62 | m_iowr(*this) | |
| 63 | 63 | { |
| 64 | 64 | } |
| 65 | 65 | |
| r242703 | r242704 | |
| 68 | 68 | */ |
| 69 | 69 | void ra17xx_device::device_start() |
| 70 | 70 | { |
| 71 | m_iord.resolve(); | |
| 72 | m_iowr.resolve(); | |
| 71 | m_iord.resolve(); | |
| 72 | m_iowr.resolve(); | |
| 73 | 73 | |
| 74 | ||
| 74 | save_item(NAME(m_line)); | |
| 75 | 75 | } |
| 76 | 76 | |
| 77 | 77 | /** |
| r242703 | r242704 | |
| 79 | 79 | */ |
| 80 | 80 | void ra17xx_device::device_reset() |
| 81 | 81 | { |
| 82 | ||
| 82 | memset(m_line, 0, sizeof(m_line)); | |
| 83 | 83 | } |
| 84 | 84 | |
| 85 | 85 | |
| r242703 | r242704 | |
| 97 | 97 | |
| 98 | 98 | WRITE8_MEMBER( ra17xx_device::io_w ) |
| 99 | 99 | { |
| 100 | assert(offset < 16); | |
| 101 | m_bl = (data >> 4) & 15; // BL on the data bus most significant bits | |
| 102 | if (offset & 1) { | |
| 103 | // SOS command | |
| 104 | if (data & (1 << 3)) { | |
| 105 | m_line[m_bl] = 1; // enable output | |
| 100 | assert(offset < 16); | |
| 101 | m_bl = (data >> 4) & 15; // BL on the data bus most significant bits | |
| 102 | if (offset & 1) { | |
| 103 | // SOS command | |
| 104 | if (data & (1 << 3)) { | |
| 105 | m_line[m_bl] = 1; // enable output | |
| 106 | 106 | // if (m_enable) |
| 107 | m_iowr(m_bl, 1, 1); | |
| 108 | } else { | |
| 109 | m_line[m_bl] = 0; // disable output | |
| 107 | m_iowr(m_bl, 1, 1); | |
| 108 | } else { | |
| 109 | m_line[m_bl] = 0; // disable output | |
| 110 | 110 | // if (m_enable) |
| 111 | m_iowr(m_bl, 0, 1); | |
| 112 | } | |
| 113 | } else { | |
| 114 | // SES command | |
| 115 | if (data & (1 << 3)) { | |
| 116 | // enable all outputs | |
| 117 | m_enable = true; | |
| 118 | for (int i = 0; i < 16; i++) | |
| 119 | m_iowr(i, m_line[i], 1); | |
| 120 | } else { | |
| 121 | // disable all outputs | |
| 122 | m_enable = false; | |
| 123 | } | |
| 124 | } | |
| 111 | m_iowr(m_bl, 0, 1); | |
| 112 | } | |
| 113 | } else { | |
| 114 | // SES command | |
| 115 | if (data & (1 << 3)) { | |
| 116 | // enable all outputs | |
| 117 | m_enable = true; | |
| 118 | for (int i = 0; i < 16; i++) | |
| 119 | m_iowr(i, m_line[i], 1); | |
| 120 | } else { | |
| 121 | // disable all outputs | |
| 122 | m_enable = false; | |
| 123 | } | |
| 124 | } | |
| 125 | 125 | } |
| 126 | 126 | |
| 127 | 127 | |
| 128 | 128 | READ8_MEMBER( ra17xx_device::io_r ) |
| 129 | 129 | { |
| 130 | assert(offset < 16); | |
| 131 | return (m_iord(m_bl) & 1) ? 0x0f : 0x07; | |
| 130 | assert(offset < 16); | |
| 131 | return (m_iord(m_bl) & 1) ? 0x0f : 0x07; | |
| 132 | 132 | } |
| r242703 | r242704 | |
|---|---|---|
| 23 | 23 | |
| 24 | 24 | /* Set the read line handler */ |
| 25 | 25 | #define MCFG_RA17XX_READ(_devcb) \ |
| 26 | ra17xx_device::set_iord(*device, DEVCB_##_devcb); | |
| 26 | ra17xx_device::set_iord(*device, DEVCB_##_devcb); \ | |
| 27 | ||
| 27 | 28 | /* Set the write line handler */ |
| 28 | 29 | #define MCFG_RA17XX_WRITE(_devcb) \ |
| 29 | ra17xx_device::set_iowr(*device, DEVCB_##_devcb); | |
| 30 | ra17xx_device::set_iowr(*device, DEVCB_##_devcb); \ | |
| 31 | ||
| 30 | 32 | class ra17xx_device : public device_t |
| 31 | 33 | { |
| 32 | 34 | public: |
| 33 | ra17xx_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
| 34 | ~ra17xx_device() {} | |
| 35 | ra17xx_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
| 36 | ~ra17xx_device() {} | |
| 35 | 37 | |
| 36 | DECLARE_READ8_MEMBER ( io_r ); | |
| 37 | DECLARE_WRITE8_MEMBER( io_w ); | |
| 38 | DECLARE_READ8_MEMBER ( io_r ); | |
| 39 | DECLARE_WRITE8_MEMBER( io_w ); | |
| 38 | 40 | |
| 39 | template<class _Object> static devcb_base &set_iord(device_t &device, _Object object) { return downcast<ra17xx_device &>(device).m_iord.set_callback(object); } | |
| 40 | template<class _Object> static devcb_base &set_iowr(device_t &device, _Object object) { return downcast<ra17xx_device &>(device).m_iowr.set_callback(object); } | |
| 41 | template<class _Object> static devcb_base &set_iord(device_t &device, _Object object) { return downcast<ra17xx_device &>(device).m_iord.set_callback(object); } | |
| 42 | template<class _Object> static devcb_base &set_iowr(device_t &device, _Object object) { return downcast<ra17xx_device &>(device).m_iowr.set_callback(object); } | |
| 41 | 43 | protected: |
| 42 | // device-level overrides | |
| 43 | virtual void device_start(); | |
| 44 | virtual void device_reset(); | |
| 44 | // device-level overrides | |
| 45 | virtual void device_start(); | |
| 46 | virtual void device_reset(); | |
| 45 | 47 | |
| 46 | 48 | private: |
| 47 | UINT8 m_line[16]; //!< input/output flip-flops for 16 I/O lines | |
| 48 | UINT8 m_bl; //!< value of BL during the most recent output | |
| 49 | bool m_enable; //!< true if outputs are enabled | |
| 50 | devcb_read8 m_iord; //!< input line (read, offset = line, data = 0/1) | |
| 51 | devcb_write8 m_iowr; //!< output line (write, offset = line, data = 0/1) | |
| 49 | UINT8 m_line[16]; //!< input/output flip-flops for 16 I/O lines | |
| 50 | UINT8 m_bl; //!< value of BL during the most recent output | |
| 51 | bool m_enable; //!< true if outputs are enabled | |
| 52 | devcb_read8 m_iord; //!< input line (read, offset = line, data = 0/1) | |
| 53 | devcb_write8 m_iowr; //!< output line (write, offset = line, data = 0/1) | |
| 52 | 54 | }; |
| 53 | 55 | |
| 54 | 56 | extern const device_type RA17XX; |
| r242703 | r242704 | |
|---|---|---|
| 393 | 393 | void saturn_state::smpc_keyboard(UINT8 pad_num, UINT8 offset) |
| 394 | 394 | { |
| 395 | 395 | UINT16 game_key; |
| 396 | ||
| 396 | ||
| 397 | 397 | game_key = 0xffff; |
| 398 | 398 | |
| 399 | 399 | game_key ^= ((ioport("KEYS_1")->read() & 0x80) << 8); // right |
| r242703 | r242704 | |
| 415 | 415 | m_smpc.OREG[2+pad_num*offset] = game_key>>8; // game buttons, TODO |
| 416 | 416 | m_smpc.OREG[3+pad_num*offset] = game_key & 0xff; |
| 417 | 417 | /* |
| 418 | Keyboard Status hook-up | |
| 419 | TODO: how shift key actually works? EGWord uses it in order to switch between hiragana and katakana modes. | |
| 418 | Keyboard Status hook-up | |
| 419 | TODO: how shift key actually works? EGWord uses it in order to switch between hiragana and katakana modes. | |
| 420 | 420 | x--- ---- 0 |
| 421 | 421 | -x-- ---- caps lock |
| 422 | 422 | --x- ---- num lock |
| r242703 | r242704 | |
|---|---|---|
| 46 | 46 | m_optic_cb(*this) |
| 47 | 47 | { |
| 48 | 48 | m_max_steps=(48*2); |
| 49 | } | |
| 49 | } | |
| 50 | 50 | /////////////////////////////////////////////////////////////////////////// |
| 51 | 51 | |
| 52 | 52 | void stepper_device::update_optic() |
| r242703 | r242704 | |
|---|---|---|
| 31 | 31 | |
| 32 | 32 | #define MCFG_STEPPER_ADD(_tag)\ |
| 33 | 33 | MCFG_DEVICE_ADD(_tag, STEPPER, 0) |
| 34 | ||
| 34 | ||
| 35 | 35 | #define MCFG_STEPPER_REEL_TYPE(_data) \ |
| 36 | 36 | stepper_device::set_reel_type(*device, _data); |
| 37 | 37 | |
| 38 | 38 | /* total size of reel (in half steps) */ |
| 39 | 39 | #define MCFG_STEPPER_MAX_STEPS(_write) \ |
| 40 | stepper_device::set_max_steps(*device, _write); | |
| 41 | ||
| 40 | stepper_device::set_max_steps(*device, _write); | |
| 41 | ||
| 42 | 42 | /* start position of index (in half steps) */ |
| 43 | 43 | #define MCFG_STEPPER_START_INDEX(_write) \ |
| 44 | stepper_device::set_start_index(*device, _write); | |
| 44 | stepper_device::set_start_index(*device, _write); | |
| 45 | 45 | |
| 46 | /* end position of index (in half steps) */ | |
| 46 | /* end position of index (in half steps) */ | |
| 47 | 47 | #define MCFG_STEPPER_END_INDEX(_write) \ |
| 48 | stepper_device::set_end_index(*device, _write); | |
| 48 | stepper_device::set_end_index(*device, _write); | |
| 49 | 49 | |
| 50 | /* end position of index (in half steps) */ | |
| 50 | /* end position of index (in half steps) */ | |
| 51 | 51 | #define MCFG_STEPPER_INDEX_PATTERN(_write) \ |
| 52 | stepper_device::set_index_pattern(*device, _write); | |
| 53 | ||
| 52 | stepper_device::set_index_pattern(*device, _write); | |
| 53 | ||
| 54 | 54 | /* Phase at 0, for opto linkage */ |
| 55 | 55 | #define MCFG_STEPPER_INIT_PHASE(_write) \ |
| 56 | stepper_device::set_init_phase(*device, _write); | |
| 56 | stepper_device::set_init_phase(*device, _write); | |
| 57 | 57 | |
| 58 | 58 | #define MCFG_STARPOINT_48STEP_ADD(_tag)\ |
| 59 | 59 | MCFG_STEPPER_ADD(_tag)\ |
| r242703 | r242704 | |
| 103 | 103 | |
| 104 | 104 | template<class _Object> static devcb_base &set_optic_handler(device_t &device, _Object object) { return downcast<stepper_device &>(device).m_optic_cb.set_callback(object); } |
| 105 | 105 | |
| 106 | static void set_reel_type(device_t &device, UINT8 type) | |
| 107 | { | |
| 108 | downcast<stepper_device &>(device).m_type = type; | |
| 106 | static void set_reel_type(device_t &device, UINT8 type) | |
| 107 | { | |
| 108 | downcast<stepper_device &>(device).m_type = type; | |
| 109 | 109 | switch ( type ) |
| 110 | 110 | { default: |
| 111 | 111 | case STARPOINT_48STEP_REEL: /* STARPOINT RMxxx */ |
| r242703 | r242704 | |
| 127 | 127 | case ECOIN_200STEP_REEL : |
| 128 | 128 | downcast<stepper_device &>(device).m_max_steps = (200*2); |
| 129 | 129 | break; |
| 130 | } | |
| 130 | } | |
| 131 | 131 | } |
| 132 | 132 | static void set_max_steps(device_t &device, INT16 steps) { downcast<stepper_device &>(device).m_max_steps = steps; } |
| 133 | 133 | static void set_start_index(device_t &device, INT16 index) { downcast<stepper_device &>(device).m_index_start = index; } |
| 134 | static void set_end_index(device_t &device, INT16 index) { downcast<stepper_device &>(device).m_index_end = index; } | |
| 135 | static void set_index_pattern(device_t &device, INT16 index) { downcast<stepper_device &>(device).m_index_patt = index; } | |
| 136 | static void set_init_phase(device_t &device, UINT8 phase) | |
| 134 | static void set_end_index(device_t &device, INT16 index) { downcast<stepper_device &>(device).m_index_end = index; } | |
| 135 | static void set_index_pattern(device_t &device, INT16 index) { downcast<stepper_device &>(device).m_index_patt = index; } | |
| 136 | static void set_init_phase(device_t &device, UINT8 phase) | |
| 137 | 137 | { |
| 138 | downcast<stepper_device &>(device).m_initphase = phase; | |
| 139 | downcast<stepper_device &>(device).m_phase = phase; | |
| 140 | downcast<stepper_device &>(device).m_old_phase = phase; | |
| 138 | downcast<stepper_device &>(device).m_initphase = phase; | |
| 139 | downcast<stepper_device &>(device).m_phase = phase; | |
| 140 | downcast<stepper_device &>(device).m_old_phase = phase; | |
| 141 | 141 | } |
| 142 | 142 | |
| 143 | 143 | /* update a motor */ |
| r242703 | r242704 | |
|---|---|---|
| 563 | 563 | save_item(NAME(m_dtr)); |
| 564 | 564 | save_item(NAME(m_rts)); |
| 565 | 565 | save_item(NAME(m_sync)); |
| 566 | device_serial_interface::register_save_state(machine().save(), name(), tag()); | |
| 567 | 566 | } |
| 568 | 567 | |
| 569 | 568 |
| r242703 | r242704 | |
|---|---|---|
| 596 | 596 | if(m_read_num_follow == 0) // special case: Legend of Kage on X1 Turbo |
| 597 | 597 | res = m_status; |
| 598 | 598 | else { |
| 599 | assert(m_read_cur_follow < ARRAY_LENGTH(m_read_regs_follow)); | |
| 599 | 600 | res = m_read_regs_follow[m_read_cur_follow]; |
| 600 | 601 | } |
| 601 | 602 | |
| r242703 | r242704 | |
| 686 | 687 | case COMMAND_READ_STATUS_BYTE: |
| 687 | 688 | if (LOG) logerror("Z80DMA '%s' CMD Read status Byte\n", tag()); |
| 688 | 689 | READ_MASK = 1; |
| 689 | m_read_regs_follow[0] = m_status; | |
| 690 | assert(m_read_num_follow < ARRAY_LENGTH(m_read_regs_follow)); | |
| 691 | m_read_regs_follow[m_read_num_follow++] = m_status; | |
| 690 | 692 | break; |
| 691 | 693 | case COMMAND_RESET_AND_DISABLE_INTERRUPTS: |
| 692 | 694 | WR3 &= ~0x20; |
| r242703 | r242704 | |
|---|---|---|
| 14 | 14 | public: |
| 15 | 15 | |
| 16 | 16 | netlist_matrix_solver_direct_t(const netlist_solver_parameters_t ¶ms, int size); |
| 17 | netlist_matrix_solver_direct_t(const eSolverType type, const netlist_solver_parameters_t ¶ms, int size); | |
| 18 | 17 | |
| 19 | 18 | virtual ~netlist_matrix_solver_direct_t(); |
| 20 | 19 | |
| r242703 | r242704 | |
| 187 | 186 | * Sorting as a general matrix pre-conditioning is mentioned in |
| 188 | 187 | * literature but I have found no articles about Gauss Seidel. |
| 189 | 188 | * |
| 190 | * For Gaussian Elimination however increasing order is better suited. | |
| 191 | * FIXME: Even better would be to sort on elements right of the matrix diagonal. | |
| 192 | * | |
| 193 | 189 | */ |
| 194 | 190 | |
| 195 | int sort_order = (type() == GAUSS_SEIDEL ? 1 : -1); | |
| 196 | 191 | |
| 197 | 192 | for (int k = 0; k < N() / 2; k++) |
| 198 | 193 | for (int i = 0; i < N() - 1; i++) |
| 199 | 194 | { |
| 200 | ||
| 195 | if (m_terms[i]->m_railstart < m_terms[i+1]->m_railstart) | |
| 201 | 196 | { |
| 202 | 197 | std::swap(m_terms[i],m_terms[i+1]); |
| 203 | 198 | m_nets.swap(i, i+1); |
| r242703 | r242704 | |
| 448 | 443 | |
| 449 | 444 | template <int m_N, int _storage_N> |
| 450 | 445 | netlist_matrix_solver_direct_t<m_N, _storage_N>::netlist_matrix_solver_direct_t(const netlist_solver_parameters_t ¶ms, int size) |
| 451 | : netlist_matrix_solver_t( | |
| 446 | : netlist_matrix_solver_t(params) | |
| 452 | 447 | , m_dim(size) |
| 453 | 448 | , m_lp_fact(0) |
| 454 | 449 | { |
| r242703 | r242704 | |
| 463 | 458 | m_row_ops[N()] = vector_ops_t::create_ops(N()); |
| 464 | 459 | } |
| 465 | 460 | |
| 466 | template <int m_N, int _storage_N> | |
| 467 | netlist_matrix_solver_direct_t<m_N, _storage_N>::netlist_matrix_solver_direct_t(const eSolverType type, const netlist_solver_parameters_t ¶ms, int size) | |
| 468 | : netlist_matrix_solver_t(type, params) | |
| 469 | , m_dim(size) | |
| 470 | , m_lp_fact(0) | |
| 471 | { | |
| 472 | m_terms = new terms_t *[N()]; | |
| 473 | m_rails_temp = new terms_t[N()]; | |
| 474 | 461 | |
| 475 | for (int k = 0; k < N(); k++) | |
| 476 | { | |
| 477 | m_terms[k] = new terms_t; | |
| 478 | m_row_ops[k] = vector_ops_t::create_ops(k); | |
| 479 | } | |
| 480 | m_row_ops[N()] = vector_ops_t::create_ops(N()); | |
| 481 | } | |
| 482 | 462 | |
| 483 | ||
| 484 | 463 | #endif /* NLD_MS_DIRECT_H_ */ |
| r242703 | r242704 | |
|---|---|---|
| 17 | 17 | public: |
| 18 | 18 | |
| 19 | 19 | netlist_matrix_solver_gauss_seidel_t(const netlist_solver_parameters_t ¶ms, int size) |
| 20 | ||
| 20 | : netlist_matrix_solver_direct_t<m_N, _storage_N>(params, size) | |
| 21 | 21 | , m_lp_fact(0) |
| 22 | 22 | , m_gs_fail(0) |
| 23 | 23 | , m_gs_total(0) |
| r242703 | r242704 | |
| 45 | 45 | template <int m_N, int _storage_N> |
| 46 | 46 | void netlist_matrix_solver_gauss_seidel_t<m_N, _storage_N>::log_stats() |
| 47 | 47 | { |
| 48 | #if 1 | |
| 49 | if (this->m_stat_calculations == 0) | |
| 48 | #if 0 | |
| 49 | if (this->m_calculations == 0) | |
| 50 | 50 | return; |
| 51 | 51 | printf("==============================================\n"); |
| 52 | 52 | printf("Solver %s\n", this->name().cstr()); |
| 53 | 53 | printf(" ==> %d nets\n", this->N()); //, (*(*groups[i].first())->m_core_terms.first())->name().cstr()); |
| 54 | 54 | printf(" has %s elements\n", this->is_dynamic() ? "dynamic" : "no dynamic"); |
| 55 | 55 | printf(" has %s elements\n", this->is_timestep() ? "timestep" : "no timestep"); |
| 56 | printf(" %6.3f average newton raphson loops\n", (double) this->m_stat_newton_raphson / (double) this->m_stat_vsolver_calls); | |
| 57 | 56 | printf(" %10d invocations (%6d Hz) %10d gs fails (%6.2f%%) %6.3f average\n", |
| 58 | this->m_stat_calculations, | |
| 59 | this->m_stat_calculations * 10 / (int) (this->netlist().time().as_double() * 10.0), | |
| 57 | this->m_calculations, | |
| 58 | this->m_calculations * 10 / (int) (this->netlist().time().as_double() * 10.0), | |
| 60 | 59 | this->m_gs_fail, |
| 61 | 100.0 * (double) this->m_gs_fail / (double) this->m_stat_calculations, | |
| 62 | (double) this->m_gs_total / (double) this->m_stat_calculations); | |
| 60 | 100.0 * (double) this->m_gs_fail / (double) this->m_calculations, | |
| 61 | (double) this->m_gs_total / (double) this->m_calculations); | |
| 63 | 62 | #endif |
| 64 | 63 | } |
| 65 | 64 | |
| r242703 | r242704 | |
| 293 | 292 | //if (fabs(gabs_t - fabs(gtot_t)) > 1e-20) |
| 294 | 293 | // printf("%d %e abs: %f tot: %f\n",k, gabs_t / gtot_t -1.0, gabs_t, gtot_t); |
| 295 | 294 | |
| 296 | ||
| 295 | gabs_t *= 0.5; // avoid rounding issues | |
| 297 | 296 | if (!USE_GABS || gabs_t <= gtot_t) |
| 298 | 297 | { |
| 299 | 298 | w[k] = ws / gtot_t; |
| r242703 | r242704 | |
| 337 | 336 | this->m_nets[k]->m_cur_Analog = new_V[k]; |
| 338 | 337 | |
| 339 | 338 | this->m_gs_total += resched_cnt; |
| 340 | ||
| 339 | this->m_calculations++; | |
| 341 | 340 | |
| 342 | 341 | if (resched) |
| 343 | 342 | { |
| r242703 | r242704 | |
|---|---|---|
| 31 | 31 | NET_C(R1.2, R2.2, G1.ON) |
| 32 | 32 | VCVS(G1) |
| 33 | 33 | PARAM(G1.G, 10000000) |
| 34 | ||
| 34 | //PARAM(G1.RI, 100) | |
| 35 | 35 | PARAM(G1.RO, RES_K(8)) |
| 36 | 36 | |
| 37 | 37 | NETLIST_END() |
| r242703 | r242704 | |
|---|---|---|
| 36 | 36 | #include "../nl_lists.h" |
| 37 | 37 | |
| 38 | 38 | #if HAS_OPENMP |
| 39 | #include | |
| 39 | #include <omp.h> | |
| 40 | 40 | #endif |
| 41 | 41 | |
| 42 | 42 | vector_ops_t *vector_ops_t::create_ops(const int size) |
| r242703 | r242704 | |
| 99 | 99 | // netlist_matrix_solver |
| 100 | 100 | // ---------------------------------------------------------------------------------------- |
| 101 | 101 | |
| 102 | ATTR_COLD netlist_matrix_solver_t::netlist_matrix_solver_t(const eSolverType type, const netlist_solver_parameters_t ¶ms) | |
| 103 | : m_stat_calculations(0), | |
| 104 | m_stat_newton_raphson(0), | |
| 105 | m_stat_vsolver_calls(0), | |
| 106 | m_params(params), | |
| 107 | m_cur_ts(0), | |
| 108 | m_type(type) | |
| 102 | ATTR_COLD netlist_matrix_solver_t::netlist_matrix_solver_t(const netlist_solver_parameters_t ¶ms) | |
| 103 | : m_calculations(0), m_params(params), m_cur_ts(0) | |
| 109 | 104 | { |
| 110 | 105 | } |
| 111 | 106 | |
| r242703 | r242704 | |
| 259 | 254 | template<class C > |
| 260 | 255 | void netlist_matrix_solver_t::solve_base(C *p) |
| 261 | 256 | { |
| 262 | m_stat_vsolver_calls++; | |
| 263 | 257 | if (is_dynamic()) |
| 264 | 258 | { |
| 265 | 259 | int this_resched; |
| r242703 | r242704 | |
| 272 | 266 | newton_loops++; |
| 273 | 267 | } while (this_resched > 1 && newton_loops < m_params.m_nr_loops); |
| 274 | 268 | |
| 275 | m_stat_newton_raphson += newton_loops; | |
| 276 | 269 | // reschedule .... |
| 277 | 270 | if (this_resched > 1 && !m_Q_sync.net().is_queued()) |
| 278 | 271 | { |
| r242703 | r242704 | |
| 292 | 285 | netlist_time delta = now - m_last_step; |
| 293 | 286 | |
| 294 | 287 | // We are already up to date. Avoid oscillations. |
| 295 | // FIXME: Make this a parameter! | |
| 296 | 288 | if (delta < netlist_time::from_nsec(1)) |
| 297 | 289 | return -1.0; |
| 298 | 290 |
| r242703 | r242704 | |
|---|---|---|
| 14 | 14 | |
| 15 | 15 | #define USE_PIVOT_SEARCH (0) |
| 16 | 16 | #define VECTALT 1 |
| 17 | #define USE_GABS | |
| 17 | #define USE_GABS 0 | |
| 18 | 18 | #define USE_MATRIX_GS 0 |
| 19 | 19 | // savings are eaten up by effort |
| 20 | 20 | #define USE_LINEAR_PREDICTION (0) |
| r242703 | r242704 | |
| 197 | 197 | typedef plinearlist_t<netlist_matrix_solver_t *> list_t; |
| 198 | 198 | typedef netlist_core_device_t::list_t dev_list_t; |
| 199 | 199 | |
| 200 | enum eSolverType | |
| 201 | { | |
| 202 | GAUSSIAN_ELIMINATION, | |
| 203 | GAUSS_SEIDEL | |
| 204 | }; | |
| 205 | ||
| 206 | ATTR_COLD netlist_matrix_solver_t(const eSolverType type, const netlist_solver_parameters_t ¶ms); | |
| 200 | ATTR_COLD netlist_matrix_solver_t(const netlist_solver_parameters_t ¶ms); | |
| 207 | 201 | ATTR_COLD virtual ~netlist_matrix_solver_t(); |
| 208 | 202 | |
| 209 | 203 | ATTR_COLD virtual void vsetup(netlist_analog_net_t::list_t &nets) = 0; |
| r242703 | r242704 | |
| 230 | 224 | ATTR_COLD int get_net_idx(netlist_net_t *net); |
| 231 | 225 | ATTR_COLD virtual void log_stats() {}; |
| 232 | 226 | |
| 233 | inline const eSolverType type() const { return m_type; } | |
| 234 | ||
| 235 | 227 | protected: |
| 236 | 228 | |
| 237 | 229 | ATTR_COLD void setup(netlist_analog_net_t::list_t &nets); |
| r242703 | r242704 | |
| 245 | 237 | plinearlist_t<netlist_analog_net_t *> m_nets; |
| 246 | 238 | plinearlist_t<netlist_analog_output_t *> m_inps; |
| 247 | 239 | |
| 248 | int m_stat_calculations; | |
| 249 | int m_stat_newton_raphson; | |
| 250 | int m_stat_vsolver_calls; | |
| 251 | ||
| 240 | int m_calculations; | |
| 252 | 241 | const netlist_solver_parameters_t &m_params; |
| 253 | 242 | |
| 254 | 243 | ATTR_HOT inline const double current_timestep() { return m_cur_ts; } |
| r242703 | r242704 | |
| 266 | 255 | |
| 267 | 256 | ATTR_HOT void update_inputs(); |
| 268 | 257 | |
| 269 | const eSolverType m_type; | |
| 270 | 258 | }; |
| 271 | 259 | |
| 272 | 260 |
| r242703 | r242704 | |
|---|---|---|
| 91 | 91 | ENTRY(VCCS, VCCS, "-") |
| 92 | 92 | ENTRY(CCCS, CCCS, "-") |
| 93 | 93 | ENTRY(dummy_input, DUMMY_INPUT, "-") |
| 94 | ENTRY(frontier, FRONTIER, "+I,Q") | |
| 95 | 94 | ENTRY(QBJT_EB, QBJT_EB, "model") |
| 96 | 95 | ENTRY(QBJT_switch, QBJT_SW, "model") |
| 97 | 96 | ENTRY(ttl_input, TTL_INPUT, "IN") |
| r242703 | r242704 | |
|---|---|---|
| 8 | 8 | NETLIB_START(4020) |
| 9 | 9 | { |
| 10 | 10 | register_sub(sub, "sub"); |
| 11 | register_sub(m_supply, "supply"); | |
| 12 | 11 | |
| 13 | 12 | register_input("RESET", m_RESET); |
| 14 | 13 | register_subalias("IP", sub.m_IP); |
| r242703 | r242704 | |
| 43 | 42 | register_output("Q5", m_Q[4]); |
| 44 | 43 | register_output("Q6", m_Q[5]); |
| 45 | 44 | register_output("Q7", m_Q[6]); |
| 46 | ||
| 45 | register_output("Q8", m_Q[8]); | |
| 47 | 46 | register_output("Q9", m_Q[8]); |
| 48 | 47 | register_output("Q10", m_Q[9]); |
| 49 | 48 | register_output("Q11", m_Q[10]); |
| r242703 | r242704 | |
|---|---|---|
| 21 | 21 | |
| 22 | 22 | protected: |
| 23 | 23 | ATTR_HOT void update() {}; |
| 24 | ATTR_HOT void start() | |
| 25 | { | |
| 26 | register_input("VDD,", m_vdd); | |
| 27 | register_input("VSS,", m_vss); | |
| 28 | }; | |
| 24 | ATTR_HOT void start() {}; | |
| 29 | 25 | ATTR_HOT void reset() {}; |
| 30 | 26 | |
| 31 | 27 | public: |
| r242703 | r242704 | |
|---|---|---|
| 39 | 39 | #define DUMMY_INPUT(_name) \ |
| 40 | 40 | NET_REGISTER_DEV(dummy_input, _name) |
| 41 | 41 | |
| 42 | #define FRONTIER(_name, _IN, _OUT) \ | |
| 43 | NET_REGISTER_DEV(frontier, _name) \ | |
| 44 | NET_C(_IN, _name.I) \ | |
| 45 | NET_C(_OUT, _name.Q) \ | |
| 46 | ||
| 47 | 42 | // ----------------------------------------------------------------------------- |
| 48 | 43 | // mainclock |
| 49 | 44 | // ----------------------------------------------------------------------------- |
| r242703 | r242704 | |
| 152 | 147 | |
| 153 | 148 | }; |
| 154 | 149 | |
| 155 | // ----------------------------------------------------------------------------- | |
| 156 | // nld_frontier | |
| 157 | // ----------------------------------------------------------------------------- | |
| 158 | 150 | |
| 159 | class NETLIB_NAME(frontier) : public netlist_device_t | |
| 160 | { | |
| 161 | public: | |
| 162 | ATTR_COLD NETLIB_NAME(frontier)() | |
| 163 | : netlist_device_t(DUMMY) { } | |
| 164 | ||
| 165 | ATTR_COLD virtual ~NETLIB_NAME(frontier)() {} | |
| 166 | ||
| 167 | protected: | |
| 168 | ||
| 169 | ATTR_COLD void start() | |
| 170 | { | |
| 171 | register_input("I", m_I); | |
| 172 | register_output("Q", m_Q); | |
| 173 | } | |
| 174 | ||
| 175 | ATTR_COLD void reset() | |
| 176 | { | |
| 177 | } | |
| 178 | ||
| 179 | ATTR_HOT ATTR_ALIGN void update() | |
| 180 | { | |
| 181 | OUTANALOG(m_Q, INPANALOG(m_I)); | |
| 182 | } | |
| 183 | ||
| 184 | private: | |
| 185 | netlist_analog_input_t m_I; | |
| 186 | netlist_analog_output_t m_Q; | |
| 187 | ||
| 188 | }; | |
| 189 | ||
| 190 | ||
| 191 | 151 | // ----------------------------------------------------------------------------- |
| 192 | 152 | // netdev_a_to_d |
| 193 | 153 | // ----------------------------------------------------------------------------- |
| r242703 | r242704 | |
|---|---|---|
| 337 | 337 | CAPACITOR, // Capacitor |
| 338 | 338 | DIODE, // Diode |
| 339 | 339 | DUMMY, // DUMMY device without function |
| 340 | FRONTIER, // Net frontier | |
| 341 | 340 | BJT_EB, // BJT(Ebers-Moll) |
| 342 | 341 | BJT_SWITCH, // BJT(Switch) |
| 343 | 342 | VCVS, // Voltage controlled voltage source |
| r242703 | r242704 | |
|---|---|---|
| 201 | 201 | return item_layer(layer); |
| 202 | 202 | } |
| 203 | 203 | |
| 204 | //************************************************************************** | |
| 205 | // render_texinfo | |
| 206 | //************************************************************************** | |
| 207 | 204 | |
| 208 | render_texinfo &render_texinfo::operator=(const render_texinfo &src) | |
| 209 | { | |
| 210 | free_palette(); | |
| 211 | base = src.base; | |
| 212 | rowpixels = src.rowpixels; | |
| 213 | width = src.width; | |
| 214 | height = src.height; | |
| 215 | seqid = src.seqid; | |
| 216 | osddata = src.osddata; | |
| 217 | m_palette = src.m_palette; | |
| 218 | if (m_palette != NULL) | |
| 219 | { | |
| 220 | m_palette->ref_count++; | |
| 221 | } | |
| 222 | return *this; | |
| 223 | } | |
| 224 | 205 | |
| 225 | render_texinfo::render_texinfo(const render_texinfo &src) | |
| 226 | { | |
| 227 | base = src.base; | |
| 228 | rowpixels = src.rowpixels; | |
| 229 | width = src.width; | |
| 230 | height = src.height; | |
| 231 | seqid = src.seqid; | |
| 232 | osddata = src.osddata; | |
| 233 | m_palette = src.m_palette; | |
| 234 | if (m_palette != NULL) | |
| 235 | { | |
| 236 | m_palette->ref_count++; | |
| 237 | } | |
| 238 | } | |
| 239 | ||
| 240 | void render_texinfo::set_palette(const dynamic_array<rgb_t> *source) | |
| 241 | { | |
| 242 | free_palette(); | |
| 243 | if (source != NULL) | |
| 244 | { | |
| 245 | m_palette = global_alloc(render_palette_copy); | |
| 246 | m_palette->palette.copyfrom(*source); | |
| 247 | m_palette->ref_count = 1; | |
| 248 | } | |
| 249 | else | |
| 250 | { | |
| 251 | m_palette = NULL; | |
| 252 | } | |
| 253 | } | |
| 254 | ||
| 255 | void render_texinfo::free_palette() | |
| 256 | { | |
| 257 | if (m_palette != NULL) | |
| 258 | { | |
| 259 | m_palette->ref_count--; | |
| 260 | if (m_palette->ref_count == 0) | |
| 261 | { | |
| 262 | global_free(m_palette); | |
| 263 | } | |
| 264 | } | |
| 265 | m_palette = NULL; | |
| 266 | } | |
| 267 | ||
| 268 | ||
| 269 | 206 | //************************************************************************** |
| 270 | 207 | // RENDER PRIMITIVE |
| 271 | 208 | //************************************************************************** |
| r242703 | r242704 | |
| 277 | 214 | |
| 278 | 215 | void render_primitive::reset() |
| 279 | 216 | { |
| 280 | // public state | |
| 281 | type = INVALID; | |
| 282 | bounds.x0 = 0; | |
| 283 | bounds.y0 = 0; | |
| 284 | bounds.x1 = 0; | |
| 285 | bounds.y1 = 0; | |
| 286 | color.a = 0; | |
| 287 | color.r = 0; | |
| 288 | color.g = 0; | |
| 289 | color.b = 0; | |
| 290 | flags = 0; | |
| 291 | width = 0.0f; | |
| 292 | texture.set_palette(NULL); | |
| 293 | texture = render_texinfo(); | |
| 294 | texcoords.bl.u = 0.0f; | |
| 295 | texcoords.bl.v = 0.0f; | |
| 296 | texcoords.br.u = 0.0f; | |
| 297 | texcoords.br.v = 0.0f; | |
| 298 | texcoords.tl.u = 0.0f; | |
| 299 | texcoords.tl.v = 0.0f; | |
| 300 | texcoords.tr.u = 0.0f; | |
| 301 | texcoords.tr.v = 0.0f; | |
| 302 | ||
| 303 | // do not clear m_next! | |
| 304 | // memset(&type, 0, FPTR(&texcoords + 1) - FPTR(&type)); | |
| 217 | memset(&type, 0, FPTR(&texcoords + 1) - FPTR(&type)); | |
| 305 | 218 | } |
| 306 | 219 | |
| 307 | 220 | |
| r242703 | r242704 | |
| 534 | 447 | // get_scaled - get a scaled bitmap (if we can) |
| 535 | 448 | //------------------------------------------------- |
| 536 | 449 | |
| 537 | ||
| 450 | bool render_texture::get_scaled(UINT32 dwidth, UINT32 dheight, render_texinfo &texinfo, render_primitive_list &primlist) | |
| 538 | 451 | { |
| 539 | 452 | // source width/height come from the source bounds |
| 540 | 453 | int swidth = m_sbounds.width(); |
| r242703 | r242704 | |
| 547 | 460 | texinfo.osddata = m_osddata; |
| 548 | 461 | |
| 549 | 462 | // are we scaler-free? if so, just return the source bitmap |
| 463 | const rgb_t *palbase = (m_format == TEXFORMAT_PALETTE16 || m_format == TEXFORMAT_PALETTEA16) ? m_bitmap->palette()->entry_list_adjusted() : NULL; | |
| 550 | 464 | if (m_scaler == NULL || (m_bitmap != NULL && swidth == dwidth && sheight == dheight)) |
| 551 | 465 | { |
| 552 | 466 | // add a reference and set up the source bitmap |
| r242703 | r242704 | |
| 555 | 469 | texinfo.rowpixels = m_bitmap->rowpixels(); |
| 556 | 470 | texinfo.width = swidth; |
| 557 | 471 | texinfo.height = sheight; |
| 558 | // will be set later | |
| 559 | texinfo.set_palette(NULL); | |
| 472 | texinfo.palette = palbase; | |
| 560 | 473 | texinfo.seqid = ++m_curseq; |
| 474 | return true; | |
| 561 | 475 | } |
| 562 | else | |
| 563 | { | |
| 564 | // make sure we can recover the original argb32 bitmap | |
| 565 | bitmap_argb32 dummy; | |
| 566 | bitmap_argb32 &srcbitmap = (m_bitmap != NULL) ? downcast<bitmap_argb32 &>(*m_bitmap) : dummy; | |
| 567 | 476 | |
| 568 | // is it a size we already have? | |
| 569 | scaled_texture *scaled = NULL; | |
| 570 | int scalenum; | |
| 571 | for (scalenum = 0; scalenum < ARRAY_LENGTH(m_scaled); scalenum++) | |
| 572 | { | |
| 573 | scaled = &m_scaled[scalenum]; | |
| 477 | // make sure we can recover the original argb32 bitmap | |
| 478 | bitmap_argb32 dummy; | |
| 479 | bitmap_argb32 &srcbitmap = (m_bitmap != NULL) ? downcast<bitmap_argb32 &>(*m_bitmap) : dummy; | |
| 574 | 480 | |
| 575 | // we need a non-NULL bitmap with matching dest size | |
| 576 | if (scaled->bitmap != NULL && dwidth == scaled->bitmap->width() && dheight == scaled->bitmap->height()) | |
| 577 | break; | |
| 578 | } | |
| 481 | // is it a size we already have? | |
| 482 | scaled_texture *scaled = NULL; | |
| 483 | int scalenum; | |
| 484 | for (scalenum = 0; scalenum < ARRAY_LENGTH(m_scaled); scalenum++) | |
| 485 | { | |
| 486 | scaled = &m_scaled[scalenum]; | |
| 579 | 487 | |
| 580 | // did we get one? | |
| 581 | if (scalenum == ARRAY_LENGTH(m_scaled)) | |
| 582 | { | |
| 583 | int lowest = -1; | |
| 488 | // we need a non-NULL bitmap with matching dest size | |
| 489 | if (scaled->bitmap != NULL && dwidth == scaled->bitmap->width() && dheight == scaled->bitmap->height()) | |
| 490 | break; | |
| 491 | } | |
| 584 | 492 | |
| 585 | // didn't find one -- take the entry with the lowest seqnum | |
| 586 | for (scalenum = 0; scalenum < ARRAY_LENGTH(m_scaled); scalenum++) | |
| 587 | if ((lowest == -1 || m_scaled[scalenum].seqid < m_scaled[lowest].seqid) && !primlist.has_reference(m_scaled[scalenum].bitmap)) | |
| 588 | lowest = scalenum; | |
| 589 | assert_always(lowest != -1, "Too many live texture instances!"); | |
| 493 | // did we get one? | |
| 494 | if (scalenum == ARRAY_LENGTH(m_scaled)) | |
| 495 | { | |
| 496 | int lowest = -1; | |
| 590 | 497 | |
| 591 | // throw out any existing entries | |
| 592 | scaled = &m_scaled[lowest]; | |
| 593 | if (scaled->bitmap != NULL) | |
| 594 | { | |
| 595 | m_manager->invalidate_all(scaled->bitmap); | |
| 596 | global_free(scaled->bitmap); | |
| 597 | } | |
| 498 | // didn't find one -- take the entry with the lowest seqnum | |
| 499 | for (scalenum = 0; scalenum < ARRAY_LENGTH(m_scaled); scalenum++) | |
| 500 | if ((lowest == -1 || m_scaled[scalenum].seqid < m_scaled[lowest].seqid) && !primlist.has_reference(m_scaled[scalenum].bitmap)) | |
| 501 | lowest = scalenum; | |
| 502 | assert_always(lowest != -1, "Too many live texture instances!"); | |
| 598 | 503 | |
| 599 | // allocate a new bitmap | |
| 600 | scaled->bitmap = global_alloc(bitmap_argb32(dwidth, dheight)); | |
| 601 | scaled->seqid = ++m_curseq; | |
| 504 | // throw out any existing entries | |
| 505 | scaled = &m_scaled[lowest]; | |
| 506 | if (scaled->bitmap != NULL) | |
| 507 | { | |
| 508 | m_manager->invalidate_all(scaled->bitmap); | |
| 509 | global_free(scaled->bitmap); | |
| 510 | } | |
| 602 | 511 | |
| 603 | // let the scaler do the work | |
| 604 | (*m_scaler)(*scaled->bitmap, srcbitmap, m_sbounds, m_param); | |
| 605 | } | |
| 512 | // allocate a new bitmap | |
| 513 | scaled->bitmap = global_alloc(bitmap_argb32(dwidth, dheight)); | |
| 514 | scaled->seqid = ++m_curseq; | |
| 606 | 515 | |
| 607 | // finally fill out the new info | |
| 608 | primlist.add_reference(scaled->bitmap); | |
| 609 | texinfo.base = &scaled->bitmap->pix32(0); | |
| 610 | texinfo.rowpixels = scaled->bitmap->rowpixels(); | |
| 611 | texinfo.width = dwidth; | |
| 612 | texinfo.height = dheight; | |
| 613 | // will be set later | |
| 614 | texinfo.set_palette(NULL); | |
| 615 | texinfo.seqid = scaled->seqid; | |
| 516 | // let the scaler do the work | |
| 517 | (*m_scaler)(*scaled->bitmap, srcbitmap, m_sbounds, m_param); | |
| 616 | 518 | } |
| 519 | ||
| 520 | // finally fill out the new info | |
| 521 | primlist.add_reference(scaled->bitmap); | |
| 522 | texinfo.base = &scaled->bitmap->pix32(0); | |
| 523 | texinfo.rowpixels = scaled->bitmap->rowpixels(); | |
| 524 | texinfo.width = dwidth; | |
| 525 | texinfo.height = dheight; | |
| 526 | texinfo.palette = palbase; | |
| 527 | texinfo.seqid = scaled->seqid; | |
| 528 | return true; | |
| 617 | 529 | } |
| 618 | 530 | |
| 619 | 531 | |
| r242703 | r242704 | |
| 622 | 534 | // palette for a texture |
| 623 | 535 | //------------------------------------------------- |
| 624 | 536 | |
| 625 | const | |
| 537 | const rgb_t *render_texture::get_adjusted_palette(render_container &container) | |
| 626 | 538 | { |
| 627 | 539 | // override the palette with our adjusted palette |
| 628 | 540 | switch (m_format) |
| r242703 | r242704 | |
| 634 | 546 | |
| 635 | 547 | // if no adjustment necessary, return the raw palette |
| 636 | 548 | if (!container.has_brightness_contrast_gamma_changes()) |
| 637 | return m_bitmap->palette()->entry_list_adjusted | |
| 549 | return m_bitmap->palette()->entry_list_adjusted(); | |
| 638 | 550 | |
| 639 | 551 | // otherwise, return our adjusted palette |
| 640 | 552 | return container.bcg_lookup_table(m_format, m_bitmap->palette()); |
| r242703 | r242704 | |
| 670 | 582 | m_manager(manager), |
| 671 | 583 | m_screen(screen), |
| 672 | 584 | m_overlaybitmap(NULL), |
| 673 | m_overlaytexture(NULL), | |
| 674 | m_bcglookup256(0x400) | |
| 585 | m_overlaytexture(NULL) | |
| 675 | 586 | { |
| 676 | 587 | // make sure it is empty |
| 677 | 588 | empty(); |
| r242703 | r242704 | |
| 811 | 722 | // given texture mode |
| 812 | 723 | //------------------------------------------------- |
| 813 | 724 | |
| 814 | const | |
| 725 | const rgb_t *render_container::bcg_lookup_table(int texformat, palette_t *palette) | |
| 815 | 726 | { |
| 816 | 727 | switch (texformat) |
| 817 | 728 | { |
| r242703 | r242704 | |
| 825 | 736 | recompute_lookups(); |
| 826 | 737 | } |
| 827 | 738 | assert (palette == &m_palclient->palette()); |
| 828 | return | |
| 739 | return m_bcglookup; | |
| 829 | 740 | |
| 830 | 741 | case TEXFORMAT_RGB32: |
| 831 | 742 | case TEXFORMAT_ARGB32: |
| 832 | 743 | case TEXFORMAT_YUY16: |
| 833 | return | |
| 744 | return m_bcglookup256; | |
| 834 | 745 | |
| 835 | 746 | default: |
| 836 | 747 | return NULL; |
| r242703 | r242704 | |
| 1815 | 1726 | int height = (finalorient & ORIENTATION_SWAP_XY) ? (prim->bounds.x1 - prim->bounds.x0) : (prim->bounds.y1 - prim->bounds.y0); |
| 1816 | 1727 | width = MIN(width, m_maxtexwidth); |
| 1817 | 1728 | height = MIN(height, m_maxtexheight); |
| 1729 | if (curitem->texture()->get_scaled(width, height, prim->texture, list)) | |
| 1730 | { | |
| 1731 | // set the palette | |
| 1732 | prim->texture.palette = curitem->texture()->get_adjusted_palette(container); | |
| 1818 | 1733 | |
| 1819 | curitem->texture()->get_scaled(width, height, prim->texture, list); | |
| 1820 | // set the palette | |
| 1821 | #if 1 | |
| 1822 | const dynamic_array<rgb_t> *adjusted_pal = curitem->texture()->get_adjusted_palette(container); | |
| 1823 | prim->texture.set_palette(adjusted_pal); | |
| 1824 | #else | |
| 1825 | prim->texture.palette = curitem->texture()->get_adjusted_palette(container); | |
| 1826 | #endif | |
| 1734 | // determine UV coordinates and apply clipping | |
| 1735 | prim->texcoords = oriented_texcoords[finalorient]; | |
| 1736 | clipped = render_clip_quad(&prim->bounds, &cliprect, &prim->texcoords); | |
| 1827 | 1737 | |
| 1828 | // determine UV coordinates and apply clipping | |
| 1829 | prim->texcoords = oriented_texcoords[finalorient]; | |
| 1830 | clipped = render_clip_quad(&prim->bounds, &cliprect, &prim->texcoords); | |
| 1831 | ||
| 1832 | // apply the final orientation from the quad flags and then build up the final flags | |
| 1833 | prim->flags = (curitem->flags() & ~(PRIMFLAG_TEXORIENT_MASK | PRIMFLAG_BLENDMODE_MASK | PRIMFLAG_TEXFORMAT_MASK)) | | |
| 1834 | PRIMFLAG_TEXORIENT(finalorient) | | |
| 1835 | PRIMFLAG_TEXFORMAT(curitem->texture()->format()); | |
| 1836 | if (blendmode != -1) | |
| 1837 | prim->flags |= PRIMFLAG_BLENDMODE(blendmode); | |
| 1838 | else | |
| 1839 | prim->flags |= PRIMFLAG_BLENDMODE(PRIMFLAG_GET_BLENDMODE(curitem->flags())); | |
| 1738 | // apply the final orientation from the quad flags and then build up the final flags | |
| 1739 | prim->flags = (curitem->flags() & ~(PRIMFLAG_TEXORIENT_MASK | PRIMFLAG_BLENDMODE_MASK | PRIMFLAG_TEXFORMAT_MASK)) | | |
| 1740 | PRIMFLAG_TEXORIENT(finalorient) | | |
| 1741 | PRIMFLAG_TEXFORMAT(curitem->texture()->format()); | |
| 1742 | if (blendmode != -1) | |
| 1743 | prim->flags |= PRIMFLAG_BLENDMODE(blendmode); | |
| 1744 | else | |
| 1745 | prim->flags |= PRIMFLAG_BLENDMODE(PRIMFLAG_GET_BLENDMODE(curitem->flags())); | |
| 1746 | } | |
| 1840 | 1747 | } |
| 1841 | 1748 | else |
| 1842 | 1749 | { |
| r242703 | r242704 | |
| 1871 | 1778 | width = render_round_nearest(prim->bounds.x1) - render_round_nearest(prim->bounds.x0); |
| 1872 | 1779 | height = render_round_nearest(prim->bounds.y1) - render_round_nearest(prim->bounds.y0); |
| 1873 | 1780 | |
| 1874 | container.overlay()->get_scaled( | |
| 1781 | bool got_scaled = container.overlay()->get_scaled( | |
| 1875 | 1782 | (container_xform.orientation & ORIENTATION_SWAP_XY) ? height : width, |
| 1876 | 1783 | (container_xform.orientation & ORIENTATION_SWAP_XY) ? width : height, prim->texture, list); |
| 1784 | if (got_scaled) | |
| 1785 | { | |
| 1786 | // determine UV coordinates | |
| 1787 | prim->texcoords = oriented_texcoords[container_xform.orientation]; | |
| 1877 | 1788 | |
| 1878 | // determine UV coordinates | |
| 1879 | prim->texcoords = oriented_texcoords[container_xform.orientation]; | |
| 1880 | ||
| 1881 | // set the flags and add it to the list | |
| 1882 | prim->flags = PRIMFLAG_TEXORIENT(container_xform.orientation) | | |
| 1883 | PRIMFLAG_BLENDMODE(BLENDMODE_RGB_MULTIPLY) | | |
| 1884 | PRIMFLAG_TEXFORMAT(container.overlay()->format()) | | |
| 1885 | PRIMFLAG_TEXSHADE(1); | |
| 1886 | ||
| 1887 | list.append_or_return(*prim, false); | |
| 1789 | // set the flags and add it to the list | |
| 1790 | prim->flags = PRIMFLAG_TEXORIENT(container_xform.orientation) | | |
| 1791 | PRIMFLAG_BLENDMODE(BLENDMODE_RGB_MULTIPLY) | | |
| 1792 | PRIMFLAG_TEXFORMAT(container.overlay()->format()) | | |
| 1793 | PRIMFLAG_TEXSHADE(1); | |
| 1794 | } | |
| 1795 | list.append_or_return(*prim, !got_scaled); | |
| 1888 | 1796 | } |
| 1889 | 1797 | } |
| 1890 | 1798 | |
| r242703 | r242704 | |
| 1922 | 1830 | height = MIN(height, m_maxtexheight); |
| 1923 | 1831 | |
| 1924 | 1832 | // get the scaled texture and append it |
| 1833 | bool clipped = true; | |
| 1834 | if (texture->get_scaled(width, height, prim->texture, list)) | |
| 1835 | { | |
| 1836 | // compute the clip rect | |
| 1837 | render_bounds cliprect; | |
| 1838 | cliprect.x0 = render_round_nearest(xform.xoffs); | |
| 1839 | cliprect.y0 = render_round_nearest(xform.yoffs); | |
| 1840 | cliprect.x1 = render_round_nearest(xform.xoffs + xform.xscale); | |
| 1841 | cliprect.y1 = render_round_nearest(xform.yoffs + xform.yscale); | |
| 1842 | sect_render_bounds(&cliprect, &m_bounds); | |
| 1925 | 1843 | |
| 1926 | texture->get_scaled(width, height, prim->texture, list); | |
| 1844 | // determine UV coordinates and apply clipping | |
| 1845 | prim->texcoords = oriented_texcoords[xform.orientation]; | |
| 1846 | clipped = render_clip_quad(&prim->bounds, &cliprect, &prim->texcoords); | |
| 1847 | } | |
| 1927 | 1848 | |
| 1928 | // compute the clip rect | |
| 1929 | render_bounds cliprect; | |
| 1930 | cliprect.x0 = render_round_nearest(xform.xoffs); | |
| 1931 | cliprect.y0 = render_round_nearest(xform.yoffs); | |
| 1932 | cliprect.x1 = render_round_nearest(xform.xoffs + xform.xscale); | |
| 1933 | cliprect.y1 = render_round_nearest(xform.yoffs + xform.yscale); | |
| 1934 | sect_render_bounds(&cliprect, &m_bounds); | |
| 1935 | ||
| 1936 | // determine UV coordinates and apply clipping | |
| 1937 | prim->texcoords = oriented_texcoords[xform.orientation]; | |
| 1938 | bool clipped = render_clip_quad(&prim->bounds, &cliprect, &prim->texcoords); | |
| 1939 | ||
| 1940 | 1849 | // add to the list or free if we're clipped out |
| 1941 | 1850 | list.append_or_return(*prim, clipped); |
| 1942 | 1851 | } |
| r242703 | r242704 | |
|---|---|---|
| 167 | 167 | // texture scaling callback |
| 168 | 168 | typedef void (*texture_scaler_func)(bitmap_argb32 &dest, bitmap_argb32 &source, const rectangle &sbounds, void *param); |
| 169 | 169 | |
| 170 | ||
| 170 | 171 | // render_bounds - floating point bounding rectangle |
| 171 | 172 | struct render_bounds |
| 172 | 173 | { |
| r242703 | r242704 | |
| 209 | 210 | |
| 210 | 211 | |
| 211 | 212 | // render_texinfo - texture information |
| 212 | ||
| 213 | ||
| 214 | struct render_palette_copy | |
| 213 | struct render_texinfo | |
| 215 | 214 | { |
| 216 | int ref_count; | |
| 217 | dynamic_array<rgb_t> palette; | |
| 218 | }; | |
| 219 | ||
| 220 | class render_texinfo | |
| 221 | { | |
| 222 | public: | |
| 223 | render_texinfo() | |
| 224 | : base(NULL), rowpixels(0), width(0), height(0), | |
| 225 | seqid(0), osddata(0), m_palette(NULL) | |
| 226 | {} | |
| 227 | ||
| 228 | render_texinfo(const render_texinfo &src); | |
| 229 | ||
| 230 | ~render_texinfo() | |
| 231 | { | |
| 232 | free_palette(); | |
| 233 | } | |
| 234 | ||
| 235 | render_texinfo &operator=(const render_texinfo &src); | |
| 236 | ||
| 237 | 215 | void * base; // base of the data |
| 238 | 216 | UINT32 rowpixels; // pixels per row |
| 239 | 217 | UINT32 width; // width of the image |
| 240 | 218 | UINT32 height; // height of the image |
| 219 | const rgb_t * palette; // palette for PALETTE16 textures, LUTs for RGB15/RGB32 | |
| 241 | 220 | UINT32 seqid; // sequence ID |
| 242 | 221 | UINT64 osddata; // aux data to pass to osd |
| 243 | ||
| 244 | const rgb_t * palette() const { return ((m_palette == NULL) ? NULL : &m_palette->palette[0]); } | |
| 245 | ||
| 246 | void set_palette(const dynamic_array<rgb_t> *source); | |
| 247 | ||
| 248 | private: | |
| 249 | void free_palette(); | |
| 250 | ||
| 251 | render_palette_copy *m_palette; // palette for PALETTE16 textures, LUTs for RGB15/RGB32 | |
| 252 | 222 | }; |
| 253 | 223 | |
| 254 | 224 | |
| r242703 | r242704 | |
| 463 | 433 | |
| 464 | 434 | private: |
| 465 | 435 | // internal helpers |
| 466 | void get_scaled(UINT32 dwidth, UINT32 dheight, render_texinfo &texinfo, render_primitive_list &primlist); | |
| 467 | const dynamic_array<rgb_t> *get_adjusted_palette(render_container &container); | |
| 436 | bool get_scaled(UINT32 dwidth, UINT32 dheight, render_texinfo &texinfo, render_primitive_list &primlist); | |
| 437 | const rgb_t *get_adjusted_palette(render_container &container); | |
| 468 | 438 | |
| 469 | 439 | static const int MAX_TEXTURE_SCALES = 8; |
| 470 | 440 | |
| r242703 | r242704 | |
| 554 | 524 | bool has_brightness_contrast_gamma_changes() const { return (m_user.m_brightness != 1.0f || m_user.m_contrast != 1.0f || m_user.m_gamma != 1.0f); } |
| 555 | 525 | UINT8 apply_brightness_contrast_gamma(UINT8 value); |
| 556 | 526 | float apply_brightness_contrast_gamma_fp(float value); |
| 557 | const | |
| 527 | const rgb_t *bcg_lookup_table(int texformat, palette_t *palette = NULL); | |
| 558 | 528 | |
| 559 | 529 | private: |
| 560 | 530 | // an item describes a high level primitive that is added to a container |
| r242703 | r242704 | |
| 606 | 576 | render_texture * m_overlaytexture; // overlay texture |
| 607 | 577 | auto_pointer<palette_client> m_palclient; // client to the screen palette |
| 608 | 578 | dynamic_array<rgb_t> m_bcglookup; // full palette lookup with bcg adjustments |
| 609 | | |
| 579 | rgb_t m_bcglookup256[0x400]; // lookup table for brightness/contrast/gamma | |
| 610 | 580 | }; |
| 611 | 581 | |
| 612 | 582 |
| r242703 | r242704 | |
|---|---|---|
| 130 | 130 | |
| 131 | 131 | static inline UINT32 get_texel_palette16(const render_texinfo &texture, INT32 curu, INT32 curv) |
| 132 | 132 | { |
| 133 | const rgb_t *palbase = texture.palette(); | |
| 134 | 133 | if (_BilinearFilter) |
| 135 | 134 | { |
| 136 | 135 | INT32 u0 = curu >> 16; |
| r242703 | r242704 | |
| 145 | 144 | const UINT16 *texbase = reinterpret_cast<const UINT16 *>(texture.base); |
| 146 | 145 | texbase += v0 * texture.rowpixels + u0; |
| 147 | 146 | |
| 148 | UINT32 pix00 = palbase[texbase[0]]; | |
| 149 | UINT32 pix01 = palbase[texbase[u1]]; | |
| 150 | UINT32 pix10 = palbase[texbase[v1]]; | |
| 151 | UINT32 pix11 = palbase[texbase[u1 + v1]]; | |
| 147 | UINT32 pix00 = texture.palette[texbase[0]]; | |
| 148 | UINT32 pix01 = texture.palette[texbase[u1]]; | |
| 149 | UINT32 pix10 = texture.palette[texbase[v1]]; | |
| 150 | UINT32 pix11 = texture.palette[texbase[u1 + v1]]; | |
| 152 | 151 | return rgb_bilinear_filter(pix00, pix01, pix10, pix11, curu >> 8, curv >> 8); |
| 153 | 152 | } |
| 154 | 153 | else |
| 155 | 154 | { |
| 156 | 155 | const UINT16 *texbase = reinterpret_cast<const UINT16 *>(texture.base) + (curv >> 16) * texture.rowpixels + (curu >> 16); |
| 157 | return pal | |
| 156 | return texture.palette[texbase[0]]; | |
| 158 | 157 | } |
| 159 | 158 | } |
| 160 | 159 | |
| r242703 | r242704 | |
| 166 | 165 | |
| 167 | 166 | static inline UINT32 get_texel_palette16a(const render_texinfo &texture, INT32 curu, INT32 curv) |
| 168 | 167 | { |
| 169 | const rgb_t *palbase = texture.palette(); | |
| 170 | 168 | if (_BilinearFilter) |
| 171 | 169 | { |
| 172 | 170 | INT32 u0 = curu >> 16; |
| r242703 | r242704 | |
| 181 | 179 | const UINT16 *texbase = reinterpret_cast<const UINT16 *>(texture.base); |
| 182 | 180 | texbase += v0 * texture.rowpixels + u0; |
| 183 | 181 | |
| 184 | UINT32 pix00 = palbase[texbase[0]]; | |
| 185 | UINT32 pix01 = palbase[texbase[u1]]; | |
| 186 | UINT32 pix10 = palbase[texbase[v1]]; | |
| 187 | UINT32 pix11 = palbase[texbase[u1 + v1]]; | |
| 182 | UINT32 pix00 = texture.palette[texbase[0]]; | |
| 183 | UINT32 pix01 = texture.palette[texbase[u1]]; | |
| 184 | UINT32 pix10 = texture.palette[texbase[v1]]; | |
| 185 | UINT32 pix11 = texture.palette[texbase[u1 + v1]]; | |
| 188 | 186 | return rgba_bilinear_filter(pix00, pix01, pix10, pix11, curu >> 8, curv >> 8); |
| 189 | 187 | } |
| 190 | 188 | else |
| 191 | 189 | { |
| 192 | 190 | const UINT16 *texbase = reinterpret_cast<const UINT16 *>(texture.base) + (curv >> 16) * texture.rowpixels + (curu >> 16); |
| 193 | return pal | |
| 191 | return texture.palette[texbase[0]]; | |
| 194 | 192 | } |
| 195 | 193 | } |
| 196 | 194 | |
| r242703 | r242704 | |
| 622 | 620 | INT32 endx = setup.endx; |
| 623 | 621 | |
| 624 | 622 | // ensure all parameters are valid |
| 625 | assert(prim.texture.palette | |
| 623 | assert(prim.texture.palette != NULL); | |
| 626 | 624 | |
| 627 | 625 | // fast case: no coloring, no alpha |
| 628 | 626 | if (prim.color.r >= 1.0f && prim.color.g >= 1.0f && prim.color.b >= 1.0f && is_opaque(prim.color.a)) |
| r242703 | r242704 | |
| 730 | 728 | INT32 endx = setup.endx; |
| 731 | 729 | |
| 732 | 730 | // ensure all parameters are valid |
| 733 | assert(prim.texture.palette | |
| 731 | assert(prim.texture.palette != NULL); | |
| 734 | 732 | |
| 735 | 733 | // fast case: no coloring, no alpha |
| 736 | 734 | if (prim.color.r >= 1.0f && prim.color.g >= 1.0f && prim.color.b >= 1.0f && is_opaque(prim.color.a)) |
| r242703 | r242704 | |
| 823 | 821 | INT32 endx = setup.endx; |
| 824 | 822 | |
| 825 | 823 | // ensure all parameters are valid |
| 826 | assert(prim.texture.palette | |
| 824 | assert(prim.texture.palette != NULL); | |
| 827 | 825 | |
| 828 | 826 | // fast case: no coloring, no alpha |
| 829 | 827 | if (prim.color.r >= 1.0f && prim.color.g >= 1.0f && prim.color.b >= 1.0f && is_opaque(prim.color.a)) |
| r242703 | r242704 | |
| 914 | 912 | |
| 915 | 913 | static void draw_quad_yuy16_none(const render_primitive &prim, _PixelType *dstdata, UINT32 pitch, quad_setup_data &setup) |
| 916 | 914 | { |
| 917 | const rgb_t *palbase = prim.texture.palette | |
| 915 | const rgb_t *palbase = prim.texture.palette; | |
| 918 | 916 | INT32 dudx = setup.dudx; |
| 919 | 917 | INT32 dvdx = setup.dvdx; |
| 920 | 918 | INT32 endx = setup.endx; |
| r242703 | r242704 | |
| 1084 | 1082 | |
| 1085 | 1083 | static void draw_quad_rgb32(const render_primitive &prim, _PixelType *dstdata, UINT32 pitch, quad_setup_data &setup) |
| 1086 | 1084 | { |
| 1087 | const rgb_t *palbase = prim.texture.palette | |
| 1085 | const rgb_t *palbase = prim.texture.palette; | |
| 1088 | 1086 | INT32 dudx = setup.dudx; |
| 1089 | 1087 | INT32 dvdx = setup.dvdx; |
| 1090 | 1088 | INT32 endx = setup.endx; |
| r242703 | r242704 | |
| 1254 | 1252 | |
| 1255 | 1253 | static void draw_quad_rgb32_add(const render_primitive &prim, _PixelType *dstdata, UINT32 pitch, quad_setup_data &setup) |
| 1256 | 1254 | { |
| 1257 | const rgb_t *palbase = prim.texture.palette | |
| 1255 | const rgb_t *palbase = prim.texture.palette; | |
| 1258 | 1256 | INT32 dudx = setup.dudx; |
| 1259 | 1257 | INT32 dvdx = setup.dvdx; |
| 1260 | 1258 | INT32 endx = setup.endx; |
| r242703 | r242704 | |
| 1392 | 1390 | |
| 1393 | 1391 | static void draw_quad_argb32_alpha(const render_primitive &prim, _PixelType *dstdata, UINT32 pitch, quad_setup_data &setup) |
| 1394 | 1392 | { |
| 1395 | const rgb_t *palbase = prim.texture.palette | |
| 1393 | const rgb_t *palbase = prim.texture.palette; | |
| 1396 | 1394 | INT32 dudx = setup.dudx; |
| 1397 | 1395 | INT32 dvdx = setup.dvdx; |
| 1398 | 1396 | INT32 endx = setup.endx; |
| r242703 | r242704 | |
| 1538 | 1536 | |
| 1539 | 1537 | static void draw_quad_argb32_multiply(const render_primitive &prim, _PixelType *dstdata, UINT32 pitch, quad_setup_data &setup) |
| 1540 | 1538 | { |
| 1541 | const rgb_t *palbase = prim.texture.palette | |
| 1539 | const rgb_t *palbase = prim.texture.palette; | |
| 1542 | 1540 | INT32 dudx = setup.dudx; |
| 1543 | 1541 | INT32 dvdx = setup.dvdx; |
| 1544 | 1542 | INT32 endx = setup.endx; |
| r242703 | r242704 | |
| 1657 | 1655 | |
| 1658 | 1656 | static void draw_quad_argb32_add(const render_primitive &prim, _PixelType *dstdata, UINT32 pitch, quad_setup_data &setup) |
| 1659 | 1657 | { |
| 1660 | const rgb_t *palbase = prim.texture.palette | |
| 1658 | const rgb_t *palbase = prim.texture.palette; | |
| 1661 | 1659 | INT32 dudx = setup.dudx; |
| 1662 | 1660 | INT32 dvdx = setup.dvdx; |
| 1663 | 1661 | INT32 endx = setup.endx; |
| r242703 | r242704 | |
|---|---|---|
| 94 | 94 | |
| 95 | 95 | enum |
| 96 | 96 | { |
| 97 | LINE_CAP_NONE = 0, | |
| 98 | LINE_CAP_START = 1, | |
| 99 | LINE_CAP_END = 2 | |
| 97 | LINE_CAP_NONE = 0, | |
| 98 | LINE_CAP_START = 1, | |
| 99 | LINE_CAP_END = 2 | |
| 100 | 100 | }; |
| 101 | 101 | |
| 102 | 102 | |
| r242703 | r242704 | |
| 120 | 120 | |
| 121 | 121 | inline int gcd(int a, int b) |
| 122 | 122 | { |
| 123 | while (b != 0) | |
| 124 | { | |
| 125 | int t = b; | |
| 126 | b = a % b; | |
| 127 | a = t; | |
| 128 | } | |
| 129 | return a; | |
| 123 | while (b != 0) | |
| 124 | { | |
| 125 | int t = b; | |
| 126 | b = a % b; | |
| 127 | a = t; | |
| 128 | } | |
| 129 | return a; | |
| 130 | 130 | } |
| 131 | 131 | |
| 132 | 132 | |
| r242703 | r242704 | |
| 137 | 137 | |
| 138 | 138 | inline void reduce_fraction(int &num, int &den) |
| 139 | 139 | { |
| 140 | // search the greatest common divisor | |
| 141 | int div = gcd(num, den); | |
| 140 | // search the greatest common divisor | |
| 141 | int div = gcd(num, den); | |
| 142 | 142 | |
| 143 | // reduce the fraction if a common divisor has been found | |
| 144 | if (div > 1) | |
| 145 | { | |
| 146 | num /= div; | |
| 147 | den /= div; | |
| 148 | } | |
| 143 | // reduce the fraction if a common divisor has been found | |
| 144 | if (div > 1) | |
| 145 | { | |
| 146 | num /= div; | |
| 147 | den /= div; | |
| 148 | } | |
| 149 | 149 | } |
| 150 | 150 | |
| 151 | 151 | |
| r242703 | r242704 | |
| 161 | 161 | |
| 162 | 162 | static int get_variable_value(running_machine &machine, const char *string, char **outputptr) |
| 163 | 163 | { |
| 164 | ||
| 164 | char temp[100]; | |
| 165 | 165 | |
| 166 | // screen 0 parameters | |
| 167 | screen_device_iterator iter(machine.root_device()); | |
| 168 | int scrnum = 0; | |
| 169 | for (const screen_device *device = iter.first(); device != NULL; device = iter.next(), scrnum++) | |
| 170 | { | |
| 171 | // native X aspect factor | |
| 172 | sprintf(temp, "~scr%dnativexaspect~", scrnum); | |
| 173 | if (!strncmp(string, temp, strlen(temp))) | |
| 174 | { | |
| 175 | int num = device->visible_area().width(); | |
| 176 | int den = device->visible_area().height(); | |
| 177 | reduce_fraction(num, den); | |
| 178 | *outputptr += sprintf(*outputptr, "%d", num); | |
| 179 | return strlen(temp); | |
| 180 | } | |
| 166 | // screen 0 parameters | |
| 167 | screen_device_iterator iter(machine.root_device()); | |
| 168 | int scrnum = 0; | |
| 169 | for (const screen_device *device = iter.first(); device != NULL; device = iter.next(), scrnum++) | |
| 170 | { | |
| 171 | // native X aspect factor | |
| 172 | sprintf(temp, "~scr%dnativexaspect~", scrnum); | |
| 173 | if (!strncmp(string, temp, strlen(temp))) | |
| 174 | { | |
| 175 | int num = device->visible_area().width(); | |
| 176 | int den = device->visible_area().height(); | |
| 177 | reduce_fraction(num, den); | |
| 178 | *outputptr += sprintf(*outputptr, "%d", num); | |
| 179 | return strlen(temp); | |
| 180 | } | |
| 181 | 181 | |
| 182 | // native Y aspect factor | |
| 183 | sprintf(temp, "~scr%dnativeyaspect~", scrnum); | |
| 184 | if (!strncmp(string, temp, strlen(temp))) | |
| 185 | { | |
| 186 | int num = device->visible_area().width(); | |
| 187 | int den = device->visible_area().height(); | |
| 188 | reduce_fraction(num, den); | |
| 189 | *outputptr += sprintf(*outputptr, "%d", den); | |
| 190 | return strlen(temp); | |
| 191 | } | |
| 182 | // native Y aspect factor | |
| 183 | sprintf(temp, "~scr%dnativeyaspect~", scrnum); | |
| 184 | if (!strncmp(string, temp, strlen(temp))) | |
| 185 | { | |
| 186 | int num = device->visible_area().width(); | |
| 187 | int den = device->visible_area().height(); | |
| 188 | reduce_fraction(num, den); | |
| 189 | *outputptr += sprintf(*outputptr, "%d", den); | |
| 190 | return strlen(temp); | |
| 191 | } | |
| 192 | 192 | |
| 193 | // native width | |
| 194 | sprintf(temp, "~scr%dwidth~", scrnum); | |
| 195 | if (!strncmp(string, temp, strlen(temp))) | |
| 196 | { | |
| 197 | *outputptr += sprintf(*outputptr, "%d", device->visible_area().width()); | |
| 198 | return strlen(temp); | |
| 199 | } | |
| 193 | // native width | |
| 194 | sprintf(temp, "~scr%dwidth~", scrnum); | |
| 195 | if (!strncmp(string, temp, strlen(temp))) | |
| 196 | { | |
| 197 | *outputptr += sprintf(*outputptr, "%d", device->visible_area().width()); | |
| 198 | return strlen(temp); | |
| 199 | } | |
| 200 | 200 | |
| 201 | // native height | |
| 202 | sprintf(temp, "~scr%dheight~", scrnum); | |
| 203 | if (!strncmp(string, temp, strlen(temp))) | |
| 204 | { | |
| 205 | *outputptr += sprintf(*outputptr, "%d", device->visible_area().height()); | |
| 206 | return strlen(temp); | |
| 207 | } | |
| 208 | } | |
| 201 | // native height | |
| 202 | sprintf(temp, "~scr%dheight~", scrnum); | |
| 203 | if (!strncmp(string, temp, strlen(temp))) | |
| 204 | { | |
| 205 | *outputptr += sprintf(*outputptr, "%d", device->visible_area().height()); | |
| 206 | return strlen(temp); | |
| 207 | } | |
| 208 | } | |
| 209 | 209 | |
| 210 | // default: copy the first character and continue | |
| 211 | **outputptr = *string; | |
| 212 | *outputptr += 1; | |
| 213 | return 1; | |
| 210 | // default: copy the first character and continue | |
| 211 | **outputptr = *string; | |
| 212 | *outputptr += 1; | |
| 213 | return 1; | |
| 214 | 214 | } |
| 215 | 215 | |
| 216 | 216 | |
| r242703 | r242704 | |
| 222 | 222 | |
| 223 | 223 | static const char *xml_get_attribute_string_with_subst(running_machine &machine, xml_data_node &node, const char *attribute, const char *defvalue) |
| 224 | 224 | { |
| 225 | const char *str = xml_get_attribute_string(&node, attribute, NULL); | |
| 226 | static char buffer[1000]; | |
| 225 | const char *str = xml_get_attribute_string(&node, attribute, NULL); | |
| 226 | static char buffer[1000]; | |
| 227 | 227 | |
| 228 | // if nothing, just return the default | |
| 229 | if (str == NULL) | |
| 230 | return defvalue; | |
| 228 | // if nothing, just return the default | |
| 229 | if (str == NULL) | |
| 230 | return defvalue; | |
| 231 | 231 | |
| 232 | // if no tildes, don't worry | |
| 233 | if (strchr(str, '~') == NULL) | |
| 234 | return str; | |
| 232 | // if no tildes, don't worry | |
| 233 | if (strchr(str, '~') == NULL) | |
| 234 | return str; | |
| 235 | 235 | |
| 236 | // make a copy of the string, doing substitutions along the way | |
| 237 | const char *s; | |
| 238 | char *d; | |
| 239 | for (s = str, d = buffer; *s != 0; ) | |
| 240 | { | |
| 241 | // if not a variable, just copy | |
| 242 | if (*s != '~') | |
| 243 | *d++ = *s++; | |
| 236 | // make a copy of the string, doing substitutions along the way | |
| 237 | const char *s; | |
| 238 | char *d; | |
| 239 | for (s = str, d = buffer; *s != 0; ) | |
| 240 | { | |
| 241 | // if not a variable, just copy | |
| 242 | if (*s != '~') | |
| 243 | *d++ = *s++; | |
| 244 | 244 | |
| 245 | // extract the variable | |
| 246 | else | |
| 247 | s += get_variable_value(machine, s, &d); | |
| 248 | } | |
| 249 | *d = 0; | |
| 250 | return buffer; | |
| 245 | // extract the variable | |
| 246 | else | |
| 247 | s += get_variable_value(machine, s, &d); | |
| 248 | } | |
| 249 | *d = 0; | |
| 250 | return buffer; | |
| 251 | 251 | } |
| 252 | 252 | |
| 253 | 253 | |
| r242703 | r242704 | |
| 259 | 259 | |
| 260 | 260 | static int xml_get_attribute_int_with_subst(running_machine &machine, xml_data_node &node, const char *attribute, int defvalue) |
| 261 | 261 | { |
| 262 | const char *string = xml_get_attribute_string_with_subst(machine, node, attribute, NULL); | |
| 263 | int value; | |
| 262 | const char *string = xml_get_attribute_string_with_subst(machine, node, attribute, NULL); | |
| 263 | int value; | |
| 264 | 264 | |
| 265 | if (string == NULL) | |
| 266 | return defvalue; | |
| 267 | if (string[0] == '$') | |
| 268 | return (sscanf(&string[1], "%X", &value) == 1) ? value : defvalue; | |
| 269 | if (string[0] == '0' && string[1] == 'x') | |
| 270 | return (sscanf(&string[2], "%X", &value) == 1) ? value : defvalue; | |
| 271 | if (string[0] == '#') | |
| 272 | return (sscanf(&string[1], "%d", &value) == 1) ? value : defvalue; | |
| 273 | return (sscanf(&string[0], "%d", &value) == 1) ? value : defvalue; | |
| 265 | if (string == NULL) | |
| 266 | return defvalue; | |
| 267 | if (string[0] == '$') | |
| 268 | return (sscanf(&string[1], "%X", &value) == 1) ? value : defvalue; | |
| 269 | if (string[0] == '0' && string[1] == 'x') | |
| 270 | return (sscanf(&string[2], "%X", &value) == 1) ? value : defvalue; | |
| 271 | if (string[0] == '#') | |
| 272 | return (sscanf(&string[1], "%d", &value) == 1) ? value : defvalue; | |
| 273 | return (sscanf(&string[0], "%d", &value) == 1) ? value : defvalue; | |
| 274 | 274 | } |
| 275 | 275 | |
| 276 | 276 | |
| r242703 | r242704 | |
| 282 | 282 | |
| 283 | 283 | static float xml_get_attribute_float_with_subst(running_machine &machine, xml_data_node &node, const char *attribute, float defvalue) |
| 284 | 284 | { |
| 285 | const char *string = xml_get_attribute_string_with_subst(machine, node, attribute, NULL); | |
| 286 | float value; | |
| 285 | const char *string = xml_get_attribute_string_with_subst(machine, node, attribute, NULL); | |
| 286 | float value; | |
| 287 | 287 | |
| 288 | if (string == NULL || sscanf(string, "%f", &value) != 1) | |
| 289 | return defvalue; | |
| 290 | return value; | |
| 288 | if (string == NULL || sscanf(string, "%f", &value) != 1) | |
| 289 | return defvalue; | |
| 290 | return value; | |
| 291 | 291 | } |
| 292 | 292 | |
| 293 | 293 | |
| r242703 | r242704 | |
| 297 | 297 | |
| 298 | 298 | void parse_bounds(running_machine &machine, xml_data_node *boundsnode, render_bounds &bounds) |
| 299 | 299 | { |
| 300 | // skip if nothing | |
| 301 | if (boundsnode == NULL) | |
| 302 | { | |
| 303 | bounds.x0 = bounds.y0 = 0.0f; | |
| 304 | bounds.x1 = bounds.y1 = 1.0f; | |
| 305 | return; | |
| 306 | } | |
| 300 | // skip if nothing | |
| 301 | if (boundsnode == NULL) | |
| 302 | { | |
| 303 | bounds.x0 = bounds.y0 = 0.0f; | |
| 304 | bounds.x1 = bounds.y1 = 1.0f; | |
| 305 | return; | |
| 306 | } | |
| 307 | 307 | |
| 308 | // parse out the data | |
| 309 | if (xml_get_attribute(boundsnode, "left") != NULL) | |
| 310 | { | |
| 311 | // left/right/top/bottom format | |
| 312 | bounds.x0 = xml_get_attribute_float_with_subst(machine, *boundsnode, "left", 0.0f); | |
| 313 | bounds.x1 = xml_get_attribute_float_with_subst(machine, *boundsnode, "right", 1.0f); | |
| 314 | bounds.y0 = xml_get_attribute_float_with_subst(machine, *boundsnode, "top", 0.0f); | |
| 315 | bounds.y1 = xml_get_attribute_float_with_subst(machine, *boundsnode, "bottom", 1.0f); | |
| 316 | } | |
| 317 | else if (xml_get_attribute(boundsnode, "x") != NULL) | |
| 318 | { | |
| 319 | // x/y/width/height format | |
| 320 | bounds.x0 = xml_get_attribute_float_with_subst(machine, *boundsnode, "x", 0.0f); | |
| 321 | bounds.x1 = bounds.x0 + xml_get_attribute_float_with_subst(machine, *boundsnode, "width", 1.0f); | |
| 322 | bounds.y0 = xml_get_attribute_float_with_subst(machine, *boundsnode, "y", 0.0f); | |
| 323 | bounds.y1 = bounds.y0 + xml_get_attribute_float_with_subst(machine, *boundsnode, "height", 1.0f); | |
| 324 | } | |
| 325 | else | |
| 326 | throw emu_fatalerror("Illegal bounds value in XML"); | |
| 308 | // parse out the data | |
| 309 | if (xml_get_attribute(boundsnode, "left") != NULL) | |
| 310 | { | |
| 311 | // left/right/top/bottom format | |
| 312 | bounds.x0 = xml_get_attribute_float_with_subst(machine, *boundsnode, "left", 0.0f); | |
| 313 | bounds.x1 = xml_get_attribute_float_with_subst(machine, *boundsnode, "right", 1.0f); | |
| 314 | bounds.y0 = xml_get_attribute_float_with_subst(machine, *boundsnode, "top", 0.0f); | |
| 315 | bounds.y1 = xml_get_attribute_float_with_subst(machine, *boundsnode, "bottom", 1.0f); | |
| 316 | } | |
| 317 | else if (xml_get_attribute(boundsnode, "x") != NULL) | |
| 318 | { | |
| 319 | // x/y/width/height format | |
| 320 | bounds.x0 = xml_get_attribute_float_with_subst(machine, *boundsnode, "x", 0.0f); | |
| 321 | bounds.x1 = bounds.x0 + xml_get_attribute_float_with_subst(machine, *boundsnode, "width", 1.0f); | |
| 322 | bounds.y0 = xml_get_attribute_float_with_subst(machine, *boundsnode, "y", 0.0f); | |
| 323 | bounds.y1 = bounds.y0 + xml_get_attribute_float_with_subst(machine, *boundsnode, "height", 1.0f); | |
| 324 | } | |
| 325 | else | |
| 326 | throw emu_fatalerror("Illegal bounds value in XML"); | |
| 327 | 327 | |
| 328 | // check for errors | |
| 329 | if (bounds.x0 > bounds.x1 || bounds.y0 > bounds.y1) | |
| 330 | throw emu_fatalerror("Illegal bounds value in XML: (%f-%f)-(%f-%f)", bounds.x0, bounds.x1, bounds.y0, bounds.y1); | |
| 328 | // check for errors | |
| 329 | if (bounds.x0 > bounds.x1 || bounds.y0 > bounds.y1) | |
| 330 | throw emu_fatalerror("Illegal bounds value in XML: (%f-%f)-(%f-%f)", bounds.x0, bounds.x1, bounds.y0, bounds.y1); | |
| 331 | 331 | } |
| 332 | 332 | |
| 333 | 333 | |
| r242703 | r242704 | |
| 337 | 337 | |
| 338 | 338 | void parse_color(running_machine &machine, xml_data_node *colornode, render_color &color) |
| 339 | 339 | { |
| 340 | // skip if nothing | |
| 341 | if (colornode == NULL) | |
| 342 | { | |
| 343 | color.r = color.g = color.b = color.a = 1.0f; | |
| 344 | return; | |
| 345 | } | |
| 340 | // skip if nothing | |
| 341 | if (colornode == NULL) | |
| 342 | { | |
| 343 | color.r = color.g = color.b = color.a = 1.0f; | |
| 344 | return; | |
| 345 | } | |
| 346 | 346 | |
| 347 | // parse out the data | |
| 348 | color.r = xml_get_attribute_float_with_subst(machine, *colornode, "red", 1.0); | |
| 349 | color.g = xml_get_attribute_float_with_subst(machine, *colornode, "green", 1.0); | |
| 350 | color.b = xml_get_attribute_float_with_subst(machine, *colornode, "blue", 1.0); | |
| 351 | color.a = xml_get_attribute_float_with_subst(machine, *colornode, "alpha", 1.0); | |
| 347 | // parse out the data | |
| 348 | color.r = xml_get_attribute_float_with_subst(machine, *colornode, "red", 1.0); | |
| 349 | color.g = xml_get_attribute_float_with_subst(machine, *colornode, "green", 1.0); | |
| 350 | color.b = xml_get_attribute_float_with_subst(machine, *colornode, "blue", 1.0); | |
| 351 | color.a = xml_get_attribute_float_with_subst(machine, *colornode, "alpha", 1.0); | |
| 352 | 352 | |
| 353 | // check for errors | |
| 354 | if (color.r < 0.0 || color.r > 1.0 || color.g < 0.0 || color.g > 1.0 || | |
| 355 | color.b < 0.0 || color.b > 1.0 || color.a < 0.0 || color.a > 1.0) | |
| 356 | throw emu_fatalerror("Illegal ARGB color value in XML: %f,%f,%f,%f", color.r, color.g, color.b, color.a); | |
| 353 | // check for errors | |
| 354 | if (color.r < 0.0 || color.r > 1.0 || color.g < 0.0 || color.g > 1.0 || | |
| 355 | color.b < 0.0 || color.b > 1.0 || color.a < 0.0 || color.a > 1.0) | |
| 356 | throw emu_fatalerror("Illegal ARGB color value in XML: %f,%f,%f,%f", color.r, color.g, color.b, color.a); | |
| 357 | 357 | } |
| 358 | 358 | |
| 359 | 359 | |
| r242703 | r242704 | |
| 364 | 364 | |
| 365 | 365 | static void parse_orientation(running_machine &machine, xml_data_node *orientnode, int &orientation) |
| 366 | 366 | { |
| 367 | // skip if nothing | |
| 368 | if (orientnode == NULL) | |
| 369 | { | |
| 370 | orientation = ROT0; | |
| 371 | return; | |
| 372 | } | |
| 367 | // skip if nothing | |
| 368 | if (orientnode == NULL) | |
| 369 | { | |
| 370 | orientation = ROT0; | |
| 371 | return; | |
| 372 | } | |
| 373 | 373 | |
| 374 | // parse out the data | |
| 375 | int rotate = xml_get_attribute_int_with_subst(machine, *orientnode, "rotate", 0); | |
| 376 | switch (rotate) | |
| 377 | { | |
| 378 | case 0: orientation = ROT0; break; | |
| 379 | case 90: orientation = ROT90; break; | |
| 380 | case 180: orientation = ROT180; break; | |
| 381 | case 270: orientation = ROT270; break; | |
| 382 | default: throw emu_fatalerror("Invalid rotation in XML orientation node: %d", rotate); | |
| 383 | } | |
| 384 | if (strcmp("yes", xml_get_attribute_string_with_subst(machine, *orientnode, "swapxy", "no")) == 0) | |
| 385 | orientation ^= ORIENTATION_SWAP_XY; | |
| 386 | if (strcmp("yes", xml_get_attribute_string_with_subst(machine, *orientnode, "flipx", "no")) == 0) | |
| 387 | orientation ^= ORIENTATION_FLIP_X; | |
| 388 | if (strcmp("yes", xml_get_attribute_string_with_subst(machine, *orientnode, "flipy", "no")) == 0) | |
| 389 | orientation ^= ORIENTATION_FLIP_Y; | |
| 374 | // parse out the data | |
| 375 | int rotate = xml_get_attribute_int_with_subst(machine, *orientnode, "rotate", 0); | |
| 376 | switch (rotate) | |
| 377 | { | |
| 378 | case 0: orientation = ROT0; break; | |
| 379 | case 90: orientation = ROT90; break; | |
| 380 | case 180: orientation = ROT180; break; | |
| 381 | case 270: orientation = ROT270; break; | |
| 382 | default: throw emu_fatalerror("Invalid rotation in XML orientation node: %d", rotate); | |
| 383 | } | |
| 384 | if (strcmp("yes", xml_get_attribute_string_with_subst(machine, *orientnode, "swapxy", "no")) == 0) | |
| 385 | orientation ^= ORIENTATION_SWAP_XY; | |
| 386 | if (strcmp("yes", xml_get_attribute_string_with_subst(machine, *orientnode, "flipx", "no")) == 0) | |
| 387 | orientation ^= ORIENTATION_FLIP_X; | |
| 388 | if (strcmp("yes", xml_get_attribute_string_with_subst(machine, *orientnode, "flipy", "no")) == 0) | |
| 389 | orientation ^= ORIENTATION_FLIP_Y; | |
| 390 | 390 | } |
| 391 | 391 | |
| 392 | 392 | |
| r242703 | r242704 | |
| 400 | 400 | //------------------------------------------------- |
| 401 | 401 | |
| 402 | 402 | layout_element::layout_element(running_machine &machine, xml_data_node &elemnode, const char *dirname) |
| 403 | : m_next(NULL), | |
| 404 | m_machine(machine), | |
| 405 | m_defstate(0), | |
| 406 | m_maxstate(0) | |
| 403 | : m_next(NULL), | |
| 404 | m_machine(machine), | |
| 405 | m_defstate(0), | |
| 406 | m_maxstate(0) | |
| 407 | 407 | { |
| 408 | // extract the name | |
| 409 | const char *name = xml_get_attribute_string_with_subst(machine, elemnode, "name", NULL); | |
| 410 | if (name == NULL) | |
| 411 | throw emu_fatalerror("All layout elements must have a name!\n"); | |
| 412 | m_name = name; | |
| 408 | // extract the name | |
| 409 | const char *name = xml_get_attribute_string_with_subst(machine, elemnode, "name", NULL); | |
| 410 | if (name == NULL) | |
| 411 | throw emu_fatalerror("All layout elements must have a name!\n"); | |
| 412 | m_name = name; | |
| 413 | 413 | |
| 414 | // get the default state | |
| 415 | m_defstate = xml_get_attribute_int_with_subst(machine, elemnode, "defstate", -1); | |
| 414 | // get the default state | |
| 415 | m_defstate = xml_get_attribute_int_with_subst(machine, elemnode, "defstate", -1); | |
| 416 | 416 | |
| 417 | // parse components in order | |
| 418 | bool first = true; | |
| 419 | render_bounds bounds = { 0 }; | |
| 420 | for (xml_data_node *compnode = elemnode.child; compnode != NULL; compnode = compnode->next) | |
| 421 | { | |
| 422 | // allocate a new component | |
| 423 | component &newcomp = m_complist.append(*global_alloc(component(machine, *compnode, dirname))); | |
| 417 | // parse components in order | |
| 418 | bool first = true; | |
| 419 | render_bounds bounds = { 0 }; | |
| 420 | for (xml_data_node *compnode = elemnode.child; compnode != NULL; compnode = compnode->next) | |
| 421 | { | |
| 422 | // allocate a new component | |
| 423 | component &newcomp = m_complist.append(*global_alloc(component(machine, *compnode, dirname))); | |
| 424 | 424 | |
| 425 | // accumulate bounds | |
| 426 | if (first) | |
| 427 | bounds = newcomp.m_bounds; | |
| 428 | else | |
| 429 | union_render_bounds(&bounds, &newcomp.m_bounds); | |
| 430 | first = false; | |
| 425 | // accumulate bounds | |
| 426 | if (first) | |
| 427 | bounds = newcomp.m_bounds; | |
| 428 | else | |
| 429 | union_render_bounds(&bounds, &newcomp.m_bounds); | |
| 430 | first = false; | |
| 431 | 431 | |
| 432 | // determine the maximum state | |
| 433 | if (newcomp.m_state > m_maxstate) | |
| 434 | m_maxstate = newcomp.m_state; | |
| 435 | if (newcomp.m_type == component::CTYPE_LED7SEG || newcomp.m_type == component::CTYPE_LED8SEG_GTS1) | |
| 436 | m_maxstate = 255; | |
| 437 | if (newcomp.m_type == component::CTYPE_LED14SEG) | |
| 438 | m_maxstate = 16383; | |
| 439 | if (newcomp.m_type == component::CTYPE_LED14SEGSC || newcomp.m_type == component::CTYPE_LED16SEG) | |
| 440 | m_maxstate = 65535; | |
| 441 | if (newcomp.m_type == component::CTYPE_LED16SEGSC) | |
| 442 | m_maxstate = 262143; | |
| 443 | if (newcomp.m_type == component::CTYPE_DOTMATRIX) | |
| 444 | m_maxstate = 255; | |
| 445 | if (newcomp.m_type == component::CTYPE_DOTMATRIX5DOT) | |
| 446 | m_maxstate = 31; | |
| 447 | if (newcomp.m_type == component::CTYPE_DOTMATRIXDOT) | |
| 448 | m_maxstate = 1; | |
| 449 | if (newcomp.m_type == component::CTYPE_SIMPLECOUNTER) | |
| 450 | m_maxstate = xml_get_attribute_int_with_subst(machine, *compnode, "maxstate", 999); | |
| 451 | if (newcomp.m_type == component::CTYPE_REEL) | |
| 452 | m_maxstate = 65536; | |
| 453 | } | |
| 432 | // determine the maximum state | |
| 433 | if (newcomp.m_state > m_maxstate) | |
| 434 | m_maxstate = newcomp.m_state; | |
| 435 | if (newcomp.m_type == component::CTYPE_LED7SEG || newcomp.m_type == component::CTYPE_LED8SEG_GTS1) | |
| 436 | m_maxstate = 255; | |
| 437 | if (newcomp.m_type == component::CTYPE_LED14SEG) | |
| 438 | m_maxstate = 16383; | |
| 439 | if (newcomp.m_type == component::CTYPE_LED14SEGSC || newcomp.m_type == component::CTYPE_LED16SEG) | |
| 440 | m_maxstate = 65535; | |
| 441 | if (newcomp.m_type == component::CTYPE_LED16SEGSC) | |
| 442 | m_maxstate = 262143; | |
| 443 | if (newcomp.m_type == component::CTYPE_DOTMATRIX) | |
| 444 | m_maxstate = 255; | |
| 445 | if (newcomp.m_type == component::CTYPE_DOTMATRIX5DOT) | |
| 446 | m_maxstate = 31; | |
| 447 | if (newcomp.m_type == component::CTYPE_DOTMATRIXDOT) | |
| 448 | m_maxstate = 1; | |
| 449 | if (newcomp.m_type == component::CTYPE_SIMPLECOUNTER) | |
| 450 | m_maxstate = xml_get_attribute_int_with_subst(machine, *compnode, "maxstate", 999); | |
| 451 | if (newcomp.m_type == component::CTYPE_REEL) | |
| 452 | m_maxstate = 65536; | |
| 453 | } | |
| 454 | 454 | |
| 455 | if (m_complist.first() != NULL) | |
| 456 | { | |
| 457 | // determine the scale/offset for normalization | |
| 458 | float xoffs = bounds.x0; | |
| 459 | float yoffs = bounds.y0; | |
| 460 | float xscale = 1.0f / (bounds.x1 - bounds.x0); | |
| 461 | float yscale = 1.0f / (bounds.y1 - bounds.y0); | |
| 455 | if (m_complist.first() != NULL) | |
| 456 | { | |
| 457 | // determine the scale/offset for normalization | |
| 458 | float xoffs = bounds.x0; | |
| 459 | float yoffs = bounds.y0; | |
| 460 | float xscale = 1.0f / (bounds.x1 - bounds.x0); | |
| 461 | float yscale = 1.0f / (bounds.y1 - bounds.y0); | |
| 462 | 462 | |
| 463 | // normalize all the component bounds | |
| 464 | for (component *curcomp = m_complist.first(); curcomp != NULL; curcomp = curcomp->next()) | |
| 465 | { | |
| 466 | curcomp->m_bounds.x0 = (curcomp->m_bounds.x0 - xoffs) * xscale; | |
| 467 | curcomp->m_bounds.x1 = (curcomp->m_bounds.x1 - xoffs) * xscale; | |
| 468 | curcomp->m_bounds.y0 = (curcomp->m_bounds.y0 - yoffs) * yscale; | |
| 469 | curcomp->m_bounds.y1 = (curcomp->m_bounds.y1 - yoffs) * yscale; | |
| 470 | } | |
| 471 | } | |
| 463 | // normalize all the component bounds | |
| 464 | for (component *curcomp = m_complist.first(); curcomp != NULL; curcomp = curcomp->next()) | |
| 465 | { | |
| 466 | curcomp->m_bounds.x0 = (curcomp->m_bounds.x0 - xoffs) * xscale; | |
| 467 | curcomp->m_bounds.x1 = (curcomp->m_bounds.x1 - xoffs) * xscale; | |
| 468 | curcomp->m_bounds.y0 = (curcomp->m_bounds.y0 - yoffs) * yscale; | |
| 469 | curcomp->m_bounds.y1 = (curcomp->m_bounds.y1 - yoffs) * yscale; | |
| 470 | } | |
| 471 | } | |
| 472 | 472 | |
| 473 | // allocate an array of element textures for the states | |
| 474 | m_elemtex.resize(m_maxstate + 1); | |
| 473 | // allocate an array of element textures for the states | |
| 474 | m_elemtex.resize(m_maxstate + 1); | |
| 475 | 475 | } |
| 476 | 476 | |
| 477 | 477 | |
| r242703 | r242704 | |
| 492 | 492 | |
| 493 | 493 | render_texture *layout_element::state_texture(int state) |
| 494 | 494 | { |
| 495 | assert(state <= m_maxstate); | |
| 496 | if (m_elemtex[state].m_texture == NULL) | |
| 497 | { | |
| 498 | m_elemtex[state].m_element = this; | |
| 499 | m_elemtex[state].m_state = state; | |
| 500 | m_elemtex[state].m_texture = machine().render().texture_alloc(element_scale, &m_elemtex[state]); | |
| 501 | } | |
| 502 | return m_elemtex[state].m_texture; | |
| 495 | assert(state <= m_maxstate); | |
| 496 | if (m_elemtex[state].m_texture == NULL) | |
| 497 | { | |
| 498 | m_elemtex[state].m_element = this; | |
| 499 | m_elemtex[state].m_state = state; | |
| 500 | m_elemtex[state].m_texture = machine().render().texture_alloc(element_scale, &m_elemtex[state]); | |
| 501 | } | |
| 502 | return m_elemtex[state].m_texture; | |
| 503 | 503 | } |
| 504 | 504 | |
| 505 | 505 | |
| r242703 | r242704 | |
| 511 | 511 | |
| 512 | 512 | void layout_element::element_scale(bitmap_argb32 &dest, bitmap_argb32 &source, const rectangle &sbounds, void *param) |
| 513 | 513 | { |
| 514 | ||
| 514 | texture *elemtex = (texture *)param; | |
| 515 | 515 | |
| 516 | // iterate over components that are part of the current state | |
| 517 | for (component *curcomp = elemtex->m_element->m_complist.first(); curcomp != NULL; curcomp = curcomp->next()) | |
| 518 | if (curcomp->m_state == -1 || curcomp->m_state == elemtex->m_state) | |
| 519 | { | |
| 520 | // get the local scaled bounds | |
| 521 | rectangle bounds; | |
| 522 | bounds.min_x = render_round_nearest(curcomp->bounds().x0 * dest.width()); | |
| 523 | bounds.min_y = render_round_nearest(curcomp->bounds().y0 * dest.height()); | |
| 524 | bounds.max_x = render_round_nearest(curcomp->bounds().x1 * dest.width()); | |
| 525 | bounds.max_y = render_round_nearest(curcomp->bounds().y1 * dest.height()); | |
| 526 | bounds &= dest.cliprect(); | |
| 516 | // iterate over components that are part of the current state | |
| 517 | for (component *curcomp = elemtex->m_element->m_complist.first(); curcomp != NULL; curcomp = curcomp->next()) | |
| 518 | if (curcomp->m_state == -1 || curcomp->m_state == elemtex->m_state) | |
| 519 | { | |
| 520 | // get the local scaled bounds | |
| 521 | rectangle bounds; | |
| 522 | bounds.min_x = render_round_nearest(curcomp->bounds().x0 * dest.width()); | |
| 523 | bounds.min_y = render_round_nearest(curcomp->bounds().y0 * dest.height()); | |
| 524 | bounds.max_x = render_round_nearest(curcomp->bounds().x1 * dest.width()); | |
| 525 | bounds.max_y = render_round_nearest(curcomp->bounds().y1 * dest.height()); | |
| 526 | bounds &= dest.cliprect(); | |
| 527 | 527 | |
| 528 | // based on the component type, add to the texture | |
| 529 | curcomp->draw(elemtex->m_element->machine(), dest, bounds, elemtex->m_state); | |
| 530 | } | |
| 528 | // based on the component type, add to the texture | |
| 529 | curcomp->draw(elemtex->m_element->machine(), dest, bounds, elemtex->m_state); | |
| 530 | } | |
| 531 | 531 | } |
| 532 | 532 | |
| 533 | 533 | |
| r242703 | r242704 | |
| 540 | 540 | //------------------------------------------------- |
| 541 | 541 | |
| 542 | 542 | layout_element::texture::texture() |
| 543 | : m_element(NULL), | |
| 544 | m_texture(NULL), | |
| 545 | m_state(0) | |
| 543 | : m_element(NULL), | |
| 544 | m_texture(NULL), | |
| 545 | m_state(0) | |
| 546 | 546 | { |
| 547 | 547 | } |
| 548 | 548 | |
| r242703 | r242704 | |
| 553 | 553 | |
| 554 | 554 | layout_element::texture::~texture() |
| 555 | 555 | { |
| 556 | if (m_element != NULL) | |
| 557 | m_element->machine().render().texture_free(m_texture); | |
| 556 | if (m_element != NULL) | |
| 557 | m_element->machine().render().texture_free(m_texture); | |
| 558 | 558 | } |
| 559 | 559 | |
| 560 | 560 | |
| r242703 | r242704 | |
| 568 | 568 | //------------------------------------------------- |
| 569 | 569 | |
| 570 | 570 | layout_element::component::component(running_machine &machine, xml_data_node &compnode, const char *dirname) |
| 571 | : m_next(NULL), | |
| 572 | m_type(CTYPE_INVALID), | |
| 573 | m_state(0) | |
| 571 | : m_next(NULL), | |
| 572 | m_type(CTYPE_INVALID), | |
| 573 | m_state(0) | |
| 574 | 574 | { |
| 575 | for (int i=0;i<MAX_BITMAPS;i++) | |
| 576 | m_hasalpha[i] = false; | |
| 575 | for (int i=0;i<MAX_BITMAPS;i++) | |
| 576 | m_hasalpha[i] = false; | |
| 577 | 577 | |
| 578 | // fetch common data | |
| 579 | m_state = xml_get_attribute_int_with_subst(machine, compnode, "state", -1); | |
| 580 | parse_bounds(machine, xml_get_sibling(compnode.child, "bounds"), m_bounds); | |
| 581 | parse_color(machine, xml_get_sibling(compnode.child, "color"), m_color); | |
| 578 | // fetch common data | |
| 579 | m_state = xml_get_attribute_int_with_subst(machine, compnode, "state", -1); | |
| 580 | parse_bounds(machine, xml_get_sibling(compnode.child, "bounds"), m_bounds); | |
| 581 | parse_color(machine, xml_get_sibling(compnode.child, "color"), m_color); | |
| 582 | 582 | |
| 583 | // image nodes | |
| 584 | if (strcmp(compnode.name, "image") == 0) | |
| 585 | { | |
| 586 | m_type = CTYPE_IMAGE; | |
| 587 | if (dirname != NULL) | |
| 588 | m_dirname = dirname; | |
| 589 | m_imagefile[0] = xml_get_attribute_string_with_subst(machine, compnode, "file", ""); | |
| 590 | m_alphafile[0] = xml_get_attribute_string_with_subst(machine, compnode, "alphafile", ""); | |
| 591 | m_file[0].reset(global_alloc(emu_file(machine.options().art_path(), OPEN_FLAG_READ))); | |
| 592 | } | |
| 583 | // image nodes | |
| 584 | if (strcmp(compnode.name, "image") == 0) | |
| 585 | { | |
| 586 | m_type = CTYPE_IMAGE; | |
| 587 | if (dirname != NULL) | |
| 588 | m_dirname = dirname; | |
| 589 | m_imagefile[0] = xml_get_attribute_string_with_subst(machine, compnode, "file", ""); | |
| 590 | m_alphafile[0] = xml_get_attribute_string_with_subst(machine, compnode, "alphafile", ""); | |
| 591 | m_file[0].reset(global_alloc(emu_file(machine.options().art_path(), OPEN_FLAG_READ))); | |
| 592 | } | |
| 593 | 593 | |
| 594 | // text nodes | |
| 595 | else if (strcmp(compnode.name, "text") == 0) | |
| 596 | { | |
| 597 | m_type = CTYPE_TEXT; | |
| 598 | m_string = xml_get_attribute_string_with_subst(machine, compnode, "string", ""); | |
| 599 | m_textalign = xml_get_attribute_int_with_subst(machine, compnode, "align", 0); | |
| 600 | } | |
| 594 | // text nodes | |
| 595 | else if (strcmp(compnode.name, "text") == 0) | |
| 596 | { | |
| 597 | m_type = CTYPE_TEXT; | |
| 598 | m_string = xml_get_attribute_string_with_subst(machine, compnode, "string", ""); | |
| 599 | m_textalign = xml_get_attribute_int_with_subst(machine, compnode, "align", 0); | |
| 600 | } | |
| 601 | 601 | |
| 602 | // dotmatrix nodes | |
| 603 | else if (strcmp(compnode.name, "dotmatrix") == 0) | |
| 604 | { | |
| 605 | m_type = CTYPE_DOTMATRIX; | |
| 606 | } | |
| 607 | else if (strcmp(compnode.name, "dotmatrix5dot") == 0) | |
| 608 | { | |
| 609 | m_type = CTYPE_DOTMATRIX5DOT; | |
| 610 | } | |
| 611 | else if (strcmp(compnode.name, "dotmatrixdot") == 0) | |
| 612 | { | |
| 613 | m_type = CTYPE_DOTMATRIXDOT; | |
| 614 | } | |
| 602 | // dotmatrix nodes | |
| 603 | else if (strcmp(compnode.name, "dotmatrix") == 0) | |
| 604 | { | |
| 605 | m_type = CTYPE_DOTMATRIX; | |
| 606 | } | |
| 607 | else if (strcmp(compnode.name, "dotmatrix5dot") == 0) | |
| 608 | { | |
| 609 | m_type = CTYPE_DOTMATRIX5DOT; | |
| 610 | } | |
| 611 | else if (strcmp(compnode.name, "dotmatrixdot") == 0) | |
| 612 | { | |
| 613 | m_type = CTYPE_DOTMATRIXDOT; | |
| 614 | } | |
| 615 | 615 | |
| 616 | // simplecounter nodes | |
| 617 | else if (strcmp(compnode.name, "simplecounter") == 0) | |
| 618 | { | |
| 619 | m_type = CTYPE_SIMPLECOUNTER; | |
| 620 | m_digits = xml_get_attribute_int_with_subst(machine, compnode, "digits", 2); | |
| 621 | m_textalign = xml_get_attribute_int_with_subst(machine, compnode, "align", 0); | |
| 622 | } | |
| 616 | // simplecounter nodes | |
| 617 | else if (strcmp(compnode.name, "simplecounter") == 0) | |
| 618 | { | |
| 619 | m_type = CTYPE_SIMPLECOUNTER; | |
| 620 | m_digits = xml_get_attribute_int_with_subst(machine, compnode, "digits", 2); | |
| 621 | m_textalign = xml_get_attribute_int_with_subst(machine, compnode, "align", 0); | |
| 622 | } | |
| 623 | 623 | |
| 624 | // fruit machine reels | |
| 625 | else if (strcmp(compnode.name, "reel") == 0) | |
| 626 | { | |
| 627 | m_type = CTYPE_REEL; | |
| 624 | // fruit machine reels | |
| 625 | else if (strcmp(compnode.name, "reel") == 0) | |
| 626 | { | |
| 627 | m_type = CTYPE_REEL; | |
| 628 | 628 | |
| 629 | ||
| 629 | astring symbollist = xml_get_attribute_string_with_subst(machine, compnode, "symbollist", "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15"); | |
| 630 | 630 | |
| 631 | // split out position names from string and figure out our number of symbols | |
| 632 | int location = -1; | |
| 633 | m_numstops = 0; | |
| 634 | location=symbollist.find(0,","); | |
| 635 | while (location!=-1) | |
| 636 | { | |
| 637 | m_stopnames[m_numstops] = symbollist; | |
| 638 | m_stopnames[m_numstops].substr(0, location); | |
| 639 | symbollist.substr(location+1, symbollist.len()-(location-1)); | |
| 640 | m_numstops++; | |
| 641 | location=symbollist.find(0,","); | |
| 642 | } | |
| 643 | m_stopnames[m_numstops++] = symbollist; | |
| 631 | // split out position names from string and figure out our number of symbols | |
| 632 | int location = -1; | |
| 633 | m_numstops = 0; | |
| 634 | location=symbollist.find(0,","); | |
| 635 | while (location!=-1) | |
| 636 | { | |
| 637 | m_stopnames[m_numstops] = symbollist; | |
| 638 | m_stopnames[m_numstops].substr(0, location); | |
| 639 | symbollist.substr(location+1, symbollist.len()-(location-1)); | |
| 640 | m_numstops++; | |
| 641 | location=symbollist.find(0,","); | |
| 642 | } | |
| 643 | m_stopnames[m_numstops++] = symbollist; | |
| 644 | 644 | |
| 645 | // careful, dirname is NULL if we're coming from internal layout, and our string assignment doesn't like that | |
| 646 | if (dirname != NULL) | |
| 647 | m_dirname = dirname; | |
| 645 | // careful, dirname is NULL if we're coming from internal layout, and our string assignment doesn't like that | |
| 646 | if (dirname != NULL) | |
| 647 | m_dirname = dirname; | |
| 648 | 648 | |
| 649 | for (int i=0;i<m_numstops;i++) | |
| 650 | { | |
| 651 | location=m_stopnames[i].find(0,":"); | |
| 652 | if (location!=-1) | |
| 653 | { | |
| 654 | m_imagefile[i] = m_stopnames[i]; | |
| 655 | m_stopnames[i].substr(0, location); | |
| 656 | m_imagefile[i].substr(location+1, m_imagefile[i].len()-(location-1)); | |
| 649 | for (int i=0;i<m_numstops;i++) | |
| 650 | { | |
| 651 | location=m_stopnames[i].find(0,":"); | |
| 652 | if (location!=-1) | |
| 653 | { | |
| 654 | m_imagefile[i] = m_stopnames[i]; | |
| 655 | m_stopnames[i].substr(0, location); | |
| 656 | m_imagefile[i].substr(location+1, m_imagefile[i].len()-(location-1)); | |
| 657 | 657 | |
| 658 | //m_alphafile[i] = | |
| 659 | m_file[i].reset(global_alloc(emu_file(machine.options().art_path(), OPEN_FLAG_READ))); | |
| 660 | } | |
| 661 | else | |
| 662 | { | |
| 663 | //m_imagefile[i] = 0; | |
| 664 | //m_alphafile[i] = 0; | |
| 665 | m_file[i].reset(); | |
| 666 | } | |
| 667 | } | |
| 658 | //m_alphafile[i] = | |
| 659 | m_file[i].reset(global_alloc(emu_file(machine.options().art_path(), OPEN_FLAG_READ))); | |
| 660 | } | |
| 661 | else | |
| 662 | { | |
| 663 | //m_imagefile[i] = 0; | |
| 664 | //m_alphafile[i] = 0; | |
| 665 | m_file[i].reset(); | |
| 666 | } | |
| 667 | } | |
| 668 | 668 | |
| 669 | m_stateoffset = xml_get_attribute_int_with_subst(machine, compnode, "stateoffset", 0); | |
| 670 | m_numsymbolsvisible = xml_get_attribute_int_with_subst(machine, compnode, "numsymbolsvisible", 3); | |
| 671 | m_reelreversed = xml_get_attribute_int_with_subst(machine, compnode, "reelreversed", 0); | |
| 672 | m_beltreel = xml_get_attribute_int_with_subst(machine, compnode, "beltreel", 0); | |
| 669 | m_stateoffset = xml_get_attribute_int_with_subst(machine, compnode, "stateoffset", 0); | |
| 670 | m_numsymbolsvisible = xml_get_attribute_int_with_subst(machine, compnode, "numsymbolsvisible", 3); | |
| 671 | m_reelreversed = xml_get_attribute_int_with_subst(machine, compnode, "reelreversed", 0); | |
| 672 | m_beltreel = xml_get_attribute_int_with_subst(machine, compnode, "beltreel", 0); | |
| 673 | 673 | |
| 674 | ||
| 674 | } | |
| 675 | 675 | |
| 676 | // led7seg nodes | |
| 677 | else if (strcmp(compnode.name, "led7seg") == 0) | |
| 678 | m_type = CTYPE_LED7SEG; | |
| 676 | // led7seg nodes | |
| 677 | else if (strcmp(compnode.name, "led7seg") == 0) | |
| 678 | m_type = CTYPE_LED7SEG; | |
| 679 | 679 | |
| 680 | // led8seg_gts1 nodes | |
| 681 | else if (strcmp(compnode.name, "led8seg_gts1") == 0) | |
| 682 | m_type = CTYPE_LED8SEG_GTS1; | |
| 680 | // led8seg_gts1 nodes | |
| 681 | else if (strcmp(compnode.name, "led8seg_gts1") == 0) | |
| 682 | m_type = CTYPE_LED8SEG_GTS1; | |
| 683 | 683 | |
| 684 | // led14seg nodes | |
| 685 | else if (strcmp(compnode.name, "led14seg") == 0) | |
| 686 | m_type = CTYPE_LED14SEG; | |
| 684 | // led14seg nodes | |
| 685 | else if (strcmp(compnode.name, "led14seg") == 0) | |
| 686 | m_type = CTYPE_LED14SEG; | |
| 687 | 687 | |
| 688 | // led14segsc nodes | |
| 689 | else if (strcmp(compnode.name, "led14segsc") == 0) | |
| 690 | m_type = CTYPE_LED14SEGSC; | |
| 688 | // led14segsc nodes | |
| 689 | else if (strcmp(compnode.name, "led14segsc") == 0) | |
| 690 | m_type = CTYPE_LED14SEGSC; | |
| 691 | 691 | |
| 692 | // led16seg nodes | |
| 693 | else if (strcmp(compnode.name, "led16seg") == 0) | |
| 694 | m_type = CTYPE_LED16SEG; | |
| 692 | // led16seg nodes | |
| 693 | else if (strcmp(compnode.name, "led16seg") == 0) | |
| 694 | m_type = CTYPE_LED16SEG; | |
| 695 | 695 | |
| 696 | // led16segsc nodes | |
| 697 | else if (strcmp(compnode.name, "led16segsc") == 0) | |
| 698 | m_type = CTYPE_LED16SEGSC; | |
| 696 | // led16segsc nodes | |
| 697 | else if (strcmp(compnode.name, "led16segsc") == 0) | |
| 698 | m_type = CTYPE_LED16SEGSC; | |
| 699 | 699 | |
| 700 | // rect nodes | |
| 701 | else if (strcmp(compnode.name, "rect") == 0) | |
| 702 | m_type = CTYPE_RECT; | |
| 700 | // rect nodes | |
| 701 | else if (strcmp(compnode.name, "rect") == 0) | |
| 702 | m_type = CTYPE_RECT; | |
| 703 | 703 | |
| 704 | // disk nodes | |
| 705 | else if (strcmp(compnode.name, "disk") == 0) | |
| 706 | m_type = CTYPE_DISK; | |
| 704 | // disk nodes | |
| 705 | else if (strcmp(compnode.name, "disk") == 0) | |
| 706 | m_type = CTYPE_DISK; | |
| 707 | 707 | |
| 708 | // error otherwise | |
| 709 | else | |
| 710 | throw emu_fatalerror("Unknown element component: %s", compnode.name); | |
| 708 | // error otherwise | |
| 709 | else | |
| 710 | throw emu_fatalerror("Unknown element component: %s", compnode.name); | |
| 711 | 711 | } |
| 712 | 712 | |
| 713 | 713 | |
| r242703 | r242704 | |
| 726 | 726 | |
| 727 | 727 | void layout_element::component::draw(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state) |
| 728 | 728 | { |
| 729 | switch (m_type) | |
| 730 | { | |
| 731 | case CTYPE_IMAGE: | |
| 732 | if (!m_bitmap[0].valid()) | |
| 733 | load_bitmap(); | |
| 734 | { | |
| 735 | bitmap_argb32 destsub(dest, bounds); | |
| 736 | render_resample_argb_bitmap_hq(destsub, m_bitmap[0], m_color); | |
| 737 | } | |
| 738 | break; | |
| 729 | switch (m_type) | |
| 730 | { | |
| 731 | case CTYPE_IMAGE: | |
| 732 | if (!m_bitmap[0].valid()) | |
| 733 | load_bitmap(); | |
| 734 | { | |
| 735 | bitmap_argb32 destsub(dest, bounds); | |
| 736 | render_resample_argb_bitmap_hq(destsub, m_bitmap[0], m_color); | |
| 737 | } | |
| 738 | break; | |
| 739 | 739 | |
| 740 | case CTYPE_RECT: | |
| 741 | draw_rect(dest, bounds); | |
| 742 | break; | |
| 740 | case CTYPE_RECT: | |
| 741 | draw_rect(dest, bounds); | |
| 742 | break; | |
| 743 | 743 | |
| 744 | case CTYPE_DISK: | |
| 745 | draw_disk(dest, bounds); | |
| 746 | break; | |
| 744 | case CTYPE_DISK: | |
| 745 | draw_disk(dest, bounds); | |
| 746 | break; | |
| 747 | 747 | |
| 748 | case CTYPE_TEXT: | |
| 749 | draw_text(machine, dest, bounds); | |
| 750 | break; | |
| 748 | case CTYPE_TEXT: | |
| 749 | draw_text(machine, dest, bounds); | |
| 750 | break; | |
| 751 | 751 | |
| 752 | case CTYPE_LED7SEG: | |
| 753 | draw_led7seg(dest, bounds, state); | |
| 754 | break; | |
| 752 | case CTYPE_LED7SEG: | |
| 753 | draw_led7seg(dest, bounds, state); | |
| 754 | break; | |
| 755 | 755 | |
| 756 | case CTYPE_LED8SEG_GTS1: | |
| 757 | draw_led8seg_gts1(dest, bounds, state); | |
| 758 | break; | |
| 756 | case CTYPE_LED8SEG_GTS1: | |
| 757 | draw_led8seg_gts1(dest, bounds, state); | |
| 758 | break; | |
| 759 | 759 | |
| 760 | case CTYPE_LED14SEG: | |
| 761 | draw_led14seg(dest, bounds, state); | |
| 762 | break; | |
| 760 | case CTYPE_LED14SEG: | |
| 761 | draw_led14seg(dest, bounds, state); | |
| 762 | break; | |
| 763 | 763 | |
| 764 | case CTYPE_LED16SEG: | |
| 765 | draw_led16seg(dest, bounds, state); | |
| 766 | break; | |
| 764 | case CTYPE_LED16SEG: | |
| 765 | draw_led16seg(dest, bounds, state); | |
| 766 | break; | |
| 767 | 767 | |
| 768 | case CTYPE_LED14SEGSC: | |
| 769 | draw_led14segsc(dest, bounds, state); | |
| 770 | break; | |
| 768 | case CTYPE_LED14SEGSC: | |
| 769 | draw_led14segsc(dest, bounds, state); | |
| 770 | break; | |
| 771 | 771 | |
| 772 | case CTYPE_LED16SEGSC: | |
| 773 | draw_led16segsc(dest, bounds, state); | |
| 774 | break; | |
| 772 | case CTYPE_LED16SEGSC: | |
| 773 | draw_led16segsc(dest, bounds, state); | |
| 774 | break; | |
| 775 | 775 | |
| 776 | case CTYPE_DOTMATRIX: | |
| 777 | draw_dotmatrix(8, dest, bounds, state); | |
| 778 | break; | |
| 776 | case CTYPE_DOTMATRIX: | |
| 777 | draw_dotmatrix(8, dest, bounds, state); | |
| 778 | break; | |
| 779 | 779 | |
| 780 | case CTYPE_DOTMATRIX5DOT: | |
| 781 | draw_dotmatrix(5, dest, bounds, state); | |
| 782 | break; | |
| 780 | case CTYPE_DOTMATRIX5DOT: | |
| 781 | draw_dotmatrix(5, dest, bounds, state); | |
| 782 | break; | |
| 783 | 783 | |
| 784 | case CTYPE_DOTMATRIXDOT: | |
| 785 | draw_dotmatrix(1, dest, bounds, state); | |
| 786 | break; | |
| 784 | case CTYPE_DOTMATRIXDOT: | |
| 785 | draw_dotmatrix(1, dest, bounds, state); | |
| 786 | break; | |
| 787 | 787 | |
| 788 | case CTYPE_SIMPLECOUNTER: | |
| 789 | draw_simplecounter(machine, dest, bounds, state); | |
| 790 | break; | |
| 788 | case CTYPE_SIMPLECOUNTER: | |
| 789 | draw_simplecounter(machine, dest, bounds, state); | |
| 790 | break; | |
| 791 | 791 | |
| 792 | case CTYPE_REEL: | |
| 793 | draw_reel(machine, dest, bounds, state); | |
| 794 | break; | |
| 792 | case CTYPE_REEL: | |
| 793 | draw_reel(machine, dest, bounds, state); | |
| 794 | break; | |
| 795 | 795 | |
| 796 | default: | |
| 797 | throw emu_fatalerror("Unknown component type requested draw()"); | |
| 798 | } | |
| 796 | default: | |
| 797 | throw emu_fatalerror("Unknown component type requested draw()"); | |
| 798 | } | |
| 799 | 799 | } |
| 800 | 800 | |
| 801 | 801 | |
| r242703 | r242704 | |
| 806 | 806 | |
| 807 | 807 | void layout_element::component::draw_rect(bitmap_argb32 &dest, const rectangle &bounds) |
| 808 | 808 | { |
| 809 | // compute premultiplied colors | |
| 810 | UINT32 r = m_color.r * m_color.a * 255.0; | |
| 811 | UINT32 g = m_color.g * m_color.a * 255.0; | |
| 812 | UINT32 b = m_color.b * m_color.a * 255.0; | |
| 813 | UINT32 inva = (1.0f - m_color.a) * 255.0; | |
| 809 | // compute premultiplied colors | |
| 810 | UINT32 r = m_color.r * m_color.a * 255.0; | |
| 811 | UINT32 g = m_color.g * m_color.a * 255.0; | |
| 812 | UINT32 b = m_color.b * m_color.a * 255.0; | |
| 813 | UINT32 inva = (1.0f - m_color.a) * 255.0; | |
| 814 | 814 | |
| 815 | // iterate over X and Y | |
| 816 | for (UINT32 y = bounds.min_y; y <= bounds.max_y; y++) | |
| 817 | { | |
| 818 | for (UINT32 x = bounds.min_x; x <= bounds.max_x; x++) | |
| 819 | { | |
| 820 | UINT32 finalr = r; | |
| 821 | UINT32 finalg = g; | |
| 822 | UINT32 finalb = b; | |
| 815 | // iterate over X and Y | |
| 816 | for (UINT32 y = bounds.min_y; y <= bounds.max_y; y++) | |
| 817 | { | |
| 818 | for (UINT32 x = bounds.min_x; x <= bounds.max_x; x++) | |
| 819 | { | |
| 820 | UINT32 finalr = r; | |
| 821 | UINT32 finalg = g; | |
| 822 | UINT32 finalb = b; | |
| 823 | 823 | |
| 824 | // if we're translucent, add in the destination pixel contribution | |
| 825 | if (inva > 0) | |
| 826 | { | |
| 827 | rgb_t dpix = dest.pix32(y, x); | |
| 828 | finalr += (dpix.r() * inva) >> 8; | |
| 829 | finalg += (dpix.g() * inva) >> 8; | |
| 830 | finalb += (dpix.b() * inva) >> 8; | |
| 831 | } | |
| 824 | // if we're translucent, add in the destination pixel contribution | |
| 825 | if (inva > 0) | |
| 826 | { | |
| 827 | rgb_t dpix = dest.pix32(y, x); | |
| 828 | finalr += (dpix.r() * inva) >> 8; | |
| 829 | finalg += (dpix.g() * inva) >> 8; | |
| 830 | finalb += (dpix.b() * inva) >> 8; | |
| 831 | } | |
| 832 | 832 | |
| 833 | // store the target pixel, dividing the RGBA values by the overall scale factor | |
| 834 | dest.pix32(y, x) = rgb_t(finalr, finalg, finalb); | |
| 835 | } | |
| 836 | } | |
| 833 | // store the target pixel, dividing the RGBA values by the overall scale factor | |
| 834 | dest.pix32(y, x) = rgb_t(finalr, finalg, finalb); | |
| 835 | } | |
| 836 | } | |
| 837 | 837 | } |
| 838 | 838 | |
| 839 | 839 | |
| r242703 | r242704 | |
| 844 | 844 | |
| 845 | 845 | void layout_element::component::draw_disk(bitmap_argb32 &dest, const rectangle &bounds) |
| 846 | 846 | { |
| 847 | // compute premultiplied colors | |
| 848 | UINT32 r = m_color.r * m_color.a * 255.0; | |
| 849 | UINT32 g = m_color.g * m_color.a * 255.0; | |
| 850 | UINT32 b = m_color.b * m_color.a * 255.0; | |
| 851 | UINT32 inva = (1.0f - m_color.a) * 255.0; | |
| 847 | // compute premultiplied colors | |
| 848 | UINT32 r = m_color.r * m_color.a * 255.0; | |
| 849 | UINT32 g = m_color.g * m_color.a * 255.0; | |
| 850 | UINT32 b = m_color.b * m_color.a * 255.0; | |
| 851 | UINT32 inva = (1.0f - m_color.a) * 255.0; | |
| 852 | 852 | |
| 853 | // find the center | |
| 854 | float xcenter = float(bounds.xcenter()); | |
| 855 | float ycenter = float(bounds.ycenter()); | |
| 856 | float xradius = float(bounds.width()) * 0.5f; | |
| 857 | float yradius = float(bounds.height()) * 0.5f; | |
| 858 | float ooyradius2 = 1.0f / (yradius * yradius); | |
| 853 | // find the center | |
| 854 | float xcenter = float(bounds.xcenter()); | |
| 855 | float ycenter = float(bounds.ycenter()); | |
| 856 | float xradius = float(bounds.width()) * 0.5f; | |
| 857 | float yradius = float(bounds.height()) * 0.5f; | |
| 858 | float ooyradius2 = 1.0f / (yradius * yradius); | |
| 859 | 859 | |
| 860 | // iterate over y | |
| 861 | for (UINT32 y = bounds.min_y; y <= bounds.max_y; y++) | |
| 862 | { | |
| 863 | float ycoord = ycenter - ((float)y + 0.5f); | |
| 864 | float xval = xradius * sqrt(1.0f - (ycoord * ycoord) * ooyradius2); | |
| 860 | // iterate over y | |
| 861 | for (UINT32 y = bounds.min_y; y <= bounds.max_y; y++) | |
| 862 | { | |
| 863 | float ycoord = ycenter - ((float)y + 0.5f); | |
| 864 | float xval = xradius * sqrt(1.0f - (ycoord * ycoord) * ooyradius2); | |
| 865 | 865 | |
| 866 | // compute left/right coordinates | |
| 867 | INT32 left = (INT32)(xcenter - xval + 0.5f); | |
| 868 | INT32 right = (INT32)(xcenter + xval + 0.5f); | |
| 866 | // compute left/right coordinates | |
| 867 | INT32 left = (INT32)(xcenter - xval + 0.5f); | |
| 868 | INT32 right = (INT32)(xcenter + xval + 0.5f); | |
| 869 | 869 | |
| 870 | // draw this scanline | |
| 871 | for (UINT32 x = left; x < right; x++) | |
| 872 | { | |
| 873 | UINT32 finalr = r; | |
| 874 | UINT32 finalg = g; | |
| 875 | UINT32 finalb = b; | |
| 870 | // draw this scanline | |
| 871 | for (UINT32 x = left; x < right; x++) | |
| 872 | { | |
| 873 | UINT32 finalr = r; | |
| 874 | UINT32 finalg = g; | |
| 875 | UINT32 finalb = b; | |
| 876 | 876 | |
| 877 | // if we're translucent, add in the destination pixel contribution | |
| 878 | if (inva > 0) | |
| 879 | { | |
| 880 | rgb_t dpix = dest.pix32(y, x); | |
| 881 | finalr += (dpix.r() * inva) >> 8; | |
| 882 | finalg += (dpix.g() * inva) >> 8; | |
| 883 | finalb += (dpix.b() * inva) >> 8; | |
| 884 | } | |
| 877 | // if we're translucent, add in the destination pixel contribution | |
| 878 | if (inva > 0) | |
| 879 | { | |
| 880 | rgb_t dpix = dest.pix32(y, x); | |
| 881 | finalr += (dpix.r() * inva) >> 8; | |
| 882 | finalg += (dpix.g() * inva) >> 8; | |
| 883 | finalb += (dpix.b() * inva) >> 8; | |
| 884 | } | |
| 885 | 885 | |
| 886 | // store the target pixel, dividing the RGBA values by the overall scale factor | |
| 887 | dest.pix32(y, x) = rgb_t(finalr, finalg, finalb); | |
| 888 | } | |
| 889 | } | |
| 886 | // store the target pixel, dividing the RGBA values by the overall scale factor | |
| 887 | dest.pix32(y, x) = rgb_t(finalr, finalg, finalb); | |
| 888 | } | |
| 889 | } | |
| 890 | 890 | } |
| 891 | 891 | |
| 892 | 892 | |
| r242703 | r242704 | |
| 896 | 896 | |
| 897 | 897 | void layout_element::component::draw_text(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds) |
| 898 | 898 | { |
| 899 | // compute premultiplied colors | |
| 900 | UINT32 r = m_color.r * 255.0; | |
| 901 | UINT32 g = m_color.g * 255.0; | |
| 902 | UINT32 b = m_color.b * 255.0; | |
| 903 | UINT32 a = m_color.a * 255.0; | |
| 899 | // compute premultiplied colors | |
| 900 | UINT32 r = m_color.r * 255.0; | |
| 901 | UINT32 g = m_color.g * 255.0; | |
| 902 | UINT32 b = m_color.b * 255.0; | |
| 903 | UINT32 a = m_color.a * 255.0; | |
| 904 | 904 | |
| 905 | // get the width of the string | |
| 906 | render_font *font = machine.render().font_alloc("default"); | |
| 907 | float aspect = 1.0f; | |
| 908 | INT32 width; | |
| 905 | // get the width of the string | |
| 906 | render_font *font = machine.render().font_alloc("default"); | |
| 907 | float aspect = 1.0f; | |
| 908 | INT32 width; | |
| 909 | 909 | |
| 910 | 910 | |
| 911 | while (1) | |
| 912 | { | |
| 913 | width = font->string_width(bounds.height(), aspect, m_string); | |
| 914 | if (width < bounds.width()) | |
| 915 | break; | |
| 916 | aspect *= 0.9f; | |
| 917 | } | |
| 911 | while (1) | |
| 912 | { | |
| 913 | width = font->string_width(bounds.height(), aspect, m_string); | |
| 914 | if (width < bounds.width()) | |
| 915 | break; | |
| 916 | aspect *= 0.9f; | |
| 917 | } | |
| 918 | 918 | |
| 919 | 919 | |
| 920 | // get alignment | |
| 921 | INT32 curx; | |
| 922 | switch (m_textalign) | |
| 923 | { | |
| 924 | // left | |
| 925 | case 1: | |
| 926 | curx = bounds.min_x; | |
| 927 | break; | |
| 920 | // get alignment | |
| 921 | INT32 curx; | |
| 922 | switch (m_textalign) | |
| 923 | { | |
| 924 | // left | |
| 925 | case 1: | |
| 926 | curx = bounds.min_x; | |
| 927 | break; | |
| 928 | 928 | |
| 929 | // right | |
| 930 | case 2: | |
| 931 | curx = bounds.max_x - width; | |
| 932 | break; | |
| 929 | // right | |
| 930 | case 2: | |
| 931 | curx = bounds.max_x - width; | |
| 932 | break; | |
| 933 | 933 | |
| 934 | // default to center | |
| 935 | default: | |
| 936 | curx = bounds.min_x + (bounds.width() - width) / 2; | |
| 937 | break; | |
| 938 | } | |
| 934 | // default to center | |
| 935 | default: | |
| 936 | curx = bounds.min_x + (bounds.width() - width) / 2; | |
| 937 | break; | |
| 938 | } | |
| 939 | 939 | |
| 940 | // allocate a temporary bitmap | |
| 941 | bitmap_argb32 tempbitmap(dest.width(), dest.height()); | |
| 940 | // allocate a temporary bitmap | |
| 941 | bitmap_argb32 tempbitmap(dest.width(), dest.height()); | |
| 942 | 942 | |
| 943 | // loop over characters | |
| 944 | for (const char *s = m_string; *s != 0; s++) | |
| 945 | { | |
| 946 | // get the font bitmap | |
| 947 | rectangle chbounds; | |
| 948 | font->get_scaled_bitmap_and_bounds(tempbitmap, bounds.height(), aspect, *s, chbounds); | |
| 943 | // loop over characters | |
| 944 | for (const char *s = m_string; *s != 0; s++) | |
| 945 | { | |
| 946 | // get the font bitmap | |
| 947 | rectangle chbounds; | |
| 948 | font->get_scaled_bitmap_and_bounds(tempbitmap, bounds.height(), aspect, *s, chbounds); | |
| 949 | 949 | |
| 950 | // copy the data into the target | |
| 951 | for (int y = 0; y < chbounds.height(); y++) | |
| 952 | { | |
| 953 | int effy = bounds.min_y + y; | |
| 954 | if (effy >= bounds.min_y && effy <= bounds.max_y) | |
| 955 | { | |
| 956 | UINT32 *src = &tempbitmap.pix32(y); | |
| 957 | UINT32 *d = &dest.pix32(effy); | |
| 958 | for (int x = 0; x < chbounds.width(); x++) | |
| 959 | { | |
| 960 | int effx = curx + x + chbounds.min_x; | |
| 961 | if (effx >= bounds.min_x && effx <= bounds.max_x) | |
| 962 | { | |
| 963 | UINT32 spix = rgb_t(src[x]).a(); | |
| 964 | if (spix != 0) | |
| 965 | { | |
| 966 | rgb_t dpix = d[effx]; | |
| 967 | UINT32 ta = (a * (spix + 1)) >> 8; | |
| 968 | UINT32 tr = (r * ta + dpix.r() * (0x100 - ta)) >> 8; | |
| 969 | UINT32 tg = (g * ta + dpix.g() * (0x100 - ta)) >> 8; | |
| 970 | UINT32 tb = (b * ta + dpix.b() * (0x100 - ta)) >> 8; | |
| 971 | d[effx] = rgb_t(tr, tg, tb); | |
| 972 | } | |
| 973 | } | |
| 974 | } | |
| 975 | } | |
| 976 | } | |
| 950 | // copy the data into the target | |
| 951 | for (int y = 0; y < chbounds.height(); y++) | |
| 952 | { | |
| 953 | int effy = bounds.min_y + y; | |
| 954 | if (effy >= bounds.min_y && effy <= bounds.max_y) | |
| 955 | { | |
| 956 | UINT32 *src = &tempbitmap.pix32(y); | |
| 957 | UINT32 *d = &dest.pix32(effy); | |
| 958 | for (int x = 0; x < chbounds.width(); x++) | |
| 959 | { | |
| 960 | int effx = curx + x + chbounds.min_x; | |
| 961 | if (effx >= bounds.min_x && effx <= bounds.max_x) | |
| 962 | { | |
| 963 | UINT32 spix = rgb_t(src[x]).a(); | |
| 964 | if (spix != 0) | |
| 965 | { | |
| 966 | rgb_t dpix = d[effx]; | |
| 967 | UINT32 ta = (a * (spix + 1)) >> 8; | |
| 968 | UINT32 tr = (r * ta + dpix.r() * (0x100 - ta)) >> 8; | |
| 969 | UINT32 tg = (g * ta + dpix.g() * (0x100 - ta)) >> 8; | |
| 970 | UINT32 tb = (b * ta + dpix.b() * (0x100 - ta)) >> 8; | |
| 971 | d[effx] = rgb_t(tr, tg, tb); | |
| 972 | } | |
| 973 | } | |
| 974 | } | |
| 975 | } | |
| 976 | } | |
| 977 | 977 | |
| 978 | // advance in the X direction | |
| 979 | curx += font->char_width(bounds.height(), aspect, *s); | |
| 980 | } | |
| 978 | // advance in the X direction | |
| 979 | curx += font->char_width(bounds.height(), aspect, *s); | |
| 980 | } | |
| 981 | 981 | |
| 982 | // free the temporary bitmap and font | |
| 983 | machine.render().font_free(font); | |
| 982 | // free the temporary bitmap and font | |
| 983 | machine.render().font_free(font); | |
| 984 | 984 | } |
| 985 | 985 | |
| 986 | 986 | void layout_element::component::draw_simplecounter(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state) |
| 987 | 987 | { |
| 988 | char temp[256]; | |
| 989 | sprintf(temp, "%0*d", m_digits, state); | |
| 990 | m_string = astring(temp); | |
| 991 | draw_text(machine, dest, bounds); | |
| 988 | char temp[256]; | |
| 989 | sprintf(temp, "%0*d", m_digits, state); | |
| 990 | m_string = astring(temp); | |
| 991 | draw_text(machine, dest, bounds); | |
| 992 | 992 | } |
| 993 | 993 | |
| 994 | 994 | /* state is a normalized value between 0 and 65536 so that we don't need to worry about how many motor steps here or in the .lay, only the number of symbols */ |
| 995 | 995 | void layout_element::component::draw_reel(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state) |
| 996 | 996 | { |
| 997 | if (m_beltreel) | |
| 998 | { | |
| 999 | draw_beltreel(machine,dest,bounds,state); | |
| 1000 | } | |
| 1001 | else | |
| 1002 | { | |
| 1003 | const int max_state_used = 0x10000; | |
| 997 | if (m_beltreel) | |
| 998 | { | |
| 999 | draw_beltreel(machine,dest,bounds,state); | |
| 1000 | } | |
| 1001 | else | |
| 1002 | { | |
| 1003 | const int max_state_used = 0x10000; | |
| 1004 | 1004 | |
| 1005 | // shift the reels a bit based on this param, allows fine tuning | |
| 1006 | int use_state = (state + m_stateoffset) % max_state_used; | |
| 1005 | // shift the reels a bit based on this param, allows fine tuning | |
| 1006 | int use_state = (state + m_stateoffset) % max_state_used; | |
| 1007 | 1007 | |
| 1008 | // compute premultiplied colors | |
| 1009 | UINT32 r = m_color.r * 255.0; | |
| 1010 | UINT32 g = m_color.g * 255.0; | |
| 1011 | UINT32 b = m_color.b * 255.0; | |
| 1012 | UINT32 a = m_color.a * 255.0; | |
| 1008 | // compute premultiplied colors | |
| 1009 | UINT32 r = m_color.r * 255.0; | |
| 1010 | UINT32 g = m_color.g * 255.0; | |
| 1011 | UINT32 b = m_color.b * 255.0; | |
| 1012 | UINT32 a = m_color.a * 255.0; | |
| 1013 | 1013 | |
| 1014 | // get the width of the string | |
| 1015 | render_font *font = machine.render().font_alloc("default"); | |
| 1016 | float aspect = 1.0f; | |
| 1017 | INT32 width; | |
| 1014 | // get the width of the string | |
| 1015 | render_font *font = machine.render().font_alloc("default"); | |
| 1016 | float aspect = 1.0f; | |
| 1017 | INT32 width; | |
| 1018 | 1018 | |
| 1019 | 1019 | |
| 1020 | int curry = 0; | |
| 1021 | int num_shown = m_numsymbolsvisible; | |
| 1020 | int curry = 0; | |
| 1021 | int num_shown = m_numsymbolsvisible; | |
| 1022 | 1022 | |
| 1023 | ||
| 1023 | int ourheight = bounds.height(); | |
| 1024 | 1024 | |
| 1025 | for (int fruit = 0;fruit<m_numstops;fruit++) | |
| 1026 | { | |
| 1027 | int basey; | |
| 1025 | for (int fruit = 0;fruit<m_numstops;fruit++) | |
| 1026 | { | |
| 1027 | int basey; | |
| 1028 | 1028 | |
| 1029 | if (m_reelreversed==1) | |
| 1030 | { | |
| 1031 | basey = bounds.min_y + ((use_state)*(ourheight/num_shown)/(max_state_used/m_numstops)) + curry; | |
| 1032 | } | |
| 1033 | else | |
| 1034 | { | |
| 1035 | basey = bounds.min_y - ((use_state)*(ourheight/num_shown)/(max_state_used/m_numstops)) + curry; | |
| 1036 | } | |
| 1029 | if (m_reelreversed==1) | |
| 1030 | { | |
| 1031 | basey = bounds.min_y + ((use_state)*(ourheight/num_shown)/(max_state_used/m_numstops)) + curry; | |
| 1032 | } | |
| 1033 | else | |
| 1034 | { | |
| 1035 | basey = bounds.min_y - ((use_state)*(ourheight/num_shown)/(max_state_used/m_numstops)) + curry; | |
| 1036 | } | |
| 1037 | 1037 | |
| 1038 | // wrap around... | |
| 1039 | if (basey < bounds.min_y) | |
| 1040 | basey += ((max_state_used)*(ourheight/num_shown)/(max_state_used/m_numstops)); | |
| 1041 | if (basey > bounds.max_y) | |
| 1042 | basey -= ((max_state_used)*(ourheight/num_shown)/(max_state_used/m_numstops)); | |
| 1038 | // wrap around... | |
| 1039 | if (basey < bounds.min_y) | |
| 1040 | basey += ((max_state_used)*(ourheight/num_shown)/(max_state_used/m_numstops)); | |
| 1041 | if (basey > bounds.max_y) | |
| 1042 | basey -= ((max_state_used)*(ourheight/num_shown)/(max_state_used/m_numstops)); | |
| 1043 | 1043 | |
| 1044 | ||
| 1044 | int endpos = basey+ourheight/num_shown; | |
| 1045 | 1045 | |
| 1046 | // only render the symbol / text if it's atually in view because the code is SLOW | |
| 1047 | if ((endpos >= bounds.min_y) && (basey <= bounds.max_y)) | |
| 1048 | { | |
| 1049 | while (1) | |
| 1050 | { | |
| 1051 | width = font->string_width(ourheight/num_shown, aspect, m_stopnames[fruit]); | |
| 1052 | if (width < bounds.width()) | |
| 1053 | break; | |
| 1054 | aspect *= 0.9f; | |
| 1055 | } | |
| 1046 | // only render the symbol / text if it's atually in view because the code is SLOW | |
| 1047 | if ((endpos >= bounds.min_y) && (basey <= bounds.max_y)) | |
| 1048 | { | |
| 1049 | while (1) | |
| 1050 | { | |
| 1051 | width = font->string_width(ourheight/num_shown, aspect, m_stopnames[fruit]); | |
| 1052 | if (width < bounds.width()) | |
| 1053 | break; | |
| 1054 | aspect *= 0.9f; | |
| 1055 | } | |
| 1056 | 1056 | |
| 1057 | INT32 curx; | |
| 1058 | curx = bounds.min_x + (bounds.width() - width) / 2; | |
| 1057 | INT32 curx; | |
| 1058 | curx = bounds.min_x + (bounds.width() - width) / 2; | |
| 1059 | 1059 | |
| 1060 | if (m_file[fruit]) | |
| 1061 | if (!m_bitmap[fruit].valid()) | |
| 1062 | load_reel_bitmap(fruit); | |
| 1060 | if (m_file[fruit]) | |
| 1061 | if (!m_bitmap[fruit].valid()) | |
| 1062 | load_reel_bitmap(fruit); | |
| 1063 | 1063 | |
| 1064 | if (m_file[fruit]) // render gfx | |
| 1065 | { | |
| 1066 | bitmap_argb32 tempbitmap2(dest.width(), ourheight/num_shown); | |
| 1064 | if (m_file[fruit]) // render gfx | |
| 1065 | { | |
| 1066 | bitmap_argb32 tempbitmap2(dest.width(), ourheight/num_shown); | |
| 1067 | 1067 | |
| 1068 | if (m_bitmap[fruit].valid()) | |
| 1069 | { | |
| 1070 | render_resample_argb_bitmap_hq(tempbitmap2, m_bitmap[fruit], m_color); | |
| 1068 | if (m_bitmap[fruit].valid()) | |
| 1069 | { | |
| 1070 | render_resample_argb_bitmap_hq(tempbitmap2, m_bitmap[fruit], m_color); | |
| 1071 | 1071 | |
| 1072 | for (int y = 0; y < ourheight/num_shown; y++) | |
| 1073 | { | |
| 1074 | int effy = basey + y; | |
| 1072 | for (int y = 0; y < ourheight/num_shown; y++) | |
| 1073 | { | |
| 1074 | int effy = basey + y; | |
| 1075 | 1075 | |
| 1076 | if (effy >= bounds.min_y && effy <= bounds.max_y) | |
| 1077 | { | |
| 1078 | UINT32 *src = &tempbitmap2.pix32(y); | |
| 1079 | UINT32 *d = &dest.pix32(effy); | |
| 1080 | for (int x = 0; x < dest.width(); x++) | |
| 1081 | { | |
| 1082 | int effx = x; | |
| 1083 | if (effx >= bounds.min_x && effx <= bounds.max_x) | |
| 1084 | { | |
| 1085 | UINT32 spix = rgb_t(src[x]).a(); | |
| 1086 | if (spix != 0) | |
| 1087 | { | |
| 1088 | d[effx] = src[x]; | |
| 1089 | } | |
| 1090 | } | |
| 1091 | } | |
| 1092 | } | |
| 1076 | if (effy >= bounds.min_y && effy <= bounds.max_y) | |
| 1077 | { | |
| 1078 | UINT32 *src = &tempbitmap2.pix32(y); | |
| 1079 | UINT32 *d = &dest.pix32(effy); | |
| 1080 | for (int x = 0; x < dest.width(); x++) | |
| 1081 | { | |
| 1082 | int effx = x; | |
| 1083 | if (effx >= bounds.min_x && effx <= bounds.max_x) | |
| 1084 | { | |
| 1085 | UINT32 spix = rgb_t(src[x]).a(); | |
| 1086 | if (spix != 0) | |
| 1087 | { | |
| 1088 | d[effx] = src[x]; | |
| 1089 | } | |
| 1090 | } | |
| 1091 | } | |
| 1092 | } | |
| 1093 | 1093 | |
| 1094 | } | |
| 1095 | } | |
| 1096 | } | |
| 1097 | else // render text (fallback) | |
| 1098 | { | |
| 1099 | // allocate a temporary bitmap | |
| 1100 | bitmap_argb32 tempbitmap(dest.width(), dest.height()); | |
| 1094 | } | |
| 1095 | } | |
| 1096 | } | |
| 1097 | else // render text (fallback) | |
| 1098 | { | |
| 1099 | // allocate a temporary bitmap | |
| 1100 | bitmap_argb32 tempbitmap(dest.width(), dest.height()); | |
| 1101 | 1101 | |
| 1102 | // loop over characters | |
| 1103 | for (const char *s = m_stopnames[fruit]; *s != 0; s++) | |
| 1104 | { | |
| 1105 | // get the font bitmap | |
| 1106 | rectangle chbounds; | |
| 1107 | font->get_scaled_bitmap_and_bounds(tempbitmap, ourheight/num_shown, aspect, *s, chbounds); | |
| 1102 | // loop over characters | |
| 1103 | for (const char *s = m_stopnames[fruit]; *s != 0; s++) | |
| 1104 | { | |
| 1105 | // get the font bitmap | |
| 1106 | rectangle chbounds; | |
| 1107 | font->get_scaled_bitmap_and_bounds(tempbitmap, ourheight/num_shown, aspect, *s, chbounds); | |
| 1108 | 1108 | |
| 1109 | // copy the data into the target | |
| 1110 | for (int y = 0; y < chbounds.height(); y++) | |
| 1111 | { | |
| 1112 | int effy = basey + y; | |
| 1109 | // copy the data into the target | |
| 1110 | for (int y = 0; y < chbounds.height(); y++) | |
| 1111 | { | |
| 1112 | int effy = basey + y; | |
| 1113 | 1113 | |
| 1114 | if (effy >= bounds.min_y && effy <= bounds.max_y) | |
| 1115 | { | |
| 1116 | UINT32 *src = &tempbitmap.pix32(y); | |
| 1117 | UINT32 *d = &dest.pix32(effy); | |
| 1118 | for (int x = 0; x < chbounds.width(); x++) | |
| 1119 | { | |
| 1120 | int effx = curx + x + chbounds.min_x; | |
| 1121 | if (effx >= bounds.min_x && effx <= bounds.max_x) | |
| 1122 | { | |
| 1123 | UINT32 spix = rgb_t(src[x]).a(); | |
| 1124 | if (spix != 0) | |
| 1125 | { | |
| 1126 | rgb_t dpix = d[effx]; | |
| 1127 | UINT32 ta = (a * (spix + 1)) >> 8; | |
| 1128 | UINT32 tr = (r * ta + dpix.r() * (0x100 - ta)) >> 8; | |
| 1129 | UINT32 tg = (g * ta + dpix.g() * (0x100 - ta)) >> 8; | |
| 1130 | UINT32 tb = (b * ta + dpix.b() * (0x100 - ta)) >> 8; | |
| 1131 | d[effx] = rgb_t(tr, tg, tb); | |
| 1132 | } | |
| 1133 | } | |
| 1134 | } | |
| 1135 | } | |
| 1136 | } | |
| 1114 | if (effy >= bounds.min_y && effy <= bounds.max_y) | |
| 1115 | { | |
| 1116 | UINT32 *src = &tempbitmap.pix32(y); | |
| 1117 | UINT32 *d = &dest.pix32(effy); | |
| 1118 | for (int x = 0; x < chbounds.width(); x++) | |
| 1119 | { | |
| 1120 | int effx = curx + x + chbounds.min_x; | |
| 1121 | if (effx >= bounds.min_x && effx <= bounds.max_x) | |
| 1122 | { | |
| 1123 | UINT32 spix = rgb_t(src[x]).a(); | |
| 1124 | if (spix != 0) | |
| 1125 | { | |
| 1126 | rgb_t dpix = d[effx]; | |
| 1127 | UINT32 ta = (a * (spix + 1)) >> 8; | |
| 1128 | UINT32 tr = (r * ta + dpix.r() * (0x100 - ta)) >> 8; | |
| 1129 | UINT32 tg = (g * ta + dpix.g() * (0x100 - ta)) >> 8; | |
| 1130 | UINT32 tb = (b * ta + dpix.b() * (0x100 - ta)) >> 8; | |
| 1131 | d[effx] = rgb_t(tr, tg, tb); | |
| 1132 | } | |
| 1133 | } | |
| 1134 | } | |
| 1135 | } | |
| 1136 | } | |
| 1137 | 1137 | |
| 1138 | // advance in the X direction | |
| 1139 | curx += font->char_width(ourheight/num_shown, aspect, *s); | |
| 1138 | // advance in the X direction | |
| 1139 | curx += font->char_width(ourheight/num_shown, aspect, *s); | |
| 1140 | 1140 | |
| 1141 | ||
| 1141 | } | |
| 1142 | 1142 | |
| 1143 | } | |
| 1144 | } | |
| 1143 | } | |
| 1144 | } | |
| 1145 | 1145 | |
| 1146 | curry += ourheight/num_shown; | |
| 1147 | } | |
| 1148 | // free the temporary bitmap and font | |
| 1149 | machine.render().font_free(font); | |
| 1150 | } | |
| 1146 | curry += ourheight/num_shown; | |
| 1147 | } | |
| 1148 | // free the temporary bitmap and font | |
| 1149 | machine.render().font_free(font); | |
| 1150 | } | |
| 1151 | 1151 | } |
| 1152 | 1152 | |
| 1153 | 1153 | |
| 1154 | 1154 | void layout_element::component::draw_beltreel(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state) |
| 1155 | 1155 | { |
| 1156 | ||
| 1156 | const int max_state_used = 0x10000; | |
| 1157 | 1157 | |
| 1158 | // shift the reels a bit based on this param, allows fine tuning | |
| 1159 | int use_state = (state + m_stateoffset) % max_state_used; | |
| 1158 | // shift the reels a bit based on this param, allows fine tuning | |
| 1159 | int use_state = (state + m_stateoffset) % max_state_used; | |
| 1160 | 1160 | |
| 1161 | // compute premultiplied colors | |
| 1162 | UINT32 r = m_color.r * 255.0; | |
| 1163 | UINT32 g = m_color.g * 255.0; | |
| 1164 | UINT32 b = m_color.b * 255.0; | |
| 1165 | UINT32 a = m_color.a * 255.0; | |
| 1161 | // compute premultiplied colors | |
| 1162 | UINT32 r = m_color.r * 255.0; | |
| 1163 | UINT32 g = m_color.g * 255.0; | |
| 1164 | UINT32 b = m_color.b * 255.0; | |
| 1165 | UINT32 a = m_color.a * 255.0; | |
| 1166 | 1166 | |
| 1167 | // get the width of the string | |
| 1168 | render_font *font = machine.render().font_alloc("default"); | |
| 1169 | float aspect = 1.0f; | |
| 1170 | INT32 width; | |
| 1171 | int currx = 0; | |
| 1172 | int num_shown = m_numsymbolsvisible; | |
| 1167 | // get the width of the string | |
| 1168 | render_font *font = machine.render().font_alloc("default"); | |
| 1169 | float aspect = 1.0f; | |
| 1170 | INT32 width; | |
| 1171 | int currx = 0; | |
| 1172 | int num_shown = m_numsymbolsvisible; | |
| 1173 | 1173 | |
| 1174 | ||
| 1174 | int ourwidth = bounds.width(); | |
| 1175 | 1175 | |
| 1176 | for (int fruit = 0;fruit<m_numstops;fruit++) | |
| 1177 | { | |
| 1178 | int basex; | |
| 1179 | if (m_reelreversed==1) | |
| 1180 | { | |
| 1181 | basex = bounds.min_x + ((use_state)*(ourwidth/num_shown)/(max_state_used/m_numstops)) + currx; | |
| 1182 | } | |
| 1183 | else | |
| 1184 | { | |
| 1185 | basex = bounds.min_x - ((use_state)*(ourwidth/num_shown)/(max_state_used/m_numstops)) + currx; | |
| 1186 | } | |
| 1176 | for (int fruit = 0;fruit<m_numstops;fruit++) | |
| 1177 | { | |
| 1178 | int basex; | |
| 1179 | if (m_reelreversed==1) | |
| 1180 | { | |
| 1181 | basex = bounds.min_x + ((use_state)*(ourwidth/num_shown)/(max_state_used/m_numstops)) + currx; | |
| 1182 | } | |
| 1183 | else | |
| 1184 | { | |
| 1185 | basex = bounds.min_x - ((use_state)*(ourwidth/num_shown)/(max_state_used/m_numstops)) + currx; | |
| 1186 | } | |
| 1187 | 1187 | |
| 1188 | // wrap around... | |
| 1189 | if (basex < bounds.min_x) | |
| 1190 | basex += ((max_state_used)*(ourwidth/num_shown)/(max_state_used/m_numstops)); | |
| 1191 | if (basex > bounds.max_x) | |
| 1192 | basex -= ((max_state_used)*(ourwidth/num_shown)/(max_state_used/m_numstops)); | |
| 1188 | // wrap around... | |
| 1189 | if (basex < bounds.min_x) | |
| 1190 | basex += ((max_state_used)*(ourwidth/num_shown)/(max_state_used/m_numstops)); | |
| 1191 | if (basex > bounds.max_x) | |
| 1192 | basex -= ((max_state_used)*(ourwidth/num_shown)/(max_state_used/m_numstops)); | |
| 1193 | 1193 | |
| 1194 | ||
| 1194 | int endpos = basex+(ourwidth/num_shown); | |
| 1195 | 1195 | |
| 1196 | // only render the symbol / text if it's atually in view because the code is SLOW | |
| 1197 | if ((endpos >= bounds.min_x) && (basex <= bounds.max_x)) | |
| 1198 | { | |
| 1199 | while (1) | |
| 1200 | { | |
| 1201 | width = font->string_width(dest.height(), aspect, m_stopnames[fruit]); | |
| 1202 | if (width < bounds.width()) | |
| 1203 | break; | |
| 1204 | aspect *= 0.9f; | |
| 1205 | } | |
| 1196 | // only render the symbol / text if it's atually in view because the code is SLOW | |
| 1197 | if ((endpos >= bounds.min_x) && (basex <= bounds.max_x)) | |
| 1198 | { | |
| 1199 | while (1) | |
| 1200 | { | |
| 1201 | width = font->string_width(dest.height(), aspect, m_stopnames[fruit]); | |
| 1202 | if (width < bounds.width()) | |
| 1203 | break; | |
| 1204 | aspect *= 0.9f; | |
| 1205 | } | |
| 1206 | 1206 | |
| 1207 | INT32 curx; | |
| 1208 | curx = bounds.min_x; | |
| 1207 | INT32 curx; | |
| 1208 | curx = bounds.min_x; | |
| 1209 | 1209 | |
| 1210 | if (m_file[fruit]) | |
| 1211 | if (!m_bitmap[fruit].valid()) | |
| 1212 | load_reel_bitmap(fruit); | |
| 1210 | if (m_file[fruit]) | |
| 1211 | if (!m_bitmap[fruit].valid()) | |
| 1212 | load_reel_bitmap(fruit); | |
| 1213 | 1213 | |
| 1214 | if (m_file[fruit]) // render gfx | |
| 1215 | { | |
| 1216 | bitmap_argb32 tempbitmap2(ourwidth/num_shown, dest.height()); | |
| 1214 | if (m_file[fruit]) // render gfx | |
| 1215 | { | |
| 1216 | bitmap_argb32 tempbitmap2(ourwidth/num_shown, dest.height()); | |
| 1217 | 1217 | |
| 1218 | if (m_bitmap[fruit].valid()) | |
| 1219 | { | |
| 1220 | render_resample_argb_bitmap_hq(tempbitmap2, m_bitmap[fruit], m_color); | |
| 1218 | if (m_bitmap[fruit].valid()) | |
| 1219 | { | |
| 1220 | render_resample_argb_bitmap_hq(tempbitmap2, m_bitmap[fruit], m_color); | |
| 1221 | 1221 | |
| 1222 | for (int y = 0; y < dest.height(); y++) | |
| 1223 | { | |
| 1224 | int effy = y; | |
| 1222 | for (int y = 0; y < dest.height(); y++) | |
| 1223 | { | |
| 1224 | int effy = y; | |
| 1225 | 1225 | |
| 1226 | if (effy >= bounds.min_y && effy <= bounds.max_y) | |
| 1227 | { | |
| 1228 | UINT32 *src = &tempbitmap2.pix32(y); | |
| 1229 | UINT32 *d = &dest.pix32(effy); | |
| 1230 | for (int x = 0; x < ourwidth/num_shown; x++) | |
| 1231 | { | |
| 1232 | int effx = basex + x; | |
| 1233 | if (effx >= bounds.min_x && effx <= bounds.max_x) | |
| 1234 | { | |
| 1235 | UINT32 spix = rgb_t(src[x]).a(); | |
| 1236 | if (spix != 0) | |
| 1237 | { | |
| 1238 | d[effx] = src[x]; | |
| 1239 | } | |
| 1240 | } | |
| 1241 | } | |
| 1242 | } | |
| 1226 | if (effy >= bounds.min_y && effy <= bounds.max_y) | |
| 1227 | { | |
| 1228 | UINT32 *src = &tempbitmap2.pix32(y); | |
| 1229 | UINT32 *d = &dest.pix32(effy); | |
| 1230 | for (int x = 0; x < ourwidth/num_shown; x++) | |
| 1231 | { | |
| 1232 | int effx = basex + x; | |
| 1233 | if (effx >= bounds.min_x && effx <= bounds.max_x) | |
| 1234 | { | |
| 1235 | UINT32 spix = rgb_t(src[x]).a(); | |
| 1236 | if (spix != 0) | |
| 1237 | { | |
| 1238 | d[effx] = src[x]; | |
| 1239 | } | |
| 1240 | } | |
| 1241 | } | |
| 1242 | } | |
| 1243 | 1243 | |
| 1244 | } | |
| 1245 | } | |
| 1246 | } | |
| 1247 | else // render text (fallback) | |
| 1248 | { | |
| 1249 | // allocate a temporary bitmap | |
| 1250 | bitmap_argb32 tempbitmap(dest.width(), dest.height()); | |
| 1244 | } | |
| 1245 | } | |
| 1246 | } | |
| 1247 | else // render text (fallback) | |
| 1248 | { | |
| 1249 | // allocate a temporary bitmap | |
| 1250 | bitmap_argb32 tempbitmap(dest.width(), dest.height()); | |
| 1251 | 1251 | |
| 1252 | // loop over characters | |
| 1253 | for (const char *s = m_stopnames[fruit]; *s != 0; s++) | |
| 1254 | { | |
| 1255 | // get the font bitmap | |
| 1256 | rectangle chbounds; | |
| 1257 | font->get_scaled_bitmap_and_bounds(tempbitmap, dest.height(), aspect, *s, chbounds); | |
| 1252 | // loop over characters | |
| 1253 | for (const char *s = m_stopnames[fruit]; *s != 0; s++) | |
| 1254 | { | |
| 1255 | // get the font bitmap | |
| 1256 | rectangle chbounds; | |
| 1257 | font->get_scaled_bitmap_and_bounds(tempbitmap, dest.height(), aspect, *s, chbounds); | |
| 1258 | 1258 | |
| 1259 | // copy the data into the target | |
| 1260 | for (int y = 0; y < chbounds.height(); y++) | |
| 1261 | { | |
| 1262 | int effy = y; | |
| 1259 | // copy the data into the target | |
| 1260 | for (int y = 0; y < chbounds.height(); y++) | |
| 1261 | { | |
| 1262 | int effy = y; | |
| 1263 | 1263 | |
| 1264 | if (effy >= bounds.min_y && effy <= bounds.max_y) | |
| 1265 | { | |
| 1266 | UINT32 *src = &tempbitmap.pix32(y); | |
| 1267 | UINT32 *d = &dest.pix32(effy); | |
| 1268 | for (int x = 0; x < chbounds.width(); x++) | |
| 1269 | { | |
| 1270 | int effx = basex + curx + x; | |
| 1271 | if (effx >= bounds.min_x && effx <= bounds.max_x) | |
| 1272 | { | |
| 1273 | UINT32 spix = rgb_t(src[x]).a(); | |
| 1274 | if (spix != 0) | |
| 1275 | { | |
| 1276 | rgb_t dpix = d[effx]; | |
| 1277 | UINT32 ta = (a * (spix + 1)) >> 8; | |
| 1278 | UINT32 tr = (r * ta + dpix.r() * (0x100 - ta)) >> 8; | |
| 1279 | UINT32 tg = (g * ta + dpix.g() * (0x100 - ta)) >> 8; | |
| 1280 | UINT32 tb = (b * ta + dpix.b() * (0x100 - ta)) >> 8; | |
| 1281 | d[effx] = rgb_t(tr, tg, tb); | |
| 1282 | } | |
| 1283 | } | |
| 1284 | } | |
| 1285 | } | |
| 1286 | } | |
| 1264 | if (effy >= bounds.min_y && effy <= bounds.max_y) | |
| 1265 | { | |
| 1266 | UINT32 *src = &tempbitmap.pix32(y); | |
| 1267 | UINT32 *d = &dest.pix32(effy); | |
| 1268 | for (int x = 0; x < chbounds.width(); x++) | |
| 1269 | { | |
| 1270 | int effx = basex + curx + x; | |
| 1271 | if (effx >= bounds.min_x && effx <= bounds.max_x) | |
| 1272 | { | |
| 1273 | UINT32 spix = rgb_t(src[x]).a(); | |
| 1274 | if (spix != 0) | |
| 1275 | { | |
| 1276 | rgb_t dpix = d[effx]; | |
| 1277 | UINT32 ta = (a * (spix + 1)) >> 8; | |
| 1278 | UINT32 tr = (r * ta + dpix.r() * (0x100 - ta)) >> 8; | |
| 1279 | UINT32 tg = (g * ta + dpix.g() * (0x100 - ta)) >> 8; | |
| 1280 | UINT32 tb = (b * ta + dpix.b() * (0x100 - ta)) >> 8; | |
| 1281 | d[effx] = rgb_t(tr, tg, tb); | |
| 1282 | } | |
| 1283 | } | |
| 1284 | } | |
| 1285 | } | |
| 1286 | } | |
| 1287 | 1287 | |
| 1288 | // advance in the X direction | |
| 1289 | curx += font->char_width(dest.height(), aspect, *s); | |
| 1288 | // advance in the X direction | |
| 1289 | curx += font->char_width(dest.height(), aspect, *s); | |
| 1290 | 1290 | |
| 1291 | ||
| 1291 | } | |
| 1292 | 1292 | |
| 1293 | } | |
| 1294 | } | |
| 1293 | } | |
| 1294 | } | |
| 1295 | 1295 | |
| 1296 | currx += ourwidth/num_shown; | |
| 1297 | } | |
| 1296 | currx += ourwidth/num_shown; | |
| 1297 | } | |
| 1298 | 1298 | |
| 1299 | // free the temporary bitmap and font | |
| 1300 | machine.render().font_free(font); | |
| 1299 | // free the temporary bitmap and font | |
| 1300 | machine.render().font_free(font); | |
| 1301 | 1301 | } |
| 1302 | 1302 | |
| 1303 | 1303 | |
| r242703 | r242704 | |
| 1308 | 1308 | |
| 1309 | 1309 | void layout_element::component::load_bitmap() |
| 1310 | 1310 | { |
| 1311 | // load the basic bitmap | |
| 1312 | assert(m_file[0] != NULL); | |
| 1313 | m_hasalpha[0] = render_load_png(m_bitmap[0], *m_file[0], m_dirname, m_imagefile[0]); | |
| 1311 | // load the basic bitmap | |
| 1312 | assert(m_file[0] != NULL); | |
| 1313 | m_hasalpha[0] = render_load_png(m_bitmap[0], *m_file[0], m_dirname, m_imagefile[0]); | |
| 1314 | 1314 | |
| 1315 | // load the alpha bitmap if specified | |
| 1316 | if (m_bitmap[0].valid() && m_alphafile[0]) | |
| 1317 | render_load_png(m_bitmap[0], *m_file[0], m_dirname, m_alphafile[0], true); | |
| 1315 | // load the alpha bitmap if specified | |
| 1316 | if (m_bitmap[0].valid() && m_alphafile[0]) | |
| 1317 | render_load_png(m_bitmap[0], *m_file[0], m_dirname, m_alphafile[0], true); | |
| 1318 | 1318 | |
| 1319 | // if we can't load the bitmap, allocate a dummy one and report an error | |
| 1320 | if (!m_bitmap[0].valid()) | |
| 1321 | { | |
| 1322 | // draw some stripes in the bitmap | |
| 1323 | m_bitmap[0].allocate(100, 100); | |
| 1324 | m_bitmap[0].fill(0); | |
| 1325 | for (int step = 0; step < 100; step += 25) | |
| 1326 | for (int line = 0; line < 100; line++) | |
| 1327 | m_bitmap[0].pix32((step + line) % 100, line % 100) = rgb_t(0xff,0xff,0xff,0xff); | |
| 1319 | // if we can't load the bitmap, allocate a dummy one and report an error | |
| 1320 | if (!m_bitmap[0].valid()) | |
| 1321 | { | |
| 1322 | // draw some stripes in the bitmap | |
| 1323 | m_bitmap[0].allocate(100, 100); | |
| 1324 | m_bitmap[0].fill(0); | |
| 1325 | for (int step = 0; step < 100; step += 25) | |
| 1326 | for (int line = 0; line < 100; line++) | |
| 1327 | m_bitmap[0].pix32((step + line) % 100, line % 100) = rgb_t(0xff,0xff,0xff,0xff); | |
| 1328 | 1328 | |
| 1329 | // log an error | |
| 1330 | if (!m_alphafile[0]) | |
| 1331 | osd_printf_warning("Unable to load component bitmap '%s'\n", m_imagefile[0].cstr()); | |
| 1332 | else | |
| 1333 | osd_printf_warning("Unable to load component bitmap '%s'/'%s'\n", m_imagefile[0].cstr(), m_alphafile[0].cstr()); | |
| 1334 | } | |
| 1329 | // log an error | |
| 1330 | if (!m_alphafile[0]) | |
| 1331 | osd_printf_warning("Unable to load component bitmap '%s'\n", m_imagefile[0].cstr()); | |
| 1332 | else | |
| 1333 | osd_printf_warning("Unable to load component bitmap '%s'/'%s'\n", m_imagefile[0].cstr(), m_alphafile[0].cstr()); | |
| 1334 | } | |
| 1335 | 1335 | } |
| 1336 | 1336 | |
| 1337 | 1337 | |
| 1338 | 1338 | void layout_element::component::load_reel_bitmap(int number) |
| 1339 | 1339 | { |
| 1340 | // load the basic bitmap | |
| 1341 | assert(m_file != NULL); | |
| 1342 | /*m_hasalpha[number] = */ render_load_png(m_bitmap[number], *m_file[number], m_dirname, m_imagefile[number]); | |
| 1340 | // load the basic bitmap | |
| 1341 | assert(m_file != NULL); | |
| 1342 | /*m_hasalpha[number] = */ render_load_png(m_bitmap[number], *m_file[number], m_dirname, m_imagefile[number]); | |
| 1343 | 1343 | |
| 1344 | // load the alpha bitmap if specified | |
| 1345 | //if (m_bitmap[number].valid() && m_alphafile[number]) | |
| 1346 | // render_load_png(m_bitmap[number], *m_file[number], m_dirname, m_alphafile[number], true); | |
| 1344 | // load the alpha bitmap if specified | |
| 1345 | //if (m_bitmap[number].valid() && m_alphafile[number]) | |
| 1346 | // render_load_png(m_bitmap[number], *m_file[number], m_dirname, m_alphafile[number], true); | |
| 1347 | 1347 | |
| 1348 | // if we can't load the bitmap just use text rendering | |
| 1349 | if (!m_bitmap[number].valid()) | |
| 1350 | { | |
| 1351 | // fallback to text rendering | |
| 1352 | m_file[number].reset(); | |
| 1353 | } | |
| 1348 | // if we can't load the bitmap just use text rendering | |
| 1349 | if (!m_bitmap[number].valid()) | |
| 1350 | { | |
| 1351 | // fallback to text rendering | |
| 1352 | m_file[number].reset(); | |
| 1353 | } | |
| 1354 | 1354 | |
| 1355 | 1355 | } |
| 1356 | 1356 | |
| r242703 | r242704 | |
| 1362 | 1362 | |
| 1363 | 1363 | void layout_element::component::draw_led7seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern) |
| 1364 | 1364 | { |
| 1365 | const rgb_t onpen = rgb_t(0xff,0xff,0xff,0xff); | |
| 1366 | const rgb_t offpen = rgb_t(0xff,0x20,0x20,0x20); | |
| 1365 | const rgb_t onpen = rgb_t(0xff,0xff,0xff,0xff); | |
| 1366 | const rgb_t offpen = rgb_t(0xff,0x20,0x20,0x20); | |
| 1367 | 1367 | |
| 1368 | // sizes for computation | |
| 1369 | int bmwidth = 250; | |
| 1370 | int bmheight = 400; | |
| 1371 | int segwidth = 40; | |
| 1372 | int skewwidth = 40; | |
| 1368 | // sizes for computation | |
| 1369 | int bmwidth = 250; | |
| 1370 | int bmheight = 400; | |
| 1371 | int segwidth = 40; | |
| 1372 | int skewwidth = 40; | |
| 1373 | 1373 | |
| 1374 | // allocate a temporary bitmap for drawing | |
| 1375 | bitmap_argb32 tempbitmap(bmwidth + skewwidth, bmheight); | |
| 1376 | tempbitmap.fill(rgb_t(0xff,0x00,0x00,0x00)); | |
| 1374 | // allocate a temporary bitmap for drawing | |
| 1375 | bitmap_argb32 tempbitmap(bmwidth + skewwidth, bmheight); | |
| 1376 | tempbitmap.fill(rgb_t(0xff,0x00,0x00,0x00)); | |
| 1377 | 1377 | |
| 1378 | // top bar | |
| 1379 | draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, 0 + segwidth/2, segwidth, (pattern & (1 << 0)) ? onpen : offpen); | |
| 1378 | // top bar | |
| 1379 | draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, 0 + segwidth/2, segwidth, (pattern & (1 << 0)) ? onpen : offpen); | |
| 1380 | 1380 | |
| 1381 | // top-right bar | |
| 1382 | draw_segment_vertical(tempbitmap, 0 + 2*segwidth/3, bmheight/2 - segwidth/3, bmwidth - segwidth/2, segwidth, (pattern & (1 << 1)) ? onpen : offpen); | |
| 1381 | // top-right bar | |
| 1382 | draw_segment_vertical(tempbitmap, 0 + 2*segwidth/3, bmheight/2 - segwidth/3, bmwidth - segwidth/2, segwidth, (pattern & (1 << 1)) ? onpen : offpen); | |
| 1383 | 1383 | |
| 1384 | // bottom-right bar | |
| 1385 | draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, bmwidth - segwidth/2, segwidth, (pattern & (1 << 2)) ? onpen : offpen); | |
| 1384 | // bottom-right bar | |
| 1385 | draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, bmwidth - segwidth/2, segwidth, (pattern & (1 << 2)) ? onpen : offpen); | |
| 1386 | 1386 | |
| 1387 | // bottom bar | |
| 1388 | draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, bmheight - segwidth/2, segwidth, (pattern & (1 << 3)) ? onpen : offpen); | |
| 1387 | // bottom bar | |
| 1388 | draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, bmheight - segwidth/2, segwidth, (pattern & (1 << 3)) ? onpen : offpen); | |
| 1389 | 1389 | |
| 1390 | // bottom-left bar | |
| 1391 | draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 0 + segwidth/2, segwidth, (pattern & (1 << 4)) ? onpen : offpen); | |
| 1390 | // bottom-left bar | |
| 1391 | draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 0 + segwidth/2, segwidth, (pattern & (1 << 4)) ? onpen : offpen); | |
| 1392 | 1392 | |
| 1393 | // top-left bar | |
| 1394 | draw_segment_vertical(tempbitmap, 0 + 2*segwidth/3, bmheight/2 - segwidth/3, 0 + segwidth/2, segwidth, (pattern & (1 << 5)) ? onpen : offpen); | |
| 1393 | // top-left bar | |
| 1394 | draw_segment_vertical(tempbitmap, 0 + 2*segwidth/3, bmheight/2 - segwidth/3, 0 + segwidth/2, segwidth, (pattern & (1 << 5)) ? onpen : offpen); | |
| 1395 | 1395 | |
| 1396 | // middle bar | |
| 1397 | draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, bmheight/2, segwidth, (pattern & (1 << 6)) ? onpen : offpen); | |
| 1396 | // middle bar | |
| 1397 | draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, bmheight/2, segwidth, (pattern & (1 << 6)) ? onpen : offpen); | |
| 1398 | 1398 | |
| 1399 | // apply skew | |
| 1400 | apply_skew(tempbitmap, 40); | |
| 1399 | // apply skew | |
| 1400 | apply_skew(tempbitmap, 40); | |
| 1401 | 1401 | |
| 1402 | // decimal point | |
| 1403 | draw_segment_decimal(tempbitmap, bmwidth + segwidth/2, bmheight - segwidth/2, segwidth, (pattern & (1 << 7)) ? onpen : offpen); | |
| 1402 | // decimal point | |
| 1403 | draw_segment_decimal(tempbitmap, bmwidth + segwidth/2, bmheight - segwidth/2, segwidth, (pattern & (1 << 7)) ? onpen : offpen); | |
| 1404 | 1404 | |
| 1405 | // resample to the target size | |
| 1406 | render_resample_argb_bitmap_hq(dest, tempbitmap, m_color); | |
| 1405 | // resample to the target size | |
| 1406 | render_resample_argb_bitmap_hq(dest, tempbitmap, m_color); | |
| 1407 | 1407 | } |
| 1408 | 1408 | |
| 1409 | 1409 | |
| r242703 | r242704 | |
| 1413 | 1413 | |
| 1414 | 1414 | void layout_element::component::draw_led8seg_gts1(bitmap_argb32 &dest, const rectangle &bounds, int pattern) |
| 1415 | 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); | |
| 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 | 1419 | |
| 1420 | // sizes for computation | |
| 1421 | int bmwidth = 250; | |
| 1422 | int bmheight = 400; | |
| 1423 | int segwidth = 40; | |
| 1424 | int skewwidth = 40; | |
| 1420 | // sizes for computation | |
| 1421 | int bmwidth = 250; | |
| 1422 | int bmheight = 400; | |
| 1423 | int segwidth = 40; | |
| 1424 | int skewwidth = 40; | |
| 1425 | 1425 | |
| 1426 | // allocate a temporary bitmap for drawing | |
| 1427 | bitmap_argb32 tempbitmap(bmwidth + skewwidth, bmheight); | |
| 1428 | tempbitmap.fill(backpen); | |
| 1426 | // allocate a temporary bitmap for drawing | |
| 1427 | bitmap_argb32 tempbitmap(bmwidth + skewwidth, bmheight); | |
| 1428 | tempbitmap.fill(backpen); | |
| 1429 | 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); | |
| 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 | 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); | |
| 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 | 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); | |
| 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 | 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); | |
| 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 | 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); | |
| 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 | 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); | |
| 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 | 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); | |
| 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 | 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); | |
| 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 | 1455 | |
| 1456 | draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3 - 2, bmheight - segwidth/3 + 8, 2*bmwidth/3 - segwidth/2 - 4, segwidth + 8, backpen); | |
| 1457 | draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3, bmheight - segwidth/3, 2*bmwidth/3 - segwidth/2 - 4, segwidth, (pattern & (1 << 7)) ? onpen : offpen); | |
| 1456 | draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3 - 2, bmheight - segwidth/3 + 8, 2*bmwidth/3 - segwidth/2 - 4, segwidth + 8, backpen); | |
| 1457 | draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3, bmheight - segwidth/3, 2*bmwidth/3 - segwidth/2 - 4, segwidth, (pattern & (1 << 7)) ? onpen : offpen); | |
| 1458 | 1458 | |
| 1459 | // apply skew | |
| 1460 | apply_skew(tempbitmap, 40); | |
| 1459 | // apply skew | |
| 1460 | apply_skew(tempbitmap, 40); | |
| 1461 | 1461 | |
| 1462 | // resample to the target size | |
| 1463 | render_resample_argb_bitmap_hq(dest, tempbitmap, m_color); | |
| 1462 | // resample to the target size | |
| 1463 | render_resample_argb_bitmap_hq(dest, tempbitmap, m_color); | |
| 1464 | 1464 | } |
| 1465 | 1465 | |
| 1466 | 1466 | |
| r242703 | r242704 | |
| 1470 | 1470 | |
| 1471 | 1471 | void layout_element::component::draw_led14seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern) |
| 1472 | 1472 | { |
| 1473 | const rgb_t onpen = rgb_t(0xff, 0xff, 0xff, 0xff); | |
| 1474 | const rgb_t offpen = rgb_t(0xff, 0x20, 0x20, 0x20); | |
| 1473 | const rgb_t onpen = rgb_t(0xff, 0xff, 0xff, 0xff); | |
| 1474 | const rgb_t offpen = rgb_t(0xff, 0x20, 0x20, 0x20); | |
| 1475 | 1475 | |
| 1476 | // sizes for computation | |
| 1477 | int bmwidth = 250; | |
| 1478 | int bmheight = 400; | |
| 1479 | int segwidth = 40; | |
| 1480 | int skewwidth = 40; | |
| 1476 | // sizes for computation | |
| 1477 | int bmwidth = 250; | |
| 1478 | int bmheight = 400; | |
| 1479 | int segwidth = 40; | |
| 1480 | int skewwidth = 40; | |
| 1481 | 1481 | |
| 1482 | // allocate a temporary bitmap for drawing | |
| 1483 | bitmap_argb32 tempbitmap(bmwidth + skewwidth, bmheight); | |
| 1484 | tempbitmap.fill(rgb_t(0xff, 0x00, 0x00, 0x00)); | |
| 1482 | // allocate a temporary bitmap for drawing | |
| 1483 | bitmap_argb32 tempbitmap(bmwidth + skewwidth, bmheight); | |
| 1484 | tempbitmap.fill(rgb_t(0xff, 0x00, 0x00, 0x00)); | |
| 1485 | 1485 | |
| 1486 | // top bar | |
| 1487 | draw_segment_horizontal(tempbitmap, | |
| 1488 | 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, 0 + segwidth/2, | |
| 1489 | segwidth, (pattern & (1 << 0)) ? onpen : offpen); | |
| 1486 | // top bar | |
| 1487 | draw_segment_horizontal(tempbitmap, | |
| 1488 | 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, 0 + segwidth/2, | |
| 1489 | segwidth, (pattern & (1 << 0)) ? onpen : offpen); | |
| 1490 | 1490 | |
| 1491 | // right-top bar | |
| 1492 | draw_segment_vertical(tempbitmap, | |
| 1493 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, bmwidth - segwidth/2, | |
| 1494 | segwidth, (pattern & (1 << 1)) ? onpen : offpen); | |
| 1491 | // right-top bar | |
| 1492 | draw_segment_vertical(tempbitmap, | |
| 1493 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, bmwidth - segwidth/2, | |
| 1494 | segwidth, (pattern & (1 << 1)) ? onpen : offpen); | |
| 1495 | 1495 | |
| 1496 | // right-bottom bar | |
| 1497 | draw_segment_vertical(tempbitmap, | |
| 1498 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, bmwidth - segwidth/2, | |
| 1499 | segwidth, (pattern & (1 << 2)) ? onpen : offpen); | |
| 1496 | // right-bottom bar | |
| 1497 | draw_segment_vertical(tempbitmap, | |
| 1498 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, bmwidth - segwidth/2, | |
| 1499 | segwidth, (pattern & (1 << 2)) ? onpen : offpen); | |
| 1500 | 1500 | |
| 1501 | // bottom bar | |
| 1502 | draw_segment_horizontal(tempbitmap, | |
| 1503 | 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, bmheight - segwidth/2, | |
| 1504 | segwidth, (pattern & (1 << 3)) ? onpen : offpen); | |
| 1501 | // bottom bar | |
| 1502 | draw_segment_horizontal(tempbitmap, | |
| 1503 | 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, bmheight - segwidth/2, | |
| 1504 | segwidth, (pattern & (1 << 3)) ? onpen : offpen); | |
| 1505 | 1505 | |
| 1506 | // left-bottom bar | |
| 1507 | draw_segment_vertical(tempbitmap, | |
| 1508 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 0 + segwidth/2, | |
| 1509 | segwidth, (pattern & (1 << 4)) ? onpen : offpen); | |
| 1506 | // left-bottom bar | |
| 1507 | draw_segment_vertical(tempbitmap, | |
| 1508 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 0 + segwidth/2, | |
| 1509 | segwidth, (pattern & (1 << 4)) ? onpen : offpen); | |
| 1510 | 1510 | |
| 1511 | // left-top bar | |
| 1512 | draw_segment_vertical(tempbitmap, | |
| 1513 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, 0 + segwidth/2, | |
| 1514 | segwidth, (pattern & (1 << 5)) ? onpen : offpen); | |
| 1511 | // left-top bar | |
| 1512 | draw_segment_vertical(tempbitmap, | |
| 1513 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, 0 + segwidth/2, | |
| 1514 | segwidth, (pattern & (1 << 5)) ? onpen : offpen); | |
| 1515 | 1515 | |
| 1516 | // horizontal-middle-left bar | |
| 1517 | draw_segment_horizontal_caps(tempbitmap, | |
| 1518 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, bmheight/2, | |
| 1519 | segwidth, LINE_CAP_START, (pattern & (1 << 6)) ? onpen : offpen); | |
| 1516 | // horizontal-middle-left bar | |
| 1517 | draw_segment_horizontal_caps(tempbitmap, | |
| 1518 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, bmheight/2, | |
| 1519 | segwidth, LINE_CAP_START, (pattern & (1 << 6)) ? onpen : offpen); | |
| 1520 | 1520 | |
| 1521 | // horizontal-middle-right bar | |
| 1522 | draw_segment_horizontal_caps(tempbitmap, | |
| 1523 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, bmheight/2, | |
| 1524 | segwidth, LINE_CAP_END, (pattern & (1 << 7)) ? onpen : offpen); | |
| 1521 | // horizontal-middle-right bar | |
| 1522 | draw_segment_horizontal_caps(tempbitmap, | |
| 1523 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, bmheight/2, | |
| 1524 | segwidth, LINE_CAP_END, (pattern & (1 << 7)) ? onpen : offpen); | |
| 1525 | 1525 | |
| 1526 | // vertical-middle-top bar | |
| 1527 | draw_segment_vertical_caps(tempbitmap, | |
| 1528 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, bmwidth/2, | |
| 1529 | segwidth, LINE_CAP_NONE, (pattern & (1 << 8)) ? onpen : offpen); | |
| 1526 | // vertical-middle-top bar | |
| 1527 | draw_segment_vertical_caps(tempbitmap, | |
| 1528 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, bmwidth/2, | |
| 1529 | segwidth, LINE_CAP_NONE, (pattern & (1 << 8)) ? onpen : offpen); | |
| 1530 | 1530 | |
| 1531 | // vertical-middle-bottom bar | |
| 1532 | draw_segment_vertical_caps(tempbitmap, | |
| 1533 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, bmwidth/2, | |
| 1534 | segwidth, LINE_CAP_NONE, (pattern & (1 << 9)) ? onpen : offpen); | |
| 1531 | // vertical-middle-bottom bar | |
| 1532 | draw_segment_vertical_caps(tempbitmap, | |
| 1533 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, bmwidth/2, | |
| 1534 | segwidth, LINE_CAP_NONE, (pattern & (1 << 9)) ? onpen : offpen); | |
| 1535 | 1535 | |
| 1536 | // diagonal-left-bottom bar | |
| 1537 | draw_segment_diagonal_1(tempbitmap, | |
| 1538 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1539 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1540 | segwidth, (pattern & (1 << 10)) ? onpen : offpen); | |
| 1536 | // diagonal-left-bottom bar | |
| 1537 | draw_segment_diagonal_1(tempbitmap, | |
| 1538 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1539 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1540 | segwidth, (pattern & (1 << 10)) ? onpen : offpen); | |
| 1541 | 1541 | |
| 1542 | // diagonal-left-top bar | |
| 1543 | draw_segment_diagonal_2(tempbitmap, | |
| 1544 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1545 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1546 | segwidth, (pattern & (1 << 11)) ? onpen : offpen); | |
| 1542 | // diagonal-left-top bar | |
| 1543 | draw_segment_diagonal_2(tempbitmap, | |
| 1544 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1545 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1546 | segwidth, (pattern & (1 << 11)) ? onpen : offpen); | |
| 1547 | 1547 | |
| 1548 | // diagonal-right-top bar | |
| 1549 | draw_segment_diagonal_1(tempbitmap, | |
| 1550 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1551 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1552 | segwidth, (pattern & (1 << 12)) ? onpen : offpen); | |
| 1548 | // diagonal-right-top bar | |
| 1549 | draw_segment_diagonal_1(tempbitmap, | |
| 1550 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1551 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1552 | segwidth, (pattern & (1 << 12)) ? onpen : offpen); | |
| 1553 | 1553 | |
| 1554 | // diagonal-right-bottom bar | |
| 1555 | draw_segment_diagonal_2(tempbitmap, | |
| 1556 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1557 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1558 | segwidth, (pattern & (1 << 13)) ? onpen : offpen); | |
| 1554 | // diagonal-right-bottom bar | |
| 1555 | draw_segment_diagonal_2(tempbitmap, | |
| 1556 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1557 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1558 | segwidth, (pattern & (1 << 13)) ? onpen : offpen); | |
| 1559 | 1559 | |
| 1560 | // apply skew | |
| 1561 | apply_skew(tempbitmap, 40); | |
| 1560 | // apply skew | |
| 1561 | apply_skew(tempbitmap, 40); | |
| 1562 | 1562 | |
| 1563 | // resample to the target size | |
| 1564 | render_resample_argb_bitmap_hq(dest, tempbitmap, m_color); | |
| 1563 | // resample to the target size | |
| 1564 | render_resample_argb_bitmap_hq(dest, tempbitmap, m_color); | |
| 1565 | 1565 | } |
| 1566 | 1566 | |
| 1567 | 1567 | |
| r242703 | r242704 | |
| 1572 | 1572 | |
| 1573 | 1573 | void layout_element::component::draw_led14segsc(bitmap_argb32 &dest, const rectangle &bounds, int pattern) |
| 1574 | 1574 | { |
| 1575 | const rgb_t onpen = rgb_t(0xff, 0xff, 0xff, 0xff); | |
| 1576 | const rgb_t offpen = rgb_t(0xff, 0x20, 0x20, 0x20); | |
| 1575 | const rgb_t onpen = rgb_t(0xff, 0xff, 0xff, 0xff); | |
| 1576 | const rgb_t offpen = rgb_t(0xff, 0x20, 0x20, 0x20); | |
| 1577 | 1577 | |
| 1578 | // sizes for computation | |
| 1579 | int bmwidth = 250; | |
| 1580 | int bmheight = 400; | |
| 1581 | int segwidth = 40; | |
| 1582 | int skewwidth = 40; | |
| 1578 | // sizes for computation | |
| 1579 | int bmwidth = 250; | |
| 1580 | int bmheight = 400; | |
| 1581 | int segwidth = 40; | |
| 1582 | int skewwidth = 40; | |
| 1583 | 1583 | |
| 1584 | // allocate a temporary bitmap for drawing, adding some extra space for the tail | |
| 1585 | bitmap_argb32 tempbitmap(bmwidth + skewwidth, bmheight + segwidth); | |
| 1586 | tempbitmap.fill(rgb_t(0xff, 0x00, 0x00, 0x00)); | |
| 1584 | // allocate a temporary bitmap for drawing, adding some extra space for the tail | |
| 1585 | bitmap_argb32 tempbitmap(bmwidth + skewwidth, bmheight + segwidth); | |
| 1586 | tempbitmap.fill(rgb_t(0xff, 0x00, 0x00, 0x00)); | |
| 1587 | 1587 | |
| 1588 | // top bar | |
| 1589 | draw_segment_horizontal(tempbitmap, | |
| 1590 | 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, 0 + segwidth/2, | |
| 1591 | segwidth, (pattern & (1 << 0)) ? onpen : offpen); | |
| 1588 | // top bar | |
| 1589 | draw_segment_horizontal(tempbitmap, | |
| 1590 | 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, 0 + segwidth/2, | |
| 1591 | segwidth, (pattern & (1 << 0)) ? onpen : offpen); | |
| 1592 | 1592 | |
| 1593 | // right-top bar | |
| 1594 | draw_segment_vertical(tempbitmap, | |
| 1595 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, bmwidth - segwidth/2, | |
| 1596 | segwidth, (pattern & (1 << 1)) ? onpen : offpen); | |
| 1593 | // right-top bar | |
| 1594 | draw_segment_vertical(tempbitmap, | |
| 1595 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, bmwidth - segwidth/2, | |
| 1596 | segwidth, (pattern & (1 << 1)) ? onpen : offpen); | |
| 1597 | 1597 | |
| 1598 | // right-bottom bar | |
| 1599 | draw_segment_vertical(tempbitmap, | |
| 1600 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, bmwidth - segwidth/2, | |
| 1601 | segwidth, (pattern & (1 << 2)) ? onpen : offpen); | |
| 1598 | // right-bottom bar | |
| 1599 | draw_segment_vertical(tempbitmap, | |
| 1600 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, bmwidth - segwidth/2, | |
| 1601 | segwidth, (pattern & (1 << 2)) ? onpen : offpen); | |
| 1602 | 1602 | |
| 1603 | // bottom bar | |
| 1604 | draw_segment_horizontal(tempbitmap, | |
| 1605 | 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, bmheight - segwidth/2, | |
| 1606 | segwidth, (pattern & (1 << 3)) ? onpen : offpen); | |
| 1603 | // bottom bar | |
| 1604 | draw_segment_horizontal(tempbitmap, | |
| 1605 | 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, bmheight - segwidth/2, | |
| 1606 | segwidth, (pattern & (1 << 3)) ? onpen : offpen); | |
| 1607 | 1607 | |
| 1608 | // left-bottom bar | |
| 1609 | draw_segment_vertical(tempbitmap, | |
| 1610 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 0 + segwidth/2, | |
| 1611 | segwidth, (pattern & (1 << 4)) ? onpen : offpen); | |
| 1608 | // left-bottom bar | |
| 1609 | draw_segment_vertical(tempbitmap, | |
| 1610 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 0 + segwidth/2, | |
| 1611 | segwidth, (pattern & (1 << 4)) ? onpen : offpen); | |
| 1612 | 1612 | |
| 1613 | // left-top bar | |
| 1614 | draw_segment_vertical(tempbitmap, | |
| 1615 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, 0 + segwidth/2, | |
| 1616 | segwidth, (pattern & (1 << 5)) ? onpen : offpen); | |
| 1613 | // left-top bar | |
| 1614 | draw_segment_vertical(tempbitmap, | |
| 1615 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, 0 + segwidth/2, | |
| 1616 | segwidth, (pattern & (1 << 5)) ? onpen : offpen); | |
| 1617 | 1617 | |
| 1618 | // horizontal-middle-left bar | |
| 1619 | draw_segment_horizontal_caps(tempbitmap, | |
| 1620 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, bmheight/2, | |
| 1621 | segwidth, LINE_CAP_START, (pattern & (1 << 6)) ? onpen : offpen); | |
| 1618 | // horizontal-middle-left bar | |
| 1619 | draw_segment_horizontal_caps(tempbitmap, | |
| 1620 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, bmheight/2, | |
| 1621 | segwidth, LINE_CAP_START, (pattern & (1 << 6)) ? onpen : offpen); | |
| 1622 | 1622 | |
| 1623 | // horizontal-middle-right bar | |
| 1624 | draw_segment_horizontal_caps(tempbitmap, | |
| 1625 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, bmheight/2, | |
| 1626 | segwidth, LINE_CAP_END, (pattern & (1 << 7)) ? onpen : offpen); | |
| 1623 | // horizontal-middle-right bar | |
| 1624 | draw_segment_horizontal_caps(tempbitmap, | |
| 1625 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, bmheight/2, | |
| 1626 | segwidth, LINE_CAP_END, (pattern & (1 << 7)) ? onpen : offpen); | |
| 1627 | 1627 | |
| 1628 | // vertical-middle-top bar | |
| 1629 | draw_segment_vertical_caps(tempbitmap, | |
| 1630 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, bmwidth/2, | |
| 1631 | segwidth, LINE_CAP_NONE, (pattern & (1 << 8)) ? onpen : offpen); | |
| 1628 | // vertical-middle-top bar | |
| 1629 | draw_segment_vertical_caps(tempbitmap, | |
| 1630 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, bmwidth/2, | |
| 1631 | segwidth, LINE_CAP_NONE, (pattern & (1 << 8)) ? onpen : offpen); | |
| 1632 | 1632 | |
| 1633 | // vertical-middle-bottom bar | |
| 1634 | draw_segment_vertical_caps(tempbitmap, | |
| 1635 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, bmwidth/2, | |
| 1636 | segwidth, LINE_CAP_NONE, (pattern & (1 << 9)) ? onpen : offpen); | |
| 1633 | // vertical-middle-bottom bar | |
| 1634 | draw_segment_vertical_caps(tempbitmap, | |
| 1635 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, bmwidth/2, | |
| 1636 | segwidth, LINE_CAP_NONE, (pattern & (1 << 9)) ? onpen : offpen); | |
| 1637 | 1637 | |
| 1638 | // diagonal-left-bottom bar | |
| 1639 | draw_segment_diagonal_1(tempbitmap, | |
| 1640 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1641 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1642 | segwidth, (pattern & (1 << 10)) ? onpen : offpen); | |
| 1638 | // diagonal-left-bottom bar | |
| 1639 | draw_segment_diagonal_1(tempbitmap, | |
| 1640 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1641 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1642 | segwidth, (pattern & (1 << 10)) ? onpen : offpen); | |
| 1643 | 1643 | |
| 1644 | // diagonal-left-top bar | |
| 1645 | draw_segment_diagonal_2(tempbitmap, | |
| 1646 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1647 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1648 | segwidth, (pattern & (1 << 11)) ? onpen : offpen); | |
| 1644 | // diagonal-left-top bar | |
| 1645 | draw_segment_diagonal_2(tempbitmap, | |
| 1646 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1647 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1648 | segwidth, (pattern & (1 << 11)) ? onpen : offpen); | |
| 1649 | 1649 | |
| 1650 | // diagonal-right-top bar | |
| 1651 | draw_segment_diagonal_1(tempbitmap, | |
| 1652 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1653 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1654 | segwidth, (pattern & (1 << 12)) ? onpen : offpen); | |
| 1650 | // diagonal-right-top bar | |
| 1651 | draw_segment_diagonal_1(tempbitmap, | |
| 1652 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1653 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1654 | segwidth, (pattern & (1 << 12)) ? onpen : offpen); | |
| 1655 | 1655 | |
| 1656 | // diagonal-right-bottom bar | |
| 1657 | draw_segment_diagonal_2(tempbitmap, | |
| 1658 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1659 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1660 | segwidth, (pattern & (1 << 13)) ? onpen : offpen); | |
| 1656 | // diagonal-right-bottom bar | |
| 1657 | draw_segment_diagonal_2(tempbitmap, | |
| 1658 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1659 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1660 | segwidth, (pattern & (1 << 13)) ? onpen : offpen); | |
| 1661 | 1661 | |
| 1662 | // apply skew | |
| 1663 | apply_skew(tempbitmap, 40); | |
| 1662 | // apply skew | |
| 1663 | apply_skew(tempbitmap, 40); | |
| 1664 | 1664 | |
| 1665 | // comma tail | |
| 1666 | draw_segment_diagonal_1(tempbitmap, | |
| 1667 | bmwidth - (segwidth/2), bmwidth + segwidth, | |
| 1668 | bmheight - (segwidth), bmheight + segwidth*1.5, | |
| 1669 | segwidth/2, (pattern & (1 << 15)) ? onpen : offpen); | |
| 1665 | // comma tail | |
| 1666 | draw_segment_diagonal_1(tempbitmap, | |
| 1667 | bmwidth - (segwidth/2), bmwidth + segwidth, | |
| 1668 | bmheight - (segwidth), bmheight + segwidth*1.5, | |
| 1669 | segwidth/2, (pattern & (1 << 15)) ? onpen : offpen); | |
| 1670 | 1670 | |
| 1671 | // decimal point | |
| 1672 | draw_segment_decimal(tempbitmap, bmwidth + segwidth/2, bmheight - segwidth/2, segwidth, (pattern & (1 << 14)) ? onpen : offpen); | |
| 1671 | // decimal point | |
| 1672 | draw_segment_decimal(tempbitmap, bmwidth + segwidth/2, bmheight - segwidth/2, segwidth, (pattern & (1 << 14)) ? onpen : offpen); | |
| 1673 | 1673 | |
| 1674 | // resample to the target size | |
| 1675 | render_resample_argb_bitmap_hq(dest, tempbitmap, m_color); | |
| 1674 | // resample to the target size | |
| 1675 | render_resample_argb_bitmap_hq(dest, tempbitmap, m_color); | |
| 1676 | 1676 | } |
| 1677 | 1677 | |
| 1678 | 1678 | |
| r242703 | r242704 | |
| 1682 | 1682 | |
| 1683 | 1683 | void layout_element::component::draw_led16seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern) |
| 1684 | 1684 | { |
| 1685 | const rgb_t onpen = rgb_t(0xff, 0xff, 0xff, 0xff); | |
| 1686 | const rgb_t offpen = rgb_t(0xff, 0x20, 0x20, 0x20); | |
| 1685 | const rgb_t onpen = rgb_t(0xff, 0xff, 0xff, 0xff); | |
| 1686 | const rgb_t offpen = rgb_t(0xff, 0x20, 0x20, 0x20); | |
| 1687 | 1687 | |
| 1688 | // sizes for computation | |
| 1689 | int bmwidth = 250; | |
| 1690 | int bmheight = 400; | |
| 1691 | int segwidth = 40; | |
| 1692 | int skewwidth = 40; | |
| 1688 | // sizes for computation | |
| 1689 | int bmwidth = 250; | |
| 1690 | int bmheight = 400; | |
| 1691 | int segwidth = 40; | |
| 1692 | int skewwidth = 40; | |
| 1693 | 1693 | |
| 1694 | // allocate a temporary bitmap for drawing | |
| 1695 | bitmap_argb32 tempbitmap(bmwidth + skewwidth, bmheight); | |
| 1696 | tempbitmap.fill(rgb_t(0xff, 0x00, 0x00, 0x00)); | |
| 1694 | // allocate a temporary bitmap for drawing | |
| 1695 | bitmap_argb32 tempbitmap(bmwidth + skewwidth, bmheight); | |
| 1696 | tempbitmap.fill(rgb_t(0xff, 0x00, 0x00, 0x00)); | |
| 1697 | 1697 | |
| 1698 | // top-left bar | |
| 1699 | draw_segment_horizontal_caps(tempbitmap, | |
| 1700 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, 0 + segwidth/2, | |
| 1701 | segwidth, LINE_CAP_START, (pattern & (1 << 0)) ? onpen : offpen); | |
| 1698 | // top-left bar | |
| 1699 | draw_segment_horizontal_caps(tempbitmap, | |
| 1700 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, 0 + segwidth/2, | |
| 1701 | segwidth, LINE_CAP_START, (pattern & (1 << 0)) ? onpen : offpen); | |
| 1702 | 1702 | |
| 1703 | // top-right bar | |
| 1704 | draw_segment_horizontal_caps(tempbitmap, | |
| 1705 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, 0 + segwidth/2, | |
| 1706 | segwidth, LINE_CAP_END, (pattern & (1 << 1)) ? onpen : offpen); | |
| 1703 | // top-right bar | |
| 1704 | draw_segment_horizontal_caps(tempbitmap, | |
| 1705 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, 0 + segwidth/2, | |
| 1706 | segwidth, LINE_CAP_END, (pattern & (1 << 1)) ? onpen : offpen); | |
| 1707 | 1707 | |
| 1708 | // right-top bar | |
| 1709 | draw_segment_vertical(tempbitmap, | |
| 1710 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, bmwidth - segwidth/2, | |
| 1711 | segwidth, (pattern & (1 << 2)) ? onpen : offpen); | |
| 1708 | // right-top bar | |
| 1709 | draw_segment_vertical(tempbitmap, | |
| 1710 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, bmwidth - segwidth/2, | |
| 1711 | segwidth, (pattern & (1 << 2)) ? onpen : offpen); | |
| 1712 | 1712 | |
| 1713 | // right-bottom bar | |
| 1714 | draw_segment_vertical(tempbitmap, | |
| 1715 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, bmwidth - segwidth/2, | |
| 1716 | segwidth, (pattern & (1 << 3)) ? onpen : offpen); | |
| 1713 | // right-bottom bar | |
| 1714 | draw_segment_vertical(tempbitmap, | |
| 1715 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, bmwidth - segwidth/2, | |
| 1716 | segwidth, (pattern & (1 << 3)) ? onpen : offpen); | |
| 1717 | 1717 | |
| 1718 | // bottom-right bar | |
| 1719 | draw_segment_horizontal_caps(tempbitmap, | |
| 1720 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, bmheight - segwidth/2, | |
| 1721 | segwidth, LINE_CAP_END, (pattern & (1 << 4)) ? onpen : offpen); | |
| 1718 | // bottom-right bar | |
| 1719 | draw_segment_horizontal_caps(tempbitmap, | |
| 1720 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, bmheight - segwidth/2, | |
| 1721 | segwidth, LINE_CAP_END, (pattern & (1 << 4)) ? onpen : offpen); | |
| 1722 | 1722 | |
| 1723 | // bottom-left bar | |
| 1724 | draw_segment_horizontal_caps(tempbitmap, | |
| 1725 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, bmheight - segwidth/2, | |
| 1726 | segwidth, LINE_CAP_START, (pattern & (1 << 5)) ? onpen : offpen); | |
| 1723 | // bottom-left bar | |
| 1724 | draw_segment_horizontal_caps(tempbitmap, | |
| 1725 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, bmheight - segwidth/2, | |
| 1726 | segwidth, LINE_CAP_START, (pattern & (1 << 5)) ? onpen : offpen); | |
| 1727 | 1727 | |
| 1728 | // left-bottom bar | |
| 1729 | draw_segment_vertical(tempbitmap, | |
| 1730 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 0 + segwidth/2, | |
| 1731 | segwidth, (pattern & (1 << 6)) ? onpen : offpen); | |
| 1728 | // left-bottom bar | |
| 1729 | draw_segment_vertical(tempbitmap, | |
| 1730 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 0 + segwidth/2, | |
| 1731 | segwidth, (pattern & (1 << 6)) ? onpen : offpen); | |
| 1732 | 1732 | |
| 1733 | // left-top bar | |
| 1734 | draw_segment_vertical(tempbitmap, | |
| 1735 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, 0 + segwidth/2, | |
| 1736 | segwidth, (pattern & (1 << 7)) ? onpen : offpen); | |
| 1733 | // left-top bar | |
| 1734 | draw_segment_vertical(tempbitmap, | |
| 1735 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, 0 + segwidth/2, | |
| 1736 | segwidth, (pattern & (1 << 7)) ? onpen : offpen); | |
| 1737 | 1737 | |
| 1738 | // horizontal-middle-left bar | |
| 1739 | draw_segment_horizontal_caps(tempbitmap, | |
| 1740 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, bmheight/2, | |
| 1741 | segwidth, LINE_CAP_START, (pattern & (1 << 8)) ? onpen : offpen); | |
| 1738 | // horizontal-middle-left bar | |
| 1739 | draw_segment_horizontal_caps(tempbitmap, | |
| 1740 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, bmheight/2, | |
| 1741 | segwidth, LINE_CAP_START, (pattern & (1 << 8)) ? onpen : offpen); | |
| 1742 | 1742 | |
| 1743 | // horizontal-middle-right bar | |
| 1744 | draw_segment_horizontal_caps(tempbitmap, | |
| 1745 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, bmheight/2, | |
| 1746 | segwidth, LINE_CAP_END, (pattern & (1 << 9)) ? onpen : offpen); | |
| 1743 | // horizontal-middle-right bar | |
| 1744 | draw_segment_horizontal_caps(tempbitmap, | |
| 1745 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, bmheight/2, | |
| 1746 | segwidth, LINE_CAP_END, (pattern & (1 << 9)) ? onpen : offpen); | |
| 1747 | 1747 | |
| 1748 | // vertical-middle-top bar | |
| 1749 | draw_segment_vertical_caps(tempbitmap, | |
| 1750 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, bmwidth/2, | |
| 1751 | segwidth, LINE_CAP_NONE, (pattern & (1 << 10)) ? onpen : offpen); | |
| 1748 | // vertical-middle-top bar | |
| 1749 | draw_segment_vertical_caps(tempbitmap, | |
| 1750 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, bmwidth/2, | |
| 1751 | segwidth, LINE_CAP_NONE, (pattern & (1 << 10)) ? onpen : offpen); | |
| 1752 | 1752 | |
| 1753 | // vertical-middle-bottom bar | |
| 1754 | draw_segment_vertical_caps(tempbitmap, | |
| 1755 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, bmwidth/2, | |
| 1756 | segwidth, LINE_CAP_NONE, (pattern & (1 << 11)) ? onpen : offpen); | |
| 1753 | // vertical-middle-bottom bar | |
| 1754 | draw_segment_vertical_caps(tempbitmap, | |
| 1755 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, bmwidth/2, | |
| 1756 | segwidth, LINE_CAP_NONE, (pattern & (1 << 11)) ? onpen : offpen); | |
| 1757 | 1757 | |
| 1758 | // diagonal-left-bottom bar | |
| 1759 | draw_segment_diagonal_1(tempbitmap, | |
| 1760 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1761 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1762 | segwidth, (pattern & (1 << 12)) ? onpen : offpen); | |
| 1758 | // diagonal-left-bottom bar | |
| 1759 | draw_segment_diagonal_1(tempbitmap, | |
| 1760 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1761 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1762 | segwidth, (pattern & (1 << 12)) ? onpen : offpen); | |
| 1763 | 1763 | |
| 1764 | // diagonal-left-top bar | |
| 1765 | draw_segment_diagonal_2(tempbitmap, | |
| 1766 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1767 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1768 | segwidth, (pattern & (1 << 13)) ? onpen : offpen); | |
| 1764 | // diagonal-left-top bar | |
| 1765 | draw_segment_diagonal_2(tempbitmap, | |
| 1766 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1767 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1768 | segwidth, (pattern & (1 << 13)) ? onpen : offpen); | |
| 1769 | 1769 | |
| 1770 | // diagonal-right-top bar | |
| 1771 | draw_segment_diagonal_1(tempbitmap, | |
| 1772 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1773 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1774 | segwidth, (pattern & (1 << 14)) ? onpen : offpen); | |
| 1770 | // diagonal-right-top bar | |
| 1771 | draw_segment_diagonal_1(tempbitmap, | |
| 1772 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1773 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1774 | segwidth, (pattern & (1 << 14)) ? onpen : offpen); | |
| 1775 | 1775 | |
| 1776 | // diagonal-right-bottom bar | |
| 1777 | draw_segment_diagonal_2(tempbitmap, | |
| 1778 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1779 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1780 | segwidth, (pattern & (1 << 15)) ? onpen : offpen); | |
| 1776 | // diagonal-right-bottom bar | |
| 1777 | draw_segment_diagonal_2(tempbitmap, | |
| 1778 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1779 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1780 | segwidth, (pattern & (1 << 15)) ? onpen : offpen); | |
| 1781 | 1781 | |
| 1782 | // apply skew | |
| 1783 | apply_skew(tempbitmap, 40); | |
| 1782 | // apply skew | |
| 1783 | apply_skew(tempbitmap, 40); | |
| 1784 | 1784 | |
| 1785 | // resample to the target size | |
| 1786 | render_resample_argb_bitmap_hq(dest, tempbitmap, m_color); | |
| 1785 | // resample to the target size | |
| 1786 | render_resample_argb_bitmap_hq(dest, tempbitmap, m_color); | |
| 1787 | 1787 | } |
| 1788 | 1788 | |
| 1789 | 1789 | |
| r242703 | r242704 | |
| 1794 | 1794 | |
| 1795 | 1795 | void layout_element::component::draw_led16segsc(bitmap_argb32 &dest, const rectangle &bounds, int pattern) |
| 1796 | 1796 | { |
| 1797 | const rgb_t onpen = rgb_t(0xff, 0xff, 0xff, 0xff); | |
| 1798 | const rgb_t offpen = rgb_t(0xff, 0x20, 0x20, 0x20); | |
| 1797 | const rgb_t onpen = rgb_t(0xff, 0xff, 0xff, 0xff); | |
| 1798 | const rgb_t offpen = rgb_t(0xff, 0x20, 0x20, 0x20); | |
| 1799 | 1799 | |
| 1800 | // sizes for computation | |
| 1801 | int bmwidth = 250; | |
| 1802 | int bmheight = 400; | |
| 1803 | int segwidth = 40; | |
| 1804 | int skewwidth = 40; | |
| 1800 | // sizes for computation | |
| 1801 | int bmwidth = 250; | |
| 1802 | int bmheight = 400; | |
| 1803 | int segwidth = 40; | |
| 1804 | int skewwidth = 40; | |
| 1805 | 1805 | |
| 1806 | // allocate a temporary bitmap for drawing | |
| 1807 | bitmap_argb32 tempbitmap(bmwidth + skewwidth, bmheight + segwidth); | |
| 1808 | tempbitmap.fill(rgb_t(0xff, 0x00, 0x00, 0x00)); | |
| 1806 | // allocate a temporary bitmap for drawing | |
| 1807 | bitmap_argb32 tempbitmap(bmwidth + skewwidth, bmheight + segwidth); | |
| 1808 | tempbitmap.fill(rgb_t(0xff, 0x00, 0x00, 0x00)); | |
| 1809 | 1809 | |
| 1810 | // top-left bar | |
| 1811 | draw_segment_horizontal_caps(tempbitmap, | |
| 1812 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, 0 + segwidth/2, | |
| 1813 | segwidth, LINE_CAP_START, (pattern & (1 << 0)) ? onpen : offpen); | |
| 1810 | // top-left bar | |
| 1811 | draw_segment_horizontal_caps(tempbitmap, | |
| 1812 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, 0 + segwidth/2, | |
| 1813 | segwidth, LINE_CAP_START, (pattern & (1 << 0)) ? onpen : offpen); | |
| 1814 | 1814 | |
| 1815 | // top-right bar | |
| 1816 | draw_segment_horizontal_caps(tempbitmap, | |
| 1817 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, 0 + segwidth/2, | |
| 1818 | segwidth, LINE_CAP_END, (pattern & (1 << 1)) ? onpen : offpen); | |
| 1815 | // top-right bar | |
| 1816 | draw_segment_horizontal_caps(tempbitmap, | |
| 1817 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, 0 + segwidth/2, | |
| 1818 | segwidth, LINE_CAP_END, (pattern & (1 << 1)) ? onpen : offpen); | |
| 1819 | 1819 | |
| 1820 | // right-top bar | |
| 1821 | draw_segment_vertical(tempbitmap, | |
| 1822 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, bmwidth - segwidth/2, | |
| 1823 | segwidth, (pattern & (1 << 2)) ? onpen : offpen); | |
| 1820 | // right-top bar | |
| 1821 | draw_segment_vertical(tempbitmap, | |
| 1822 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, bmwidth - segwidth/2, | |
| 1823 | segwidth, (pattern & (1 << 2)) ? onpen : offpen); | |
| 1824 | 1824 | |
| 1825 | // right-bottom bar | |
| 1826 | draw_segment_vertical(tempbitmap, | |
| 1827 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, bmwidth - segwidth/2, | |
| 1828 | segwidth, (pattern & (1 << 3)) ? onpen : offpen); | |
| 1825 | // right-bottom bar | |
| 1826 | draw_segment_vertical(tempbitmap, | |
| 1827 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, bmwidth - segwidth/2, | |
| 1828 | segwidth, (pattern & (1 << 3)) ? onpen : offpen); | |
| 1829 | 1829 | |
| 1830 | // bottom-right bar | |
| 1831 | draw_segment_horizontal_caps(tempbitmap, | |
| 1832 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, bmheight - segwidth/2, | |
| 1833 | segwidth, LINE_CAP_END, (pattern & (1 << 4)) ? onpen : offpen); | |
| 1830 | // bottom-right bar | |
| 1831 | draw_segment_horizontal_caps(tempbitmap, | |
| 1832 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, bmheight - segwidth/2, | |
| 1833 | segwidth, LINE_CAP_END, (pattern & (1 << 4)) ? onpen : offpen); | |
| 1834 | 1834 | |
| 1835 | // bottom-left bar | |
| 1836 | draw_segment_horizontal_caps(tempbitmap, | |
| 1837 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, bmheight - segwidth/2, | |
| 1838 | segwidth, LINE_CAP_START, (pattern & (1 << 5)) ? onpen : offpen); | |
| 1835 | // bottom-left bar | |
| 1836 | draw_segment_horizontal_caps(tempbitmap, | |
| 1837 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, bmheight - segwidth/2, | |
| 1838 | segwidth, LINE_CAP_START, (pattern & (1 << 5)) ? onpen : offpen); | |
| 1839 | 1839 | |
| 1840 | // left-bottom bar | |
| 1841 | draw_segment_vertical(tempbitmap, | |
| 1842 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 0 + segwidth/2, | |
| 1843 | segwidth, (pattern & (1 << 6)) ? onpen : offpen); | |
| 1840 | // left-bottom bar | |
| 1841 | draw_segment_vertical(tempbitmap, | |
| 1842 | bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 0 + segwidth/2, | |
| 1843 | segwidth, (pattern & (1 << 6)) ? onpen : offpen); | |
| 1844 | 1844 | |
| 1845 | // left-top bar | |
| 1846 | draw_segment_vertical(tempbitmap, | |
| 1847 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, 0 + segwidth/2, | |
| 1848 | segwidth, (pattern & (1 << 7)) ? onpen : offpen); | |
| 1845 | // left-top bar | |
| 1846 | draw_segment_vertical(tempbitmap, | |
| 1847 | 0 + 2*segwidth/3, bmheight/2 - segwidth/3, 0 + segwidth/2, | |
| 1848 | segwidth, (pattern & (1 << 7)) ? onpen : offpen); | |
| 1849 | 1849 | |
| 1850 | // horizontal-middle-left bar | |
| 1851 | draw_segment_horizontal_caps(tempbitmap, | |
| 1852 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, bmheight/2, | |
| 1853 | segwidth, LINE_CAP_START, (pattern & (1 << 8)) ? onpen : offpen); | |
| 1850 | // horizontal-middle-left bar | |
| 1851 | draw_segment_horizontal_caps(tempbitmap, | |
| 1852 | 0 + 2*segwidth/3, bmwidth/2 - segwidth/10, bmheight/2, | |
| 1853 | segwidth, LINE_CAP_START, (pattern & (1 << 8)) ? onpen : offpen); | |
| 1854 | 1854 | |
| 1855 | // horizontal-middle-right bar | |
| 1856 | draw_segment_horizontal_caps(tempbitmap, | |
| 1857 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, bmheight/2, | |
| 1858 | segwidth, LINE_CAP_END, (pattern & (1 << 9)) ? onpen : offpen); | |
| 1855 | // horizontal-middle-right bar | |
| 1856 | draw_segment_horizontal_caps(tempbitmap, | |
| 1857 | 0 + bmwidth/2 + segwidth/10, bmwidth - 2*segwidth/3, bmheight/2, | |
| 1858 | segwidth, LINE_CAP_END, (pattern & (1 << 9)) ? onpen : offpen); | |
| 1859 | 1859 | |
| 1860 | // vertical-middle-top bar | |
| 1861 | draw_segment_vertical_caps(tempbitmap, | |
| 1862 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, bmwidth/2, | |
| 1863 | segwidth, LINE_CAP_NONE, (pattern & (1 << 10)) ? onpen : offpen); | |
| 1860 | // vertical-middle-top bar | |
| 1861 | draw_segment_vertical_caps(tempbitmap, | |
| 1862 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, bmwidth/2, | |
| 1863 | segwidth, LINE_CAP_NONE, (pattern & (1 << 10)) ? onpen : offpen); | |
| 1864 | 1864 | |
| 1865 | // vertical-middle-bottom bar | |
| 1866 | draw_segment_vertical_caps(tempbitmap, | |
| 1867 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, bmwidth/2, | |
| 1868 | segwidth, LINE_CAP_NONE, (pattern & (1 << 11)) ? onpen : offpen); | |
| 1865 | // vertical-middle-bottom bar | |
| 1866 | draw_segment_vertical_caps(tempbitmap, | |
| 1867 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, bmwidth/2, | |
| 1868 | segwidth, LINE_CAP_NONE, (pattern & (1 << 11)) ? onpen : offpen); | |
| 1869 | 1869 | |
| 1870 | // diagonal-left-bottom bar | |
| 1871 | draw_segment_diagonal_1(tempbitmap, | |
| 1872 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1873 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1874 | segwidth, (pattern & (1 << 12)) ? onpen : offpen); | |
| 1870 | // diagonal-left-bottom bar | |
| 1871 | draw_segment_diagonal_1(tempbitmap, | |
| 1872 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1873 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1874 | segwidth, (pattern & (1 << 12)) ? onpen : offpen); | |
| 1875 | 1875 | |
| 1876 | // diagonal-left-top bar | |
| 1877 | draw_segment_diagonal_2(tempbitmap, | |
| 1878 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1879 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1880 | segwidth, (pattern & (1 << 13)) ? onpen : offpen); | |
| 1876 | // diagonal-left-top bar | |
| 1877 | draw_segment_diagonal_2(tempbitmap, | |
| 1878 | 0 + segwidth + segwidth/5, bmwidth/2 - segwidth/2 - segwidth/5, | |
| 1879 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1880 | segwidth, (pattern & (1 << 13)) ? onpen : offpen); | |
| 1881 | 1881 | |
| 1882 | // diagonal-right-top bar | |
| 1883 | draw_segment_diagonal_1(tempbitmap, | |
| 1884 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1885 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1886 | segwidth, (pattern & (1 << 14)) ? onpen : offpen); | |
| 1882 | // diagonal-right-top bar | |
| 1883 | draw_segment_diagonal_1(tempbitmap, | |
| 1884 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1885 | 0 + segwidth + segwidth/3, bmheight/2 - segwidth/2 - segwidth/3, | |
| 1886 | segwidth, (pattern & (1 << 14)) ? onpen : offpen); | |
| 1887 | 1887 | |
| 1888 | // diagonal-right-bottom bar | |
| 1889 | draw_segment_diagonal_2(tempbitmap, | |
| 1890 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1891 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1892 | segwidth, (pattern & (1 << 15)) ? onpen : offpen); | |
| 1888 | // diagonal-right-bottom bar | |
| 1889 | draw_segment_diagonal_2(tempbitmap, | |
| 1890 | bmwidth/2 + segwidth/2 + segwidth/5, bmwidth - segwidth - segwidth/5, | |
| 1891 | bmheight/2 + segwidth/2 + segwidth/3, bmheight - segwidth - segwidth/3, | |
| 1892 | segwidth, (pattern & (1 << 15)) ? onpen : offpen); | |
| 1893 | 1893 | |
| 1894 | // comma tail | |
| 1895 | draw_segment_diagonal_1(tempbitmap, | |
| 1896 | bmwidth - (segwidth/2), bmwidth + segwidth, | |
| 1897 | bmheight - (segwidth), bmheight + segwidth*1.5, | |
| 1898 | segwidth/2, (pattern & (1 << 17)) ? onpen : offpen); | |
| 1894 | // comma tail | |
| 1895 | draw_segment_diagonal_1(tempbitmap, | |
| 1896 | bmwidth - (segwidth/2), bmwidth + segwidth, | |
| 1897 | bmheight - (segwidth), bmheight + segwidth*1.5, | |
| 1898 | segwidth/2, (pattern & (1 << 17)) ? onpen : offpen); | |
| 1899 | 1899 | |
| 1900 | // decimal point (draw last for priority) | |
| 1901 | draw_segment_decimal(tempbitmap, bmwidth + segwidth/2, bmheight - segwidth/2, segwidth, (pattern & (1 << 16)) ? onpen : offpen); | |
| 1900 | // decimal point (draw last for priority) | |
| 1901 | draw_segment_decimal(tempbitmap, bmwidth + segwidth/2, bmheight - segwidth/2, segwidth, (pattern & (1 << 16)) ? onpen : offpen); | |
| 1902 | 1902 | |
| 1903 | // apply skew | |
| 1904 | apply_skew(tempbitmap, 40); | |
| 1903 | // apply skew | |
| 1904 | apply_skew(tempbitmap, 40); | |
| 1905 | 1905 | |
| 1906 | // resample to the target size | |
| 1907 | render_resample_argb_bitmap_hq(dest, tempbitmap, m_color); | |
| 1906 | // resample to the target size | |
| 1907 | render_resample_argb_bitmap_hq(dest, tempbitmap, m_color); | |
| 1908 | 1908 | } |
| 1909 | 1909 | |
| 1910 | 1910 | |
| r242703 | r242704 | |
| 1915 | 1915 | |
| 1916 | 1916 | void layout_element::component::draw_dotmatrix(int dots, bitmap_argb32 &dest, const rectangle &bounds, int pattern) |
| 1917 | 1917 | { |
| 1918 | const rgb_t onpen = rgb_t(0xff, 0xff, 0xff, 0xff); | |
| 1919 | const rgb_t offpen = rgb_t(0xff, 0x20, 0x20, 0x20); | |
| 1918 | const rgb_t onpen = rgb_t(0xff, 0xff, 0xff, 0xff); | |
| 1919 | const rgb_t offpen = rgb_t(0xff, 0x20, 0x20, 0x20); | |
| 1920 | 1920 | |
| 1921 | // sizes for computation | |
| 1922 | int bmheight = 300; | |
| 1923 | int dotwidth = 250; | |
| 1921 | // sizes for computation | |
| 1922 | int bmheight = 300; | |
| 1923 | int dotwidth = 250; | |
| 1924 | 1924 | |
| 1925 | // allocate a temporary bitmap for drawing | |
| 1926 | bitmap_argb32 tempbitmap(dotwidth*dots, bmheight); | |
| 1927 | tempbitmap.fill(rgb_t(0xff, 0x00, 0x00, 0x00)); | |
| 1925 | // allocate a temporary bitmap for drawing | |
| 1926 | bitmap_argb32 tempbitmap(dotwidth*dots, bmheight); | |
| 1927 | tempbitmap.fill(rgb_t(0xff, 0x00, 0x00, 0x00)); | |
| 1928 | 1928 | |
| 1929 | for (int i = 0; i < dots; i++) | |
| 1930 | draw_segment_decimal(tempbitmap, ((dotwidth/2 )+ (i * dotwidth)), bmheight/2, dotwidth, (pattern & (1 << i))?onpen:offpen); | |
| 1929 | for (int i = 0; i < dots; i++) | |
| 1930 | draw_segment_decimal(tempbitmap, ((dotwidth/2 )+ (i * dotwidth)), bmheight/2, dotwidth, (pattern & (1 << i))?onpen:offpen); | |
| 1931 | 1931 | |
| 1932 | // resample to the target size | |
| 1933 | render_resample_argb_bitmap_hq(dest, tempbitmap, m_color); | |
| 1932 | // resample to the target size | |
| 1933 | render_resample_argb_bitmap_hq(dest, tempbitmap, m_color); | |
| 1934 | 1934 | } |
| 1935 | 1935 | |
| 1936 | 1936 | |
| r242703 | r242704 | |
| 1942 | 1942 | |
| 1943 | 1943 | void layout_element::component::draw_segment_horizontal_caps(bitmap_argb32 &dest, int minx, int maxx, int midy, int width, int caps, rgb_t color) |
| 1944 | 1944 | { |
| 1945 | // loop over the width of the segment | |
| 1946 | for (int y = 0; y < width / 2; y++) | |
| 1947 | { | |
| 1948 | UINT32 *d0 = &dest.pix32(midy - y); | |
| 1949 | UINT32 *d1 = &dest.pix32(midy + y); | |
| 1950 | int ty = (y < width / 8) ? width / 8 : y; | |
| 1945 | // loop over the width of the segment | |
| 1946 | for (int y = 0; y < width / 2; y++) | |
| 1947 | { | |
| 1948 | UINT32 *d0 = &dest.pix32(midy - y); | |
| 1949 | UINT32 *d1 = &dest.pix32(midy + y); | |
| 1950 | int ty = (y < width / 8) ? width / 8 : y; | |
| 1951 | 1951 | |
| 1952 | // loop over the length of the segment | |
| 1953 | for (int x = minx + ((caps & LINE_CAP_START) ? ty : 0); x < maxx - ((caps & LINE_CAP_END) ? ty : 0); x++) | |
| 1954 | d0[x] = d1[x] = color; | |
| 1955 | } | |
| 1952 | // loop over the length of the segment | |
| 1953 | for (int x = minx + ((caps & LINE_CAP_START) ? ty : 0); x < maxx - ((caps & LINE_CAP_END) ? ty : 0); x++) | |
| 1954 | d0[x] = d1[x] = color; | |
| 1955 | } | |
| 1956 | 1956 | } |
| 1957 | 1957 | |
| 1958 | 1958 | |
| r242703 | r242704 | |
| 1963 | 1963 | |
| 1964 | 1964 | void layout_element::component::draw_segment_horizontal(bitmap_argb32 &dest, int minx, int maxx, int midy, int width, rgb_t color) |
| 1965 | 1965 | { |
| 1966 | ||
| 1966 | draw_segment_horizontal_caps(dest, minx, maxx, midy, width, LINE_CAP_START | LINE_CAP_END, color); | |
| 1967 | 1967 | } |
| 1968 | 1968 | |
| 1969 | 1969 | |
| r242703 | r242704 | |
| 1975 | 1975 | |
| 1976 | 1976 | void layout_element::component::draw_segment_vertical_caps(bitmap_argb32 &dest, int miny, int maxy, int midx, int width, int caps, rgb_t color) |
| 1977 | 1977 | { |
| 1978 | // loop over the width of the segment | |
| 1979 | for (int x = 0; x < width / 2; x++) | |
| 1980 | { | |
| 1981 | UINT32 *d0 = &dest.pix32(0, midx - x); | |
| 1982 | UINT32 *d1 = &dest.pix32(0, midx + x); | |
| 1983 | int tx = (x < width / 8) ? width / 8 : x; | |
| 1978 | // loop over the width of the segment | |
| 1979 | for (int x = 0; x < width / 2; x++) | |
| 1980 | { | |
| 1981 | UINT32 *d0 = &dest.pix32(0, midx - x); | |
| 1982 | UINT32 *d1 = &dest.pix32(0, midx + x); | |
| 1983 | int tx = (x < width / 8) ? width / 8 : x; | |
| 1984 | 1984 | |
| 1985 | // loop over the length of the segment | |
| 1986 | for (int y = miny + ((caps & LINE_CAP_START) ? tx : 0); y < maxy - ((caps & LINE_CAP_END) ? tx : 0); y++) | |
| 1987 | d0[y * dest.rowpixels()] = d1[y * dest.rowpixels()] = color; | |
| 1988 | } | |
| 1985 | // loop over the length of the segment | |
| 1986 | for (int y = miny + ((caps & LINE_CAP_START) ? tx : 0); y < maxy - ((caps & LINE_CAP_END) ? tx : 0); y++) | |
| 1987 | d0[y * dest.rowpixels()] = d1[y * dest.rowpixels()] = color; | |
| 1988 | } | |
| 1989 | 1989 | } |
| 1990 | 1990 | |
| 1991 | 1991 | |
| r242703 | r242704 | |
| 1996 | 1996 | |
| 1997 | 1997 | void layout_element::component::draw_segment_vertical(bitmap_argb32 &dest, int miny, int maxy, int midx, int width, rgb_t color) |
| 1998 | 1998 | { |
| 1999 | ||
| 1999 | draw_segment_vertical_caps(dest, miny, maxy, midx, width, LINE_CAP_START | LINE_CAP_END, color); | |
| 2000 | 2000 | } |
| 2001 | 2001 | |
| 2002 | 2002 | |
| r242703 | r242704 | |
| 2007 | 2007 | |
| 2008 | 2008 | void layout_element::component::draw_segment_diagonal_1(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color) |
| 2009 | 2009 | { |
| 2010 | // compute parameters | |
| 2011 | width *= 1.5; | |
| 2012 | float ratio = (maxy - miny - width) / (float)(maxx - minx); | |
| 2010 | // compute parameters | |
| 2011 | width *= 1.5; | |
| 2012 | float ratio = (maxy - miny - width) / (float)(maxx - minx); | |
| 2013 | 2013 | |
| 2014 | // draw line | |
| 2015 | for (int x = minx; x < maxx; x++) | |
| 2016 | if (x >= 0 && x < dest.width()) | |
| 2017 | { | |
| 2018 | UINT32 *d = &dest.pix32(0, x); | |
| 2019 | int step = (x - minx) * ratio; | |
| 2014 | // draw line | |
| 2015 | for (int x = minx; x < maxx; x++) | |
| 2016 | if (x >= 0 && x < dest.width()) | |
| 2017 | { | |
| 2018 | UINT32 *d = &dest.pix32(0, x); | |
| 2019 | int step = (x - minx) * ratio; | |
| 2020 | 2020 | |
| 2021 | for (int y = maxy - width - step; y < maxy - step; y++) | |
| 2022 | if (y >= 0 && y < dest.height()) | |
| 2023 | d[y * dest.rowpixels()] = color; | |
| 2024 | } | |
| 2021 | for (int y = maxy - width - step; y < maxy - step; y++) | |
| 2022 | if (y >= 0 && y < dest.height()) | |
| 2023 | d[y * dest.rowpixels()] = color; | |
| 2024 | } | |
| 2025 | 2025 | } |
| 2026 | 2026 | |
| 2027 | 2027 | |
| r242703 | r242704 | |
| 2032 | 2032 | |
| 2033 | 2033 | void layout_element::component::draw_segment_diagonal_2(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color) |
| 2034 | 2034 | { |
| 2035 | // compute parameters | |
| 2036 | width *= 1.5; | |
| 2037 | float ratio = (maxy - miny - width) / (float)(maxx - minx); | |
| 2035 | // compute parameters | |
| 2036 | width *= 1.5; | |
| 2037 | float ratio = (maxy - miny - width) / (float)(maxx - minx); | |
| 2038 | 2038 | |
| 2039 | // draw line | |
| 2040 | for (int x = minx; x < maxx; x++) | |
| 2041 | if (x >= 0 && x < dest.width()) | |
| 2042 | { | |
| 2043 | UINT32 *d = &dest.pix32(0, x); | |
| 2044 | int step = (x - minx) * ratio; | |
| 2039 | // draw line | |
| 2040 | for (int x = minx; x < maxx; x++) | |
| 2041 | if (x >= 0 && x < dest.width()) | |
| 2042 | { | |
| 2043 | UINT32 *d = &dest.pix32(0, x); | |
| 2044 | int step = (x - minx) * ratio; | |
| 2045 | 2045 | |
| 2046 | for (int y = miny + step; y < miny + step + width; y++) | |
| 2047 | if (y >= 0 && y < dest.height()) | |
| 2048 | d[y * dest.rowpixels()] = color; | |
| 2049 | } | |
| 2046 | for (int y = miny + step; y < miny + step + width; y++) | |
| 2047 | if (y >= 0 && y < dest.height()) | |
| 2048 | d[y * dest.rowpixels()] = color; | |
| 2049 | } | |
| 2050 | 2050 | } |
| 2051 | 2051 | |
| 2052 | 2052 | |
| r242703 | r242704 | |
| 2056 | 2056 | |
| 2057 | 2057 | void layout_element::component::draw_segment_decimal(bitmap_argb32 &dest, int midx, int midy, int width, rgb_t color) |
| 2058 | 2058 | { |
| 2059 | // compute parameters | |
| 2060 | width /= 2; | |
| 2061 | float ooradius2 = 1.0f / (float)(width * width); | |
| 2059 | // compute parameters | |
| 2060 | width /= 2; | |
| 2061 | float ooradius2 = 1.0f / (float)(width * width); | |
| 2062 | 2062 | |
| 2063 | // iterate over y | |
| 2064 | for (UINT32 y = 0; y <= width; y++) | |
| 2065 | { | |
| 2066 | UINT32 *d0 = &dest.pix32(midy - y); | |
| 2067 | UINT32 *d1 = &dest.pix32(midy + y); | |
| 2068 | float xval = width * sqrt(1.0f - (float)(y * y) * ooradius2); | |
| 2069 | INT32 left, right; | |
| 2063 | // iterate over y | |
| 2064 | for (UINT32 y = 0; y <= width; y++) | |
| 2065 | { | |
| 2066 | UINT32 *d0 = &dest.pix32(midy - y); | |
| 2067 | UINT32 *d1 = &dest.pix32(midy + y); | |
| 2068 | float xval = width * sqrt(1.0f - (float)(y * y) * ooradius2); | |
| 2069 | INT32 left, right; | |
| 2070 | 2070 | |
| 2071 | // compute left/right coordinates | |
| 2072 | left = midx - (INT32)(xval + 0.5f); | |
| 2073 | right = midx + (INT32)(xval + 0.5f); | |
| 2071 | // compute left/right coordinates | |
| 2072 | left = midx - (INT32)(xval + 0.5f); | |
| 2073 | right = midx + (INT32)(xval + 0.5f); | |
| 2074 | 2074 | |
| 2075 | // draw this scanline | |
| 2076 | for (UINT32 x = left; x < right; x++) | |
| 2077 | d0[x] = d1[x] = color; | |
| 2078 | } | |
| 2075 | // draw this scanline | |
| 2076 | for (UINT32 x = left; x < right; x++) | |
| 2077 | d0[x] = d1[x] = color; | |
| 2078 | } | |
| 2079 | 2079 | } |
| 2080 | 2080 | |
| 2081 | 2081 | |
| r242703 | r242704 | |
| 2085 | 2085 | |
| 2086 | 2086 | void layout_element::component::draw_segment_comma(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color) |
| 2087 | 2087 | { |
| 2088 | // compute parameters | |
| 2089 | width *= 1.5; | |
| 2090 | float ratio = (maxy - miny - width) / (float)(maxx - minx); | |
| 2088 | // compute parameters | |
| 2089 | width *= 1.5; | |
| 2090 | float ratio = (maxy - miny - width) / (float)(maxx - minx); | |
| 2091 | 2091 | |
| 2092 | // draw line | |
| 2093 | for (int x = minx; x < maxx; x++) | |
| 2094 | { | |
| 2095 | UINT32 *d = &dest.pix32(0, x); | |
| 2096 | int step = (x - minx) * ratio; | |
| 2092 | // draw line | |
| 2093 | for (int x = minx; x < maxx; x++) | |
| 2094 | { | |
| 2095 | UINT32 *d = &dest.pix32(0, x); | |
| 2096 | int step = (x - minx) * ratio; | |
| 2097 | 2097 | |
| 2098 | for (int y = maxy; y < maxy - width - step; y--) | |
| 2099 | d[y * dest.rowpixels()] = color; | |
| 2100 | } | |
| 2098 | for (int y = maxy; y < maxy - width - step; y--) | |
| 2099 | d[y * dest.rowpixels()] = color; | |
| 2100 | } | |
| 2101 | 2101 | } |
| 2102 | 2102 | |
| 2103 | 2103 | |
| r242703 | r242704 | |
| 2107 | 2107 | |
| 2108 | 2108 | void layout_element::component::apply_skew(bitmap_argb32 &dest, int skewwidth) |
| 2109 | 2109 | { |
| 2110 | for (int y = 0; y < dest.height(); y++) | |
| 2111 | { | |
| 2112 | UINT32 *destrow = &dest.pix32(y); | |
| 2113 | int offs = skewwidth * (dest.height() - y) / dest.height(); | |
| 2114 | for (int x = dest.width() - skewwidth - 1; x >= 0; x--) | |
| 2115 | destrow[x + offs] = destrow[x]; | |
| 2116 | for (int x = 0; x < offs; x++) | |
| 2117 | destrow[x] = 0; | |
| 2118 | } | |
| 2110 | for (int y = 0; y < dest.height(); y++) | |
| 2111 | { | |
| 2112 | UINT32 *destrow = &dest.pix32(y); | |
| 2113 | int offs = skewwidth * (dest.height() - y) / dest.height(); | |
| 2114 | for (int x = dest.width() - skewwidth - 1; x >= 0; x--) | |
| 2115 | destrow[x + offs] = destrow[x]; | |
| 2116 | for (int x = 0; x < offs; x++) | |
| 2117 | destrow[x] = 0; | |
| 2118 | } | |
| 2119 | 2119 | } |
| 2120 | 2120 | |
| 2121 | 2121 | |
| r242703 | r242704 | |
| 2129 | 2129 | //------------------------------------------------- |
| 2130 | 2130 | |
| 2131 | 2131 | layout_view::layout_view(running_machine &machine, xml_data_node &viewnode, simple_list<layout_element> &elemlist) |
| 2132 | : m_next(NULL), | |
| 2133 | m_aspect(1.0f), | |
| 2134 | m_scraspect(1.0f) | |
| 2132 | : m_next(NULL), | |
| 2133 | m_aspect(1.0f), | |
| 2134 | m_scraspect(1.0f) | |
| 2135 | 2135 | { |
| 2136 | // allocate a copy of the name | |
| 2137 | m_name = xml_get_attribute_string_with_subst(machine, viewnode, "name", ""); | |
| 2136 | // allocate a copy of the name | |
| 2137 | m_name = xml_get_attribute_string_with_subst(machine, viewnode, "name", ""); | |
| 2138 | 2138 | |
| 2139 | // if we have a bounds item, load it | |
| 2140 | xml_data_node *boundsnode = xml_get_sibling(viewnode.child, "bounds"); | |
| 2141 | m_expbounds.x0 = m_expbounds.y0 = m_expbounds.x1 = m_expbounds.y1 = 0; | |
| 2142 | if (boundsnode != NULL) | |
| 2143 | parse_bounds(machine, xml_get_sibling(boundsnode, "bounds"), m_expbounds); | |
| 2139 | // if we have a bounds item, load it | |
| 2140 | xml_data_node *boundsnode = xml_get_sibling(viewnode.child, "bounds"); | |
| 2141 | m_expbounds.x0 = m_expbounds.y0 = m_expbounds.x1 = m_expbounds.y1 = 0; | |
| 2142 | if (boundsnode != NULL) | |
| 2143 | parse_bounds(machine, xml_get_sibling(boundsnode, "bounds"), m_expbounds); | |
| 2144 | 2144 | |
| 2145 | // load backdrop items | |
| 2146 | for (xml_data_node *itemnode = xml_get_sibling(viewnode.child, "backdrop"); itemnode != NULL; itemnode = xml_get_sibling(itemnode->next, "backdrop")) | |
| 2147 | m_backdrop_list.append(*global_alloc(item(machine, *itemnode, elemlist))); | |
| 2145 | // load backdrop items | |
| 2146 | for (xml_data_node *itemnode = xml_get_sibling(viewnode.child, "backdrop"); itemnode != NULL; itemnode = xml_get_sibling(itemnode->next, "backdrop")) | |
| 2147 | m_backdrop_list.append(*global_alloc(item(machine, *itemnode, elemlist))); | |
| 2148 | 2148 | |
| 2149 | // load screen items | |
| 2150 | for (xml_data_node *itemnode = xml_get_sibling(viewnode.child, "screen"); itemnode != NULL; itemnode = xml_get_sibling(itemnode->next, "screen")) | |
| 2151 | m_screen_list.append(*global_alloc(item(machine, *itemnode, elemlist))); | |
| 2149 | // load screen items | |
| 2150 | for (xml_data_node *itemnode = xml_get_sibling(viewnode.child, "screen"); itemnode != NULL; itemnode = xml_get_sibling(itemnode->next, "screen")) | |
| 2151 | m_screen_list.append(*global_alloc(item(machine, *itemnode, elemlist))); | |
| 2152 | 2152 | |
| 2153 | // load overlay items | |
| 2154 | for (xml_data_node *itemnode = xml_get_sibling(viewnode.child, "overlay"); itemnode != NULL; itemnode = xml_get_sibling(itemnode->next, "overlay")) | |
| 2155 | m_overlay_list.append(*global_alloc(item(machine, *itemnode, elemlist))); | |
| 2153 | // load overlay items | |
| 2154 | for (xml_data_node *itemnode = xml_get_sibling(viewnode.child, "overlay"); itemnode != NULL; itemnode = xml_get_sibling(itemnode->next, "overlay")) | |
| 2155 | m_overlay_list.append(*global_alloc(item(machine, *itemnode, elemlist))); | |
| 2156 | 2156 | |
| 2157 | // load bezel items | |
| 2158 | for (xml_data_node *itemnode = xml_get_sibling(viewnode.child, "bezel"); itemnode != NULL; itemnode = xml_get_sibling(itemnode->next, "bezel")) | |
| 2159 | m_bezel_list.append(*global_alloc(item(machine, *itemnode, elemlist))); | |
| 2157 | // load bezel items | |
| 2158 | for (xml_data_node *itemnode = xml_get_sibling(viewnode.child, "bezel"); itemnode != NULL; itemnode = xml_get_sibling(itemnode->next, "bezel")) | |
| 2159 | m_bezel_list.append(*global_alloc(item(machine, *itemnode, elemlist))); | |
| 2160 | 2160 | |
| 2161 | // load cpanel items | |
| 2162 | for (xml_data_node *itemnode = xml_get_sibling(viewnode.child, "cpanel"); itemnode != NULL; itemnode = xml_get_sibling(itemnode->next, "cpanel")) | |
| 2163 | m_cpanel_list.append(*global_alloc(item(machine, *itemnode, elemlist))); | |
| 2161 | // load cpanel items | |
| 2162 | for (xml_data_node *itemnode = xml_get_sibling(viewnode.child, "cpanel"); itemnode != NULL; itemnode = xml_get_sibling(itemnode->next, "cpanel")) | |
| 2163 | m_cpanel_list.append(*global_alloc(item(machine, *itemnode, elemlist))); | |
| 2164 | 2164 | |
| 2165 | // load marquee items | |
| 2166 | for (xml_data_node *itemnode = xml_get_sibling(viewnode.child, "marquee"); itemnode != NULL; itemnode = xml_get_sibling(itemnode->next, "marquee")) | |
| 2167 | m_marquee_list.append(*global_alloc(item(machine, *itemnode, elemlist))); | |
| 2165 | // load marquee items | |
| 2166 | for (xml_data_node *itemnode = xml_get_sibling(viewnode.child, "marquee"); itemnode != NULL; itemnode = xml_get_sibling(itemnode->next, "marquee")) | |
| 2167 | m_marquee_list.append(*global_alloc(item(machine, *itemnode, elemlist))); | |
| 2168 | 2168 | |
| 2169 | // recompute the data for the view based on a default layer config | |
| 2170 | recompute(render_layer_config()); | |
| 2169 | // recompute the data for the view based on a default layer config | |
| 2170 | recompute(render_layer_config()); | |
| 2171 | 2171 | } |
| 2172 | 2172 | |
| 2173 | 2173 | |
| r242703 | r242704 | |
| 2187 | 2187 | |
| 2188 | 2188 | layout_view::item *layout_view::first_item(item_layer layer) const |
| 2189 | 2189 | { |
| 2190 | switch (layer) | |
| 2191 | { | |
| 2192 | case ITEM_LAYER_BACKDROP: return m_backdrop_list.first(); | |
| 2193 | case ITEM_LAYER_SCREEN: return m_screen_list.first(); | |
| 2194 | case ITEM_LAYER_OVERLAY: return m_overlay_list.first(); | |
| 2195 | case ITEM_LAYER_BEZEL: return m_bezel_list.first(); | |
| 2196 | case ITEM_LAYER_CPANEL: return m_cpanel_list.first(); | |
| 2197 | case ITEM_LAYER_MARQUEE: return m_marquee_list.first(); | |
| 2198 | default: return NULL; | |
| 2199 | } | |
| 2190 | switch (layer) | |
| 2191 | { | |
| 2192 | case ITEM_LAYER_BACKDROP: return m_backdrop_list.first(); | |
| 2193 | case ITEM_LAYER_SCREEN: return m_screen_list.first(); | |
| 2194 | case ITEM_LAYER_OVERLAY: return m_overlay_list.first(); | |
| 2195 | case ITEM_LAYER_BEZEL: return m_bezel_list.first(); | |
| 2196 | case ITEM_LAYER_CPANEL: return m_cpanel_list.first(); | |
| 2197 | case ITEM_LAYER_MARQUEE: return m_marquee_list.first(); | |
| 2198 | default: return NULL; | |
| 2199 | } | |
| 2200 | 2200 | } |
| 2201 | 2201 | |
| 2202 | 2202 | |
| r242703 | r242704 | |
| 2207 | 2207 | |
| 2208 | 2208 | void layout_view::recompute(render_layer_config layerconfig) |
| 2209 | 2209 | { |
| 2210 | // reset the bounds | |
| 2211 | m_bounds.x0 = m_bounds.y0 = m_bounds.x1 = m_bounds.y1 = 0.0f; | |
| 2212 | m_scrbounds.x0 = m_scrbounds.y0 = m_scrbounds.x1 = m_scrbounds.y1 = 0.0f; | |
| 2213 | m_screens.reset(); | |
| 2210 | // reset the bounds | |
| 2211 | m_bounds.x0 = m_bounds.y0 = m_bounds.x1 = m_bounds.y1 = 0.0f; | |
| 2212 | m_scrbounds.x0 = m_scrbounds.y0 = m_scrbounds.x1 = m_scrbounds.y1 = 0.0f; | |
| 2213 | m_screens.reset(); | |
| 2214 | 2214 | |
| 2215 | // loop over all layers | |
| 2216 | bool first = true; | |
| 2217 | bool scrfirst = true; | |
| 2218 | for (item_layer layer = ITEM_LAYER_FIRST; layer < ITEM_LAYER_MAX; layer++) | |
| 2219 | { | |
| 2220 | // determine if this layer should be visible | |
| 2221 | switch (layer) | |
| 2222 | { | |
| 2223 | case ITEM_LAYER_BACKDROP: m_layenabled[layer] = layerconfig.backdrops_enabled(); break; | |
| 2224 | case ITEM_LAYER_OVERLAY: m_layenabled[layer] = layerconfig.overlays_enabled(); break; | |
| 2225 | case ITEM_LAYER_BEZEL: m_layenabled[layer] = layerconfig.bezels_enabled(); break; | |
| 2226 | case ITEM_LAYER_CPANEL: m_layenabled[layer] = layerconfig.cpanels_enabled(); break; | |
| 2227 | case ITEM_LAYER_MARQUEE: m_layenabled[layer] = layerconfig.marquees_enabled(); break; | |
| 2228 | default: m_layenabled[layer] = true; break; | |
| 2229 | } | |
| 2215 | // loop over all layers | |
| 2216 | bool first = true; | |
| 2217 | bool scrfirst = true; | |
| 2218 | for (item_layer layer = ITEM_LAYER_FIRST; layer < ITEM_LAYER_MAX; layer++) | |
| 2219 | { | |
| 2220 | // determine if this layer should be visible | |
| 2221 | switch (layer) | |
| 2222 | { | |
| 2223 | case ITEM_LAYER_BACKDROP: m_layenabled[layer] = layerconfig.backdrops_enabled(); break; | |
| 2224 | case ITEM_LAYER_OVERLAY: m_layenabled[layer] = layerconfig.overlays_enabled(); break; | |
| 2225 | case ITEM_LAYER_BEZEL: m_layenabled[layer] = layerconfig.bezels_enabled(); break; | |
| 2226 | case ITEM_LAYER_CPANEL: m_layenabled[layer] = layerconfig.cpanels_enabled(); break; | |
| 2227 | case ITEM_LAYER_MARQUEE: m_layenabled[layer] = layerconfig.marquees_enabled(); break; | |
| 2228 | default: m_layenabled[layer] = true; break; | |
| 2229 | } | |
| 2230 | 2230 | |
| 2231 | // only do it if requested | |
| 2232 | if (m_layenabled[layer]) | |
| 2233 | for (item *curitem = first_item(layer); curitem != NULL; curitem = curitem->next()) | |
| 2234 | { | |
| 2235 | // accumulate bounds | |
| 2236 | if (first) | |
| 2237 | m_bounds = curitem->m_rawbounds; | |
| 2238 | else | |
| 2239 | union_render_bounds(&m_bounds, &curitem->m_rawbounds); | |
| 2240 | first = false; | |
| 2231 | // only do it if requested | |
| 2232 | if (m_layenabled[layer]) | |
| 2233 | for (item *curitem = first_item(layer); curitem != NULL; curitem = curitem->next()) | |
| 2234 | { | |
| 2235 | // accumulate bounds | |
| 2236 | if (first) | |
| 2237 | m_bounds = curitem->m_rawbounds; | |
| 2238 | else | |
| 2239 | union_render_bounds(&m_bounds, &curitem->m_rawbounds); | |
| 2240 | first = false; | |
| 2241 | 2241 | |
| 2242 | // accumulate screen bounds | |
| 2243 | if (curitem->m_screen != NULL) | |
| 2244 | { | |
| 2245 | if (scrfirst) | |
| 2246 | m_scrbounds = curitem->m_rawbounds; | |
| 2247 | else | |
| 2248 | union_render_bounds(&m_scrbounds, &curitem->m_rawbounds); | |
| 2249 | scrfirst = false; | |
| 2242 | // accumulate screen bounds | |
| 2243 | if (curitem->m_screen != NULL) | |
| 2244 | { | |
| 2245 | if (scrfirst) | |
| 2246 | m_scrbounds = curitem->m_rawbounds; | |
| 2247 | else | |
| 2248 | union_render_bounds(&m_scrbounds, &curitem->m_rawbounds); | |
| 2249 | scrfirst = false; | |
| 2250 | 2250 | |
| 2251 | // accumulate the screens in use while we're scanning | |
| 2252 | m_screens.add(*curitem->m_screen); | |
| 2253 | } | |
| 2254 | } | |
| 2255 | } | |
| 2251 | // accumulate the screens in use while we're scanning | |
| 2252 | m_screens.add(*curitem->m_screen); | |
| 2253 | } | |
| 2254 | } | |
| 2255 | } | |
| 2256 | 2256 | |
| 2257 | // if we have an explicit bounds, override it | |
| 2258 | if (m_expbounds.x1 > m_expbounds.x0) | |
| 2259 | m_bounds = m_expbounds; | |
| 2257 | // if we have an explicit bounds, override it | |
| 2258 | if (m_expbounds.x1 > m_expbounds.x0) | |
| 2259 | m_bounds = m_expbounds; | |
| 2260 | 2260 | |
| 2261 | // if we're handling things normally, the target bounds are (0,0)-(1,1) | |
| 2262 | render_bounds target_bounds; | |
| 2263 | if (!layerconfig.zoom_to_screen() || m_screens.count() == 0) | |
| 2264 | { | |
| 2265 | // compute the aspect ratio of the view | |
| 2266 | m_aspect = (m_bounds.x1 - m_bounds.x0) / (m_bounds.y1 - m_bounds.y0); | |
| 2261 | // if we're handling things normally, the target bounds are (0,0)-(1,1) | |
| 2262 | render_bounds target_bounds; | |
| 2263 | if (!layerconfig.zoom_to_screen() || m_screens.count() == 0) | |
| 2264 | { | |
| 2265 | // compute the aspect ratio of the view | |
| 2266 | m_aspect = (m_bounds.x1 - m_bounds.x0) / (m_bounds.y1 - m_bounds.y0); | |
| 2267 | 2267 | |
| 2268 | target_bounds.x0 = target_bounds.y0 = 0.0f; | |
| 2269 | target_bounds.x1 = target_bounds.y1 = 1.0f; | |
| 2270 | } | |
| 2268 | target_bounds.x0 = target_bounds.y0 = 0.0f; | |
| 2269 | target_bounds.x1 = target_bounds.y1 = 1.0f; | |
| 2270 | } | |
| 2271 | 2271 | |
| 2272 | // if we're cropping, we want the screen area to fill (0,0)-(1,1) | |
| 2273 | else | |
| 2274 | { | |
| 2275 | // compute the aspect ratio of the screen | |
| 2276 | m_scraspect = (m_scrbounds.x1 - m_scrbounds.x0) / (m_scrbounds.y1 - m_scrbounds.y0); | |
| 2272 | // if we're cropping, we want the screen area to fill (0,0)-(1,1) | |
| 2273 | else | |
| 2274 | { | |
| 2275 | // compute the aspect ratio of the screen | |
| 2276 | m_scraspect = (m_scrbounds.x1 - m_scrbounds.x0) / (m_scrbounds.y1 - m_scrbounds.y0); | |
| 2277 | 2277 | |
| 2278 | float targwidth = (m_bounds.x1 - m_bounds.x0) / (m_scrbounds.x1 - m_scrbounds.x0); | |
| 2279 | float targheight = (m_bounds.y1 - m_bounds.y0) / (m_scrbounds.y1 - m_scrbounds.y0); | |
| 2280 | target_bounds.x0 = (m_bounds.x0 - m_scrbounds.x0) / (m_bounds.x1 - m_bounds.x0) * targwidth; | |
| 2281 | target_bounds.y0 = (m_bounds.y0 - m_scrbounds.y0) / (m_bounds.y1 - m_bounds.y0) * targheight; | |
| 2282 | target_bounds.x1 = target_bounds.x0 + targwidth; | |
| 2283 | target_bounds.y1 = target_bounds.y0 + targheight; | |
| 2284 | } | |
| 2278 | float targwidth = (m_bounds.x1 - m_bounds.x0) / (m_scrbounds.x1 - m_scrbounds.x0); | |
| 2279 | float targheight = (m_bounds.y1 - m_bounds.y0) / (m_scrbounds.y1 - m_scrbounds.y0); | |
| 2280 | target_bounds.x0 = (m_bounds.x0 - m_scrbounds.x0) / (m_bounds.x1 - m_bounds.x0) * targwidth; | |
| 2281 | target_bounds.y0 = (m_bounds.y0 - m_scrbounds.y0) / (m_bounds.y1 - m_bounds.y0) * targheight; | |
| 2282 | target_bounds.x1 = target_bounds.x0 + targwidth; | |
| 2283 | target_bounds.y1 = target_bounds.y0 + targheight; | |
| 2284 | } | |
| 2285 | 2285 | |
| 2286 | // determine the scale/offset for normalization | |
| 2287 | float xoffs = m_bounds.x0; | |
| 2288 | float yoffs = m_bounds.y0; | |
| 2289 | float xscale = (target_bounds.x1 - target_bounds.x0) / (m_bounds.x1 - m_bounds.x0); | |
| 2290 | float yscale = (target_bounds.y1 - target_bounds.y0) / (m_bounds.y1 - m_bounds.y0); | |
| 2286 | // determine the scale/offset for normalization | |
| 2287 | float xoffs = m_bounds.x0; | |
| 2288 | float yoffs = m_bounds.y0; | |
| 2289 | float xscale = (target_bounds.x1 - target_bounds.x0) / (m_bounds.x1 - m_bounds.x0); | |
| 2290 | float yscale = (target_bounds.y1 - target_bounds.y0) / (m_bounds.y1 - m_bounds.y0); | |
| 2291 | 2291 | |
| 2292 | // normalize all the item bounds | |
| 2293 | for (item_layer layer = ITEM_LAYER_FIRST; layer < ITEM_LAYER_MAX; layer++) | |
| 2294 | for (item *curitem = first_item(layer); curitem != NULL; curitem = curitem->next()) | |
| 2295 | { | |
| 2296 | curitem->m_bounds.x0 = target_bounds.x0 + (curitem->m_rawbounds.x0 - xoffs) * xscale; | |
| 2297 | curitem->m_bounds.x1 = target_bounds.x0 + (curitem->m_rawbounds.x1 - xoffs) * xscale; | |
| 2298 | curitem->m_bounds.y0 = target_bounds.y0 + (curitem->m_rawbounds.y0 - yoffs) * yscale; | |
| 2299 | curitem->m_bounds.y1 = target_bounds.y0 + (curitem->m_rawbounds.y1 - yoffs) * yscale; | |
| 2300 | } | |
| 2292 | // normalize all the item bounds | |
| 2293 | for (item_layer layer = ITEM_LAYER_FIRST; layer < ITEM_LAYER_MAX; layer++) | |
| 2294 | for (item *curitem = first_item(layer); curitem != NULL; curitem = curitem->next()) | |
| 2295 | { | |
| 2296 | curitem->m_bounds.x0 = target_bounds.x0 + (curitem->m_rawbounds.x0 - xoffs) * xscale; | |
| 2297 | curitem->m_bounds.x1 = target_bounds.x0 + (curitem->m_rawbounds.x1 - xoffs) * xscale; | |
| 2298 | curitem->m_bounds.y0 = target_bounds.y0 + (curitem->m_rawbounds.y0 - yoffs) * yscale; | |
| 2299 | curitem->m_bounds.y1 = target_bounds.y0 + (curitem->m_rawbounds.y1 - yoffs) * yscale; | |
| 2300 | } | |
| 2301 | 2301 | } |
| 2302 | 2302 | |
| 2303 | 2303 | |
| r242703 | r242704 | |
| 2311 | 2311 | //------------------------------------------------- |
| 2312 | 2312 | |
| 2313 | 2313 | layout_view::item::item(running_machine &machine, xml_data_node &itemnode, simple_list<layout_element> &elemlist) |
| 2314 | : m_next(NULL), | |
| 2315 | m_element(NULL), | |
| 2316 | m_input_mask(0), | |
| 2317 | m_screen(NULL), | |
| 2318 | m_orientation(ROT0) | |
| 2314 | : m_next(NULL), | |
| 2315 | m_element(NULL), | |
| 2316 | m_input_mask(0), | |
| 2317 | m_screen(NULL), | |
| 2318 | m_orientation(ROT0) | |
| 2319 | 2319 | { |
| 2320 | // allocate a copy of the output name | |
| 2321 | m_output_name = xml_get_attribute_string_with_subst(machine, itemnode, "name", ""); | |
| 2320 | // allocate a copy of the output name | |
| 2321 | m_output_name = xml_get_attribute_string_with_subst(machine, itemnode, "name", ""); | |
| 2322 | 2322 | |
| 2323 | // allocate a copy of the input tag | |
| 2324 | m_input_tag = xml_get_attribute_string_with_subst(machine, itemnode, "inputtag", ""); | |
| 2323 | // allocate a copy of the input tag | |
| 2324 | m_input_tag = xml_get_attribute_string_with_subst(machine, itemnode, "inputtag", ""); | |
| 2325 | 2325 | |
| 2326 | // find the associated element | |
| 2327 | const char *name = xml_get_attribute_string_with_subst(machine, itemnode, "element", NULL); | |
| 2328 | if (name != NULL) | |
| 2329 | { | |
| 2330 | // search the list of elements for a match | |
| 2331 | for (m_element = elemlist.first(); m_element != NULL; m_element = m_element->next()) | |
| 2332 | if (strcmp(name, m_element->name()) == 0) | |
| 2333 | break; | |
| 2326 | // find the associated element | |
| 2327 | const char *name = xml_get_attribute_string_with_subst(machine, itemnode, "element", NULL); | |
| 2328 | if (name != NULL) | |
| 2329 | { | |
| 2330 | // search the list of elements for a match | |
| 2331 | for (m_element = elemlist.first(); m_element != NULL; m_element = m_element->next()) | |
| 2332 | if (strcmp(name, m_element->name()) == 0) | |
| 2333 | break; | |
| 2334 | 2334 | |
| 2335 | // error if not found | |
| 2336 | if (m_element == NULL) | |
| 2337 | throw emu_fatalerror("Unable to find layout element %s", name); | |
| 2338 | } | |
| 2335 | // error if not found | |
| 2336 | if (m_element == NULL) | |
| 2337 | throw emu_fatalerror("Unable to find layout element %s", name); | |
| 2338 | } | |
| 2339 | 2339 | |
| 2340 | // fetch common data | |
| 2341 | int index = xml_get_attribute_int_with_subst(machine, itemnode, "index", -1); | |
| 2342 | if (index != -1) | |
| 2343 | { | |
| 2344 | screen_device_iterator iter(machine.root_device()); | |
| 2345 | m_screen = iter.byindex(index); | |
| 2346 | } | |
| 2347 | m_input_mask = xml_get_attribute_int_with_subst(machine, itemnode, "inputmask", 0); | |
| 2348 | if (m_output_name[0] != 0 && m_element != NULL) | |
| 2349 | output_set_value(m_output_name, m_element->default_state()); | |
| 2350 | parse_bounds(machine, xml_get_sibling(itemnode.child, "bounds"), m_rawbounds); | |
| 2351 | parse_color(machine, xml_get_sibling(itemnode.child, "color"), m_color); | |
| 2352 | parse_orientation(machine, xml_get_sibling(itemnode.child, "orientation"), m_orientation); | |
| 2340 | // fetch common data | |
| 2341 | int index = xml_get_attribute_int_with_subst(machine, itemnode, "index", -1); | |
| 2342 | if (index != -1) | |
| 2343 | { | |
| 2344 | screen_device_iterator iter(machine.root_device()); | |
| 2345 | m_screen = iter.byindex(index); | |
| 2346 | } | |
| 2347 | m_input_mask = xml_get_attribute_int_with_subst(machine, itemnode, "inputmask", 0); | |
| 2348 | if (m_output_name[0] != 0 && m_element != NULL) | |
| 2349 | output_set_value(m_output_name, m_element->default_state()); | |
| 2350 | parse_bounds(machine, xml_get_sibling(itemnode.child, "bounds"), m_rawbounds); | |
| 2351 | parse_color(machine, xml_get_sibling(itemnode.child, "color"), m_color); | |
| 2352 | parse_orientation(machine, xml_get_sibling(itemnode.child, "orientation"), m_orientation); | |
| 2353 | 2353 | |
| 2354 | // sanity checks | |
| 2355 | if (strcmp(itemnode.name, "screen") == 0) | |
| 2356 | { | |
| 2357 | if (m_screen == NULL) | |
| 2358 | throw emu_fatalerror("Layout references invalid screen index %d", index); | |
| 2359 | } | |
| 2360 | else | |
| 2361 | { | |
| 2362 | if (m_element == NULL) | |
| 2363 | throw emu_fatalerror("Layout item of type %s require an element tag", itemnode.name); | |
| 2364 | } | |
| 2354 | // sanity checks | |
| 2355 | if (strcmp(itemnode.name, "screen") == 0) | |
| 2356 | { | |
| 2357 | if (m_screen == NULL) | |
| 2358 | throw emu_fatalerror("Layout references invalid screen index %d", index); | |
| 2359 | } | |
| 2360 | else | |
| 2361 | { | |
| 2362 | if (m_element == NULL) | |
| 2363 | throw emu_fatalerror("Layout item of type %s require an element tag", itemnode.name); | |
| 2364 | } | |
| 2365 | 2365 | } |
| 2366 | 2366 | |
| 2367 | 2367 | |
| r242703 | r242704 | |
| 2381 | 2381 | |
| 2382 | 2382 | render_container *layout_view::item::screen_container(running_machine &machine) const |
| 2383 | 2383 | { |
| 2384 | ||
| 2384 | return (m_screen != NULL) ? &m_screen->container() : NULL; | |
| 2385 | 2385 | } |
| 2386 | 2386 | |
| 2387 | 2387 | //------------------------------------------------- |
| r242703 | r242704 | |
| 2390 | 2390 | |
| 2391 | 2391 | int layout_view::item::state() const |
| 2392 | 2392 | { |
| 2393 | ||
| 2393 | int state = 0; | |
| 2394 | 2394 | |
| 2395 | ||
| 2395 | assert(m_element != NULL); | |
| 2396 | 2396 | |
| 2397 | // if configured to an output, fetch the output value | |
| 2398 | if (m_output_name[0] != 0) | |
| 2399 | state = output_get_value(m_output_name); | |
| 2397 | // if configured to an output, fetch the output value | |
| 2398 | if (m_output_name[0] != 0) | |
| 2399 | state = output_get_value(m_output_name); | |
| 2400 | 2400 | |
| 2401 | // if configured to an input, fetch the input value | |
| 2402 | else if (m_input_tag[0] != 0) | |
| 2403 | { | |
| 2404 | ioport_port *port = m_element->machine().root_device().ioport(m_input_tag); | |
| 2405 | if (port != NULL) | |
| 2406 | { | |
| 2407 | ioport_field *field = port->field(m_input_mask); | |
| 2408 | if (field != NULL) | |
| 2409 | state = ((port->read() ^ field->defvalue()) & m_input_mask) ? 1 : 0; | |
| 2410 | } | |
| 2411 | } | |
| 2412 | return state; | |
| 2401 | // if configured to an input, fetch the input value | |
| 2402 | else if (m_input_tag[0] != 0) | |
| 2403 | { | |
| 2404 | ioport_port *port = m_element->machine().root_device().ioport(m_input_tag); | |
| 2405 | if (port != NULL) | |
| 2406 | { | |
| 2407 | ioport_field *field = port->field(m_input_mask); | |
| 2408 | if (field != NULL) | |
| 2409 | state = ((port->read() ^ field->defvalue()) & m_input_mask) ? 1 : 0; | |
| 2410 | } | |
| 2411 | } | |
| 2412 | return state; | |
| 2413 | 2413 | } |
| 2414 | 2414 | |
| 2415 | 2415 | |
| r242703 | r242704 | |
| 2423 | 2423 | //------------------------------------------------- |
| 2424 | 2424 | |
| 2425 | 2425 | layout_file::layout_file(running_machine &machine, xml_data_node &rootnode, const char *dirname) |
| 2426 | ||
| 2426 | : m_next(NULL) | |
| 2427 | 2427 | { |
| 2428 | // find the layout node | |
| 2429 | xml_data_node *mamelayoutnode = xml_get_sibling(rootnode.child, "mamelayout"); | |
| 2430 | if (mamelayoutnode == NULL) | |
| 2431 | throw emu_fatalerror("Invalid XML file: missing mamelayout node"); | |
| 2428 | // find the layout node | |
| 2429 | xml_data_node *mamelayoutnode = xml_get_sibling(rootnode.child, "mamelayout"); | |
| 2430 | if (mamelayoutnode == NULL) | |
| 2431 | throw emu_fatalerror("Invalid XML file: missing mamelayout node"); | |
| 2432 | 2432 | |
| 2433 | // validate the config data version | |
| 2434 | int version = xml_get_attribute_int(mamelayoutnode, "version", 0); | |
| 2435 | if (version != LAYOUT_VERSION) | |
| 2436 | throw emu_fatalerror("Invalid XML file: unsupported version"); | |
| 2433 | // validate the config data version | |
| 2434 | int version = xml_get_attribute_int(mamelayoutnode, "version", 0); | |
| 2435 | if (version != LAYOUT_VERSION) | |
| 2436 | throw emu_fatalerror("Invalid XML file: unsupported version"); | |
| 2437 | 2437 | |
| 2438 | // parse all the elements | |
| 2439 | for (xml_data_node *elemnode = xml_get_sibling(mamelayoutnode->child, "element"); elemnode != NULL; elemnode = xml_get_sibling(elemnode->next, "element")) | |
| 2440 | m_elemlist.append(*global_alloc(layout_element(machine, *elemnode, dirname))); | |
| 2438 | // parse all the elements | |
| 2439 | for (xml_data_node *elemnode = xml_get_sibling(mamelayoutnode->child, "element"); elemnode != NULL; elemnode = xml_get_sibling(elemnode->next, "element")) | |
| 2440 | m_elemlist.append(*global_alloc(layout_element(machine, *elemnode, dirname))); | |
| 2441 | 2441 | |
| 2442 | // parse all the views | |
| 2443 | for (xml_data_node *viewnode = xml_get_sibling(mamelayoutnode->child, "view"); viewnode != NULL; viewnode = xml_get_sibling(viewnode->next, "view")) | |
| 2444 | m_viewlist.append(*global_alloc(layout_view(machine, *viewnode, m_elemlist))); | |
| 2442 | // parse all the views | |
| 2443 | for (xml_data_node *viewnode = xml_get_sibling(mamelayoutnode->child, "view"); viewnode != NULL; viewnode = xml_get_sibling(viewnode->next, "view")) | |
| 2444 | m_viewlist.append(*global_alloc(layout_view(machine, *viewnode, m_elemlist))); | |
| 2445 | 2445 | } |
| 2446 | 2446 | |
| 2447 | 2447 |
| r242703 | r242704 | |
|---|---|---|
| 20 | 20 | |
| 21 | 21 | enum item_layer |
| 22 | 22 | { |
| 23 | ITEM_LAYER_FIRST = 0, | |
| 24 | ITEM_LAYER_BACKDROP = ITEM_LAYER_FIRST, | |
| 25 | ITEM_LAYER_SCREEN, | |
| 26 | ITEM_LAYER_OVERLAY, | |
| 27 | ITEM_LAYER_BEZEL, | |
| 28 | ITEM_LAYER_CPANEL, | |
| 29 | ITEM_LAYER_MARQUEE, | |
| 30 | ITEM_LAYER_MAX | |
| 23 | ITEM_LAYER_FIRST = 0, | |
| 24 | ITEM_LAYER_BACKDROP = ITEM_LAYER_FIRST, | |
| 25 | ITEM_LAYER_SCREEN, | |
| 26 | ITEM_LAYER_OVERLAY, | |
| 27 | ITEM_LAYER_BEZEL, | |
| 28 | ITEM_LAYER_CPANEL, | |
| 29 | ITEM_LAYER_MARQUEE, | |
| 30 | ITEM_LAYER_MAX | |
| 31 | 31 | }; |
| 32 | 32 | DECLARE_ENUM_OPERATORS(item_layer); |
| 33 | 33 | |
| r242703 | r242704 | |
| 43 | 43 | // a layout_element is a single named element, which may have multiple components |
| 44 | 44 | class layout_element |
| 45 | 45 | { |
| 46 | ||
| 46 | friend class simple_list<layout_element>; | |
| 47 | 47 | |
| 48 | 48 | public: |
| 49 | // construction/destruction | |
| 50 | layout_element(running_machine &machine, xml_data_node &elemnode, const char *dirname); | |
| 51 | virtual ~layout_element(); | |
| 49 | // construction/destruction | |
| 50 | layout_element(running_machine &machine, xml_data_node &elemnode, const char *dirname); | |
| 51 | virtual ~layout_element(); | |
| 52 | 52 | |
| 53 | // getters | |
| 54 | layout_element *next() const { return m_next; } | |
| 55 | const char *name() const { return m_name; } | |
| 56 | running_machine &machine() const { return m_machine; } | |
| 57 | int default_state() const { return m_defstate; } | |
| 58 | int maxstate() const { return m_maxstate; } | |
| 59 | render_texture *state_texture(int state); | |
| 53 | // getters | |
| 54 | layout_element *next() const { return m_next; } | |
| 55 | const char *name() const { return m_name; } | |
| 56 | running_machine &machine() const { return m_machine; } | |
| 57 | int default_state() const { return m_defstate; } | |
| 58 | int maxstate() const { return m_maxstate; } | |
| 59 | render_texture *state_texture(int state); | |
| 60 | 60 | |
| 61 | 61 | private: |
| 62 | // a component represents an image, rectangle, or disk in an element | |
| 63 | class component | |
| 64 | { | |
| 65 | friend class layout_element; | |
| 66 | friend class simple_list<component>; | |
| 62 | // a component represents an image, rectangle, or disk in an element | |
| 63 | class component | |
| 64 | { | |
| 65 | friend class layout_element; | |
| 66 | friend class simple_list<component>; | |
| 67 | 67 | |
| 68 | public: | |
| 69 | // construction/destruction | |
| 70 | component(running_machine &machine, xml_data_node &compnode, const char *dirname); | |
| 71 | ~component(); | |
| 68 | public: | |
| 69 | // construction/destruction | |
| 70 | component(running_machine &machine, xml_data_node &compnode, const char *dirname); | |
| 71 | ~component(); | |
| 72 | 72 | |
| 73 | // getters | |
| 74 | component *next() const { return m_next; } | |
| 75 | const render_bounds &bounds() const { return m_bounds; } | |
| 73 | // getters | |
| 74 | component *next() const { return m_next; } | |
| 75 | const render_bounds &bounds() const { return m_bounds; } | |
| 76 | 76 | |
| 77 | // operations | |
| 78 | void draw(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); | |
| 77 | // operations | |
| 78 | void draw(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); | |
| 79 | 79 | |
| 80 | private: | |
| 81 | // component types | |
| 82 | enum component_type | |
| 83 | { | |
| 84 | CTYPE_INVALID = 0, | |
| 85 | CTYPE_IMAGE, | |
| 86 | CTYPE_RECT, | |
| 87 | CTYPE_DISK, | |
| 88 | CTYPE_TEXT, | |
| 89 | CTYPE_LED7SEG, | |
| 90 | CTYPE_LED8SEG_GTS1, | |
| 91 | CTYPE_LED14SEG, | |
| 92 | CTYPE_LED16SEG, | |
| 93 | CTYPE_LED14SEGSC, | |
| 94 | CTYPE_LED16SEGSC, | |
| 95 | CTYPE_DOTMATRIX, | |
| 96 | CTYPE_DOTMATRIX5DOT, | |
| 97 | CTYPE_DOTMATRIXDOT, | |
| 98 | CTYPE_SIMPLECOUNTER, | |
| 99 | CTYPE_REEL, | |
| 100 | CTYPE_MAX | |
| 101 | }; | |
| 80 | private: | |
| 81 | // component types | |
| 82 | enum component_type | |
| 83 | { | |
| 84 | CTYPE_INVALID = 0, | |
| 85 | CTYPE_IMAGE, | |
| 86 | CTYPE_RECT, | |
| 87 | CTYPE_DISK, | |
| 88 | CTYPE_TEXT, | |
| 89 | CTYPE_LED7SEG, | |
| 90 | CTYPE_LED8SEG_GTS1, | |
| 91 | CTYPE_LED14SEG, | |
| 92 | CTYPE_LED16SEG, | |
| 93 | CTYPE_LED14SEGSC, | |
| 94 | CTYPE_LED16SEGSC, | |
| 95 | CTYPE_DOTMATRIX, | |
| 96 | CTYPE_DOTMATRIX5DOT, | |
| 97 | CTYPE_DOTMATRIXDOT, | |
| 98 | CTYPE_SIMPLECOUNTER, | |
| 99 | CTYPE_REEL, | |
| 100 | CTYPE_MAX | |
| 101 | }; | |
| 102 | 102 | |
| 103 | // helpers | |
| 104 | void draw_rect(bitmap_argb32 &dest, const rectangle &bounds); | |
| 105 | void draw_disk(bitmap_argb32 &dest, const rectangle &bounds); | |
| 106 | void draw_text(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds); | |
| 107 | void draw_simplecounter(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); | |
| 108 | void draw_reel(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); | |
| 109 | void draw_beltreel(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); | |
| 110 | void load_bitmap(); | |
| 111 | void load_reel_bitmap(int number); | |
| 112 | void draw_led7seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern); | |
| 113 | void draw_led8seg_gts1(bitmap_argb32 &dest, const rectangle &bounds, int pattern); | |
| 114 | void draw_led14seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern); | |
| 115 | void draw_led14segsc(bitmap_argb32 &dest, const rectangle &bounds, int pattern); | |
| 116 | void draw_led16seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern); | |
| 117 | void draw_led16segsc(bitmap_argb32 &dest, const rectangle &bounds, int pattern); | |
| 118 | void draw_dotmatrix(int dots,bitmap_argb32 &dest, const rectangle &bounds, int pattern); | |
| 119 | void draw_segment_horizontal_caps(bitmap_argb32 &dest, int minx, int maxx, int midy, int width, int caps, rgb_t color); | |
| 120 | void draw_segment_horizontal(bitmap_argb32 &dest, int minx, int maxx, int midy, int width, rgb_t color); | |
| 121 | void draw_segment_vertical_caps(bitmap_argb32 &dest, int miny, int maxy, int midx, int width, int caps, rgb_t color); | |
| 122 | void draw_segment_vertical(bitmap_argb32 &dest, int miny, int maxy, int midx, int width, rgb_t color); | |
| 123 | void draw_segment_diagonal_1(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color); | |
| 124 | void draw_segment_diagonal_2(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color); | |
| 125 | void draw_segment_decimal(bitmap_argb32 &dest, int midx, int midy, int width, rgb_t color); | |
| 126 | void draw_segment_comma(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color); | |
| 127 | void apply_skew(bitmap_argb32 &dest, int skewwidth); | |
| 103 | // helpers | |
| 104 | void draw_rect(bitmap_argb32 &dest, const rectangle &bounds); | |
| 105 | void draw_disk(bitmap_argb32 &dest, const rectangle &bounds); | |
| 106 | void draw_text(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds); | |
| 107 | void draw_simplecounter(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); | |
| 108 | void draw_reel(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); | |
| 109 | void draw_beltreel(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); | |
| 110 | void load_bitmap(); | |
| 111 | void load_reel_bitmap(int number); | |
| 112 | void draw_led7seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern); | |
| 113 | void draw_led8seg_gts1(bitmap_argb32 &dest, const rectangle &bounds, int pattern); | |
| 114 | void draw_led14seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern); | |
| 115 | void draw_led14segsc(bitmap_argb32 &dest, const rectangle &bounds, int pattern); | |
| 116 | void draw_led16seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern); | |
| 117 | void draw_led16segsc(bitmap_argb32 &dest, const rectangle &bounds, int pattern); | |
| 118 | void draw_dotmatrix(int dots,bitmap_argb32 &dest, const rectangle &bounds, int pattern); | |
| 119 | void draw_segment_horizontal_caps(bitmap_argb32 &dest, int minx, int maxx, int midy, int width, int caps, rgb_t color); | |
| 120 | void draw_segment_horizontal(bitmap_argb32 &dest, int minx, int maxx, int midy, int width, rgb_t color); | |
| 121 | void draw_segment_vertical_caps(bitmap_argb32 &dest, int miny, int maxy, int midx, int width, int caps, rgb_t color); | |
| 122 | void draw_segment_vertical(bitmap_argb32 &dest, int miny, int maxy, int midx, int width, rgb_t color); | |
| 123 | void draw_segment_diagonal_1(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color); | |
| 124 | void draw_segment_diagonal_2(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color); | |
| 125 | void draw_segment_decimal(bitmap_argb32 &dest, int midx, int midy, int width, rgb_t color); | |
| 126 | void draw_segment_comma(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color); | |
| 127 | void apply_skew(bitmap_argb32 &dest, int skewwidth); | |
| 128 | 128 | |
| 129 | ||
| 129 | #define MAX_BITMAPS 32 | |
| 130 | 130 | |
| 131 | // internal state | |
| 132 | component * m_next; // link to next component | |
| 133 | component_type m_type; // type of component | |
| 134 | int m_state; // state where this component is visible (-1 means all states) | |
| 135 | render_bounds m_bounds; // bounds of the element | |
| 136 | render_color m_color; // color of the element | |
| 137 | astring m_string; // string for text components | |
| 138 | int m_digits; // number of digits for simple counters | |
| 139 | int m_textalign; // text alignment to box | |
| 140 | bitmap_argb32 m_bitmap[MAX_BITMAPS]; // source bitmap for images | |
| 141 | astring m_dirname; // directory name of image file (for lazy loading) | |
| 142 | auto_pointer<emu_file> m_file[MAX_BITMAPS]; // file object for reading image/alpha files | |
| 143 | astring m_imagefile[MAX_BITMAPS]; // name of the image file (for lazy loading) | |
| 144 | astring m_alphafile[MAX_BITMAPS]; // name of the alpha file (for lazy loading) | |
| 145 | bool m_hasalpha[MAX_BITMAPS]; // is there any alpha component present? | |
| 131 | // internal state | |
| 132 | component * m_next; // link to next component | |
| 133 | component_type m_type; // type of component | |
| 134 | int m_state; // state where this component is visible (-1 means all states) | |
| 135 | render_bounds m_bounds; // bounds of the element | |
| 136 | render_color m_color; // color of the element | |
| 137 | astring m_string; // string for text components | |
| 138 | int m_digits; // number of digits for simple counters | |
| 139 | int m_textalign; // text alignment to box | |
| 140 | bitmap_argb32 m_bitmap[MAX_BITMAPS]; // source bitmap for images | |
| 141 | astring m_dirname; // directory name of image file (for lazy loading) | |
| 142 | auto_pointer<emu_file> m_file[MAX_BITMAPS]; // file object for reading image/alpha files | |
| 143 | astring m_imagefile[MAX_BITMAPS]; // name of the image file (for lazy loading) | |
| 144 | astring m_alphafile[MAX_BITMAPS]; // name of the alpha file (for lazy loading) | |
| 145 | bool m_hasalpha[MAX_BITMAPS]; // is there any alpha component present? | |
| 146 | 146 | |
| 147 | // stuff for fruit machine reels | |
| 148 | // basically made up of multiple text strings / gfx | |
| 149 | int m_numstops; | |
| 150 | astring m_stopnames[MAX_BITMAPS]; | |
| 151 | int m_stateoffset; | |
| 152 | int m_reelreversed; | |
| 153 | int m_numsymbolsvisible; | |
| 154 | int m_beltreel; | |
| 155 | }; | |
| 147 | // stuff for fruit machine reels | |
| 148 | // basically made up of multiple text strings / gfx | |
| 149 | int m_numstops; | |
| 150 | astring m_stopnames[MAX_BITMAPS]; | |
| 151 | int m_stateoffset; | |
| 152 | int m_reelreversed; | |
| 153 | int m_numsymbolsvisible; | |
| 154 | int m_beltreel; | |
| 155 | }; | |
| 156 | 156 | |
| 157 | // a texture encapsulates a texture for a given element in a given state | |
| 158 | class texture | |
| 159 | { | |
| 160 | public: | |
| 161 | texture(); | |
| 162 | ~texture(); | |
| 157 | // a texture encapsulates a texture for a given element in a given state | |
| 158 | class texture | |
| 159 | { | |
| 160 | public: | |
| 161 | texture(); | |
| 162 | ~texture(); | |
| 163 | 163 | |
| 164 | layout_element * m_element; // pointer back to the element | |
| 165 | render_texture * m_texture; // texture for this state | |
| 166 | int m_state; // associated state number | |
| 167 | }; | |
| 164 | layout_element * m_element; // pointer back to the element | |
| 165 | render_texture * m_texture; // texture for this state | |
| 166 | int m_state; // associated state number | |
| 167 | }; | |
| 168 | 168 | |
| 169 | // internal helpers | |
| 170 | static void element_scale(bitmap_argb32 &dest, bitmap_argb32 &source, const rectangle &sbounds, void *param); | |
| 169 | // internal helpers | |
| 170 | static void element_scale(bitmap_argb32 &dest, bitmap_argb32 &source, const rectangle &sbounds, void *param); | |
| 171 | 171 | |
| 172 | // internal state | |
| 173 | layout_element * m_next; // link to next element | |
| 174 | running_machine & m_machine; // reference to the owning machine | |
| 175 | astring m_name; // name of this element | |
| 176 | simple_list<component> m_complist; // list of components | |
| 177 | int m_defstate; // default state of this element | |
| 178 | int m_maxstate; // maximum state value for all components | |
| 179 | dynamic_array<texture> m_elemtex; // array of element textures used for managing the scaled bitmaps | |
| 172 | // internal state | |
| 173 | layout_element * m_next; // link to next element | |
| 174 | running_machine & m_machine; // reference to the owning machine | |
| 175 | astring m_name; // name of this element | |
| 176 | simple_list<component> m_complist; // list of components | |
| 177 | int m_defstate; // default state of this element | |
| 178 | int m_maxstate; // maximum state value for all components | |
| 179 | dynamic_array<texture> m_elemtex; // array of element textures used for managing the scaled bitmaps | |
| 180 | 180 | }; |
| 181 | 181 | |
| 182 | 182 | |
| r242703 | r242704 | |
| 185 | 185 | // a layout_view encapsulates a named list of items |
| 186 | 186 | class layout_view |
| 187 | 187 | { |
| 188 | ||
| 188 | friend class simple_list<layout_view>; | |
| 189 | 189 | |
| 190 | 190 | public: |
| 191 | // an item is a single backdrop, screen, overlay, bezel, cpanel, or marquee item | |
| 192 | class item | |
| 193 | { | |
| 194 | friend class layout_view; | |
| 195 | friend class simple_list<item>; | |
| 191 | // an item is a single backdrop, screen, overlay, bezel, cpanel, or marquee item | |
| 192 | class item | |
| 193 | { | |
| 194 | friend class layout_view; | |
| 195 | friend class simple_list<item>; | |
| 196 | 196 | |
| 197 | public: | |
| 198 | // construction/destruction | |
| 199 | item(running_machine &machine, xml_data_node &itemnode, simple_list<layout_element> &elemlist); | |
| 200 | virtual ~item(); | |
| 197 | public: | |
| 198 | // construction/destruction | |
| 199 | item(running_machine &machine, xml_data_node &itemnode, simple_list<layout_element> &elemlist); | |
| 200 | virtual ~item(); | |
| 201 | 201 | |
| 202 | // getters | |
| 203 | item *next() const { return m_next; } | |
| 204 | layout_element *element() const { return m_element; } | |
| 205 | screen_device *screen() { return m_screen; } | |
| 206 | const render_bounds &bounds() const { return m_bounds; } | |
| 207 | const render_color &color() const { return m_color; } | |
| 208 | int orientation() const { return m_orientation; } | |
| 209 | render_container *screen_container(running_machine &machine) const; | |
| 210 | bool has_input() const { return bool(m_input_tag); } | |
| 211 | const char *input_tag_and_mask(ioport_value &mask) const { mask = m_input_mask; return m_input_tag; } | |
| 202 | // getters | |
| 203 | item *next() const { return m_next; } | |
| 204 | layout_element *element() const { return m_element; } | |
| 205 | screen_device *screen() { return m_screen; } | |
| 206 | const render_bounds &bounds() const { return m_bounds; } | |
| 207 | const render_color &color() const { return m_color; } | |
| 208 | int orientation() const { return m_orientation; } | |
| 209 | render_container *screen_container(running_machine &machine) const; | |
| 210 | bool has_input() const { return bool(m_input_tag); } | |
| 211 | const char *input_tag_and_mask(ioport_value &mask) const { mask = m_input_mask; return m_input_tag; } | |
| 212 | 212 | |
| 213 | // fetch state based on configured source | |
| 214 | int state() const; | |
| 213 | // fetch state based on configured source | |
| 214 | int state() const; | |
| 215 | 215 | |
| 216 | private: | |
| 217 | // internal state | |
| 218 | item * m_next; // link to next item | |
| 219 | layout_element * m_element; // pointer to the associated element (non-screens only) | |
| 220 | astring m_output_name; // name of this item | |
| 221 | astring m_input_tag; // input tag of this item | |
| 222 | ioport_value m_input_mask; // input mask of this item | |
| 223 | screen_device * m_screen; // pointer to screen | |
| 224 | int m_orientation; // orientation of this item | |
| 225 | render_bounds m_bounds; // bounds of the item | |
| 226 | render_bounds m_rawbounds; // raw (original) bounds of the item | |
| 227 | render_color m_color; // color of the item | |
| 228 | }; | |
| 216 | private: | |
| 217 | // internal state | |
| 218 | item * m_next; // link to next item | |
| 219 | layout_element * m_element; // pointer to the associated element (non-screens only) | |
| 220 | astring m_output_name; // name of this item | |
| 221 | astring m_input_tag; // input tag of this item | |
| 222 | ioport_value m_input_mask; // input mask of this item | |
| 223 | screen_device * m_screen; // pointer to screen | |
| 224 | int m_orientation; // orientation of this item | |
| 225 | render_bounds m_bounds; // bounds of the item | |
| 226 | render_bounds m_rawbounds; // raw (original) bounds of the item | |
| 227 | render_color m_color; // color of the item | |
| 228 | }; | |
| 229 | 229 | |
| 230 | // construction/destruction | |
| 231 | layout_view(running_machine &machine, xml_data_node &viewnode, simple_list<layout_element> &elemlist); | |
| 232 | virtual ~layout_view(); | |
| 230 | // construction/destruction | |
| 231 | layout_view(running_machine &machine, xml_data_node &viewnode, simple_list<layout_element> &elemlist); | |
| 232 | virtual ~layout_view(); | |
| 233 | 233 | |
| 234 | // getters | |
| 235 | layout_view *next() const { return m_next; } | |
| 236 | item *first_item(item_layer layer) const; | |
| 237 | const char *name() const { return m_name; } | |
| 238 | const render_screen_list &screens() const { return m_screens; } | |
| 239 | bool layer_enabled(item_layer layer) const { return m_layenabled[layer]; } | |
| 234 | // getters | |
| 235 | layout_view *next() const { return m_next; } | |
| 236 | item *first_item(item_layer layer) const; | |
| 237 | const char *name() const { return m_name; } | |
| 238 | const render_screen_list &screens() const { return m_screens; } | |
| 239 | bool layer_enabled(item_layer layer) const { return m_layenabled[layer]; } | |
| 240 | 240 | |
| 241 | // | |
| 242 | bool has_art() const { return (m_backdrop_list.count() + m_overlay_list.count() + m_bezel_list.count() + m_cpanel_list.count() + m_marquee_list.count() != 0); } | |
| 243 | float effective_aspect(render_layer_config config) const { return (config.zoom_to_screen() && m_screens.count() != 0) ? m_scraspect : m_aspect; } | |
| 241 | // | |
| 242 | bool has_art() const { return (m_backdrop_list.count() + m_overlay_list.count() + m_bezel_list.count() + m_cpanel_list.count() + m_marquee_list.count() != 0); } | |
| 243 | float effective_aspect(render_layer_config config) const { return (config.zoom_to_screen() && m_screens.count() != 0) ? m_scraspect : m_aspect; } | |
| 244 | 244 | |
| 245 | // operations | |
| 246 | void recompute(render_layer_config layerconfig); | |
| 245 | // operations | |
| 246 | void recompute(render_layer_config layerconfig); | |
| 247 | 247 | |
| 248 | 248 | private: |
| 249 | // internal state | |
| 250 | layout_view * m_next; // pointer to next layout in the list | |
| 251 | astring m_name; // name of the layout | |
| 252 | float m_aspect; // X/Y of the layout | |
| 253 | float m_scraspect; // X/Y of the screen areas | |
| 254 | render_screen_list m_screens; // list of active screens | |
| 255 | render_bounds m_bounds; // computed bounds of the view | |
| 256 | render_bounds m_scrbounds; // computed bounds of the screens within the view | |
| 257 | render_bounds m_expbounds; // explicit bounds of the view | |
| 258 | bool m_layenabled[ITEM_LAYER_MAX]; // is this layer enabled? | |
| 259 | simple_list<item> m_backdrop_list; // list of backdrop items | |
| 260 | simple_list<item> m_screen_list; // list of screen items | |
| 261 | simple_list<item> m_overlay_list; // list of overlay items | |
| 262 | simple_list<item> m_bezel_list; // list of bezel items | |
| 263 | simple_list<item> m_cpanel_list; // list of marquee items | |
| 264 | simple_list<item> m_marquee_list; // list of marquee items | |
| 249 | // internal state | |
| 250 | layout_view * m_next; // pointer to next layout in the list | |
| 251 | astring m_name; // name of the layout | |
| 252 | float m_aspect; // X/Y of the layout | |
| 253 | float m_scraspect; // X/Y of the screen areas | |
| 254 | render_screen_list m_screens; // list of active screens | |
| 255 | render_bounds m_bounds; // computed bounds of the view | |
| 256 | render_bounds m_scrbounds; // computed bounds of the screens within the view | |
| 257 | render_bounds m_expbounds; // explicit bounds of the view | |
| 258 | bool m_layenabled[ITEM_LAYER_MAX]; // is this layer enabled? | |
| 259 | simple_list<item> m_backdrop_list; // list of backdrop items | |
| 260 | simple_list<item> m_screen_list; // list of screen items | |
| 261 | simple_list<item> m_overlay_list; // list of overlay items | |
| 262 | simple_list<item> m_bezel_list; // list of bezel items | |
| 263 | simple_list<item> m_cpanel_list; // list of marquee items | |
| 264 | simple_list<item> m_marquee_list; // list of marquee items | |
| 265 | 265 | }; |
| 266 | 266 | |
| 267 | 267 | |
| r242703 | r242704 | |
| 270 | 270 | // a layout_file consists of a list of elements and a list of views |
| 271 | 271 | class layout_file |
| 272 | 272 | { |
| 273 | ||
| 273 | friend class simple_list<layout_file>; | |
| 274 | 274 | |
| 275 | 275 | public: |
| 276 | // construction/destruction | |
| 277 | layout_file(running_machine &machine, xml_data_node &rootnode, const char *dirname); | |
| 278 | virtual ~layout_file(); | |
| 276 | // construction/destruction | |
| 277 | layout_file(running_machine &machine, xml_data_node &rootnode, const char *dirname); | |
| 278 | virtual ~layout_file(); | |
| 279 | 279 | |
| 280 | // getters | |
| 281 | layout_file *next() const { return m_next; } | |
| 282 | layout_element *first_element() const { return m_elemlist.first(); } | |
| 283 | layout_view *first_view() const { return m_viewlist.first(); } | |
| 280 | // getters | |
| 281 | layout_file *next() const { return m_next; } | |
| 282 | layout_element *first_element() const { return m_elemlist.first(); } | |
| 283 | layout_view *first_view() const { return m_viewlist.first(); } | |
| 284 | 284 | |
| 285 | 285 | private: |
| 286 | // internal state | |
| 287 | layout_file * m_next; // pointer to the next file in the list | |
| 288 | simple_list<layout_element> m_elemlist; // list of shared layout elements | |
| 289 | simple_list<layout_view> m_viewlist; // list of views | |
| 286 | // internal state | |
| 287 | layout_file * m_next; // pointer to the next file in the list | |
| 288 | simple_list<layout_element> m_elemlist; // list of shared layout elements | |
| 289 | simple_list<layout_view> m_viewlist; // list of views | |
| 290 | 290 | }; |
| 291 | 291 | |
| 292 | 292 |
| r242703 | r242704 | |
|---|---|---|
| 1055 | 1055 | |
| 1056 | 1056 | } |
| 1057 | 1057 | |
| 1058 | WRITE_LINE_MEMBER( pokey_device::sid_w ) | |
| 1059 | { | |
| 1060 | if (state) | |
| 1061 | { | |
| 1062 | m_SKSTAT |= SK_SERIN; | |
| 1063 | } | |
| 1064 | else | |
| 1065 | { | |
| 1066 | m_SKSTAT &= ~SK_SERIN; | |
| 1067 | } | |
| 1068 | } | |
| 1069 | ||
| 1070 | 1058 | void pokey_device::serin_ready(int after) |
| 1071 | 1059 | { |
| 1072 | 1060 | timer_set(m_clock_period * after, 5, 0); |
| r242703 | r242704 | |
|---|---|---|
| 234 | 234 | UINT8 read(offs_t offset); |
| 235 | 235 | void write(offs_t offset, UINT8 data); |
| 236 | 236 | |
| 237 | DECLARE_WRITE_LINE_MEMBER( sid_w ); // pin 24 | |
| 238 | 237 | void serin_ready(int after); |
| 239 | 238 | |
| 240 | 239 | // analog output configuration |
| r242703 | r242704 | |
|---|---|---|
| 963 | 963 | /* initialize the chip state */ |
| 964 | 964 | m_speaking_now = m_talk_status = 0; |
| 965 | 965 | m_CTL_pins = 0; |
| 966 | m_RNG = 0x1fff; | |
| 966 | m_RNG = 0x1fff; | |
| 967 | 967 | m_CTL_buffer = 0; |
| 968 | m_PDC = 0; | |
| 969 | 968 | |
| 970 | 969 | /* initialize the energy/pitch/k states */ |
| 971 | 970 | m_old_energy = m_new_energy = m_current_energy = m_target_energy = 0; |
| r242703 | r242704 | |
| 1056 | 1055 | else if (m_state == CTL_STATE_OUTPUT) |
| 1057 | 1056 | { |
| 1058 | 1057 | if (DEBUG_5110) logerror("Status read while outputting buffer (buffer=%2d)\n", m_CTL_buffer); |
| 1059 | return (m_CTL_buffer); | |
| 1058 | return (m_CTL_buffer); | |
| 1060 | 1059 | } |
| 1061 | 1060 | else // we're reading with the bus in input mode! just return the last thing written to the bus |
| 1062 | 1061 | { |
| r242703 | r242704 | |
| 1150 | 1149 | /****************************************************************************** |
| 1151 | 1150 | |
| 1152 | 1151 | tms5110_set_frequency -- adjusts the playback frequency |
| 1153 | TODO: kill this function; we should be adjusting the tms51xx device clock itself, | |
| 1154 | not setting it here! | |
| 1152 | TODO: kill this function; we should be adjusting the tms51xx device clock itself, | |
| 1153 | not setting it here! | |
| 1155 | 1154 | |
| 1156 | 1155 | ******************************************************************************/ |
| 1157 | 1156 |
| r242703 | r242704 | |
|---|---|---|
| 1420 | 1420 | } |
| 1421 | 1421 | while (++x < 208); |
| 1422 | 1422 | } |
| 1423 | ||
| 1423 | ||
| 1424 | 1424 | /* border on right side of the GG active screen */ |
| 1425 | 1425 | do |
| 1426 | 1426 | { |
| r242703 | r242704 | |
|---|---|---|
| 1810 | 1810 | * the optimized averaging algorithm. |
| 1811 | 1811 | *********************************************/ |
| 1812 | 1812 | |
| 1813 | void snes_ppu_device::refresh_scanline( bitmap_rgb32 &bitmap, UINT16 curline ) | |
| 1813 | void snes_ppu_device::refresh_scanline( running_machine &machine, bitmap_rgb32 &bitmap, UINT16 curline ) | |
| 1814 | 1814 | { |
| 1815 | 1815 | UINT16 ii; |
| 1816 | 1816 | int x; |
| r242703 | r242704 | |
| 1818 | 1818 | struct SNES_SCANLINE *scanline1, *scanline2; |
| 1819 | 1819 | UINT16 c; |
| 1820 | 1820 | UINT16 prev_colour = 0; |
| 1821 | int blurring = machine | |
| 1821 | int blurring = machine.root_device().ioport("OPTIONS")->read_safe(0) & 0x01; | |
| 1822 | 1822 | |
| 1823 | 1823 | g_profiler.start(PROFILER_VIDEO); |
| 1824 | 1824 | |
| r242703 | r242704 | |
| 1866 | 1866 | update_obsel(); |
| 1867 | 1867 | |
| 1868 | 1868 | #if SNES_LAYER_DEBUG |
| 1869 | if (dbg_video(curline)) | |
| 1869 | if (dbg_video(machine, curline)) | |
| 1870 | 1870 | { |
| 1871 | 1871 | g_profiler.stop(); |
| 1872 | 1872 | return; |
| r242703 | r242704 | |
| 1978 | 1978 | static const UINT16 vram_fgr_shiftab[4] = { 0, 5, 6, 7 }; |
| 1979 | 1979 | |
| 1980 | 1980 | // utility function - latches the H/V counters. Used by IRQ, writes to WRIO, etc. |
| 1981 | void snes_ppu_device::latch_counters() | |
| 1981 | void snes_ppu_device::latch_counters( running_machine &machine ) | |
| 1982 | 1982 | { |
| 1983 | m_beam.current_horz = m_screen->hpos() / m_htmult; | |
| 1984 | m_beam.latch_vert = m_screen->vpos(); | |
| 1983 | m_beam.current_horz = machine.first_screen()->hpos() / m_htmult; | |
| 1984 | m_beam.latch_vert = machine.first_screen()->vpos(); | |
| 1985 | 1985 | m_beam.latch_horz = m_beam.current_horz; |
| 1986 | 1986 | m_stat78 |= 0x40; // indicate we latched |
| 1987 | 1987 | // m_read_ophct = m_read_opvct = 0; // clear read flags - 2009-08: I think we must clear these when STAT78 is read... |
| r242703 | r242704 | |
| 1989 | 1989 | // printf("latched @ H %d V %d\n", m_beam.latch_horz, m_beam.latch_vert); |
| 1990 | 1990 | } |
| 1991 | 1991 | |
| 1992 | void snes_ppu_device::dynamic_res_change() | |
| 1992 | void snes_ppu_device::dynamic_res_change( running_machine &machine ) | |
| 1993 | 1993 | { |
| 1994 | rectangle visarea = m_screen->visible_area(); | |
| 1994 | rectangle visarea = machine.first_screen()->visible_area(); | |
| 1995 | 1995 | attoseconds_t refresh; |
| 1996 | 1996 | |
| 1997 | 1997 | visarea.min_x = visarea.min_y = 0; |
| r242703 | r242704 | |
| 2008 | 2008 | if ((m_stat78 & 0x10) == SNES_NTSC) |
| 2009 | 2009 | { |
| 2010 | 2010 | refresh = HZ_TO_ATTOSECONDS(DOTCLK_NTSC) * SNES_HTOTAL * SNES_VTOTAL_NTSC; |
| 2011 | m_screen->configure(SNES_HTOTAL * 2, SNES_VTOTAL_NTSC * m_interlace, visarea, refresh); | |
| 2011 | machine.first_screen()->configure(SNES_HTOTAL * 2, SNES_VTOTAL_NTSC * m_interlace, visarea, refresh); | |
| 2012 | 2012 | } |
| 2013 | 2013 | else |
| 2014 | 2014 | { |
| 2015 | 2015 | refresh = HZ_TO_ATTOSECONDS(DOTCLK_PAL) * SNES_HTOTAL * SNES_VTOTAL_PAL; |
| 2016 | m_screen->configure(SNES_HTOTAL * 2, SNES_VTOTAL_PAL * m_interlace, visarea, refresh); | |
| 2016 | machine.first_screen()->configure(SNES_HTOTAL * 2, SNES_VTOTAL_PAL * m_interlace, visarea, refresh); | |
| 2017 | 2017 | } |
| 2018 | 2018 | } |
| 2019 | 2019 | |
| r242703 | r242704 | |
| 2033 | 2033 | when interlace is active. |
| 2034 | 2034 | *************************************************/ |
| 2035 | 2035 | |
| 2036 | inline UINT32 snes_ppu_device::get_vram_address() | |
| 2036 | inline UINT32 snes_ppu_device::get_vram_address( running_machine &machine ) | |
| 2037 | 2037 | { |
| 2038 | 2038 | UINT32 addr = m_vmadd; |
| 2039 | 2039 | |
| r242703 | r242704 | |
| 2308 | 2308 | return m_ppu1_open_bus; |
| 2309 | 2309 | } |
| 2310 | 2310 | case SLHV: /* Software latch for H/V counter */ |
| 2311 | latch_counters(); | |
| 2311 | latch_counters(space.machine()); | |
| 2312 | 2312 | return m_openbus_cb(space, 0); /* Return value is meaningless */ |
| 2313 | 2313 | |
| 2314 | 2314 | case ROAMDATA: /* Read data from OAM (DR) */ |
| r242703 | r242704 | |
| 2323 | 2323 | return m_ppu1_open_bus; |
| 2324 | 2324 | case RVMDATAL: /* Read data from VRAM (low) */ |
| 2325 | 2325 | { |
| 2326 | UINT32 addr = get_vram_address(); | |
| 2326 | UINT32 addr = get_vram_address(space.machine()); | |
| 2327 | 2327 | m_ppu1_open_bus = m_vram_read_buffer & 0xff; |
| 2328 | 2328 | |
| 2329 | 2329 | if (!m_vram_fgr_high) |
| r242703 | r242704 | |
| 2338 | 2338 | } |
| 2339 | 2339 | case RVMDATAH: /* Read data from VRAM (high) */ |
| 2340 | 2340 | { |
| 2341 | UINT32 addr = get_vram_address(); | |
| 2341 | UINT32 addr = get_vram_address(space.machine()); | |
| 2342 | 2342 | m_ppu1_open_bus = (m_vram_read_buffer >> 8) & 0xff; |
| 2343 | 2343 | |
| 2344 | 2344 | if (m_vram_fgr_high) |
| r242703 | r242704 | |
| 2469 | 2469 | return; |
| 2470 | 2470 | case BGMODE: /* BG mode and character size settings */ |
| 2471 | 2471 | m_mode = data & 0x07; |
| 2472 | dynamic_res_change(); | |
| 2472 | dynamic_res_change(space.machine()); | |
| 2473 | 2473 | m_bg3_priority_bit = BIT(data, 3); |
| 2474 | 2474 | m_layer[SNES_BG1].tile_size = BIT(data, 4); |
| 2475 | 2475 | m_layer[SNES_BG2].tile_size = BIT(data, 5); |
| r242703 | r242704 | |
| 2571 | 2571 | { |
| 2572 | 2572 | UINT32 addr; |
| 2573 | 2573 | m_vmadd = (m_vmadd & 0xff00) | (data << 0); |
| 2574 | addr = get_vram_address(); | |
| 2574 | addr = get_vram_address(space.machine()); | |
| 2575 | 2575 | m_vram_read_buffer = vram_read(space, addr); |
| 2576 | 2576 | m_vram_read_buffer |= (vram_read(space, addr + 1) << 8); |
| 2577 | 2577 | } |
| r242703 | r242704 | |
| 2580 | 2580 | { |
| 2581 | 2581 | UINT32 addr; |
| 2582 | 2582 | m_vmadd = (m_vmadd & 0x00ff) | (data << 8); |
| 2583 | addr = get_vram_address(); | |
| 2583 | addr = get_vram_address(space.machine()); | |
| 2584 | 2584 | m_vram_read_buffer = vram_read(space, addr); |
| 2585 | 2585 | m_vram_read_buffer |= (vram_read(space, addr + 1) << 8); |
| 2586 | 2586 | } |
| 2587 | 2587 | break; |
| 2588 | 2588 | case VMDATAL: /* 2118: Data for VRAM write (low) */ |
| 2589 | 2589 | { |
| 2590 | UINT32 addr = get_vram_address(); | |
| 2590 | UINT32 addr = get_vram_address(space.machine()); | |
| 2591 | 2591 | vram_write(space, addr, data); |
| 2592 | 2592 | |
| 2593 | 2593 | if (!m_vram_fgr_high) |
| r242703 | r242704 | |
| 2596 | 2596 | return; |
| 2597 | 2597 | case VMDATAH: /* 2119: Data for VRAM write (high) */ |
| 2598 | 2598 | { |
| 2599 | UINT32 addr = get_vram_address(); | |
| 2599 | UINT32 addr = get_vram_address(space.machine()); | |
| 2600 | 2600 | vram_write(space, addr + 1, data); |
| 2601 | 2601 | |
| 2602 | 2602 | if (m_vram_fgr_high) |
| r242703 | r242704 | |
| 2800 | 2800 | m_beam.last_visible_line = (data & 0x04) ? 240 : 225; |
| 2801 | 2801 | m_pseudo_hires = BIT(data, 3); |
| 2802 | 2802 | m_mode7.extbg = BIT(data, 6); |
| 2803 | dynamic_res_change(); | |
| 2803 | dynamic_res_change(space.machine()); | |
| 2804 | 2804 | #ifdef SNES_DBG_REG_W |
| 2805 | 2805 | if ((data & 0x8) != (PPU_REG(SETINI) & 0x8)) |
| 2806 | 2806 | osd_printf_debug("Pseudo 512 mode: %s\n", (data & 0x8) ? "on" : "off"); |
| r242703 | r242704 | |
| 2827 | 2827 | popmessage MSG2; \ |
| 2828 | 2828 | } |
| 2829 | 2829 | |
| 2830 | UINT8 snes_ppu_device::dbg_video( UINT16 curline ) | |
| 2830 | UINT8 snes_ppu_device::dbg_video( running_machine &machine, UINT16 curline ) | |
| 2831 | 2831 | { |
| 2832 | 2832 | int i; |
| 2833 | UINT8 toggles = machine | |
| 2833 | UINT8 toggles = machine.root_device().ioport("DEBUG1")->read_safe(0); | |
| 2834 | 2834 | m_debug_options.select_pri[SNES_BG1] = (toggles & 0x03); |
| 2835 | 2835 | m_debug_options.select_pri[SNES_BG2] = (toggles & 0x0c) >> 2; |
| 2836 | 2836 | m_debug_options.select_pri[SNES_BG3] = (toggles & 0x30) >> 4; |
| 2837 | 2837 | m_debug_options.select_pri[SNES_BG4] = (toggles & 0xc0) >> 6; |
| 2838 | 2838 | |
| 2839 | toggles = machine | |
| 2839 | toggles = machine.root_device().ioport("DEBUG2")->read_safe(0); | |
| 2840 | 2840 | for (i = 0; i < 4; i++) |
| 2841 | 2841 | DEBUG_TOGGLE(i, m_debug_options.bg_disabled[i], ("Debug: Disabled BG%d.\n", i + 1), ("Debug: Enabled BG%d.\n", i + 1)) |
| 2842 | 2842 | DEBUG_TOGGLE(4, m_debug_options.bg_disabled[SNES_OAM], ("Debug: Disabled OAM.\n"), ("Debug: Enabled OAM.\n")) |
| r242703 | r242704 | |
| 2844 | 2844 | DEBUG_TOGGLE(6, m_debug_options.colormath_disabled, ("Debug: Disabled Color Math.\n"), ("Debug: Enabled Color Math.\n")) |
| 2845 | 2845 | DEBUG_TOGGLE(7, m_debug_options.windows_disabled, ("Debug: Disabled Window Masks.\n"), ("Debug: Enabled Window Masks.\n")) |
| 2846 | 2846 | |
| 2847 | toggles = machine | |
| 2847 | toggles = machine.root_device().ioport("DEBUG4")->read_safe(0); | |
| 2848 | 2848 | for (i = 0; i < 8; i++) |
| 2849 | 2849 | DEBUG_TOGGLE(i, m_debug_options.mode_disabled[i], ("Debug: Disabled Mode %d drawing.\n", i), ("Debug: Enabled Mode %d drawing.\n", i)) |
| 2850 | 2850 | |
| 2851 | toggles = machine | |
| 2851 | toggles = machine.root_device().ioport("DEBUG3")->read_safe(0); | |
| 2852 | 2852 | DEBUG_TOGGLE(2, m_debug_options.mosaic_disabled, ("Debug: Disabled Mosaic.\n"), ("Debug: Enabled Mosaic.\n")) |
| 2853 | 2853 | m_debug_options.sprite_reversed = BIT(toggles, 7); |
| 2854 | 2854 | m_debug_options.select_pri[SNES_OAM] = (toggles & 0x70) >> 4; |
| r242703 | r242704 | |
|---|---|---|
| 248 | 248 | void update_windowmasks(void); |
| 249 | 249 | void update_offsets(void); |
| 250 | 250 | inline void draw_blend(UINT16 offset, UINT16 *colour, UINT8 prevent_color_math, UINT8 black_pen_clip, int switch_screens); |
| 251 | void refresh_scanline(bitmap_rgb32 &bitmap, UINT16 curline); | |
| 251 | void refresh_scanline(running_machine &machine, bitmap_rgb32 &bitmap, UINT16 curline); | |
| 252 | 252 | |
| 253 | void latch_counters(); | |
| 254 | void dynamic_res_change(); | |
| 255 | inline UINT32 get_vram_address(); | |
| 256 | UINT8 dbg_video(UINT16 curline); | |
| 253 | void latch_counters(running_machine &machine); | |
| 254 | void dynamic_res_change(running_machine &machine); | |
| 255 | inline UINT32 get_vram_address(running_machine &machine); | |
| 256 | UINT8 dbg_video(running_machine &machine, UINT16 curline); | |
| 257 | 257 | |
| 258 | 258 | UINT8 read(address_space &space, UINT32 offset, UINT8 wrio_bit7); |
| 259 | 259 | void write(address_space &space, UINT32 offset, UINT8 data); |
| r242703 | r242704 | |
|---|---|---|
| 5725 | 5725 | m_vdp2_regs[offset] = (STV_VDP2_VRAMSZ << 15) | |
| 5726 | 5726 | ((0 << 0) & 0xf); // VDP2 version |
| 5727 | 5727 | |
| 5728 | /* Games basically r/w the entire VDP2 register area when this is tripped. (example: Silhouette Mirage) | |
| 5728 | /* Games basically r/w the entire VDP2 register area when this is tripped. (example: Silhouette Mirage) | |
| 5729 | 5729 | Disable log for the time being. */ |
| 5730 | 5730 | //if(!space.debugger_access()) |
| 5731 | // | |
| 5731 | // printf("Warning: VDP2 version read\n"); | |
| 5732 | 5732 | break; |
| 5733 | 5733 | } |
| 5734 | 5734 |
| r242703 | r242704 | |
|---|---|---|
| 1 | /*************************************************************************** | |
| 2 | ||
| 3 | TEA1002 | |
| 4 | ||
| 5 | license: MAME, GPL-2.0+ | |
| 6 | copyright-holders: Dirk Best | |
| 7 | ||
| 8 | PAL colour encoder and video summer | |
| 9 | ||
| 10 | ***************************************************************************/ | |
| 11 | ||
| 12 | #include "tea1002.h" | |
| 13 | ||
| 14 | ||
| 15 | //************************************************************************** | |
| 16 | // CONSTANTS | |
| 17 | //************************************************************************** | |
| 18 | ||
| 19 | const float tea1002_device::m_luminance[] = | |
| 20 | { | |
| 21 | 0, 22.5, 44, 66.5, 8.5, 31, 52.5, 100, // INV = 0 | |
| 22 | 75, 52.5, 31, 8.5, 66.5, 44, 22.5, 0 // INV = 1 | |
| 23 | }; | |
| 24 | ||
| 25 | const int tea1002_device::m_phase[] = | |
| 26 | { | |
| 27 | 0, 103, 241, 167, 347, 61, 283, 0, // INV = 0 | |
| 28 | 0, 283, 61, 347, 167, 241, 103, 0 // INV = 1 | |
| 29 | }; | |
| 30 | ||
| 31 | const int tea1002_device::m_amplitute[] = | |
| 32 | { | |
| 33 | 0, 48, 44, 33, 33, 44, 48, 0, // INV = 0 | |
| 34 | 0, 24, 22, 17, 17, 22, 24, 0 // INV = 1 | |
| 35 | }; | |
| 36 | ||
| 37 | ||
| 38 | //************************************************************************** | |
| 39 | // DEVICE DEFINITIONS | |
| 40 | //************************************************************************** | |
| 41 | ||
| 42 | const device_type TEA1002 = &device_creator<tea1002_device>; | |
| 43 | ||
| 44 | ||
| 45 | //************************************************************************** | |
| 46 | // LIVE DEVICE | |
| 47 | //************************************************************************** | |
| 48 | ||
| 49 | //------------------------------------------------- | |
| 50 | // paula_device - constructor | |
| 51 | //------------------------------------------------- | |
| 52 | ||
| 53 | tea1002_device::tea1002_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : | |
| 54 | device_t(mconfig, TEA1002, "TEA1002 PAL colour encoder", tag, owner, clock, "tea1002", __FILE__) | |
| 55 | { | |
| 56 | } | |
| 57 | ||
| 58 | //------------------------------------------------- | |
| 59 | // device_start - device-specific startup | |
| 60 | //------------------------------------------------- | |
| 61 | ||
| 62 | void tea1002_device::device_start() | |
| 63 | { | |
| 64 | } | |
| 65 | ||
| 66 | ||
| 67 | //************************************************************************** | |
| 68 | // IMPLEMENTATION | |
| 69 | //************************************************************************** | |
| 70 | ||
| 71 | // this could be done in device_start() and cached, but it's only | |
| 72 | // accessed once at PALETTE_INIT anyway | |
| 73 | rgb_t tea1002_device::color(int index) | |
| 74 | { | |
| 75 | // calculate yuv | |
| 76 | double y = m_luminance[index] / 100; | |
| 77 | double u = cos((m_phase[index] + m_tint) * M_PI / 180) * m_amplitute[index] / 100; | |
| 78 | double v = sin((m_phase[index] + m_tint) * M_PI / 180) * m_amplitute[index] / 100; | |
| 79 | ||
| 80 | // and convert to rgb | |
| 81 | double r = y + v * 1.14; | |
| 82 | double g = y - u * 0.395 - v * 0.581; | |
| 83 | double b = y + u * 2.032; | |
| 84 | ||
| 85 | return rgb_t(rgb_t::clamp(r * 255), rgb_t::clamp(g * 255), rgb_t::clamp(b * 255)); | |
| 86 | } |
| r242703 | r242704 | |
|---|---|---|
| 1 | /*************************************************************************** | |
| 2 | ||
| 3 | TEA1002 | |
| 4 | ||
| 5 | license: MAME, GPL-2.0+ | |
| 6 | copyright-holders: Dirk Best | |
| 7 | ||
| 8 | PAL colour encoder and video summer | |
| 9 | ||
| 10 | _____ _____ | |
| 11 | INV 1 |* \_/ | 18 CBLNK | |
| 12 | R 2 | | 17 3,54 MHz | |
| 13 | G 3 | | 16 GND | |
| 14 | B 4 | | 15 CBF | |
| 15 | _CSYNC 5 | TEA1002 | 14 8,86 MHz | |
| 16 | lum. delay line 6 | | 13 8,86 MHz | |
| 17 | lum. delay line 7 | | 12 PAL switch | |
| 18 | comp. video to mod. 8 | | 11 chroma band limiting | |
| 19 | d.c. adj. / colour bar 9 |_____________| 10 Vp | |
| 20 | ||
| 21 | ***************************************************************************/ | |
| 22 | ||
| 23 | #pragma once | |
| 24 | ||
| 25 | #ifndef __TEA1002_H__ | |
| 26 | #define __TEA1002_H__ | |
| 27 | ||
| 28 | #include "emu.h" | |
| 29 | ||
| 30 | ||
| 31 | //************************************************************************** | |
| 32 | // INTERFACE CONFIGURATION MACROS | |
| 33 | //************************************************************************** | |
| 34 | ||
| 35 | #define MCFG_TEA1002_ADD(_tag, _clock) \ | |
| 36 | MCFG_DEVICE_ADD(_tag, TEA1002, _clock) | |
| 37 | ||
| 38 | ||
| 39 | //************************************************************************** | |
| 40 | // TYPE DEFINITIONS | |
| 41 | //************************************************************************** | |
| 42 | ||
| 43 | // ======================> tea1002_device | |
| 44 | ||
| 45 | class tea1002_device : public device_t | |
| 46 | { | |
| 47 | public: | |
| 48 | // construction/destruction | |
| 49 | tea1002_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
| 50 | ||
| 51 | rgb_t color(int index); | |
| 52 | ||
| 53 | protected: | |
| 54 | // device_t overrides | |
| 55 | virtual void device_start(); | |
| 56 | ||
| 57 | private: | |
| 58 | static const int m_tint = -6; // what is this based on? | |
| 59 | static const float m_luminance[16]; | |
| 60 | static const int m_phase[16]; | |
| 61 | static const int m_amplitute[16]; | |
| 62 | }; | |
| 63 | ||
| 64 | // device type definition | |
| 65 | extern const device_type TEA1002; | |
| 66 | ||
| 67 | #endif // __TEA1002_H__ |
| r242703 | r242704 | |
|---|---|---|
| 483 | 483 | |
| 484 | 484 | #------------------------------------------------- |
| 485 | 485 | # |
| 486 | #@src/emu/video/tea1002.h,VIDEOS += TEA1002 | |
| 487 | #------------------------------------------------- | |
| 488 | ||
| 489 | ifneq ($(filter TEA1002,$(VIDEOS)),) | |
| 490 | VIDEOOBJS += $(VIDEOOBJ)/tea1002.o | |
| 491 | endif | |
| 492 | ||
| 493 | #------------------------------------------------- | |
| 494 | # | |
| 495 | 486 | #@src/emu/video/tlc34076.h,VIDEOS += TLC34076 |
| 496 | 487 | #------------------------------------------------- |
| 497 | 488 |
| r242703 | r242704 | |
|---|---|---|
| 1550 | 1550 | |
| 1551 | 1551 | bool a2_edd_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) |
| 1552 | 1552 | { |
| 1553 | UINT8 | |
| 1553 | UINT8 img[2244608]; | |
| 1554 | 1554 | UINT8 nibble[16384], stream[16384]; |
| 1555 | 1555 | int npos[16384]; |
| 1556 | ||
| 1557 | img = (UINT8 *) malloc(2244608); | |
| 1558 | ||
| 1559 | if (!img) | |
| 1560 | { | |
| 1561 | return false; | |
| 1562 | } | |
| 1563 | ||
| 1564 | 1556 | io_generic_read(io, img, 0, 2244608); |
| 1565 | 1557 | |
| 1566 | 1558 | for(int i=0; i<137; i++) { |
| r242703 | r242704 | |
| 1628 | 1620 | generate_track_from_bitstream(i >> 2, 0, stream, len, image, i & 3); |
| 1629 | 1621 | image->set_write_splice_position(i >> 2, 0, UINT32(U64(200000000)*splice/len), i & 3); |
| 1630 | 1622 | } |
| 1631 | free(img); | |
| 1632 | 1623 | return true; |
| 1633 | 1624 | } |
| 1634 | 1625 |
| r242703 | r242704 | |
|---|---|---|
| 1186 | 1186 | LEGACY_FLOPPY_OPTIONS_END |
| 1187 | 1187 | |
| 1188 | 1188 | LEGACY_FLOPPY_OPTIONS_START( apple35_iigs ) |
| 1189 | LEGACY_FLOPPY_OPTION( apple35_raw, "dsk,img,image | |
| 1189 | LEGACY_FLOPPY_OPTION( apple35_raw, "dsk,img,image", "Apple raw 3.5\" disk image", apple35_raw_identify, apple35_raw_construct, NULL, | |
| 1190 | 1190 | HEADS([1]-2) |
| 1191 | 1191 | TRACKS([80]) |
| 1192 | 1192 | SECTOR_LENGTH([512]) |
| r242703 | r242704 | |
|---|---|---|
| 31 | 31 | |
| 32 | 32 | **************************************************************************/ |
| 33 | 33 | |
| 34 | #include "coco_cas.h" | |
| 34 | 35 | #include "emu.h" |
| 35 | #include "coco_cas.h" | |
| 36 | 36 | |
| 37 | 37 | #define COCO_WAVESAMPLES_HEADER (1.0) |
| 38 | 38 | #define COCO_WAVESAMPLES_TRAILER (1.0) |
| r242703 | r242704 | |
|---|---|---|
| 8 | 8 | |
| 9 | 9 | #include <string.h> |
| 10 | 10 | |
| 11 | #include "emu.h" | |
| 12 | 11 | #include "formats/cpis_dsk.h" |
| 13 | 12 | #include "formats/basicdsk.h" |
| 14 | 13 |
| r242703 | r242704 | |
|---|---|---|
| 27 | 27 | * |
| 28 | 28 | */ |
| 29 | 29 | |
| 30 | #include "emu.h" | |
| 31 | 30 | #include "flopimg.h" |
| 32 | 31 | #include "imageutl.h" |
| 33 | 32 |
| r242703 | r242704 | |
|---|---|---|
| 7 | 7 | PC98 DCP & DCU disk images |
| 8 | 8 | |
| 9 | 9 | 0xA2 header, followed by track data |
| 10 | ||
| 10 | header[0] - disk format | |
| 11 | 11 | header[1-0xA1] - track map (1=track used, 0=track unused/unformatted) |
| 12 | header[0xA2] - all tracks used? | |
| 12 | header[0xA2] - all tracks used? | |
| 13 | 13 | (there seems to be a diff in its usage between DCP and DCU) |
| 14 | 14 | |
| 15 | TODO: | |
| 15 | TODO: | |
| 16 | 16 | - add support for track map. images available for tests were all |
| 17 | 17 | of type 0x01, with all 154 tracks present. combined with pete_j |
| 18 | 18 | reporting some images have faulty track map, we need some more |
| 19 | 19 | test cases to properly handle these disks! |
| 20 | ||
| 20 | ||
| 21 | 21 | *********************************************************************/ |
| 22 | 22 | |
| 23 | 23 | #include "emu.h" |
| r242703 | r242704 | |
| 52 | 52 | io_generic_read(io, h, 0, 0xa2); |
| 53 | 53 | |
| 54 | 54 | // First byte is the disk format (see below in load() for details) |
| 55 | switch (h[0]) | |
| 55 | switch (h[0]) | |
| 56 | 56 | { |
| 57 | 57 | case 0x01: |
| 58 | 58 | default: |
| r242703 | r242704 | |
| 99 | 99 | if (h[i]) |
| 100 | 100 | count_tracks++; |
| 101 | 101 | |
| 102 | // in theory track map should be enough (former check), but some images have it wrong! | |
| 102 | // in theory track map should be enough (former check), but some images have it wrong! | |
| 103 | 103 | // hence, if this check fails, we also allow for images with all tracks and wrong track map |
| 104 | 104 | if (size - 0xa2 == (heads * count_tracks * spt * bps) || size - 0xa2 == (heads * tracks * spt * bps)) |
| 105 | 105 | return 100; |
| r242703 | r242704 | |
| 107 | 107 | // for disk type 0x11 the head 0 track 0 has 26 sectors of half width, so we need to compensate calculation |
| 108 | 108 | if (is_hdb && (size - 0xa2 + (0x80 * 26) == (heads * count_tracks * spt * bps) || size - 0xa2 + (0x80 * 26) == (heads * tracks * spt * bps))) |
| 109 | 109 | return 100; |
| 110 | ||
| 110 | ||
| 111 | 111 | return 0; |
| 112 | 112 | } |
| 113 | 113 | |
| r242703 | r242704 | |
| 116 | 116 | UINT8 h[0xa2]; |
| 117 | 117 | int heads, tracks, spt, bps; |
| 118 | 118 | bool is_hdb = false; |
| 119 | ||
| 119 | ||
| 120 | 120 | io_generic_read(io, h, 0, 0xa2); |
| 121 | ||
| 121 | ||
| 122 | 122 | // First byte is the disk format: |
| 123 | switch (h[0]) | |
| 123 | switch (h[0]) | |
| 124 | 124 | { |
| 125 | 125 | case 0x01: |
| 126 | 126 | default: |
| r242703 | r242704 | |
| 212 | 212 | if (!is_hdb) |
| 213 | 213 | { |
| 214 | 214 | for (int track = 0; track < tracks; track++) |
| 215 | for (int head = 0; head < heads; head++) | |
| 215 | for (int head = 0; head < heads; head++) | |
| 216 | 216 | { |
| 217 | 217 | io_generic_read(io, sect_data, 0xa2 + bps * spt * (track * heads + head), bps * spt); |
| 218 | ||
| 219 | for (int i = 0; i < spt; i++) | |
| 218 | ||
| 219 | for (int i = 0; i < spt; i++) | |
| 220 | 220 | { |
| 221 | 221 | sects[i].track = track; |
| 222 | 222 | sects[i].head = head; |
| r242703 | r242704 | |
| 227 | 227 | sects[i].bad_crc = false; |
| 228 | 228 | sects[i].data = sect_data + i * bps; |
| 229 | 229 | } |
| 230 | ||
| 230 | ||
| 231 | 231 | build_pc_track_mfm(track, head, image, cell_count, spt, sects, calc_default_pc_gap3_size(form_factor, bps)); |
| 232 | 232 | } |
| 233 | 233 | } |
| 234 | else | |
| 234 | else // FIXME: the code below is untested, because no image was found... there might be some silly mistake in the disk geometry! | |
| 235 | 235 | { |
| 236 | 236 | // Read Head 0 Track 0 is FM with 26 sectors of 128bytes instead of 256 |
| 237 | 237 | io_generic_read(io, sect_data, 0xa2, 128 * spt); |
| 238 | ||
| 239 | for (int i = 0; i < spt; i++) | |
| 238 | ||
| 239 | for (int i = 0; i < spt; i++) | |
| 240 | 240 | { |
| 241 | 241 | sects[i].track = 0; |
| 242 | 242 | sects[i].head = 0; |
| r242703 | r242704 | |
| 247 | 247 | sects[i].bad_crc = false; |
| 248 | 248 | sects[i].data = sect_data + i * 128; |
| 249 | 249 | } |
| 250 | ||
| 250 | ||
| 251 | 251 | build_pc_track_fm(0, 0, image, cell_count, spt, sects, calc_default_pc_gap3_size(form_factor, 128)); |
| 252 | ||
| 252 | ||
| 253 | 253 | // Read Head 1 Track 0 is MFM with 26 sectors of 256bytes |
| 254 | 254 | io_generic_read(io, sect_data, 0xa2 + 128 * spt, bps * spt); |
| 255 | ||
| 256 | for (int i = 0; i < spt; i++) | |
| 255 | ||
| 256 | for (int i = 0; i < spt; i++) | |
| 257 | 257 | { |
| 258 | 258 | sects[i].track = 0; |
| 259 | 259 | sects[i].head = 1; |
| r242703 | r242704 | |
| 264 | 264 | sects[i].bad_crc = false; |
| 265 | 265 | sects[i].data = sect_data + i * bps; |
| 266 | 266 | } |
| 267 | ||
| 267 | ||
| 268 | 268 | build_pc_track_mfm(0, 1, image, cell_count, spt, sects, calc_default_pc_gap3_size(form_factor, bps)); |
| 269 | ||
| 269 | ||
| 270 | 270 | // Read other tracks as usual |
| 271 | 271 | UINT32 data_offs = 0xa2 + (26 * 0x80) + (26 * 0x100); |
| 272 | 272 | for (int track = 1; track < tracks; track++) |
| 273 | for (int head = 0; head < heads; head++) | |
| 273 | for (int head = 0; head < heads; head++) | |
| 274 | 274 | { |
| 275 | 275 | io_generic_read(io, sect_data, data_offs + bps * spt * ((track - 1) * heads + head), bps * spt); |
| 276 | ||
| 277 | for (int i = 0; i < spt; i++) | |
| 276 | ||
| 277 | for (int i = 0; i < spt; i++) | |
| 278 | 278 | { |
| 279 | 279 | sects[i].track = track; |
| 280 | 280 | sects[i].head = head; |
| r242703 | r242704 | |
| 285 | 285 | sects[i].bad_crc = false; |
| 286 | 286 | sects[i].data = sect_data + i * bps; |
| 287 | 287 | } |
| 288 | ||
| 288 | ||
| 289 | 289 | build_pc_track_mfm(track, head, image, cell_count, spt, sects, calc_default_pc_gap3_size(form_factor, bps)); |
| 290 | 290 | } |
| 291 | 291 | } |
| 292 | ||
| 292 | ||
| 293 | 293 | return true; |
| 294 | 294 | } |
| 295 | 295 |
| r242703 | r242704 | |
|---|---|---|
| 8 | 8 | |
| 9 | 9 | #include <string.h> |
| 10 | 10 | |
| 11 | #include "emu.h" | |
| 12 | 11 | #include "dim_dsk.h" |
| 13 | 12 | #include "basicdsk.h" |
| 14 | 13 |
| r242703 | r242704 | |
|---|---|---|
| 5 | 5 | formats/dip_dsk.h |
| 6 | 6 | |
| 7 | 7 | PC98 DIP disk images |
| 8 | ||
| 8 | ||
| 9 | 9 | 0x100 header, followed by track data |
| 10 | 10 | |
| 11 | 11 | TODO: |
| 12 | - Investigate header structure | |
| 12 | - Investigate header structure | |
| 13 | 13 | - can this format be used to support different disc types? |
| 14 | 14 | |
| 15 | 15 | *********************************************************************/ |
| r242703 | r242704 | |
| 56 | 56 | tracks = 77; |
| 57 | 57 | spt = 8; |
| 58 | 58 | bps = 1024; |
| 59 | ||
| 59 | ||
| 60 | 60 | int cell_count = form_factor == floppy_image::FF_35 ? 200000 : 166666; |
| 61 | ||
| 61 | ||
| 62 | 62 | int ssize; |
| 63 | 63 | for (ssize = 0; (128 << ssize) < bps; ssize++); |
| 64 | ||
| 64 | ||
| 65 | 65 | desc_pc_sector sects[256]; |
| 66 | 66 | UINT8 sect_data[65536]; |
| 67 | ||
| 67 | ||
| 68 | 68 | for (int track = 0; track < tracks; track++) |
| 69 | for (int head = 0; head < heads; head++) | |
| 69 | for (int head = 0; head < heads; head++) | |
| 70 | 70 | { |
| 71 | 71 | io_generic_read(io, sect_data, 0x100 + bps * spt * (track * heads + head), bps * spt); |
| 72 | ||
| 73 | for (int i = 0; i < spt; i++) | |
| 72 | ||
| 73 | for (int i = 0; i < spt; i++) | |
| 74 | 74 | { |
| 75 | 75 | sects[i].track = track; |
| 76 | 76 | sects[i].head = head; |
| r242703 | r242704 | |
| 81 | 81 | sects[i].bad_crc = false; |
| 82 | 82 | sects[i].data = sect_data + i * bps; |
| 83 | 83 | } |
| 84 | ||
| 84 | ||
| 85 | 85 | build_pc_track_mfm(track, head, image, cell_count, spt, sects, calc_default_pc_gap3_size(form_factor, bps)); |
| 86 | 86 | } |
| 87 | 87 |
| r242703 | r242704 | |
|---|---|---|
| 8 | 8 | |
| 9 | 9 | #include <string.h> |
| 10 | 10 | |
| 11 | #include "emu.h" | |
| 12 | 11 | #include "imageutl.h" |
| 13 | 12 | #include "flopimg.h" |
| 14 | 13 |
| r242703 | r242704 | |
|---|---|---|
| 5 | 5 | formats/fdd_dsk.h |
| 6 | 6 | |
| 7 | 7 | PC98 FDD disk images |
| 8 | ||
| 8 | ||
| 9 | 9 | 0xC3FC header, followed by track data |
| 10 | 10 | Sector map starts at offset 0xDC, with 12bytes for each sector |
| 11 | 11 | |
| r242703 | r242704 | |
| 15 | 15 | - 0x2 = sector number |
| 16 | 16 | - 0x3 = sector size (128 << this byte) |
| 17 | 17 | - 0x4 = fill byte. if it's not 0xff, then this sector in the original |
| 18 | disk consisted of this single value repeated for the whole | |
| 19 | sector size, and the sector is skipped in the .fdd file. | |
| 20 | if it's 0xff, then this sector is wholly contained in the .fdd | |
| 18 | disk consisted of this single value repeated for the whole | |
| 19 | sector size, and the sector is skipped in the .fdd file. | |
| 20 | if it's 0xff, then this sector is wholly contained in the .fdd | |
| 21 | 21 | file |
| 22 | 22 | - 0x5 = ?? |
| 23 | 23 | - 0x6 = ?? |
| 24 | 24 | - 0x7 = ?? |
| 25 | 25 | - 0x8-0x0b = absolute offset of the data for this sector, or 0xfffffff |
| 26 | if the sector was skipped in the .fdd (and it has to be | |
| 26 | if the sector was skipped in the .fdd (and it has to be | |
| 27 | 27 | filled with the value at 0x4) |
| 28 | 28 | |
| 29 | 29 | TODO: |
| r242703 | r242704 | |
| 55 | 55 | |
| 56 | 56 | int fdd_format::identify(io_generic *io, UINT32 form_factor) |
| 57 | 57 | { |
| 58 | UINT8 h[7]; | |
| 58 | UINT8 h[7]; | |
| 59 | 59 | io_generic_read(io, h, 0, 7); |
| 60 | ||
| 60 | ||
| 61 | 61 | if (strncmp((const char *)h, "VFD1.0", 6) == 0) |
| 62 | 62 | return 100; |
| 63 | ||
| 63 | ||
| 64 | 64 | return 0; |
| 65 | 65 | } |
| 66 | 66 | |
| 67 | 67 | bool fdd_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) |
| 68 | 68 | { |
| 69 | UINT8 hsec[0x0c]; | |
| 70 | ||
| 69 | UINT8 hsec[0x0c]; | |
| 70 | ||
| 71 | 71 | // sector map |
| 72 | 72 | UINT8 num_secs[160]; |
| 73 | 73 | UINT8 tracks[160 * 26]; |
| r242703 | r242704 | |
| 76 | 76 | UINT8 fill_vals[160 * 26]; |
| 77 | 77 | UINT32 sec_offs[160 * 26]; |
| 78 | 78 | UINT8 sec_sizes[160 * 26]; |
| 79 | ||
| 79 | ||
| 80 | 80 | int pos = 0xdc; |
| 81 | ||
| 81 | ||
| 82 | 82 | for (int track = 0; track < 160; track++) |
| 83 | 83 | { |
| 84 | 84 | int curr_num_sec = 0, curr_track_size = 0; |
| r242703 | r242704 | |
| 87 | 87 | // read sector map for this sector |
| 88 | 88 | io_generic_read(io, hsec, pos, 0x0c); |
| 89 | 89 | pos += 0x0c; |
| 90 | ||
| 91 | if (hsec[0] == 0xff) // unformatted/unused sector | |
| 90 | ||
| 91 | if (hsec[0] == 0xff) // unformatted/unused sector | |
| 92 | 92 | continue; |
| 93 | ||
| 93 | ||
| 94 | 94 | tracks[(track * 26) + sect] = hsec[0]; |
| 95 | 95 | heads[(track * 26) + sect] = hsec[1]; |
| 96 | 96 | secs[(track * 26) + sect] = hsec[2]; |
| r242703 | r242704 | |
| 110 | 110 | int cur_sec_map = 0, sector_size; |
| 111 | 111 | |
| 112 | 112 | for (int track = 0; track < 160; track++) |
| 113 | { | |
| 113 | { | |
| 114 | 114 | int cur_pos = 0; |
| 115 | for (int i = 0; i < num_secs[track]; i++) | |
| 115 | for (int i = 0; i < num_secs[track]; i++) | |
| 116 | 116 | { |
| 117 | 117 | cur_sec_map = track * 26 + i; |
| 118 | 118 | sector_size = 128 << sec_sizes[cur_sec_map]; |
| r242703 | r242704 | |
| 121 | 121 | memset(sect_data + cur_pos, fill_vals[cur_sec_map], sector_size); |
| 122 | 122 | else |
| 123 | 123 | io_generic_read(io, sect_data + cur_pos, sec_offs[cur_sec_map], sector_size); |
| 124 | ||
| 124 | ||
| 125 | 125 | sects[i].track = tracks[cur_sec_map]; |
| 126 | 126 | sects[i].head = heads[cur_sec_map]; |
| 127 | 127 | sects[i].sector = secs[cur_sec_map]; |
| r242703 | r242704 | |
| 135 | 135 | |
| 136 | 136 | build_pc_track_mfm(track / 2, track % 2, image, cell_count, num_secs[track], sects, calc_default_pc_gap3_size(form_factor, (128 << sec_sizes[track * 26]))); |
| 137 | 137 | } |
| 138 | ||
| 138 | ||
| 139 | 139 | return true; |
| 140 | 140 | } |
| 141 | 141 |
| r242703 | r242704 | |
|---|---|---|
| 7 | 7 | *********************************************************************/ |
| 8 | 8 | |
| 9 | 9 | #include <string.h> |
| 10 | #include "emu.h" | |
| 11 | 10 | #include "flopimg.h" |
| 12 | 11 | |
| 13 | 12 | struct imddsk_tag |
| r242703 | r242704 | |
|---|---|---|
| 14 | 14 | |
| 15 | 15 | #include <string.h> |
| 16 | 16 | |
| 17 | #include "emu.h" | |
| 18 | 17 | #include "m20_dsk.h" |
| 19 | 18 | #include "basicdsk.h" |
| 20 | 19 |
| r242703 | r242704 | |
|---|---|---|
| 30 | 30 | 0xA = PDA (disk type) |
| 31 | 31 | 0xB-0xF = reserved and equal to 0x00 (possibly available for future format extensions?) |
| 32 | 32 | |
| 33 | ||
| 34 | Revision 1 | |
| 33 | ||
| 34 | Revision 1 | |
| 35 | 35 | ========== |
| 36 | ||
| 36 | ||
| 37 | 37 | header structure (variable length > 0x120, header length = DWORD at 0x110) |
| 38 | 38 | 0x000-0x11F = same as Rev. 0 format |
| 39 | ||
| 39 | 0x120-0x3AF = 164 DWORDs containing, for each track, the absolute position of the sector maps | |
| 40 | 40 | for sectors of the track. for unformatted/unused tracks 0 is used |
| 41 | 41 | 0x3B0-0x3B3 = absolute position of addintional info in the header, if any |
| 42 | 42 | 0x3B4-0x3BF = reserved |
| 43 | 0x120-EOHeader = sector map + special data for each track: | |
| 43 | 0x120-EOHeader = sector map + special data for each track: | |
| 44 | 44 | first 0x10 of each track = #sectors (WORD), #extra data (WORD), reserved 0xc bytes zeroed |
| 45 | 45 | then 0x10 for each sector of this track and 0x10 for each extra data chunk |
| 46 | 46 | |
| 47 | 47 | sector map structure |
| 48 | ||
| 48 | 0x0 = track number | |
| 49 | 49 | 0x1 = head |
| 50 | 50 | 0x2 = sector number |
| 51 | 51 | 0x3 = sector size (in 128byte chunks) |
| r242703 | r242704 | |
| 74 | 74 | - add support for DDAM in Rev. 0 (need an image which set it in some sector) |
| 75 | 75 | - investigate the READ DATA bytes of sector headers |
| 76 | 76 | - investigate RETRY DATA chunks |
| 77 | ||
| 77 | ||
| 78 | 78 | *********************************************************************/ |
| 79 | 79 | |
| 80 | 80 | #include "emu.h" |
| r242703 | r242704 | |
| 101 | 101 | |
| 102 | 102 | int nfd_format::identify(io_generic *io, UINT32 form_factor) |
| 103 | 103 | { |
| 104 | UINT8 h[16]; | |
| 104 | UINT8 h[16]; | |
| 105 | 105 | io_generic_read(io, h, 0, 16); |
| 106 | ||
| 106 | ||
| 107 | 107 | if (strncmp((const char *)h, "T98FDDIMAGE.R0", 14) == 0 || strncmp((const char *)h, "T98FDDIMAGE.R1", 14) == 0) |
| 108 | 108 | return 100; |
| 109 | 109 | |
| r242703 | r242704 | |
| 113 | 113 | bool nfd_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) |
| 114 | 114 | { |
| 115 | 115 | UINT64 size = io_generic_size(io); |
| 116 | UINT8 h[0x120], hsec[0x10]; | |
| 116 | UINT8 h[0x120], hsec[0x10]; | |
| 117 | 117 | io_generic_read(io, h, 0, 0x120); |
| 118 | 118 | int format_version = !strncmp((const char *)h, "T98FDDIMAGE.R0", 14) ? 0 : 1; |
| 119 | 119 | |
| r242703 | r242704 | |
| 156 | 156 | for (int sect = 0; sect < num_secs[track]; sect++) |
| 157 | 157 | { |
| 158 | 158 | io_generic_read(io, hsec, secmap_addr, 0x10); |
| 159 | ||
| 159 | ||
| 160 | 160 | if (track == 0 && sect == 0) |
| 161 | disk_type = hsec[0xb]; | |
| 161 | disk_type = hsec[0xb]; // can this change across the disk? I don't think so... | |
| 162 | 162 | secmap_addr += 0x10; |
| 163 | ||
| 163 | ||
| 164 | 164 | tracks[(track * 26) + sect] = hsec[0]; |
| 165 | 165 | heads[(track * 26) + sect] = hsec[1]; |
| 166 | 166 | secs[(track * 26) + sect] = hsec[2]; |
| 167 | 167 | sec_sizes[(track * 26) + sect] = hsec[3]; |
| 168 | 168 | mfm[(track * 26) + sect] = hsec[4]; |
| 169 | ||
| 169 | ||
| 170 | 170 | curr_track_size += (128 << hsec[3]); |
| 171 | 171 | } |
| 172 | 172 | |
| r242703 | r242704 | |
| 174 | 174 | { |
| 175 | 175 | for (int sect = 0; sect < num_specials[track]; sect++) |
| 176 | 176 | { |
| 177 | io_generic_read(io, hsec, secmap_addr, 0x10); | |
| 177 | io_generic_read(io, hsec, secmap_addr, 0x10); | |
| 178 | 178 | secmap_addr += 0x10; |
| 179 | 179 | curr_track_size += (hsec[9] + 1) * LITTLE_ENDIANIZE_INT32(*(UINT32 *)(hsec + 0x0a)); |
| 180 | 180 | } |
| r242703 | r242704 | |
| 200 | 200 | io_generic_read(io, hsec, pos, 0x10); |
| 201 | 201 | |
| 202 | 202 | if (track == 0 && sect == 0) |
| 203 | disk_type = hsec[0xa]; | |
| 203 | disk_type = hsec[0xa]; // can this change across the disk? I don't think so... | |
| 204 | 204 | pos += 0x10; |
| 205 | ||
| 206 | if (hsec[0] == 0xff) // unformatted/unused sector | |
| 205 | ||
| 206 | if (hsec[0] == 0xff) // unformatted/unused sector | |
| 207 | 207 | continue; |
| 208 | ||
| 208 | ||
| 209 | 209 | tracks[(track * 26) + sect] = hsec[0]; |
| 210 | 210 | heads[(track * 26) + sect] = hsec[1]; |
| 211 | 211 | secs[(track * 26) + sect] = hsec[2]; |
| 212 | 212 | sec_sizes[(track * 26) + sect] = hsec[3]; |
| 213 | 213 | mfm[(track * 26) + sect] = hsec[4]; |
| 214 | ||
| 214 | ||
| 215 | 215 | curr_track_size += (128 << hsec[3]); |
| 216 | 216 | curr_num_sec++; |
| 217 | 217 | } |
| r242703 | r242704 | |
| 226 | 226 | |
| 227 | 227 | switch (disk_type) |
| 228 | 228 | { |
| 229 | case 0x10: | |
| 229 | case 0x10: // 640K disk, 2DD | |
| 230 | 230 | image->set_variant(floppy_image::DSDD); |
| 231 | 231 | break; |
| 232 | //case 0x30: // 1.44M disk, ?? (no images found) | |
| 233 | // break; | |
| 234 | case 0x90: // 1.2M disk, 2HD | |
| 232 | //case 0x30: // 1.44M disk, ?? (no images found) | |
| 233 | // break; | |
| 234 | case 0x90: // 1.2M disk, 2HD | |
| 235 | 235 | default: |
| 236 | 236 | image->set_variant(floppy_image::DSHD); |
| 237 | 237 | break; |
| r242703 | r242704 | |
| 246 | 246 | { |
| 247 | 247 | io_generic_read(io, sect_data, pos, track_sizes[track]); |
| 248 | 248 | |
| 249 | for (int i = 0; i < num_secs[track]; i++) | |
| 249 | for (int i = 0; i < num_secs[track]; i++) | |
| 250 | 250 | { |
| 251 | 251 | cur_sec_map = track * 26 + i; |
| 252 | 252 | sector_size = 128 << sec_sizes[cur_sec_map]; |
| r242703 | r242704 | |
| 261 | 261 | } |
| 262 | 262 | pos += track_sizes[track]; |
| 263 | 263 | |
| 264 | // notice that the operation below might fail if sectors of the same track have variable sec_sizes, | |
| 264 | // notice that the operation below might fail if sectors of the same track have variable sec_sizes, | |
| 265 | 265 | // because the gap3 calculation would account correctly only for the first sector... |
| 266 | 266 | // examined images had constant sec_sizes in the each track, so probably this is not an issue |
| 267 | 267 | if (mfm[track * 26]) |
| r242703 | r242704 | |
| 269 | 269 | else |
| 270 | 270 | build_pc_track_fm(track / 2, track % 2, image, cell_count, num_secs[track], sects, calc_default_pc_gap3_size(form_factor, (128 << sec_sizes[track * 26]))); |
| 271 | 271 | } |
| 272 | ||
| 272 | ||
| 273 | 273 | return true; |
| 274 | 274 | } |
| 275 | 275 |
| r242703 | r242704 | |
|---|---|---|
| 1 | #include "pasti_dsk.h" | |
| 1 | 2 | #include "emu.h" |
| 2 | #include "pasti_dsk.h" | |
| 3 | 3 | |
| 4 | 4 | // Pasti format supported using the documentation at |
| 5 | 5 | // http://www.sarnau.info/atari:pasti_file_format |
| r242703 | r242704 | |
|---|---|---|
| 40 | 40 | cell 2.13 usec |
| 41 | 41 | |
| 42 | 42 | |
| 43 | Boot Disc Label Format | |
| 44 | Track 0 Sector 0 | |
| 43 | Boot Disc Label Format | |
| 44 | Track 0 Sector 0 | |
| 45 | 45 | |
| 46 | Byte | |
| 47 | Offset Name Description | |
| 46 | Byte | |
| 47 | Offset Name Description | |
| 48 | 48 | |
| 49 | 0 System disc ID literally, ff,00h for a system | |
| 50 | disc | |
| 49 | 0 System disc ID literally, ff,00h for a system | |
| 50 | disc | |
| 51 | 51 | |
| 52 | 2 Load address paragraph to load booted | |
| 53 | program at. If zero then boot | |
| 54 | loads in high memory. | |
| 52 | 2 Load address paragraph to load booted | |
| 53 | program at. If zero then boot | |
| 54 | loads in high memory. | |
| 55 | 55 | |
| 56 | ||
| 56 | 4 Length paragraph count to load. | |
| 57 | 57 | |
| 58 | 6 Entry offset I.P. value for transfer of | |
| 59 | control. | |
| 58 | 6 Entry offset I.P. value for transfer of | |
| 59 | control. | |
| 60 | 60 | |
| 61 | 8 Entry segment C.S. value for transfer of | |
| 62 | control. | |
| 61 | 8 Entry segment C.S. value for transfer of | |
| 62 | control. | |
| 63 | 63 | |
| 64 | ||
| 64 | 10 I.D. disc identifier. | |
| 65 | 65 | |
| 66 | 18 Part number system identifier - displayed | |
| 67 | by early versions of boot. | |
| 66 | 18 Part number system identifier - displayed | |
| 67 | by early versions of boot. | |
| 68 | 68 | |
| 69 | ||
| 69 | 26 Sector size byte count for sectors. | |
| 70 | 70 | |
| 71 | 28 Data start first data sector on disc | |
| 72 | (absolute sectors). | |
| 71 | 28 Data start first data sector on disc | |
| 72 | (absolute sectors). | |
| 73 | 73 | |
| 74 | 30 Boot start first absolute sector of | |
| 75 | program for boot to load at | |
| 76 | 'load address' for 'length' | |
| 77 | paragraphs. | |
| 74 | 30 Boot start first absolute sector of | |
| 75 | program for boot to load at | |
| 76 | 'load address' for 'length' | |
| 77 | paragraphs. | |
| 78 | 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 | |
| 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 | 85 | |
| 86 | 34 Disc type 00 = CP/M | |
| 87 | 01 = MS-DOS | |
| 86 | 34 Disc type 00 = CP/M | |
| 87 | 01 = MS-DOS | |
| 88 | 88 | |
| 89 | ||
| 89 | 35 Reserved | |
| 90 | 90 | |
| 91 | 38 Speed table information for speed control | |
| 92 | proc. | |
| 91 | 38 Speed table information for speed control | |
| 92 | proc. | |
| 93 | 93 | |
| 94 | ||
| 94 | 56 Zone table high track for each zone. | |
| 95 | 95 | |
| 96 | 71 Sector/track sectors per track for each | |
| 97 | zone. | |
| 96 | 71 Sector/track sectors per track for each | |
| 97 | zone. | |
| 98 | 98 | */ |
| 99 | 99 | |
| 100 | 100 | #include "emu.h" |
| r242703 | r242704 | |
|---|---|---|
| 559 | 559 | |
| 560 | 560 | $(OBJ)/libsqlite3.a: $(SQLITEOBJS) |
| 561 | 561 | |
| 562 | SQLITE3_FLAGS = | |
| 563 | ifdef SANITIZE | |
| 564 | ifneq (,$(findstring thread,$(SANITIZE))) | |
| 565 | SQLITE3_FLAGS += -fPIC | |
| 566 | endif | |
| 567 | ifneq (,$(findstring memory,$(SANITIZE))) | |
| 568 | SQLITE3_FLAGS += -fPIC | |
| 569 | endif | |
| 570 | endif | |
| 571 | ||
| 572 | 562 | ifeq ($(TARGETOS),linux) |
| 573 | 563 | LIBS += -ldl |
| 574 | 564 | endif |
| 575 | 565 | |
| 576 | 566 | $(LIBOBJ)/sqlite3/sqlite3.o: $(LIBSRC)/sqlite3/sqlite3.c | $(OSPREBUILD) |
| 577 | 567 | @echo Compiling $<... |
| 578 | $(CC) $(CDEFS) $(CONLYFLAGS) -Wno-bad-function-cast -I$(LIBSRC)/sqlite3 | |
| 568 | $(CC) $(CDEFS) $(CONLYFLAGS) -Wno-bad-function-cast -I$(LIBSRC)/sqlite3 -c $< -o $@ |
| r242703 | r242704 | |
|---|---|---|
| 19 | 19 | #include <stddef.h> |
| 20 | 20 | #include <stdlib.h> |
| 21 | 21 | #include <new> |
| 22 | #include "eminline.h" | |
| 23 | 22 | |
| 24 | 23 | |
| 25 | 24 | //************************************************************************** |
| r242703 | r242704 | |
| 452 | 451 | compressor = CHD_CODEC_PARENT; |
| 453 | 452 | compbytes = 0; |
| 454 | 453 | break; |
| 455 | ||
| 456 | default: | |
| 457 | return CHDERR_UNKNOWN_COMPRESSION; | |
| 458 | 454 | } |
| 459 | 455 | break; |
| 460 | 456 | } |
| r242703 | r242704 | |
| 2422 | 2418 | |
| 2423 | 2419 | // queue the next read |
| 2424 | 2420 | for (curitem = startitem; curitem < enditem; curitem++) |
| 2425 | | |
| 2421 | m_work_item[curitem % WORK_BUFFER_HUNKS].m_status = WS_READING; | |
| 2426 | 2422 | osd_work_item_queue(m_read_queue, async_read_static, this, WORK_ITEM_FLAG_AUTO_RELEASE); |
| 2427 | 2423 | m_read_queue_offset += WORK_BUFFER_HUNKS * hunk_bytes() / 2; |
| 2428 | 2424 | } |
| r242703 | r242704 | |
| 2493 | 2489 | } while (0); |
| 2494 | 2490 | |
| 2495 | 2491 | // reset the item and advance |
| 2496 | | |
| 2492 | item.m_status = WS_READY; | |
| 2497 | 2493 | m_write_hunk++; |
| 2498 | 2494 | |
| 2499 | 2495 | // if we hit the end, finalize |
| r242703 | r242704 | |
| 2506 | 2502 | m_read_queue_offset = m_read_done_offset = 0; |
| 2507 | 2503 | m_write_hunk = 0; |
| 2508 | 2504 | for (int itemnum = 0; itemnum < WORK_BUFFER_HUNKS; itemnum++) |
| 2509 | | |
| 2505 | m_work_item[itemnum].m_status = WS_READY; | |
| 2510 | 2506 | } |
| 2511 | 2507 | |
| 2512 | 2508 | // wait for all reads to finish and if we're compressed, write the final SHA1 and map |
| r242703 | r242704 | |
| 2559 | 2555 | item.m_hash[unit].m_crc16 = crc16_creator::simple(item.m_data + unit * unit_bytes(), hunk_bytes()); |
| 2560 | 2556 | item.m_hash[unit].m_sha1 = sha1_creator::simple(item.m_data + unit * unit_bytes(), hunk_bytes()); |
| 2561 | 2557 | } |
| 2562 | | |
| 2558 | item.m_status = WS_COMPLETE; | |
| 2563 | 2559 | } |
| 2564 | 2560 | |
| 2565 | 2561 | |
| r242703 | r242704 | |
| 2587 | 2583 | |
| 2588 | 2584 | // find the best compression scheme, unless we already have a self or parent match |
| 2589 | 2585 | // (note we may miss a self match from blocks not yet added, but this just results in extra work) |
| 2590 | // TODO: data race | |
| 2591 | 2586 | if (m_current_map.find(item.m_hash[0].m_crc16, item.m_hash[0].m_sha1) == hashmap::NOT_FOUND && |
| 2592 | 2587 | m_parent_map.find(item.m_hash[0].m_crc16, item.m_hash[0].m_sha1) == hashmap::NOT_FOUND) |
| 2593 | 2588 | item.m_compression = item.m_codecs->find_best_compressor(item.m_data, item.m_compressed, item.m_complen); |
| 2594 | 2589 | |
| 2595 | 2590 | // mark us complete |
| 2596 | | |
| 2591 | item.m_status = WS_COMPLETE; | |
| 2597 | 2592 | } |
| 2598 | 2593 | |
| 2599 | 2594 | |
| r242703 | r242704 | |
| 2649 | 2644 | UINT32 hunknum = curoffs / hunk_bytes(); |
| 2650 | 2645 | work_item &item = m_work_item[hunknum % WORK_BUFFER_HUNKS]; |
| 2651 | 2646 | assert(item.m_status == WS_READING); |
| 2652 | | |
| 2647 | item.m_status = WS_QUEUED; | |
| 2653 | 2648 | item.m_hunknum = hunknum; |
| 2654 | 2649 | item.m_osd = osd_work_item_queue(m_work_queue, m_walking_parent ? async_walk_parent_static : async_compress_hunk_static, &item, 0); |
| 2655 | 2650 | } |
| r242703 | r242704 | |
|---|---|---|
| 530 | 530 | |
| 531 | 531 | osd_work_item * m_osd; // OSD work item running on this block |
| 532 | 532 | chd_file_compressor *m_compressor; // pointer back to the compressor |
| 533 | // TODO: had to change this to be able to use atomic_* functions on this | |
| 534 | //volatile work_status m_status; // current status of this item | |
| 535 | volatile INT32 m_status; // current status of this item | |
| 533 | volatile work_status m_status; // current status of this item | |
| 536 | 534 | UINT32 m_hunknum; // number of the hunk we're working on |
| 537 | 535 | UINT8 * m_data; // pointer to the data we are working on |
| 538 | 536 | UINT8 * m_compressed; // pointer to the compressed data |
| r242703 | r242704 | |
|---|---|---|
| 99 | 99 | void resize_and_clear(int count, UINT8 data = 0) { resize(count); clear(data); } |
| 100 | 100 | void resize_keep_and_clear_new(int count, UINT8 data = 0) { int oldcount = m_count; resize_keep(count); if (oldcount < m_count) clear_internal(oldcount, m_count - oldcount, data); } |
| 101 | 101 | |
| 102 | // batch operations | |
| 103 | void copyfrom(const dynamic_array<_ElementType> &source) | |
| 104 | { | |
| 105 | resize(source.count()); | |
| 106 | for (int i=0; i < source.count(); i++) | |
| 107 | m_array[i] = source[i]; | |
| 108 | } | |
| 109 | ||
| 110 | 102 | private: |
| 111 | 103 | // internal helpers |
| 112 | 104 | void expand_internal(int count) |
| r242703 | r242704 | |
|---|---|---|
| 170 | 170 | |
| 171 | 171 | // entry list getters |
| 172 | 172 | const rgb_t *entry_list_raw() const { return m_entry_color; } |
| 173 | const dynamic_array<rgb_t> *entry_list_adjusted_darray() const { return &m_adjusted_color; } | |
| 174 | const rgb_t *entry_list_adjusted() const { return m_adjusted_color; } | |
| 173 | const rgb_t *entry_list_adjusted() const { return m_adjusted_color; } | |
| 175 | 174 | const rgb_t *entry_list_adjusted_rgb15() const { return m_adjusted_rgb15; } |
| 176 | 175 | |
| 177 | 176 | // group adjustments |
| r242703 | r242704 | |
|---|---|---|
| 1145 | 1145 | 0: 14 16 ... checkpoint charlie |
| 1146 | 1146 | 1: 14 18 ... checkpoint bravo |
| 1147 | 1147 | 2: 14 1A ... checkpoint alpha |
| 1148 | 3: 1C | |
| 1148 | 3: 1C You'll notice | |
| 1149 | 1149 | 4: 1E 1E Complete attack mission |
| 1150 | 1150 | 5: 10 10 10 trouble, trouble, trouble |
| 1151 | 1151 | 6: 12 12 all pilots climb up |
| r242703 | r242704 | |
|---|---|---|
| 471 | 471 | required_device<ay8910_device> m_ay8910; |
| 472 | 472 | required_device<gfxdecode_device> m_gfxdecode; |
| 473 | 473 | required_device<palette_device> m_palette; |
| 474 | ||
| 474 | ||
| 475 | 475 | required_shared_ptr<UINT8> m_videoram; |
| 476 | 476 | required_shared_ptr<UINT8> m_colorram; |
| 477 | ||
| 477 | ||
| 478 | 478 | UINT8 m_main_latch_d800; |
| 479 | 479 | UINT8 m_snd_latch_0800; |
| 480 | 480 | UINT8 m_snd_latch_0a02; |
| 481 | 481 | UINT8 m_ay8910_addr; |
| 482 | 482 | tilemap_t *m_bg_tilemap; |
| 483 | 483 | int m_mux_data; |
| 484 | ||
| 484 | ||
| 485 | 485 | DECLARE_WRITE8_MEMBER(fclown_videoram_w); |
| 486 | 486 | DECLARE_WRITE8_MEMBER(fclown_colorram_w); |
| 487 | 487 | DECLARE_WRITE8_MEMBER(cpu_c048_w); |
| r242703 | r242704 | |
| 505 | 505 | }; |
| 506 | 506 | |
| 507 | 507 | void _5clown_state::machine_start() |
| 508 | { | |
| 508 | { | |
| 509 | 509 | m_main_latch_d800 = m_snd_latch_0800 = m_snd_latch_0a02 = m_ay8910_addr = m_mux_data = 0; |
| 510 | ||
| 510 | ||
| 511 | 511 | save_item(NAME(m_main_latch_d800)); |
| 512 | 512 | save_item(NAME(m_snd_latch_0800)); |
| 513 | 513 | save_item(NAME(m_snd_latch_0a02)); |
| r242703 | r242704 | |
|---|---|---|
| 881 | 881 | PIF_BOOTROM |
| 882 | 882 | |
| 883 | 883 | ROM_REGION32_BE( 0x4000000, "user2", 0 ) |
| 884 | ROM_LOAD16_WORD_SWAP( "nus-zhaj.u3", 0x000000, 0x0800000, | |
| 884 | ROM_LOAD16_WORD_SWAP( "nus-zhaj.u3", 0x000000, 0x0800000, CRC(95258ba2) SHA1(0299b8fb9a8b1b24428d0f340f6bf1cfaf99c672) ) | |
| 885 | 885 | |
| 886 | 886 | ROM_REGION16_BE( 0x80, "normpoint", 0 ) |
| 887 | 887 | ROM_LOAD( "normpnt.rom", 0x00, 0x80, CRC(e7f2a005) SHA1(c27b4a364a24daeee6e99fd286753fd6216362b4) ) |
| r242703 | r242704 | |
| 895 | 895 | PIF_BOOTROM |
| 896 | 896 | |
| 897 | 897 | ROM_REGION32_BE( 0x4000000, "user2", 0 ) |
| 898 | ROM_LOAD16_WORD_SWAP( "nus-zcaj.u4", 0x000000, 0x1000000, CRC(ec4563fc) SHA1(4d5a30873a5850cf4cd1c0bdbe24e1934f163cd0) ) | |
| 898 | ROM_LOAD16_WORD_SWAP( "nus-zcaj.u4", 0x000000, 0x1000000, CRC(ec4563fc) SHA1(4d5a30873a5850cf4cd1c0bdbe24e1934f163cd0) ) | |
| 899 | 899 | |
| 900 | 900 | ROM_REGION32_BE( 0x100000, "user3", 0 ) |
| 901 | ROM_LOAD ( "tet-01m.u5", 0x000000, 0x100000, CRC(f78f859b) SHA1(b07c85e0453869fe43792f42081f64a5327e58e6) ) | |
| 901 | ROM_LOAD ( "tet-01m.u5", 0x000000, 0x100000, CRC(f78f859b) SHA1(b07c85e0453869fe43792f42081f64a5327e58e6) ) | |
| 902 | 902 | |
| 903 | 903 | ROM_REGION32_BE( 0x80, "user4", 0 ) |
| 904 | ROM_LOAD ( "at24c01.u34", 0x000000, 0x80, CRC(ba7e503f) SHA1(454aa4fdde7d8694d1affaf25cd750fa678686bb) ) | |
| 904 | ROM_LOAD ( "at24c01.u34", 0x000000, 0x80, CRC(ba7e503f) SHA1(454aa4fdde7d8694d1affaf25cd750fa678686bb) ) | |
| 905 | 905 | |
| 906 | 906 | ROM_REGION16_BE( 0x80, "normpoint", 0 ) |
| 907 | 907 | ROM_LOAD( "normpnt.rom", 0x00, 0x80, CRC(e7f2a005) SHA1(c27b4a364a24daeee6e99fd286753fd6216362b4) ) |
| r242703 | r242704 | |
| 924 | 924 | PIF_BOOTROM |
| 925 | 925 | |
| 926 | 926 | ROM_REGION32_BE( 0x4000000, "user2", 0 ) |
| 927 | ROM_LOAD16_WORD_SWAP( "nus-zhbj-0.u3", 0x000000, 0xc00000, CRC(a4edac93) SHA1(3794606c008fb69f5d16dcccece94d03da23bf8a) ) | |
| 927 | ROM_LOAD16_WORD_SWAP( "nus-zhbj-0.u3", 0x000000, 0xc00000, CRC(a4edac93) SHA1(3794606c008fb69f5d16dcccece94d03da23bf8a) ) | |
| 928 | 928 | |
| 929 | 929 | ROM_REGION16_BE( 0x80, "normpoint", 0 ) |
| 930 | 930 | ROM_LOAD( "normpnt.rom", 0x00, 0x80, CRC(e7f2a005) SHA1(c27b4a364a24daeee6e99fd286753fd6216362b4) ) |
| r242703 | r242704 | |
| 939 | 939 | PIF_BOOTROM |
| 940 | 940 | |
| 941 | 941 | ROM_REGION32_BE( 0x4000000, "user2", 0 ) |
| 942 | ROM_LOAD16_WORD_SWAP( "nus-zsej-0.u2", 0x000000, 0x2000000, CRC(44f40102) SHA1(a78de955f2fcd99dda14e782984368b320eb5415) ) | |
| 942 | ROM_LOAD16_WORD_SWAP( "nus-zsej-0.u2", 0x000000, 0x2000000, CRC(44f40102) SHA1(a78de955f2fcd99dda14e782984368b320eb5415) ) | |
| 943 | 943 | |
| 944 | 944 | ROM_REGION16_BE( 0x80, "normpoint", 0 ) |
| 945 | 945 | ROM_LOAD( "normpnt.rom", 0x00, 0x80, CRC(e7f2a005) SHA1(c27b4a364a24daeee6e99fd286753fd6216362b4) ) |
| r242703 | r242704 | |
| 963 | 963 | PIF_BOOTROM |
| 964 | 964 | |
| 965 | 965 | ROM_REGION32_BE( 0x4000000, "user2", 0 ) |
| 966 | ROM_LOAD16_WORD_SWAP( "nus-zsaj-0.u3", 0x000000, 0x800000, CRC(f3220e29) SHA1(06d8b808cc19378b046803f4dc75c7d791b7767f) ) | |
| 966 | ROM_LOAD16_WORD_SWAP( "nus-zsaj-0.u3", 0x000000, 0x800000, CRC(f3220e29) SHA1(06d8b808cc19378b046803f4dc75c7d791b7767f) ) | |
| 967 | 967 | |
| 968 | 968 | ROM_REGION16_BE( 0x80, "normpoint", 0 ) |
| 969 | 969 | ROM_LOAD( "normpnt.rom", 0x00, 0x80, CRC(e7f2a005) SHA1(c27b4a364a24daeee6e99fd286753fd6216362b4) ) |
| r242703 | r242704 | |
| 991 | 991 | PIF_BOOTROM |
| 992 | 992 | |
| 993 | 993 | ROM_REGION32_BE( 0x4000000, "user2", 0 ) |
| 994 | ROM_LOAD16_WORD_SWAP( "ua3012--all02.u3", 0x000000, 0x1000000, CRC(904a91a7) SHA1(7dfa3447d2c489c0448c4004dc12d3037c05a0f3) ) | |
| 994 | ROM_LOAD16_WORD_SWAP( "ua3012--all02.u3", 0x000000, 0x1000000, CRC(904a91a7) SHA1(7dfa3447d2c489c0448c4004dc12d3037c05a0f3) ) | |
| 995 | 995 | |
| 996 | 996 | ROM_REGION32_BE( 0x800000, "user3", 0 ) |
| 997 | ROM_LOAD16_WORD_SWAP( "nus-zsij-0.u1", 0x000000, 0x800000, CRC(2389576f) SHA1(dc22b2eab4d7a02cb918827a62e6c120b3a84e6c) ) | |
| 997 | ROM_LOAD16_WORD_SWAP( "nus-zsij-0.u1", 0x000000, 0x800000, CRC(2389576f) SHA1(dc22b2eab4d7a02cb918827a62e6c120b3a84e6c) ) | |
| 998 | 998 | |
| 999 | 999 | ROM_REGION16_BE( 0x80, "normpoint", 0 ) |
| 1000 | 1000 | ROM_LOAD( "normpnt.rom", 0x00, 0x80, CRC(e7f2a005) SHA1(c27b4a364a24daeee6e99fd286753fd6216362b4) ) |
| r242703 | r242704 | |
| 1009 | 1009 | PIF_BOOTROM |
| 1010 | 1010 | |
| 1011 | 1011 | ROM_REGION32_BE( 0x4000000, "user2", 0 ) |
| 1012 | ROM_LOAD16_WORD_SWAP( "ua2011-all02.u3", 0x0000000, 0x1000000, CRC(eb4b96d0) SHA1(e909ea5b71b81087da07821c4f57244576363678) ) | |
| 1013 | ROM_LOAD16_WORD_SWAP( "ua2011-alh02.u4", 0x1000000, 0x1000000, CRC(b8e35ddf) SHA1(7c3e59f6520dc3f0aa592e682fa82e30ffd1f4d0) ) | |
| 1012 | ROM_LOAD16_WORD_SWAP( "ua2011-all02.u3", 0x0000000, 0x1000000, CRC(eb4b96d0) SHA1(e909ea5b71b81087da07821c4f57244576363678) ) | |
| 1013 | ROM_LOAD16_WORD_SWAP( "ua2011-alh02.u4", 0x1000000, 0x1000000, CRC(b8e35ddf) SHA1(7c3e59f6520dc3f0aa592e682fa82e30ffd1f4d0) ) | |
| 1014 | 1014 | |
| 1015 | 1015 | ROM_REGION32_BE( 0x800000, "user3", 0 ) |
| 1016 | ROM_LOAD16_WORD_SWAP( "nus-nsij-0.u1", 0x000000, 0x800000, CRC(94cf9f8d) SHA1(cd624d1f5de2be3bec3ece06556a2e39bef66d77) ) | |
| 1016 | ROM_LOAD16_WORD_SWAP( "nus-nsij-0.u1", 0x000000, 0x800000, CRC(94cf9f8d) SHA1(cd624d1f5de2be3bec3ece06556a2e39bef66d77) ) | |
| 1017 | 1017 | |
| 1018 | 1018 | ROM_REGION16_BE( 0x80, "normpoint", 0 ) |
| 1019 | 1019 | ROM_LOAD( "normpnt.rom", 0x00, 0x80, CRC(e7f2a005) SHA1(c27b4a364a24daeee6e99fd286753fd6216362b4) ) |
| r242703 | r242704 | |
| 1028 | 1028 | PIF_BOOTROM |
| 1029 | 1029 | |
| 1030 | 1030 | ROM_REGION32_BE( 0x4000000, "user2", 0 ) |
| 1031 | ROM_LOAD16_WORD_SWAP( "ua3088-all01.u3", 0x0000000, 0x1000000, CRC(00db4dbc) SHA1(824fdce01fffdfcbcc9b1fbda4ab389a10b2b418) ) | |
| 1032 | ROM_LOAD16_WORD_SWAP( "ua3088-alh04.u4", 0x1000000, 0x1000000, CRC(c96bc7c0) SHA1(2b6ca1a769dee74e112c2b287dacd0bf46dda091) ) | |
| 1031 | ROM_LOAD16_WORD_SWAP( "ua3088-all01.u3", 0x0000000, 0x1000000, CRC(00db4dbc) SHA1(824fdce01fffdfcbcc9b1fbda4ab389a10b2b418) ) | |
| 1032 | ROM_LOAD16_WORD_SWAP( "ua3088-alh04.u4", 0x1000000, 0x1000000, CRC(c96bc7c0) SHA1(2b6ca1a769dee74e112c2b287dacd0bf46dda091) ) | |
| 1033 | 1033 | |
| 1034 | 1034 | ROM_REGION32_BE( 0x800000, "user3", 0 ) |
| 1035 | ROM_LOAD16_WORD_SWAP( "nus-zsij-0.u1", 0x000000, 0x800000, CRC(2389576f) SHA1(dc22b2eab4d7a02cb918827a62e6c120b3a84e6c) ) // same as tower & shaft | |
| 1035 | ROM_LOAD16_WORD_SWAP( "nus-zsij-0.u1", 0x000000, 0x800000, CRC(2389576f) SHA1(dc22b2eab4d7a02cb918827a62e6c120b3a84e6c) ) // same as tower & shaft | |
| 1036 | 1036 | |
| 1037 | 1037 | ROM_REGION16_BE( 0x80, "normpoint", 0 ) |
| 1038 | 1038 | ROM_LOAD( "normpnt.rom", 0x00, 0x80, CRC(e7f2a005) SHA1(c27b4a364a24daeee6e99fd286753fd6216362b4) ) |
| r242703 | r242704 | |
| 1046 | 1046 | PIF_BOOTROM |
| 1047 | 1047 | |
| 1048 | 1048 | ROM_REGION32_BE( 0x4000000, "user2", 0 ) |
| 1049 | ROM_LOAD16_WORD_SWAP( "ua3003-all01.u3", 0x0000000, 0x1000000, CRC(f362fa82) SHA1(4f41ee23edc18110be1218ba333d1c58376ab175) ) | |
| 1050 | ROM_LOAD16_WORD_SWAP( "ua3003-alh01.u4", 0x1000000, 0x1000000, CRC(47c56387) SHA1(c8cc6c0a456b593aef711d0a75b2342ba2f8203f) ) | |
| 1049 | ROM_LOAD16_WORD_SWAP( "ua3003-all01.u3", 0x0000000, 0x1000000, CRC(f362fa82) SHA1(4f41ee23edc18110be1218ba333d1c58376ab175) ) | |
| 1050 | ROM_LOAD16_WORD_SWAP( "ua3003-alh01.u4", 0x1000000, 0x1000000, CRC(47c56387) SHA1(c8cc6c0a456b593aef711d0a75b2342ba2f8203f) ) | |
| 1051 | 1051 | |
| 1052 | 1052 | ROM_REGION32_BE( 0x800000, "user3", 0 ) |
| 1053 | 1053 | ROM_LOAD16_WORD_SWAP( "nus-zsij-0.u1", 0x000000, 0x800000, CRC(547d8122) SHA1(347f0785767265acb0f0c21646e06cbe6f561821) ) |
| r242703 | r242704 | |
| 1065 | 1065 | PIF_BOOTROM |
| 1066 | 1066 | |
| 1067 | 1067 | ROM_REGION32_BE( 0x4000000, "user2", 0 ) |
| 1068 | ROM_LOAD16_WORD_SWAP( "nus-zscj.u3", 0x000000, 0x800000, CRC(8b36eb91) SHA1(179745625c16c6813d5f8d29bfd7628783d55806) ) | |
| 1068 | ROM_LOAD16_WORD_SWAP( "nus-zscj.u3", 0x000000, 0x800000, CRC(8b36eb91) SHA1(179745625c16c6813d5f8d29bfd7628783d55806) ) | |
| 1069 | 1069 | |
| 1070 | 1070 | ROM_REGION16_BE( 0x80, "normpoint", 0 ) |
| 1071 | 1071 | ROM_LOAD( "normpnt.rom", 0x00, 0x80, CRC(e7f2a005) SHA1(c27b4a364a24daeee6e99fd286753fd6216362b4) ) |
| r242703 | r242704 | |
| 1079 | 1079 | |
| 1080 | 1080 | |
| 1081 | 1081 | // BIOS |
| 1082 | GAME( 1998, aleck64, | |
| 1082 | GAME( 1998, aleck64, 0, aleck64, aleck64, aleck64_state, aleck64, ROT0, "Nintendo / Seta", "Aleck64 PIF BIOS", GAME_IS_BIOS_ROOT) | |
| 1083 | 1083 | |
| 1084 | 1084 | // games |
| 1085 | 1085 | GAME( 1998, 11beat, aleck64, aleck64, 11beat, aleck64_state, aleck64, ROT0, "Hudson", "Eleven Beat", GAME_NOT_WORKING|GAME_NO_SOUND ) |
| r242703 | r242704 | |
|---|---|---|
| 237 | 237 | static ADDRESS_MAP_START( asteroid_map, AS_PROGRAM, 8, asteroid_state ) |
| 238 | 238 | ADDRESS_MAP_GLOBAL_MASK(0x7fff) |
| 239 | 239 | AM_RANGE(0x0000, 0x01ff) AM_RAM |
| 240 | AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("ram1") AM_SHARE("ram1") | |
| 241 | AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("ram2") AM_SHARE("ram2") | |
| 240 | AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("bank1") AM_SHARE("ram1") | |
| 241 | AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("bank2") AM_SHARE("ram2") | |
| 242 | 242 | AM_RANGE(0x2000, 0x2007) AM_READ(asteroid_IN0_r) /* IN0 */ |
| 243 | 243 | AM_RANGE(0x2400, 0x2407) AM_READ(asteroid_IN1_r) /* IN1 */ |
| 244 | 244 | AM_RANGE(0x2800, 0x2803) AM_READ(asteroid_DSW1_r) /* DSW1 */ |
| r242703 | r242704 | |
| 258 | 258 | static ADDRESS_MAP_START( astdelux_map, AS_PROGRAM, 8, asteroid_state ) |
| 259 | 259 | ADDRESS_MAP_GLOBAL_MASK(0x7fff) |
| 260 | 260 | AM_RANGE(0x0000, 0x01ff) AM_RAM |
| 261 | AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("ram1") AM_SHARE("ram1") | |
| 262 | AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("ram2") AM_SHARE("ram2") | |
| 261 | AM_RANGE(0x0200, 0x02ff) AM_RAMBANK("bank1") AM_SHARE("ram1") | |
| 262 | AM_RANGE(0x0300, 0x03ff) AM_RAMBANK("bank2") AM_SHARE("ram2") | |
| 263 | 263 | AM_RANGE(0x2000, 0x2007) AM_READ(asteroid_IN0_r) /* IN0 */ |
| 264 | 264 | AM_RANGE(0x2400, 0x2407) AM_READ(asteroid_IN1_r) /* IN1 */ |
| 265 | 265 | AM_RANGE(0x2800, 0x2803) AM_READ(asteroid_DSW1_r) /* DSW1 */ |
| r242703 | r242704 | |
| 699 | 699 | MCFG_CPU_PROGRAM_MAP(llander_map) |
| 700 | 700 | MCFG_CPU_PERIODIC_INT_DRIVER(asteroid_state, llander_interrupt, (double)MASTER_CLOCK/4096/12) |
| 701 | 701 | |
| 702 | MCFG_MACHINE_RESET_OVERRIDE(asteroid_state, llander) | |
| 703 | ||
| 702 | 704 | MCFG_SCREEN_MODIFY("screen") |
| 703 | 705 | MCFG_SCREEN_REFRESH_RATE(CLOCK_3KHZ/12/6) |
| 704 | 706 | MCFG_SCREEN_VISIBLE_AREA(522, 1566, 270, 1070) |
| r242703 | r242704 | |
| 1011 | 1013 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x2000, 0x2007, read8_delegate(FUNC(asteroid_state::asterock_IN0_r),this)); |
| 1012 | 1014 | } |
| 1013 | 1015 | |
| 1016 | DRIVER_INIT_MEMBER(asteroid_state,astdelux) | |
| 1017 | { | |
| 1018 | save_item(NAME(m_astdelux_bankswitch)); | |
| 1019 | machine().save().register_postload(save_prepost_delegate(FUNC(asteroid_state::astdelux_bankswitch_restore), this)); | |
| 1020 | } | |
| 1021 | ||
| 1014 | 1022 | /************************************* |
| 1015 | 1023 | * |
| 1016 | 1024 | * Game drivers |
| r242703 | r242704 | |
| 1028 | 1036 | GAME( 1979, meteorho, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "bootleg (Hoei)", "Meteor (bootleg of Asteroids)", GAME_SUPPORTS_SAVE ) |
| 1029 | 1037 | GAME( 1979, hyperspc, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "bootleg (Rumiano)", "Hyperspace (bootleg of Asteroids)", GAME_SUPPORTS_SAVE ) |
| 1030 | 1038 | |
| 1031 | GAMEL(1980, astdelux, 0, astdelux, astdelux, driver_device, 0, ROT0, "Atari", "Asteroids Deluxe (rev 3)", GAME_SUPPORTS_SAVE, layout_astdelux ) | |
| 1032 | GAMEL(1980, astdelux2, astdelux, astdelux, astdelux, driver_device, 0, ROT0, "Atari", "Asteroids Deluxe (rev 2)", GAME_SUPPORTS_SAVE, layout_astdelux ) | |
| 1033 | GAMEL(1980, astdelux1, astdelux, astdelux, astdelux, driver_device, 0, ROT0, "Atari", "Asteroids Deluxe (rev 1)", GAME_SUPPORTS_SAVE, layout_astdelux ) | |
| 1039 | GAMEL(1980, astdelux, 0, astdelux, astdelux, asteroid_state, astdelux, ROT0, "Atari", "Asteroids Deluxe (rev 3)", GAME_SUPPORTS_SAVE, layout_astdelux ) | |
| 1040 | GAMEL(1980, astdelux2, astdelux, astdelux, astdelux, asteroid_state, astdelux, ROT0, "Atari", "Asteroids Deluxe (rev 2)", GAME_SUPPORTS_SAVE, layout_astdelux ) | |
| 1041 | GAMEL(1980, astdelux1, astdelux, astdelux, astdelux, asteroid_state, astdelux, ROT0, "Atari", "Asteroids Deluxe (rev 1)", GAME_SUPPORTS_SAVE, layout_astdelux ) | |
| 1034 | 1042 | |
| 1035 | 1043 | GAME( 1979, llander, 0, llander, llander, driver_device, 0, ROT0, "Atari", "Lunar Lander (rev 2)", GAME_SUPPORTS_SAVE ) |
| 1036 | 1044 | GAME( 1979, llander1, llander, llander, llander1, driver_device, 0, ROT0, "Atari", "Lunar Lander (rev 1)", GAME_SUPPORTS_SAVE ) |
| r242703 | r242704 | |
|---|---|---|
| 409 | 409 | |
| 410 | 410 | void smashdrv_state::machine_start() |
| 411 | 411 | { |
| 412 | ||
| 412 | 413 | } |
| 413 | 414 | |
| 414 | 415 | void smashdrv_state::machine_reset() |
| r242703 | r242704 | |
| 422 | 423 | static ADDRESS_MAP_START( atvtrack_main_map, AS_PROGRAM, 64, atvtrack_state ) |
| 423 | 424 | AM_RANGE(0x00000000, 0x000003ff) AM_RAM AM_SHARE("sharedmem") |
| 424 | 425 | AM_RANGE(0x00020000, 0x00020007) AM_READWRITE(control_r, control_w) // control registers |
| 425 | // | |
| 426 | // AM_RANGE(0x00020040, 0x0002007f) // audio DAC buffer | |
| 426 | 427 | AM_RANGE(0x14000000, 0x14000007) AM_READWRITE(area2_r, area2_w) // data |
| 427 | 428 | AM_RANGE(0x14100000, 0x14100007) AM_READWRITE(area3_r, area3_w) // command |
| 428 | 429 | AM_RANGE(0x14200000, 0x14200007) AM_READWRITE(area4_r, area4_w) // address |
| r242703 | r242704 | |
| 584 | 585 | ROM_LOAD("prg.ic23", 0x0000000, 0x0400000, CRC(5cc6d3ac) SHA1(0c8426774212d891796b59c95b8c70f64db5b67a) ) |
| 585 | 586 | |
| 586 | 587 | ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASEFF) |
| 587 | ROM_LOAD32_WORD("sdra.ic15", 0x00000000, 0x01000000, CRC(cf702287) SHA1(84cd83c339831deff15fe5fcc353e0b596667500) ) | |
| 588 | ROM_LOAD32_WORD("sdrb.ic14", 0x00000002, 0x01000000, CRC(39b76f0e) SHA1(529943b6075925e5f72c6e966796e04b2c33686c) ) | |
| 589 | ROM_LOAD32_WORD("sdrc.ic20", 0x02000000, 0x01000000, 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) ) | |
| 590 | 591 | // ic21 unpopulated |
| 591 | 592 | ROM_END |
| 592 | 593 |
| r242703 | r242704 | |
|---|---|---|
| 2 | 2 | // copyright-holders:FelipeSanches |
| 3 | 3 | /************************************************************************* |
| 4 | 4 | |
| 5 | ||
| 5 | barata.c | |
| 6 | 6 | |
| 7 | ||
| 7 | "Dona Barata" | |
| 8 | 8 | |
| 9 | Brazilian "whack-a-mole"-style game themed after stepping on cockroaches. | |
| 10 | The name "Dona Barata" means "Lady Cockroach" in brazilian portuguese. | |
| 9 | Brazilian "whack-a-mole"-style game themed after stepping on cockroaches. | |
| 10 | The name "Dona Barata" means "Lady Cockroach" in brazilian portuguese. | |
| 11 | 11 | |
| 12 | Manufactured by Matic: http://maticplay.com.br/ | |
| 13 | This driver still only emulates an early prototype of the game. | |
| 14 | Propper dumps of the actual released game is still lacking. | |
| 15 | Photos on the web make us believe that there are at least 2 official | |
| 12 | Manufactured by Matic: http://maticplay.com.br/ | |
| 13 | This driver still only emulates an early prototype of the game. | |
| 14 | Propper dumps of the actual released game is still lacking. | |
| 15 | Photos on the web make us believe that there are at least 2 official | |
| 16 | 16 | releases of this game. |
| 17 | 17 | |
| 18 | http://www.maticplay.com.br/equipamentos.php?equipamento=dona-barata | |
| 19 | http://www.valedosduendes.com.br/site/wp-content/uploads/2012/02/barata_1.jpg | |
| 18 | http://www.maticplay.com.br/equipamentos.php?equipamento=dona-barata | |
| 19 | http://www.valedosduendes.com.br/site/wp-content/uploads/2012/02/barata_1.jpg | |
| 20 | 20 | |
| 21 | 21 | Driver by Felipe Sanches <juca@members.fsf.org> |
| 22 | 22 | |
| 23 | 23 | ************************************************************************** |
| 24 | 24 | |
| 25 | ||
| 25 | TO-DO: | |
| 26 | 26 | |
| 27 | * at the moment, the portbits for the rows are still a guess | |
| 28 | * as we don't have access to actual PCBs, the CPU clock frequency is a guess | |
| 29 | (but maybe it can be infered by analysing the 1ms delay routine used) | |
| 30 | * we don't have sound samples or background music dumps | |
| 31 | (i.e. we lack dumps of all of the sound memory) | |
| 32 | * we don't have ROM dumps of the official releases of the game | |
| 33 | * it would be nice to add photographic artwork to improve the layout | |
| 27 | * at the moment, the portbits for the rows are still a guess | |
| 28 | * as we don't have access to actual PCBs, the CPU clock frequency is a guess | |
| 29 | (but maybe it can be infered by analysing the 1ms delay routine used) | |
| 30 | * we don't have sound samples or background music dumps | |
| 31 | (i.e. we lack dumps of all of the sound memory) | |
| 32 | * we don't have ROM dumps of the official releases of the game | |
| 33 | * it would be nice to add photographic artwork to improve the layout | |
| 34 | 34 | |
| 35 | 35 | **************************************************************************/ |
| 36 | 36 | |
| r242703 | r242704 | |
| 138 | 138 | return segment; |
| 139 | 139 | } |
| 140 | 140 | |
| 141 | #define FPGA_PLAY_BGM 0 | |
| 142 | #define FPGA_STOP_BGM 1 | |
| 143 | #define FPGA_PLAY_SAMPLE 2 | |
| 144 | #define FPGA_LAMP 3 | |
| 145 | #define FPGA_COUNTER 4 | |
| 146 | #define FPGA_WAITING_FOR_NEW_CMD 5 | |
| 141 | #define FPGA_PLAY_BGM 0 | |
| 142 | #define FPGA_STOP_BGM 1 | |
| 143 | #define FPGA_PLAY_SAMPLE 2 | |
| 144 | #define FPGA_LAMP 3 | |
| 145 | #define FPGA_COUNTER 4 | |
| 146 | #define FPGA_WAITING_FOR_NEW_CMD 5 | |
| 147 | 147 | |
| 148 | 148 | const char* mode_strings[] = { |
| 149 | 149 | "Play background music", |
| r242703 | r242704 | |
| 193 | 193 | lamp_index = lamp_data & 0x0F; |
| 194 | 194 | |
| 195 | 195 | if (erase_all){ |
| 196 | // | |
| 196 | // logerror("LED: ERASE ALL\n"); | |
| 197 | 197 | for (int i=0; i<16; i++){ |
| 198 | 198 | output_set_led_value(i, 1); |
| 199 | 199 | } |
| r242703 | r242704 | |
| 329 | 329 | /************************* |
| 330 | 330 | * Game Drivers * |
| 331 | 331 | *************************/ |
| 332 | GAME( 2002, barata, 0, barata, barata, driver_device, 0, ROT0, "Eletro Matic Equipamentos Eletromec | |
| 332 | GAME( 2002, barata, 0, barata, barata, driver_device, 0, ROT0, "Eletro Matic Equipamentos Eletromecânicos", "Dona Barata (early prototype)", GAME_IMPERFECT_GRAPHICS ) |
| r242703 | r242704 | |
|---|---|---|
| 178 | 178 | DECLARE_READ8_MEMBER(nec_r); |
| 179 | 179 | DECLARE_WRITE8_MEMBER(nec_reset_w); |
| 180 | 180 | DECLARE_WRITE8_MEMBER(nec_latch_w); |
| 181 | ||
| 181 | ||
| 182 | 182 | void save_state(); |
| 183 | 183 | |
| 184 | 184 | DECLARE_DRIVER_INIT(toppoker); |
| r242703 | r242704 | |
|---|---|---|
| 1419 | 1419 | |
| 1420 | 1420 | static ADDRESS_MAP_START( sc2_basemap, AS_PROGRAM, 8, bfm_sc2_state ) |
| 1421 | 1421 | AM_RANGE(0x0000, 0x1fff) AM_RAM AM_SHARE("nvram") //8k |
| 1422 | AM_RANGE(0x2000, 0x2000) AM_READ(vfd_status_r) | |
| 1423 | AM_RANGE(0x2000, 0x20FF) AM_WRITE(reel12_w) | |
| 1424 | AM_RANGE(0x2100, 0x21FF) AM_WRITE(reel34_w) | |
| 1425 | AM_RANGE(0x2200, 0x22FF) AM_WRITE(reel56_w) | |
| 1422 | 1426 | |
| 1423 | 1427 | AM_RANGE(0x2300, 0x230B) AM_READ(mux_input_r) |
| 1424 | 1428 | AM_RANGE(0x2300, 0x231F) AM_WRITE(mux_output_w) |
| r242703 | r242704 | |
| 1462 | 1466 | AM_RANGE(0x8000, 0xFFFF) AM_ROM |
| 1463 | 1467 | ADDRESS_MAP_END |
| 1464 | 1468 | |
| 1465 | static ADDRESS_MAP_START( memmap_no_vid, AS_PROGRAM, 8, bfm_sc2_state ) | |
| 1466 | AM_IMPORT_FROM( sc2_basemap ) | |
| 1467 | AM_RANGE(0x2000, 0x2000) AM_READ(vfd_status_r) | |
| 1468 | AM_RANGE(0x2000, 0x20FF) AM_WRITE(reel12_w) | |
| 1469 | AM_RANGE(0x2100, 0x21FF) AM_WRITE(reel34_w) | |
| 1470 | AM_RANGE(0x2200, 0x22FF) AM_WRITE(reel56_w) | |
| 1471 | ADDRESS_MAP_END | |
| 1472 | ||
| 1473 | 1469 | // memory map for scorpion2 board video addon ///////////////////////////// |
| 1474 | 1470 | |
| 1475 | 1471 | static ADDRESS_MAP_START( memmap_vid, AS_PROGRAM, 8, bfm_sc2_state ) |
| r242703 | r242704 | |
| 2143 | 2139 | } |
| 2144 | 2140 | |
| 2145 | 2141 | static MACHINE_CONFIG_START( scorpion2_vid, bfm_sc2_state ) |
| 2142 | MCFG_MACHINE_RESET_OVERRIDE(bfm_sc2_state, init ) // main scorpion2 board initialisation | |
| 2143 | MCFG_QUANTUM_TIME(attotime::from_hz(960)) // needed for serial communication !! | |
| 2146 | 2144 | MCFG_CPU_ADD("maincpu", M6809, MASTER_CLOCK/4 ) // 6809 CPU at 2 Mhz |
| 2147 | 2145 | MCFG_CPU_PROGRAM_MAP(memmap_vid) // setup scorpion2 board memorymap |
| 2148 | 2146 | MCFG_CPU_PERIODIC_INT_DRIVER(bfm_sc2_state, timer_irq, 1000) // generate 1000 IRQ's per second |
| 2149 | 2147 | MCFG_WATCHDOG_TIME_INIT(PERIOD_OF_555_MONOSTABLE(120000,100e-9)) |
| 2150 | MCFG_QUANTUM_TIME(attotime::from_hz(960)) // needed for serial communication !! | |
| 2151 | 2148 | |
| 2152 | 2149 | MCFG_BFMBD1_ADD("vfd0",0) |
| 2153 | 2150 | MCFG_BFMBD1_ADD("vfd1",1) |
| 2154 | 2151 | |
| 2155 | 2152 | MCFG_MACHINE_START_OVERRIDE(bfm_sc2_state,bfm_sc2) |
| 2156 | MCFG_MACHINE_RESET_OVERRIDE(bfm_sc2_state, init ) // main scorpion2 board initialisation | |
| 2157 | 2153 | |
| 2158 | 2154 | MCFG_NVRAM_ADD_0FILL("nvram") |
| 2159 | 2155 | MCFG_NVRAM_ADD_CUSTOM_DRIVER("e2ram", bfm_sc2_state, e2ram_init) |
| r242703 | r242704 | |
| 3596 | 3592 | static MACHINE_CONFIG_START( scorpion2, bfm_sc2_state ) |
| 3597 | 3593 | MCFG_MACHINE_RESET_OVERRIDE(bfm_sc2_state,awp_init) |
| 3598 | 3594 | MCFG_CPU_ADD("maincpu", M6809, MASTER_CLOCK/4 ) |
| 3599 | MCFG_CPU_PROGRAM_MAP( | |
| 3595 | MCFG_CPU_PROGRAM_MAP(sc2_basemap) | |
| 3600 | 3596 | MCFG_CPU_PERIODIC_INT_DRIVER(bfm_sc2_state, timer_irq, 1000) |
| 3601 | 3597 | MCFG_WATCHDOG_TIME_INIT(PERIOD_OF_555_MONOSTABLE(120000,100e-9)) |
| 3602 | 3598 | |
| r242703 | r242704 | |
| 3617 | 3613 | |
| 3618 | 3614 | /* video hardware */ |
| 3619 | 3615 | MCFG_DEFAULT_LAYOUT(layout_sc2_vfd) |
| 3620 | ||
| 3616 | ||
| 3621 | 3617 | MCFG_DEVICE_ADD("reel0", STEPPER, 0) |
| 3622 | 3618 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel0_optic_cb)) |
| 3623 | 3619 | MCFG_DEVICE_ADD("reel1", STEPPER, 0) |
| r242703 | r242704 | |
| 3625 | 3621 | MCFG_DEVICE_ADD("reel2", STEPPER, 0) |
| 3626 | 3622 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel2_optic_cb)) |
| 3627 | 3623 | MCFG_DEVICE_ADD("reel3", STEPPER, 0) |
| 3628 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel3_optic_cb)) | |
| 3624 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel3_optic_cb)) | |
| 3629 | 3625 | MCFG_DEVICE_ADD("reel4", STEPPER, 0) |
| 3630 | 3626 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel4_optic_cb)) |
| 3631 | 3627 | MCFG_DEVICE_ADD("reel5", STEPPER, 0) |
| r242703 | r242704 | |
| 3636 | 3632 | /* machine driver for scorpion3 board */ |
| 3637 | 3633 | static MACHINE_CONFIG_DERIVED( scorpion3, scorpion2 ) |
| 3638 | 3634 | MCFG_CPU_MODIFY("maincpu") |
| 3639 | MCFG_CPU_PROGRAM_MAP( | |
| 3635 | MCFG_CPU_PROGRAM_MAP(sc2_basemap) | |
| 3640 | 3636 | MACHINE_CONFIG_END |
| 3641 | 3637 | |
| 3642 | 3638 | |
| r242703 | r242704 | |
| 3645 | 3641 | MCFG_MACHINE_RESET_OVERRIDE(bfm_sc2_state,dm01_init) |
| 3646 | 3642 | MCFG_QUANTUM_TIME(attotime::from_hz(960)) // needed for serial communication !! |
| 3647 | 3643 | MCFG_CPU_ADD("maincpu", M6809, MASTER_CLOCK/4 ) |
| 3648 | MCFG_CPU_PROGRAM_MAP( | |
| 3644 | MCFG_CPU_PROGRAM_MAP(sc2_basemap) | |
| 3649 | 3645 | MCFG_CPU_PERIODIC_INT_DRIVER(bfm_sc2_state, timer_irq, 1000) |
| 3650 | 3646 | MCFG_WATCHDOG_TIME_INIT(PERIOD_OF_555_MONOSTABLE(120000,100e-9)) |
| 3651 | 3647 | |
| r242703 | r242704 | |
| 3667 | 3663 | MCFG_CPU_ADD("matrix", M6809, 2000000 ) /* matrix board 6809 CPU at 2 Mhz ?? I don't know the exact freq.*/ |
| 3668 | 3664 | MCFG_CPU_PROGRAM_MAP(bfm_dm01_memmap) |
| 3669 | 3665 | MCFG_CPU_PERIODIC_INT_DRIVER(bfm_sc2_state, nmi_line_assert, 1500 ) /* generate 1500 NMI's per second ?? what is the exact freq?? */ |
| 3670 | ||
| 3666 | ||
| 3671 | 3667 | MCFG_DEVICE_ADD("reel0", STEPPER, 0) |
| 3672 | 3668 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel0_optic_cb)) |
| 3673 | 3669 | MCFG_DEVICE_ADD("reel1", STEPPER, 0) |
| r242703 | r242704 | |
| 3675 | 3671 | MCFG_DEVICE_ADD("reel2", STEPPER, 0) |
| 3676 | 3672 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel2_optic_cb)) |
| 3677 | 3673 | MCFG_DEVICE_ADD("reel3", STEPPER, 0) |
| 3678 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel3_optic_cb)) | |
| 3674 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel3_optic_cb)) | |
| 3679 | 3675 | MCFG_DEVICE_ADD("reel4", STEPPER, 0) |
| 3680 | 3676 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel4_optic_cb)) |
| 3681 | 3677 | MCFG_DEVICE_ADD("reel5", STEPPER, 0) |
| r242703 | r242704 | |
|---|---|---|
| 28317 | 28317 | GAMEL( 200?, sc4pacclb ,sc4paccl, sc4_5reel, sc4paccl, sc4_state, sc4paccl, ROT0, "Mazooma","Pac Man Club (PR2018, CPAC) (Mazooma) (Scorpion 4) (set 3)", GAME_NOT_WORKING | GAME_CLICKABLE_ARTWORK, layout_bfm_sc4 ) |
| 28318 | 28318 | GAMEL( 200?, sc4pacclc ,sc4paccl, sc4_5reel, sc4paccl, sc4_state, sc4paccl, ROT0, "Mazooma","Pac Man Club (PR2018, CPAC) (Mazooma) (Scorpion 4) (set 4)", GAME_NOT_WORKING | GAME_CLICKABLE_ARTWORK, layout_bfm_sc4 ) |
| 28319 | 28319 | |
| 28320 | ||
| 28320 | ||
| 28321 | 28321 | // REEL 4 ERR 24 (what type should be here??) |
| 28322 | 28322 | |
| 28323 | 28323 | DRIVER_INIT_MEMBER(sc4_state,sc4pmani) |
| r242703 | r242704 | |
|---|---|---|
| 522 | 522 | m_reel1->update( data &0x0f); |
| 523 | 523 | awp_draw_reel("reel1", m_reel1); |
| 524 | 524 | } |
| 525 | ||
| 526 | if (m_reel2) | |
| 525 | ||
| 526 | if (m_reel2) | |
| 527 | 527 | { |
| 528 | 528 | m_reel2->update((data>>4)&0x0f); |
| 529 | 529 | awp_draw_reel("reel2", m_reel2); |
| r242703 | r242704 | |
| 651 | 651 | m_reel5->update( data &0x0f); |
| 652 | 652 | awp_draw_reel("reel5", m_reel5); |
| 653 | 653 | } |
| 654 | ||
| 655 | if (m_reel6) | |
| 654 | ||
| 655 | if (m_reel6) | |
| 656 | 656 | { |
| 657 | 657 | m_reel6->update((data>>4)&0x0f); |
| 658 | 658 | awp_draw_reel("reel6", m_reel6); |
| r242703 | r242704 | |
| 712 | 712 | MCFG_YMZ280B_IRQ_HANDLER(WRITELINE(sc4_state, bfm_sc4_irqhandler)) |
| 713 | 713 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 714 | 714 | MACHINE_CONFIG_END |
| 715 | ||
| 715 | ||
| 716 | 716 | //Standard 6 reels all connected |
| 717 | 717 | MACHINE_CONFIG_START( sc4, sc4_state ) |
| 718 | 718 | MCFG_FRAGMENT_ADD(sc4_common) |
| 719 | ||
| 719 | ||
| 720 | 720 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 721 | 721 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 722 | 722 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| r242703 | r242704 | |
| 734 | 734 | //Standard 3 reels |
| 735 | 735 | MACHINE_CONFIG_START( sc4_3reel, sc4_state ) |
| 736 | 736 | MCFG_FRAGMENT_ADD(sc4_common) |
| 737 | ||
| 737 | ||
| 738 | 738 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 739 | 739 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 740 | 740 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| 741 | 741 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel2_optic_cb)) |
| 742 | 742 | MCFG_STARPOINT_RM20_48STEP_ADD("reel3") |
| 743 | 743 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel3_optic_cb)) |
| 744 | ||
| 744 | ||
| 745 | 745 | MACHINE_CONFIG_END |
| 746 | 746 | |
| 747 | 747 | //Standard 4 reels |
| 748 | 748 | MACHINE_CONFIG_START( sc4_4reel, sc4_state ) |
| 749 | 749 | MCFG_FRAGMENT_ADD(sc4_common) |
| 750 | ||
| 750 | ||
| 751 | 751 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 752 | 752 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 753 | 753 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| r242703 | r242704 | |
| 762 | 762 | MACHINE_CONFIG_START( sc4_4reel_alt, sc4_state ) |
| 763 | 763 | |
| 764 | 764 | MCFG_FRAGMENT_ADD(sc4_common) |
| 765 | ||
| 765 | ||
| 766 | 766 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 767 | 767 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 768 | 768 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| 769 | 769 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel2_optic_cb)) |
| 770 | 770 | MCFG_STARPOINT_RM20_48STEP_ADD("reel3") |
| 771 | 771 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel3_optic_cb)) |
| 772 | ||
| 772 | ||
| 773 | 773 | MCFG_STARPOINT_RM20_48STEP_ADD("reel5") |
| 774 | 774 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb)) |
| 775 | 775 | MACHINE_CONFIG_END |
| r242703 | r242704 | |
| 778 | 778 | //Standard 5 reels |
| 779 | 779 | MACHINE_CONFIG_START( sc4_5reel, sc4_state ) |
| 780 | 780 | MCFG_FRAGMENT_ADD(sc4_common) |
| 781 | ||
| 781 | ||
| 782 | 782 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 783 | 783 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 784 | 784 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| r242703 | r242704 | |
| 794 | 794 | //5 reels, with RL4 skipped |
| 795 | 795 | MACHINE_CONFIG_START( sc4_5reel_alt, sc4_state ) |
| 796 | 796 | MCFG_FRAGMENT_ADD(sc4_common) |
| 797 | ||
| 797 | ||
| 798 | 798 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 799 | 799 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 800 | 800 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| 801 | 801 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel2_optic_cb)) |
| 802 | 802 | MCFG_STARPOINT_RM20_48STEP_ADD("reel3") |
| 803 | 803 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel3_optic_cb)) |
| 804 | ||
| 804 | ||
| 805 | 805 | MCFG_STARPOINT_RM20_48STEP_ADD("reel5") |
| 806 | 806 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb)) |
| 807 | 807 | MCFG_STARPOINT_RM20_48STEP_ADD("reel6") |
| 808 | 808 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel6_optic_cb)) |
| 809 | ||
| 809 | ||
| 810 | 810 | MACHINE_CONFIG_END |
| 811 | 811 | |
| 812 | 812 | //6 reels, last 200 steps |
| 813 | 813 | MACHINE_CONFIG_START( sc4_200_std, sc4_state ) |
| 814 | 814 | |
| 815 | 815 | MCFG_FRAGMENT_ADD(sc4_common) |
| 816 | ||
| 816 | ||
| 817 | 817 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 818 | 818 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 819 | 819 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| r242703 | r242704 | |
| 823 | 823 | MCFG_STARPOINT_RM20_48STEP_ADD("reel4") |
| 824 | 824 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel4_optic_cb)) |
| 825 | 825 | MCFG_STARPOINT_RM20_48STEP_ADD("reel5") |
| 826 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb)) | |
| 826 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb)) | |
| 827 | 827 | MCFG_STARPOINT_200STEP_ADD("reel6") |
| 828 | 828 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel6_optic_cb)) |
| 829 | 829 | MACHINE_CONFIG_END |
| r242703 | r242704 | |
| 831 | 831 | //6 reels, last 200 steps |
| 832 | 832 | MACHINE_CONFIG_START( sc4_200_alt, sc4_state ) |
| 833 | 833 | MCFG_FRAGMENT_ADD(sc4_common) |
| 834 | ||
| 834 | ||
| 835 | 835 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 836 | 836 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 837 | 837 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| r242703 | r242704 | |
| 841 | 841 | MCFG_STARPOINT_200STEP_ADD("reel4") |
| 842 | 842 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel4_optic_cb)) |
| 843 | 843 | MCFG_STARPOINT_200STEP_ADD("reel5") |
| 844 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb)) | |
| 844 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb)) | |
| 845 | 845 | MCFG_STARPOINT_RM20_48STEP_ADD("reel6") |
| 846 | 846 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel6_optic_cb)) |
| 847 | 847 | MACHINE_CONFIG_END |
| r242703 | r242704 | |
| 849 | 849 | //6 reels, RL4 200 steps |
| 850 | 850 | MACHINE_CONFIG_START( sc4_200_alta, sc4_state ) |
| 851 | 851 | MCFG_FRAGMENT_ADD(sc4_common) |
| 852 | ||
| 852 | ||
| 853 | 853 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 854 | 854 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 855 | 855 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| r242703 | r242704 | |
| 859 | 859 | MCFG_STARPOINT_RM20_48STEP_ADD("reel4") |
| 860 | 860 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel4_optic_cb)) |
| 861 | 861 | MCFG_STARPOINT_200STEP_ADD("reel5") |
| 862 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb)) | |
| 862 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb)) | |
| 863 | 863 | MCFG_STARPOINT_RM20_48STEP_ADD("reel6") |
| 864 | 864 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel6_optic_cb)) |
| 865 | 865 | MACHINE_CONFIG_END |
| r242703 | r242704 | |
| 867 | 867 | //6 reels, 3 48 step, 3 200 step |
| 868 | 868 | MACHINE_CONFIG_START( sc4_200_altb, sc4_state ) |
| 869 | 869 | MCFG_FRAGMENT_ADD(sc4_common) |
| 870 | ||
| 870 | ||
| 871 | 871 | MCFG_STARPOINT_200STEP_ADD("reel1") |
| 872 | 872 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 873 | 873 | MCFG_STARPOINT_200STEP_ADD("reel2") |
| r242703 | r242704 | |
| 877 | 877 | MCFG_STARPOINT_RM20_48STEP_ADD("reel4") |
| 878 | 878 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel4_optic_cb)) |
| 879 | 879 | MCFG_STARPOINT_RM20_48STEP_ADD("reel5") |
| 880 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb)) | |
| 880 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb)) | |
| 881 | 881 | MCFG_STARPOINT_RM20_48STEP_ADD("reel6") |
| 882 | 882 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel6_optic_cb)) |
| 883 | 883 | MACHINE_CONFIG_END |
| r242703 | r242704 | |
| 885 | 885 | //5 reels, last one 200 steps |
| 886 | 886 | MACHINE_CONFIG_START( sc4_200_5r, sc4_state ) |
| 887 | 887 | MCFG_FRAGMENT_ADD(sc4_common) |
| 888 | ||
| 888 | ||
| 889 | 889 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 890 | 890 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 891 | 891 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| r242703 | r242704 | |
| 893 | 893 | MCFG_STARPOINT_RM20_48STEP_ADD("reel3") |
| 894 | 894 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel3_optic_cb)) |
| 895 | 895 | MCFG_STARPOINT_RM20_48STEP_ADD("reel4") |
| 896 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel4_optic_cb)) | |
| 896 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel4_optic_cb)) | |
| 897 | 897 | MCFG_STARPOINT_200STEP_ADD("reel5") |
| 898 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb)) | |
| 898 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb)) | |
| 899 | 899 | MACHINE_CONFIG_END |
| 900 | 900 | |
| 901 | 901 | |
| r242703 | r242704 | |
| 903 | 903 | //5 reels, last one 200 steps, RL4 skipped |
| 904 | 904 | MACHINE_CONFIG_START( sc4_200_5ra, sc4_state ) |
| 905 | 905 | MCFG_FRAGMENT_ADD(sc4_common) |
| 906 | ||
| 906 | ||
| 907 | 907 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 908 | 908 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 909 | 909 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| 910 | 910 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel2_optic_cb)) |
| 911 | 911 | MCFG_STARPOINT_RM20_48STEP_ADD("reel3") |
| 912 | 912 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel3_optic_cb)) |
| 913 | ||
| 913 | ||
| 914 | 914 | MCFG_STARPOINT_RM20_48STEP_ADD("reel5") |
| 915 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb)) | |
| 915 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb)) | |
| 916 | 916 | MCFG_STARPOINT_200STEP_ADD("reel6") |
| 917 | 917 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel6_optic_cb)) |
| 918 | 918 | MACHINE_CONFIG_END |
| r242703 | r242704 | |
| 920 | 920 | //5 reels, last one 200 steps, RL5 skipped |
| 921 | 921 | MACHINE_CONFIG_START( sc4_200_5rb, sc4_state ) |
| 922 | 922 | MCFG_FRAGMENT_ADD(sc4_common) |
| 923 | ||
| 923 | ||
| 924 | 924 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 925 | 925 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 926 | 926 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| r242703 | r242704 | |
| 937 | 937 | //5 reels, RL5 200 steps, RL4 skipped |
| 938 | 938 | MACHINE_CONFIG_START( sc4_200_5rc, sc4_state ) |
| 939 | 939 | MCFG_FRAGMENT_ADD(sc4_common) |
| 940 | ||
| 940 | ||
| 941 | 941 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 942 | 942 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 943 | 943 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| 944 | 944 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel2_optic_cb)) |
| 945 | 945 | MCFG_STARPOINT_RM20_48STEP_ADD("reel3") |
| 946 | 946 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel3_optic_cb)) |
| 947 | ||
| 947 | ||
| 948 | 948 | MCFG_STARPOINT_200STEP_ADD("reel5") |
| 949 | 949 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb)) |
| 950 | 950 | MCFG_STARPOINT_RM20_48STEP_ADD("reel6") |
| 951 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel6_optic_cb)) | |
| 951 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel6_optic_cb)) | |
| 952 | 952 | MACHINE_CONFIG_END |
| 953 | 953 | |
| 954 | 954 | //4 reels, last one 200 steps |
| 955 | 955 | MACHINE_CONFIG_START( sc4_200_4r, sc4_state ) |
| 956 | 956 | MCFG_FRAGMENT_ADD(sc4_common) |
| 957 | ||
| 957 | ||
| 958 | 958 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 959 | 959 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 960 | 960 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| r242703 | r242704 | |
| 962 | 962 | MCFG_STARPOINT_RM20_48STEP_ADD("reel3") |
| 963 | 963 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel3_optic_cb)) |
| 964 | 964 | MCFG_STARPOINT_200STEP_ADD("reel4") |
| 965 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel4_optic_cb)) | |
| 965 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel4_optic_cb)) | |
| 966 | 966 | MACHINE_CONFIG_END |
| 967 | 967 | |
| 968 | 968 | //4 reels, last one 200 steps, RL4 skipped |
| 969 | 969 | MACHINE_CONFIG_START( sc4_200_4ra, sc4_state ) |
| 970 | 970 | MCFG_FRAGMENT_ADD(sc4_common) |
| 971 | ||
| 971 | ||
| 972 | 972 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 973 | 973 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 974 | 974 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| r242703 | r242704 | |
| 984 | 984 | //4 reels, last one 200 steps, RL4,5 skipped |
| 985 | 985 | MACHINE_CONFIG_START( sc4_200_4rb, sc4_state ) |
| 986 | 986 | MCFG_FRAGMENT_ADD(sc4_common) |
| 987 | ||
| 987 | ||
| 988 | 988 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 989 | 989 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 990 | 990 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| 991 | 991 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel2_optic_cb)) |
| 992 | 992 | MCFG_STARPOINT_RM20_48STEP_ADD("reel3") |
| 993 | 993 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel3_optic_cb)) |
| 994 | ||
| 994 | ||
| 995 | 995 | MCFG_STARPOINT_200STEP_ADD("reel6") |
| 996 | 996 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel6_optic_cb)) |
| 997 | 997 | MACHINE_CONFIG_END |
| 998 | 998 | |
| 999 | 999 | MACHINE_CONFIG_START( sc4_4reel_200, sc4_state ) |
| 1000 | 1000 | MCFG_FRAGMENT_ADD(sc4_common) |
| 1001 | ||
| 1001 | ||
| 1002 | 1002 | MCFG_STARPOINT_200STEP_ADD("reel1") |
| 1003 | 1003 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 1004 | 1004 | MCFG_STARPOINT_200STEP_ADD("reel2") |
| r242703 | r242704 | |
| 1006 | 1006 | MCFG_STARPOINT_200STEP_ADD("reel3") |
| 1007 | 1007 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel3_optic_cb)) |
| 1008 | 1008 | MCFG_STARPOINT_200STEP_ADD("reel4") |
| 1009 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel4_optic_cb)) | |
| 1009 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel4_optic_cb)) | |
| 1010 | 1010 | MACHINE_CONFIG_END |
| 1011 | 1011 | |
| 1012 | 1012 | MACHINE_CONFIG_START( sc4_3reel_200, sc4_state ) |
| 1013 | 1013 | MCFG_FRAGMENT_ADD(sc4_common) |
| 1014 | ||
| 1014 | ||
| 1015 | 1015 | MCFG_STARPOINT_200STEP_ADD("reel1") |
| 1016 | 1016 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 1017 | 1017 | MCFG_STARPOINT_200STEP_ADD("reel2") |
| r242703 | r242704 | |
| 1023 | 1023 | MACHINE_CONFIG_START( sc4_3reel_200_48, sc4_state ) |
| 1024 | 1024 | |
| 1025 | 1025 | MCFG_FRAGMENT_ADD(sc4_common) |
| 1026 | ||
| 1026 | ||
| 1027 | 1027 | MCFG_STARPOINT_200STEP_ADD("reel1") |
| 1028 | 1028 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 1029 | 1029 | MCFG_STARPOINT_200STEP_ADD("reel2") |
| r242703 | r242704 | |
| 1031 | 1031 | MCFG_STARPOINT_200STEP_ADD("reel3") |
| 1032 | 1032 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel3_optic_cb)) |
| 1033 | 1033 | MCFG_STARPOINT_48STEP_ADD("reel4") |
| 1034 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel4_optic_cb)) | |
| 1034 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel4_optic_cb)) | |
| 1035 | 1035 | MACHINE_CONFIG_END |
| 1036 | 1036 | |
| 1037 | 1037 | MACHINE_CONFIG_START( sc4_no_reels, sc4_state ) |
| r242703 | r242704 | |
| 1047 | 1047 | |
| 1048 | 1048 | MACHINE_CONFIG_START( sc4_adder4, sc4_adder4_state ) |
| 1049 | 1049 | MCFG_FRAGMENT_ADD(sc4_common) |
| 1050 | ||
| 1050 | ||
| 1051 | 1051 | MCFG_CPU_ADD("adder4", M68340, 25175000) // 68340 (CPU32 core) |
| 1052 | 1052 | MCFG_CPU_PROGRAM_MAP(sc4_adder4_map) |
| 1053 | 1053 | |
| r242703 | r242704 | |
| 1066 | 1066 | MCFG_CPU_PERIODIC_INT_DRIVER(sc4_state, nmi_line_assert, 1500 ) /* generate 1500 NMI's per second ?? what is the exact freq?? */ |
| 1067 | 1067 | |
| 1068 | 1068 | MCFG_MACHINE_START_OVERRIDE(sc4_state, sc4 ) |
| 1069 | ||
| 1069 | ||
| 1070 | 1070 | MCFG_STARPOINT_RM20_48STEP_ADD("reel1") |
| 1071 | 1071 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb)) |
| 1072 | 1072 | MCFG_STARPOINT_RM20_48STEP_ADD("reel2") |
| r242703 | r242704 | |
|---|---|---|
| 393 | 393 | AM_RANGE(0x0900, 0x0907) AM_READ(spacduel_IN3_r) /* IN1 */ |
| 394 | 394 | AM_RANGE(0x0905, 0x0906) AM_WRITENOP /* ignore? */ |
| 395 | 395 | AM_RANGE(0x0a00, 0x0a00) AM_DEVREAD("earom", atari_vg_earom_device, read) |
| 396 | ||
| 396 | AM_RANGE(0x0c00, 0x0c00) AM_WRITE(spacduel_coin_counter_w) /* coin out */ | |
| 397 | 397 | AM_RANGE(0x0c80, 0x0c80) AM_DEVWRITE("avg", avg_device, go_w) |
| 398 | 398 | AM_RANGE(0x0d00, 0x0d00) AM_WRITENOP /* watchdog clear */ |
| 399 | 399 | AM_RANGE(0x0d80, 0x0d80) AM_DEVWRITE("avg", avg_device, reset_w) |
| r242703 | r242704 | |
|---|---|---|
| 777 | 777 | debug_console_printf(machine, "Register combiners disabled\n"); |
| 778 | 778 | } |
| 779 | 779 | |
| 780 | static void waitvblank_command(running_machine &machine, int ref, int params, const char **param) | |
| 781 | { | |
| 782 | int en; | |
| 783 | ||
| 784 | chihiro_state *chst = machine.driver_data<chihiro_state>(); | |
| 785 | en = chst->nvidia_nv2a->toggle_wait_vblank_support(); | |
| 786 | if (en != 0) | |
| 787 | debug_console_printf(machine, "Vblank method enabled\n"); | |
| 788 | else | |
| 789 | debug_console_printf(machine, "Vblank method disabled\n"); | |
| 790 | } | |
| 791 | ||
| 792 | 780 | static void grab_texture_command(running_machine &machine, int ref, int params, const char **param) |
| 793 | 781 | { |
| 794 | 782 | UINT64 type; |
| r242703 | r242704 | |
| 874 | 862 | debug_console_printf(machine, " chihiro curthread -- Print information about current thread\n"); |
| 875 | 863 | debug_console_printf(machine, " chihiro irq,<number> -- Generate interrupt with irq number 0-15\n"); |
| 876 | 864 | debug_console_printf(machine, " chihiro nv2a_combiners -- Toggle use of register combiners\n"); |
| 877 | debug_console_printf(machine, " chihiro waitvblank -- Toggle support for wait vblank method\n"); | |
| 878 | 865 | debug_console_printf(machine, " chihiro grab_texture,<type>,<filename> -- Save to <filename> the next used texture of type <type>\n"); |
| 879 | 866 | debug_console_printf(machine, " chihiro grab_vprog,<filename> -- save current vertex program instruction slots to <filename>\n"); |
| 880 | 867 | debug_console_printf(machine, " chihiro vprogdis,<address>,<length>[,<type>] -- disassemble <lenght> vertex program instructions at <address> of <type>\n"); |
| r242703 | r242704 | |
| 899 | 886 | generate_irq_command(machine, ref, params - 1, param + 1); |
| 900 | 887 | else if (strcmp("nv2a_combiners", param[0]) == 0) |
| 901 | 888 | nv2a_combiners_command(machine, ref, params - 1, param + 1); |
| 902 | else if (strcmp("waitvblank", param[0]) == 0) | |
| 903 | waitvblank_command(machine, ref, params - 1, param + 1); | |
| 904 | 889 | else if (strcmp("grab_texture", param[0]) == 0) |
| 905 | 890 | grab_texture_command(machine, ref, params - 1, param + 1); |
| 906 | 891 | else if (strcmp("grab_vprog", param[0]) == 0) |
| r242703 | r242704 | |
| 1802 | 1787 | save_item(NAME(smbusst.words)); |
| 1803 | 1788 | save_item(NAME(pic16lc_buffer)); |
| 1804 | 1789 | save_item(NAME(usbhack_counter)); |
| 1805 | nvidia_nv2a->start(); | |
| 1806 | 1790 | nvidia_nv2a->savestate_items(); |
| 1807 | 1791 | } |
| 1808 | 1792 |
| r242703 | r242704 | |
|---|---|---|
| 1855 | 1855 | |
| 1856 | 1856 | /* SWB.4, SWB.5 and SWB.6 need to be enabled simultaneously for turbo mode */ |
| 1857 | 1857 | static INPUT_PORTS_START( sf2amf ) |
| 1858 | PORT_INCLUDE( sf2 | |
| 1858 | PORT_INCLUDE( sf2 ) | |
| 1859 | 1859 | |
| 1860 | 1860 | PORT_MODIFY("DSWB") |
| 1861 | 1861 | PORT_DIPNAME( 0x08, 0x08, "Turbo Mode Switch 1 of 3" ) PORT_DIPLOCATION("SW(B):4") |
| r242703 | r242704 | |
| 11532 | 11532 | m_maincpu->space(AS_PROGRAM).install_read_handler(0xf18000, 0xf19fff, read16_delegate(FUNC(cps_state::dinohunt_sound_r), this)); |
| 11533 | 11533 | m_maincpu->space(AS_PROGRAM).install_read_port(0xfc0000, 0xfc0001, "IN2"); ; |
| 11534 | 11534 | // the ym2151 doesn't seem to be used. Is it actually on the PCB? |
| 11535 | ||
| 11535 | ||
| 11536 | 11536 | DRIVER_INIT_CALL(cps1); |
| 11537 | 11537 | } |
| 11538 | 11538 | |
| r242703 | r242704 | |
| 11666 | 11666 | GAME( 1992, sf2acc, sf2ce, cps1_12MHz, sf2, cps_state, cps1, ROT0, "bootleg", "Street Fighter II': Champion Edition (Accelerator!, bootleg, set 1)", GAME_SUPPORTS_SAVE ) // 920313 - based on World version |
| 11667 | 11667 | GAME( 1992, sf2acca, sf2ce, cps1_12MHz, sf2, cps_state, cps1, ROT0, "bootleg", "Street Fighter II': Champion Edition (Accelerator!, bootleg, set 2)", GAME_SUPPORTS_SAVE ) // 920313 - based on World version |
| 11668 | 11668 | GAME( 1992, sf2accp2, sf2ce, cps1_12MHz, sf2, cps_state, cps1, ROT0, "bootleg", "Street Fighter II': Champion Edition (Accelerator Pt.II, bootleg)", GAME_SUPPORTS_SAVE ) // 920313 - based on World version |
| 11669 | GAME( 1992, sf2amf, sf2ce, cps1_12MHz, sf2amf, cps_state, | |
| 11669 | GAME( 1992, sf2amf, sf2ce, cps1_12MHz, sf2amf, cps_state, cps1, ROT0, "bootleg", "Street Fighter II': Champion Edition (Alpha Magic-F, bootleg)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) // 920313 - based on World version | |
| 11670 | 11670 | GAME( 1992, sf2amf2, sf2ce, cps1_12MHz, sf2hack, cps_state, sf2hack, ROT0, "bootleg", "Street Fighter II': Champion Edition (L735 Test Rom, bootleg)", GAME_SUPPORTS_SAVE ) // 920313 - based on World version |
| 11671 | 11671 | GAME( 1992, sf2dkot2, sf2ce, cps1_12MHz, sf2, cps_state, cps1, ROT0, "bootleg", "Street Fighter II': Champion Edition (Double K.O. Turbo II, bootleg)", GAME_SUPPORTS_SAVE ) // 902140 !!! - based on USA version |
| 11672 | 11672 | GAME( 1992, sf2ceblp, sf2ce, cps1_10MHz, sf2, cps_state, sf2ceblp, ROT0, "bootleg", "Street Fighter II': Champion Edition (protected bootleg on non-dash board)", GAME_SUPPORTS_SAVE ) // 920313 - based on USA version |
| r242703 | r242704 | |
|---|---|---|
| 2885 | 2885 | ROM_LOAD16_WORD_SWAP( "dd2.12m", 0x200000, 0x200000, CRC(5ea2e7fa) SHA1(0e6a9fd007f637adcb2226c902394f07de45e803) ) |
| 2886 | 2886 | ROM_END |
| 2887 | 2887 | |
| 2888 | ||
| 2889 | ROM_START( ddsomar1 ) | |
| 2890 | ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ | |
| 2891 | ROM_LOAD16_WORD_SWAP( "dd2a.03c", 0x000000, 0x80000, CRC(17162039) SHA1(d6e161cc888c2c7cd7b955ef9f1fc47a5302e29d) ) | |
| 2892 | ROM_LOAD16_WORD_SWAP( "dd2a.04c", 0x080000, 0x80000, CRC(950bec38) SHA1(99b50388015730142d28263de1b4f918f7a353fa) ) | |
| 2893 | ROM_LOAD16_WORD_SWAP( "dd2a.05c", 0x100000, 0x80000, CRC(fa298eba) SHA1(64d248de4e5655129bb3a420020ca041f5e7b740) ) | |
| 2894 | ROM_LOAD16_WORD_SWAP( "dd2a.06c", 0x180000, 0x80000, CRC(28f75b35) SHA1(01f8eb18918a674e5076ef2c09508b90d05d2e7d) ) | |
| 2895 | ROM_LOAD16_WORD_SWAP( "dd2.07", 0x200000, 0x80000, CRC(909a0b8b) SHA1(58bda17c36063a79df8b5031755c7909a9bda221) ) | |
| 2896 | ROM_LOAD16_WORD_SWAP( "dd2.08", 0x280000, 0x80000, CRC(e53c4d01) SHA1(bad872e4e793a39f68bc0e580772e982714b5876) ) | |
| 2897 | ROM_LOAD16_WORD_SWAP( "dd2.09", 0x300000, 0x80000, CRC(5f86279f) SHA1(c2a454e5f821b1cdd49f2cf0602e9bfb7ba63340) ) | |
| 2898 | ROM_LOAD16_WORD_SWAP( "dd2.10", 0x380000, 0x80000, CRC(ad954c26) SHA1(468c01735dbdb1114b37060546a660678290a97f) ) | |
| 2899 | ||
| 2900 | ROM_REGION( 0x1800000, "gfx", 0 ) | |
| 2901 | ROMX_LOAD( "dd2.13m", 0x0000000, 0x400000, CRC(a46b4e6e) SHA1(fb90f42868c581c481b4ceff9f692753fb186b30) , ROM_GROUPWORD | ROM_SKIP(6) ) | |
| 2902 | ROMX_LOAD( "dd2.15m", 0x0000002, 0x400000, CRC(d5fc50fc) SHA1(bc692f17b18bb47a724cd5152377cd5ccd6e184a) , ROM_GROUPWORD | ROM_SKIP(6) ) | |
| 2903 | ROMX_LOAD( "dd2.17m", 0x0000004, 0x400000, CRC(837c0867) SHA1(3d6db290a8f76299a23543f0ccf6a7905e1088ac) , ROM_GROUPWORD | ROM_SKIP(6) ) | |
| 2904 | ROMX_LOAD( "dd2.19m", 0x0000006, 0x400000, CRC(bb0ec21c) SHA1(e43ccc1cf63ccd2b504cc9fd701af849a7321914) , ROM_GROUPWORD | ROM_SKIP(6) ) | |
| 2905 | ROMX_LOAD( "dd2.14m", 0x1000000, 0x200000, CRC(6d824ce2) SHA1(0ccfe6c8a944937718e28a1a373b5822c7b7001b) , ROM_GROUPWORD | ROM_SKIP(6) ) | |
| 2906 | ROMX_LOAD( "dd2.16m", 0x1000002, 0x200000, CRC(79682ae5) SHA1(ee84f4791c29ce9e2bae06ba3ec47ff4d2cd7054) , ROM_GROUPWORD | ROM_SKIP(6) ) | |
| 2907 | ROMX_LOAD( "dd2.18m", 0x1000004, 0x200000, CRC(acddd149) SHA1(7f50de9b2d1cc733594c642be1804190519caffa) , ROM_GROUPWORD | ROM_SKIP(6) ) | |
| 2908 | ROMX_LOAD( "dd2.20m", 0x1000006, 0x200000, CRC(117fb0c0) SHA1(15c01fa1a71b6469b0e1bde0ce5835c5ff9d938c) , ROM_GROUPWORD | ROM_SKIP(6) ) | |
| 2909 | ||
| 2910 | ROM_REGION( QSOUND_SIZE, "audiocpu", 0 ) /* 64k for the audio CPU (+banks) */ | |
| 2911 | ROM_LOAD( "dd2.01", 0x00000, 0x08000, CRC(99d657e5) SHA1(1528dd6b07a0e79951a35c0457c8a9c9770e9c78) ) | |
| 2912 | ROM_CONTINUE( 0x10000, 0x18000 ) | |
| 2913 | ROM_LOAD( "dd2.02", 0x28000, 0x20000, CRC(117a3824) SHA1(14f3a12170b601c5466c93af9d2f24e0b386b4e4) ) | |
| 2914 | ||
| 2915 | ROM_REGION( 0x400000, "qsound", 0 ) /* QSound samples */ | |
| 2916 | ROM_LOAD16_WORD_SWAP( "dd2.11m", 0x000000, 0x200000, CRC(98d0c325) SHA1(7406e8d943d77c468eb418c4113261f4ab973bbf) ) | |
| 2917 | ROM_LOAD16_WORD_SWAP( "dd2.12m", 0x200000, 0x200000, CRC(5ea2e7fa) SHA1(0e6a9fd007f637adcb2226c902394f07de45e803) ) | |
| 2918 | ROM_END | |
| 2919 | ||
| 2920 | 2888 | ROM_START( ddsomb ) |
| 2921 | 2889 | ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ |
| 2922 | 2890 | ROM_LOAD16_WORD_SWAP( "dd2b.03a", 0x000000, 0x80000, CRC(e8ce7fbb) SHA1(645133fb07b34f663709896a0f55a9a51de4ee9b) ) |
| r242703 | r242704 | |
| 8761 | 8729 | GAME( 1996, ddsomj, ddsom, cps2, cps2_4p4b, cps_state, cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Japan 960619)", GAME_SUPPORTS_SAVE ) |
| 8762 | 8730 | GAME( 1996, ddsomjr1, ddsom, cps2, cps2_4p4b, cps_state, cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Japan 960206)", GAME_SUPPORTS_SAVE ) |
| 8763 | 8731 | GAME( 1996, ddsoma, ddsom, cps2, cps2_4p4b, cps_state, cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Asia 960619)", GAME_SUPPORTS_SAVE ) |
| 8764 | GAME( 1996, ddsomar1, ddsom, cps2, cps2_4p4b, cps_state, cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Asia 960208)", GAME_SUPPORTS_SAVE ) | |
| 8765 | 8732 | GAME( 1996, ddsomh, ddsom, cps2, cps2_4p4b, cps_state, cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Hispanic 960223)", GAME_SUPPORTS_SAVE ) |
| 8766 | 8733 | GAME( 1996, ddsomb, ddsom, cps2, cps2_4p4b, cps_state, cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Brazil 960223)", GAME_SUPPORTS_SAVE ) |
| 8767 | 8734 | GAME( 1996, sfa2, 0, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Street Fighter Alpha 2 (Euro 960229)", GAME_SUPPORTS_SAVE ) |
| r242703 | r242704 | |
|---|---|---|
| 185 | 185 | ADDRESS_MAP_END |
| 186 | 186 | |
| 187 | 187 | static 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") | |
| 188 | AM_RANGE(0x0000, 0x3fff) AM_RAM_WRITE(bg0_videoram_w) AM_SHARE("bg0_videoram") | |
| 189 | 189 | AM_RANGE(0x4000, 0x6fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") |
| 190 | 190 | ADDRESS_MAP_END |
| 191 | 191 |
| r242703 | r242704 | |
|---|---|---|
| 383 | 383 | |
| 384 | 384 | READ32_MEMBER(dreamwld_state::dreamwld_protdata_r) |
| 385 | 385 | { |
| 386 | // | |
| 386 | // static int count = 0; | |
| 387 | 387 | |
| 388 | 388 | UINT8 *protdata = memregion("user1")->base(); |
| 389 | 389 | size_t protsize = memregion("user1")->bytes(); |
| 390 | 390 | UINT8 dat = protdata[(m_protindex++) % protsize]; |
| 391 | 391 | |
| 392 | // printf("protection read %04x %02x\n", count, dat); | |
| 393 | // count++; | |
| 392 | // printf("protection read %04x %02x\n", count, dat); | |
| 393 | // count++; | |
| 394 | 394 | |
| 395 | 395 | // real hw returns 00 after end of data, I haven't checked if it's possible to overflow the read counter |
| 396 | 396 | // and read out the internal rom. |
| r242703 | r242704 | |
| 614 | 614 | PORT_START("DSW") |
| 615 | 615 | PORT_DIPUNUSED_DIPLOC( 0x0001, IP_ACTIVE_LOW, "SW2:1" ) /* As listed in service mode, but tested */ |
| 616 | 616 | PORT_DIPUNUSED_DIPLOC( 0x0002, IP_ACTIVE_LOW, "SW2:2" ) /* These might have some use, requires investigation of code */ |
| 617 | PORT_DIPUNUSED_DIPLOC( 0x0004, IP_ACTIVE_LOW, "SW2:3" ) | |
| 618 | PORT_DIPUNUSED_DIPLOC( 0x0008, IP_ACTIVE_LOW, "SW2:4" ) | |
| 619 | PORT_DIPUNUSED_DIPLOC( 0x0010, IP_ACTIVE_LOW, "SW2:5" ) | |
| 620 | PORT_DIPNAME( 0x0060, 0x0060, "Ticket Payout" ) PORT_DIPLOCATION("SW2:6,7") | |
| 621 | PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) | |
| 622 | PORT_DIPSETTING( 0x0020, "Little" ) | |
| 623 | PORT_DIPSETTING( 0x0060, DEF_STR( Normal ) ) | |
| 624 | PORT_DIPSETTING( 0x0040, "Much" ) | |
| 625 | PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW2:8") | |
| 626 | PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) | |
| 627 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) | |
| 628 | PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") /* Has no effect?? */ | |
| 629 | PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) | |
| 630 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) | |
| 631 | PORT_DIPNAME( 0x0e00, 0x0e00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:2,3,4") | |
| 632 | PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) ) | |
| 633 | PORT_DIPSETTING( 0x0200, DEF_STR( 4C_1C ) ) | |
| 634 | PORT_DIPSETTING( 0x0400, DEF_STR( 3C_1C ) ) | |
| 635 | PORT_DIPSETTING( 0x0600, DEF_STR( 2C_1C ) ) | |
| 636 | PORT_DIPSETTING( 0x0e00, DEF_STR( 1C_1C ) ) | |
| 637 | PORT_DIPSETTING( 0x0a00, DEF_STR( 2C_3C ) ) | |
| 638 | PORT_DIPSETTING( 0x0c00, DEF_STR( 1C_2C ) ) | |
| 639 | PORT_DIPSETTING( 0x0800, DEF_STR( 1C_3C ) ) | |
| 640 | PORT_DIPNAME( 0x7000, 0x7000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:5,6,7") | |
| 641 | PORT_DIPSETTING( 0x2000, "Level 1" ) | |
| 642 | PORT_DIPSETTING( 0x1000, "Level 2" ) | |
| 643 | PORT_DIPSETTING( 0x0000, "Level 3" ) | |
| 644 | PORT_DIPSETTING( 0x7000, "Level 4" ) | |
| 645 | PORT_DIPSETTING( 0x6000, "Level 5" ) | |
| 646 | PORT_DIPSETTING( 0x5000, "Level 6" ) | |
| 647 | PORT_DIPSETTING( 0x4000, "Level 7" ) | |
| 648 | PORT_DIPSETTING( 0x3000, "Level 8" ) | |
| 649 | PORT_SERVICE_DIPLOC( 0x8000, IP_ACTIVE_LOW, "SW1:8" ) | |
| 617 | PORT_DIPUNUSED_DIPLOC( 0x0004, IP_ACTIVE_LOW, "SW2:3" ) | |
| 618 | PORT_DIPUNUSED_DIPLOC( 0x0008, IP_ACTIVE_LOW, "SW2:4" ) | |
| 619 | PORT_DIPUNUSED_DIPLOC( 0x0010, IP_ACTIVE_LOW, "SW2:5" ) | |
| 620 | PORT_DIPNAME( 0x0060, 0x0060, "Ticket Payout" ) PORT_DIPLOCATION("SW2:6,7") | |
| 621 | PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) | |
| 622 | PORT_DIPSETTING( 0x0020, "Little" ) | |
| 623 | PORT_DIPSETTING( 0x0060, DEF_STR( Normal ) ) | |
| 624 | PORT_DIPSETTING( 0x0040, "Much" ) | |
| 625 | PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW2:8") | |
| 626 | PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) | |
| 627 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) | |
| 628 | PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") /* Has no effect?? */ | |
| 629 | PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) | |
| 630 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) | |
| 631 | PORT_DIPNAME( 0x0e00, 0x0e00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:2,3,4") | |
| 632 | PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) ) | |
| 633 | PORT_DIPSETTING( 0x0200, DEF_STR( 4C_1C ) ) | |
| 634 | PORT_DIPSETTING( 0x0400, DEF_STR( 3C_1C ) ) | |
| 635 | PORT_DIPSETTING( 0x0600, DEF_STR( 2C_1C ) ) | |
| 636 | PORT_DIPSETTING( 0x0e00, DEF_STR( 1C_1C ) ) | |
| 637 | PORT_DIPSETTING( 0x0a00, DEF_STR( 2C_3C ) ) | |
| 638 | PORT_DIPSETTING( 0x0c00, DEF_STR( 1C_2C ) ) | |
| 639 | PORT_DIPSETTING( 0x0800, DEF_STR( 1C_3C ) ) | |
| 640 | PORT_DIPNAME( 0x7000, 0x7000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:5,6,7") | |
| 641 | PORT_DIPSETTING( 0x2000, "Level 1" ) | |
| 642 | PORT_DIPSETTING( 0x1000, "Level 2" ) | |
| 643 | PORT_DIPSETTING( 0x0000, "Level 3" ) | |
| 644 | PORT_DIPSETTING( 0x7000, "Level 4" ) | |
| 645 | PORT_DIPSETTING( 0x6000, "Level 5" ) | |
| 646 | PORT_DIPSETTING( 0x5000, "Level 6" ) | |
| 647 | PORT_DIPSETTING( 0x4000, "Level 7" ) | |
| 648 | PORT_DIPSETTING( 0x3000, "Level 8" ) | |
| 649 | PORT_SERVICE_DIPLOC( 0x8000, IP_ACTIVE_LOW, "SW1:8" ) | |
| 650 | 650 | INPUT_PORTS_END |
| 651 | 651 | |
| 652 | 652 | |
| r242703 | r242704 | |
| 1073 | 1073 | GAME( 1997, baryon, 0, baryon, baryon, driver_device, 0, ROT270, "SemiCom", "Baryon - Future Assault (set 1)", GAME_SUPPORTS_SAVE ) |
| 1074 | 1074 | GAME( 1997, baryona, baryon, baryon, baryon, driver_device, 0, ROT270, "SemiCom", "Baryon - Future Assault (set 2)", GAME_SUPPORTS_SAVE ) |
| 1075 | 1075 | GAME( 1998, cutefght, 0, dreamwld, cutefght, driver_device, 0, ROT0, "SemiCom", "Cute Fighter", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) // wrong linescroll? |
| 1076 | GAME( 1999, rolcrush, 0, baryon, rolcrush, driver_device, 0, ROT0, "Trust / SemiCom", "Rolling Crush (version 1.07.E - 1999/02/11)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) // wrong | |
| 1076 | GAME( 1999, rolcrush, 0, baryon, rolcrush, driver_device, 0, ROT0, "Trust / SemiCom", "Rolling Crush (version 1.07.E - 1999/02/11)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) // wrong | |
| 1077 | 1077 | GAME( 2000, dreamwld, 0, dreamwld, dreamwld, driver_device, 0, ROT0, "SemiCom", "Dream World", GAME_SUPPORTS_SAVE ) |
| r242703 | r242704 | |
|---|---|---|
| 786 | 786 | MCFG_ECOIN_200STEP_ADD("reel2") |
| 787 | 787 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(ecoinfr_state, reel2_optic_cb)) |
| 788 | 788 | MCFG_ECOIN_200STEP_ADD("reel3") |
| 789 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(ecoinfr_state, reel3_optic_cb)) | |
| 789 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(ecoinfr_state, reel3_optic_cb)) | |
| 790 | 790 | MACHINE_CONFIG_END |
| 791 | 791 | |
| 792 | 792 |
| r242703 | r242704 | |
|---|---|---|
| 27 | 27 | |
| 28 | 28 | /* devices */ |
| 29 | 29 | required_device<e132xn_device> m_maincpu; |
| 30 | ||
| 30 | ||
| 31 | 31 | /* memory pointers */ |
| 32 | 32 | required_shared_ptr<UINT32> m_videoram; |
| 33 | ||
| 33 | ||
| 34 | 34 | DECLARE_READ32_MEMBER(f32_input_port_1_r); |
| 35 | 35 | UINT32 screen_update_mosaicf2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 36 | 36 | }; |
| r242703 | r242704 | |
|---|---|---|
| 71 | 71 | PISCES - NEC uPD78324 series MCU with 32k internal rom. Clock 13.500MHz [27/2] on pins 51 & 52 |
| 72 | 72 | VSync - 59.1856Hz |
| 73 | 73 | HSync - 15.625kHz |
| 74 | ||
| 74 | ||
| 75 | 75 | (TODO: VTOTAL = 264, HTOTAL = 432, pixel clock 27 MHz / 4) |
| 76 | ||
| 76 | ||
| 77 | 77 | ***************************************************************************/ |
| 78 | 78 | |
| 79 | 79 | #include "emu.h" |
| r242703 | r242704 | |
| 346 | 346 | AM_RANGE(0x300000, 0x301fff) AM_RAM // ? |
| 347 | 347 | AM_RANGE(0x302000, 0x303fff) AM_RAM AM_SHARE("spriteram") // Sprites |
| 348 | 348 | AM_RANGE(0x304000, 0x30401f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w) |
| 349 | // AM_RANGE(0x308000, 0x308001) AM_WRITENOP // ? 0 at startup | |
| 350 | // AM_RANGE(0x30c000, 0x30c001) AM_WRITENOP // ? hblank effect ? | |
| 349 | // AM_RANGE(0x308000, 0x308001) AM_WRITENOP // ? 0 at startup | |
| 350 | // AM_RANGE(0x30c000, 0x30c001) AM_WRITENOP // ? hblank effect ? | |
| 351 | 351 | AM_RANGE(0x310000, 0x3101ff) AM_RAM_DEVWRITE("bg8palette", palette_device, write) AM_SHARE("bg8palette") // ? |
| 352 | 352 | AM_RANGE(0x314000, 0x314001) AM_WRITENOP // ? flip backgrounds ? |
| 353 | 353 | AM_RANGE(0x318000, 0x318001) AM_READWRITE(galpani2_eeprom_r, galpani2_eeprom_w) // EEPROM |
| 354 | 354 | AM_RANGE(0x380000, 0x387fff) AM_RAM // Palette? |
| 355 | 355 | AM_RANGE(0x388000, 0x38ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // Palette |
| 356 | // | |
| 356 | // AM_RANGE(0x390000, 0x3901ff) AM_WRITENOP // ? at startup of service mode | |
| 357 | 357 | |
| 358 | 358 | AM_RANGE(0x400000, 0x43ffff) AM_RAM AM_SHARE("bg8.0") // Background 0 |
| 359 | 359 | AM_RANGE(0x440000, 0x440001) AM_RAM AM_SHARE("bg8_scrollx.0") // Background 0 Scroll X |
| 360 | 360 | AM_RANGE(0x480000, 0x480001) AM_RAM AM_SHARE("bg8_scrolly.0") // Background 0 Scroll Y |
| 361 | // | |
| 361 | // AM_RANGE(0x4c0000, 0x4c0001) AM_WRITENOP // ? 0 at startup only | |
| 362 | 362 | AM_RANGE(0x500000, 0x53ffff) AM_RAM AM_SHARE("bg8.1") // Background 1 |
| 363 | 363 | AM_RANGE(0x540000, 0x540001) AM_RAM AM_SHARE("bg8_scrollx.1") // Background 1 Scroll X |
| 364 | 364 | AM_RANGE(0x580000, 0x580001) AM_RAM AM_SHARE("bg8_scrolly.1") // Background 1 Scroll Y |
| 365 | // | |
| 365 | // AM_RANGE(0x5c0000, 0x5c0001) AM_WRITENOP // ? 0 at startup only | |
| 366 | 366 | |
| 367 | 367 | AM_RANGE(0x540572, 0x540573) AM_READNOP // ? galpani2 at F0A4 |
| 368 | 368 | AM_RANGE(0x54057a, 0x54057b) AM_READNOP // ? galpani2 at F148 |
| r242703 | r242704 | |
| 411 | 411 | AM_RANGE(0x000000, 0x03ffff) AM_ROM // ROM |
| 412 | 412 | AM_RANGE(0x100000, 0x13ffff) AM_RAM AM_SHARE("ram2") // Work RAM |
| 413 | 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 | |
| 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 | 418 | AM_RANGE(0x700000, 0x700001) AM_NOP // Watchdog |
| 419 | 419 | // AM_RANGE(0x740000, 0x740001) AM_WRITENOP // ? Reset mcu |
| 420 | 420 | AM_RANGE(0x780000, 0x780001) AM_WRITE8(galpani2_mcu_nmi2_w, 0x00ff) // ? 0 -> 1 -> 0 (lev 5) |
| r242703 | r242704 | |
| 520 | 520 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) |
| 521 | 521 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 522 | 522 | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 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! | |
| 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! | |
| 524 | 524 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_TILT ) |
| 525 | 525 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 526 | 526 |
| r242703 | r242704 | |
|---|---|---|
| 84 | 84 | class gts1_state : public genpin_class |
| 85 | 85 | { |
| 86 | 86 | public: |
| 87 | gts1_state(const machine_config &mconfig, device_type type, const char *tag) | |
| 88 | : genpin_class(mconfig, type, tag) | |
| 89 | , m_maincpu(*this, "maincpu") | |
| 90 | , m_switches(*this, "X") | |
| 91 | { } | |
| 87 | gts1_state(const machine_config &mconfig, device_type type, const char *tag) | |
| 88 | : genpin_class(mconfig, type, tag) | |
| 89 | , m_maincpu(*this, "maincpu") | |
| 90 | , m_switches(*this, "X") | |
| 91 | { } | |
| 92 | 92 | |
| 93 | ||
| 93 | DECLARE_DRIVER_INIT(gts1); | |
| 94 | 94 | |
| 95 | DECLARE_READ8_MEMBER (gts1_solenoid_r); | |
| 96 | DECLARE_WRITE8_MEMBER(gts1_solenoid_w); | |
| 97 | DECLARE_READ8_MEMBER (gts1_switches_r); | |
| 98 | DECLARE_WRITE8_MEMBER(gts1_switches_w); | |
| 99 | DECLARE_WRITE8_MEMBER(gts1_display_w); | |
| 100 | DECLARE_READ8_MEMBER (gts1_lamp_apm_r); | |
| 101 | DECLARE_WRITE8_MEMBER(gts1_lamp_apm_w); | |
| 102 | DECLARE_READ8_MEMBER (gts1_nvram_r); | |
| 103 | DECLARE_WRITE8_MEMBER(gts1_nvram_w); | |
| 104 | DECLARE_READ8_MEMBER (gts1_io_r); | |
| 105 | DECLARE_WRITE8_MEMBER(gts1_io_w); | |
| 106 | DECLARE_READ8_MEMBER (gts1_pa_r); | |
| 107 | DECLARE_WRITE8_MEMBER(gts1_pa_w); | |
| 108 | DECLARE_WRITE8_MEMBER(gts1_pb_w); | |
| 95 | DECLARE_READ8_MEMBER (gts1_solenoid_r); | |
| 96 | DECLARE_WRITE8_MEMBER(gts1_solenoid_w); | |
| 97 | DECLARE_READ8_MEMBER (gts1_switches_r); | |
| 98 | DECLARE_WRITE8_MEMBER(gts1_switches_w); | |
| 99 | DECLARE_WRITE8_MEMBER(gts1_display_w); | |
| 100 | DECLARE_READ8_MEMBER (gts1_lamp_apm_r); | |
| 101 | DECLARE_WRITE8_MEMBER(gts1_lamp_apm_w); | |
| 102 | DECLARE_READ8_MEMBER (gts1_nvram_r); | |
| 103 | DECLARE_WRITE8_MEMBER(gts1_nvram_w); | |
| 104 | DECLARE_READ8_MEMBER (gts1_io_r); | |
| 105 | DECLARE_WRITE8_MEMBER(gts1_io_w); | |
| 106 | DECLARE_READ8_MEMBER (gts1_pa_r); | |
| 107 | DECLARE_WRITE8_MEMBER(gts1_pa_w); | |
| 108 | DECLARE_WRITE8_MEMBER(gts1_pb_w); | |
| 109 | 109 | private: |
| 110 | virtual void machine_reset(); | |
| 111 | required_device<cpu_device> m_maincpu; | |
| 112 | required_ioport_array<5> m_switches; | |
| 113 | UINT8 m_strobe; //!< switches strobe lines (5 lower bits used) | |
| 114 | UINT8 m_nvram_addr; //!< NVRAM address | |
| 115 | bool m_nvram_e2; //!< NVRWAM enable (E2 line) | |
| 116 | bool m_nvram_wr; //!< NVRWAM write (W/R line) | |
| 117 | UINT16 m_6351_addr; //!< ROM MM6351 address (12 bits) | |
| 118 | UINT16 m_z30_out; //!< 4-to-16 decoder outputs | |
| 110 | virtual void machine_reset(); | |
| 111 | required_device<cpu_device> m_maincpu; | |
| 112 | required_ioport_array<5> m_switches; | |
| 113 | UINT8 m_strobe; //!< switches strobe lines (5 lower bits used) | |
| 114 | UINT8 m_nvram_addr; //!< NVRAM address | |
| 115 | bool m_nvram_e2; //!< NVRWAM enable (E2 line) | |
| 116 | bool m_nvram_wr; //!< NVRWAM write (W/R line) | |
| 117 | UINT16 m_6351_addr; //!< ROM MM6351 address (12 bits) | |
| 118 | UINT16 m_z30_out; //!< 4-to-16 decoder outputs | |
| 119 | 119 | }; |
| 120 | 120 | |
| 121 | 121 | static ADDRESS_MAP_START( gts1_map, AS_PROGRAM, 8, gts1_state ) |
| 122 | ||
| 122 | AM_RANGE(0x0000, 0x0fff) AM_ROM | |
| 123 | 123 | ADDRESS_MAP_END |
| 124 | 124 | |
| 125 | 125 | static ADDRESS_MAP_START( gts1_data, AS_DATA, 8, gts1_state ) |
| 126 | AM_RANGE(0x0000, 0x00ff) AM_RAM | |
| 127 | AM_RANGE(0x0100, 0x01ff) AM_RAM AM_SHARE("nvram") | |
| 126 | AM_RANGE(0x0000, 0x00ff) AM_RAM | |
| 127 | AM_RANGE(0x0100, 0x01ff) AM_RAM AM_SHARE("nvram") | |
| 128 | 128 | ADDRESS_MAP_END |
| 129 | 129 | |
| 130 | 130 | static ADDRESS_MAP_START( gts1_io, AS_IO, 8, gts1_state ) |
| 131 | AM_RANGE(0x0020, 0x002f) AM_DEVREADWRITE ( "u4", ra17xx_device, io_r, io_w ) // (U4) solenoid | |
| 132 | AM_RANGE(0x0030, 0x003f) AM_DEVREADWRITE ( "u3", r10696_device, io_r, io_w ) // (U3) solenoid + dips | |
| 133 | AM_RANGE(0x0040, 0x004f) AM_DEVREADWRITE ( "u5", ra17xx_device, io_r, io_w ) // (U5) switch matrix | |
| 134 | AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE ( "u2", r10696_device, io_r, io_w ) // (U2) NVRAM io chip | |
| 135 | AM_RANGE(0x00d0, 0x00df) AM_DEVREADWRITE ( "u6", r10788_device, io_r, io_w ) // (U6) display chip | |
| 136 | AM_RANGE(0x0000, 0x00ff) AM_READ ( gts1_io_r ) AM_WRITE( gts1_io_w ) // catch undecoded I/O accesss | |
| 137 | AM_RANGE(0x0100, 0x0100) AM_READ ( gts1_pa_r ) AM_WRITE( gts1_pa_w ) // CPU I/O port A (input/output) | |
| 138 | AM_RANGE(0x0101, 0x0101) AM_WRITE( gts1_pb_w ) // CPU I/O port B (output only) | |
| 131 | AM_RANGE(0x0020, 0x002f) AM_DEVREADWRITE ( "u4", ra17xx_device, io_r, io_w ) // (U4) solenoid | |
| 132 | AM_RANGE(0x0030, 0x003f) AM_DEVREADWRITE ( "u3", r10696_device, io_r, io_w ) // (U3) solenoid + dips | |
| 133 | AM_RANGE(0x0040, 0x004f) AM_DEVREADWRITE ( "u5", ra17xx_device, io_r, io_w ) // (U5) switch matrix | |
| 134 | AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE ( "u2", r10696_device, io_r, io_w ) // (U2) NVRAM io chip | |
| 135 | AM_RANGE(0x00d0, 0x00df) AM_DEVREADWRITE ( "u6", r10788_device, io_r, io_w ) // (U6) display chip | |
| 136 | AM_RANGE(0x0000, 0x00ff) AM_READ ( gts1_io_r ) AM_WRITE( gts1_io_w ) // catch undecoded I/O accesss | |
| 137 | AM_RANGE(0x0100, 0x0100) AM_READ ( gts1_pa_r ) AM_WRITE( gts1_pa_w ) // CPU I/O port A (input/output) | |
| 138 | AM_RANGE(0x0101, 0x0101) AM_WRITE( gts1_pb_w ) // CPU I/O port B (output only) | |
| 139 | 139 | ADDRESS_MAP_END |
| 140 | 140 | |
| 141 | 141 | static INPUT_PORTS_START( gts1_dips ) |
| 142 | PORT_START("DSW0") | |
| 143 | PORT_DIPNAME( 0x01, 0x00, "S01") | |
| 144 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 145 | PORT_DIPSETTING( 0x01, DEF_STR( On )) | |
| 146 | PORT_DIPNAME( 0x02, 0x00, "S02") | |
| 147 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 148 | PORT_DIPSETTING( 0x02, DEF_STR( On )) | |
| 149 | PORT_DIPNAME( 0x04, 0x00, "S03") | |
| 150 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 151 | PORT_DIPSETTING( 0x04, DEF_STR( On )) | |
| 152 | PORT_DIPNAME( 0x08, 0x00, "S04") | |
| 153 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 154 | PORT_DIPSETTING( 0x08, DEF_STR( On )) | |
| 155 | PORT_DIPNAME( 0x10, 0x00, "S05") | |
| 156 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 157 | PORT_DIPSETTING( 0x10, DEF_STR( On )) | |
| 158 | PORT_DIPNAME( 0x20, 0x20, "S06") | |
| 159 | PORT_DIPSETTING( 0x00, DEF_STR( No )) | |
| 160 | PORT_DIPSETTING( 0x20, DEF_STR( Yes )) | |
| 161 | PORT_DIPNAME( 0x40, 0x40, "S07") | |
| 162 | PORT_DIPSETTING( 0x00, DEF_STR( No )) | |
| 163 | PORT_DIPSETTING( 0x40, DEF_STR( Yes )) | |
| 164 | PORT_DIPNAME( 0x80, 0x80, "S08") | |
| 165 | PORT_DIPSETTING( 0x00, DEF_STR( No )) | |
| 166 | PORT_DIPSETTING( 0x80, DEF_STR( Yes )) | |
| 142 | PORT_START("DSW0") | |
| 143 | PORT_DIPNAME( 0x01, 0x00, "S01") | |
| 144 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 145 | PORT_DIPSETTING( 0x01, DEF_STR( On )) | |
| 146 | PORT_DIPNAME( 0x02, 0x00, "S02") | |
| 147 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 148 | PORT_DIPSETTING( 0x02, DEF_STR( On )) | |
| 149 | PORT_DIPNAME( 0x04, 0x00, "S03") | |
| 150 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 151 | PORT_DIPSETTING( 0x04, DEF_STR( On )) | |
| 152 | PORT_DIPNAME( 0x08, 0x00, "S04") | |
| 153 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 154 | PORT_DIPSETTING( 0x08, DEF_STR( On )) | |
| 155 | PORT_DIPNAME( 0x10, 0x00, "S05") | |
| 156 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 157 | PORT_DIPSETTING( 0x10, DEF_STR( On )) | |
| 158 | PORT_DIPNAME( 0x20, 0x20, "S06") | |
| 159 | PORT_DIPSETTING( 0x00, DEF_STR( No )) | |
| 160 | PORT_DIPSETTING( 0x20, DEF_STR( Yes )) | |
| 161 | PORT_DIPNAME( 0x40, 0x40, "S07") | |
| 162 | PORT_DIPSETTING( 0x00, DEF_STR( No )) | |
| 163 | PORT_DIPSETTING( 0x40, DEF_STR( Yes )) | |
| 164 | PORT_DIPNAME( 0x80, 0x80, "S08") | |
| 165 | PORT_DIPSETTING( 0x00, DEF_STR( No )) | |
| 166 | PORT_DIPSETTING( 0x80, DEF_STR( Yes )) | |
| 167 | 167 | |
| 168 | PORT_START("DSW1") | |
| 169 | PORT_DIPNAME( 0x01, 0x00, "S09") | |
| 170 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 171 | PORT_DIPSETTING( 0x01, DEF_STR( On )) | |
| 172 | PORT_DIPNAME( 0x02, 0x00, "S10") | |
| 173 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 174 | PORT_DIPSETTING( 0x02, DEF_STR( On )) | |
| 175 | PORT_DIPNAME( 0x04, 0x00, "S11") | |
| 176 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 177 | PORT_DIPSETTING( 0x04, DEF_STR( On )) | |
| 178 | PORT_DIPNAME( 0x08, 0x00, "S12") | |
| 179 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 180 | PORT_DIPSETTING( 0x08, DEF_STR( On )) | |
| 181 | PORT_DIPNAME( 0x10, 0x00, "S13") | |
| 182 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 183 | PORT_DIPSETTING( 0x10, DEF_STR( On )) | |
| 184 | PORT_DIPNAME( 0x20, 0x00, "S14") | |
| 185 | PORT_DIPSETTING( 0x00, DEF_STR( Yes )) | |
| 186 | PORT_DIPSETTING( 0x20, DEF_STR( No )) | |
| 187 | PORT_DIPNAME( 0x40, 0x40, "S15") | |
| 188 | PORT_DIPSETTING( 0x00, DEF_STR( No )) | |
| 189 | PORT_DIPSETTING( 0x40, DEF_STR( Yes )) | |
| 190 | PORT_DIPNAME( 0x80, 0x00, "S16") | |
| 191 | PORT_DIPSETTING( 0x00, DEF_STR( No )) | |
| 192 | PORT_DIPSETTING( 0x80, DEF_STR( Yes )) | |
| 168 | PORT_START("DSW1") | |
| 169 | PORT_DIPNAME( 0x01, 0x00, "S09") | |
| 170 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 171 | PORT_DIPSETTING( 0x01, DEF_STR( On )) | |
| 172 | PORT_DIPNAME( 0x02, 0x00, "S10") | |
| 173 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 174 | PORT_DIPSETTING( 0x02, DEF_STR( On )) | |
| 175 | PORT_DIPNAME( 0x04, 0x00, "S11") | |
| 176 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 177 | PORT_DIPSETTING( 0x04, DEF_STR( On )) | |
| 178 | PORT_DIPNAME( 0x08, 0x00, "S12") | |
| 179 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 180 | PORT_DIPSETTING( 0x08, DEF_STR( On )) | |
| 181 | PORT_DIPNAME( 0x10, 0x00, "S13") | |
| 182 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 183 | PORT_DIPSETTING( 0x10, DEF_STR( On )) | |
| 184 | PORT_DIPNAME( 0x20, 0x00, "S14") | |
| 185 | PORT_DIPSETTING( 0x00, DEF_STR( Yes )) | |
| 186 | PORT_DIPSETTING( 0x20, DEF_STR( No )) | |
| 187 | PORT_DIPNAME( 0x40, 0x40, "S15") | |
| 188 | PORT_DIPSETTING( 0x00, DEF_STR( No )) | |
| 189 | PORT_DIPSETTING( 0x40, DEF_STR( Yes )) | |
| 190 | PORT_DIPNAME( 0x80, 0x00, "S16") | |
| 191 | PORT_DIPSETTING( 0x00, DEF_STR( No )) | |
| 192 | PORT_DIPSETTING( 0x80, DEF_STR( Yes )) | |
| 193 | 193 | |
| 194 | PORT_START("DSW2") | |
| 195 | PORT_DIPNAME( 0x01, 0x00, "S17") | |
| 196 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 197 | PORT_DIPSETTING( 0x01, DEF_STR( On )) | |
| 198 | PORT_DIPNAME( 0x02, 0x00, "S18") | |
| 199 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 200 | PORT_DIPSETTING( 0x02, DEF_STR( On )) | |
| 201 | PORT_DIPNAME( 0x04, 0x00, "S19") | |
| 202 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 203 | PORT_DIPSETTING( 0x04, DEF_STR( On )) | |
| 204 | PORT_DIPNAME( 0x08, 0x00, "S20") | |
| 205 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 206 | PORT_DIPSETTING( 0x08, DEF_STR( On )) | |
| 207 | PORT_DIPNAME( 0x10, 0x00, "S21") | |
| 208 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 209 | PORT_DIPSETTING( 0x10, DEF_STR( On )) | |
| 210 | PORT_DIPNAME( 0x20, 0x00, "S22") | |
| 211 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 212 | PORT_DIPSETTING( 0x20, DEF_STR( On )) | |
| 213 | PORT_DIPNAME( 0x40, 0x00, "S23") | |
| 214 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 215 | PORT_DIPSETTING( 0x40, DEF_STR( On )) | |
| 216 | PORT_DIPNAME( 0x80, 0x00, "S24") | |
| 217 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 218 | PORT_DIPSETTING( 0x80, DEF_STR( On )) | |
| 194 | PORT_START("DSW2") | |
| 195 | PORT_DIPNAME( 0x01, 0x00, "S17") | |
| 196 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 197 | PORT_DIPSETTING( 0x01, DEF_STR( On )) | |
| 198 | PORT_DIPNAME( 0x02, 0x00, "S18") | |
| 199 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 200 | PORT_DIPSETTING( 0x02, DEF_STR( On )) | |
| 201 | PORT_DIPNAME( 0x04, 0x00, "S19") | |
| 202 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 203 | PORT_DIPSETTING( 0x04, DEF_STR( On )) | |
| 204 | PORT_DIPNAME( 0x08, 0x00, "S20") | |
| 205 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 206 | PORT_DIPSETTING( 0x08, DEF_STR( On )) | |
| 207 | PORT_DIPNAME( 0x10, 0x00, "S21") | |
| 208 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 209 | PORT_DIPSETTING( 0x10, DEF_STR( On )) | |
| 210 | PORT_DIPNAME( 0x20, 0x00, "S22") | |
| 211 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 212 | PORT_DIPSETTING( 0x20, DEF_STR( On )) | |
| 213 | PORT_DIPNAME( 0x40, 0x00, "S23") | |
| 214 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 215 | PORT_DIPSETTING( 0x40, DEF_STR( On )) | |
| 216 | PORT_DIPNAME( 0x80, 0x00, "S24") | |
| 217 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) | |
| 218 | PORT_DIPSETTING( 0x80, DEF_STR( On )) | |
| 219 | 219 | INPUT_PORTS_END |
| 220 | 220 | |
| 221 | 221 | static INPUT_PORTS_START( gts1_switches ) |
| 222 | PORT_START("X.0") | |
| 223 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) | |
| 224 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) | |
| 225 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) | |
| 226 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) | |
| 227 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) | |
| 228 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) | |
| 229 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 230 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 231 | PORT_START("X.1") | |
| 232 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) | |
| 233 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) | |
| 234 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) | |
| 235 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) | |
| 236 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) | |
| 237 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) | |
| 238 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 239 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 240 | PORT_START("X.2") | |
| 241 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) | |
| 242 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) | |
| 243 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) | |
| 244 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) | |
| 245 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) | |
| 246 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) | |
| 247 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 248 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 249 | PORT_START("X.3") | |
| 250 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) | |
| 251 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) | |
| 252 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) | |
| 253 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) | |
| 254 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) | |
| 255 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) | |
| 256 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 257 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 258 | PORT_START("X.4") | |
| 259 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) | |
| 260 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) | |
| 261 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) | |
| 262 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) | |
| 263 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) | |
| 264 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) | |
| 265 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 266 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 222 | PORT_START("X.0") | |
| 223 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) | |
| 224 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) | |
| 225 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) | |
| 226 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) | |
| 227 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) | |
| 228 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) | |
| 229 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 230 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 231 | PORT_START("X.1") | |
| 232 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) | |
| 233 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) | |
| 234 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) | |
| 235 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) | |
| 236 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) | |
| 237 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) | |
| 238 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 239 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 240 | PORT_START("X.2") | |
| 241 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) | |
| 242 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) | |
| 243 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) | |
| 244 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) | |
| 245 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) | |
| 246 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) | |
| 247 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 248 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 249 | PORT_START("X.3") | |
| 250 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) | |
| 251 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) | |
| 252 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) | |
| 253 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) | |
| 254 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) | |
| 255 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) | |
| 256 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 257 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 258 | PORT_START("X.4") | |
| 259 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) | |
| 260 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) | |
| 261 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) | |
| 262 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) | |
| 263 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) | |
| 264 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) | |
| 265 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 266 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 267 | 267 | INPUT_PORTS_END |
| 268 | 268 | |
| 269 | 269 | static INPUT_PORTS_START( gts1 ) |
| 270 | ||
| 270 | PORT_INCLUDE( gts1_dips ) | |
| 271 | 271 | |
| 272 | ||
| 272 | PORT_INCLUDE( gts1_switches ) | |
| 273 | 273 | INPUT_PORTS_END |
| 274 | 274 | |
| 275 | 275 | static INPUT_PORTS_START( jokrpokr ) |
| 276 | ||
| 276 | PORT_INCLUDE( gts1_dips ) | |
| 277 | 277 | |
| 278 | PORT_START("X.0") | |
| 279 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("PLAY/TEST") | |
| 280 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("POP/BUMBER") | |
| 281 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("EXTRA BALL TARGET") | |
| 282 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SPECIAL ROLLOVER") | |
| 283 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("10 POINT CONTACTS") | |
| 284 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (red)") | |
| 285 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 286 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 278 | PORT_START("X.0") | |
| 279 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("PLAY/TEST") | |
| 280 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("POP/BUMBER") | |
| 281 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("EXTRA BALL TARGET") | |
| 282 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SPECIAL ROLLOVER") | |
| 283 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("10 POINT CONTACTS") | |
| 284 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (red)") | |
| 285 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 286 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 287 | 287 | |
| 288 | PORT_START("X.1") | |
| 289 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("#1 COIN CHUTE") | |
| 290 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" ROLLOVER") | |
| 291 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"10\" DROP TARGET") | |
| 292 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"Q\" DROP TARGET (red)") | |
| 293 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET (black)") | |
| 294 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (black)") | |
| 295 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 296 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 288 | PORT_START("X.1") | |
| 289 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("#1 COIN CHUTE") | |
| 290 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" ROLLOVER") | |
| 291 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"10\" DROP TARGET") | |
| 292 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"Q\" DROP TARGET (red)") | |
| 293 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET (black)") | |
| 294 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (black)") | |
| 295 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 296 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 297 | 297 | |
| 298 | PORT_START("X.2") | |
| 299 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("#2 COIN CHUTE") | |
| 300 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"B\" ROLLOVER") | |
| 301 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"J\" DROP TARGET (black)") | |
| 302 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"O\" DROP TARGET (black)") | |
| 303 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET") | |
| 304 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("JOKER DROP TARGET") | |
| 305 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 306 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 298 | PORT_START("X.2") | |
| 299 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("#2 COIN CHUTE") | |
| 300 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"B\" ROLLOVER") | |
| 301 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"J\" DROP TARGET (black)") | |
| 302 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"O\" DROP TARGET (black)") | |
| 303 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET") | |
| 304 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("JOKER DROP TARGET") | |
| 305 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 306 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 307 | 307 | |
| 308 | PORT_START("X.3") | |
| 309 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("REPLAY BUTTON") | |
| 310 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"C\" ROLLOVER") | |
| 311 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"J\" DROP TARGET (red)") | |
| 312 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"O\" DROP TARGET (red)") | |
| 313 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET") | |
| 314 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (red)") | |
| 315 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 316 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 308 | PORT_START("X.3") | |
| 309 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("REPLAY BUTTON") | |
| 310 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"C\" ROLLOVER") | |
| 311 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"J\" DROP TARGET (red)") | |
| 312 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"O\" DROP TARGET (red)") | |
| 313 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET") | |
| 314 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (red)") | |
| 315 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 316 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 317 | 317 | |
| 318 | PORT_START("X.4") | |
| 319 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TILT PANEL") | |
| 320 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) | |
| 321 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) | |
| 322 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) | |
| 323 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET") | |
| 324 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (red)") | |
| 325 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 326 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 318 | PORT_START("X.4") | |
| 319 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TILT PANEL") | |
| 320 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) | |
| 321 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) | |
| 322 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) | |
| 323 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET") | |
| 324 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (red)") | |
| 325 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) | |
| 326 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) | |
| 327 | 327 | INPUT_PORTS_END |
| 328 | 328 | |
| 329 | 329 | void gts1_state::machine_reset() |
| 330 | 330 | { |
| 331 | m_strobe = 0; | |
| 332 | m_nvram_addr = 0; | |
| 333 | m_nvram_e2 = false; | |
| 334 | m_nvram_wr = false; | |
| 335 | m_6351_addr = 0; | |
| 336 | m_z30_out = 0; | |
| 331 | m_strobe = 0; | |
| 332 | m_nvram_addr = 0; | |
| 333 | m_nvram_e2 = false; | |
| 334 | m_nvram_wr = false; | |
| 335 | m_6351_addr = 0; | |
| 336 | m_z30_out = 0; | |
| 337 | 337 | } |
| 338 | 338 | |
| 339 | 339 | DRIVER_INIT_MEMBER(gts1_state,gts1) |
| r242703 | r242704 | |
| 342 | 342 | |
| 343 | 343 | READ8_MEMBER (gts1_state::gts1_solenoid_r) |
| 344 | 344 | { |
| 345 | UINT8 data = 0; | |
| 346 | LOG(("%s: solenoid[%02x] -> %x\n", __FUNCTION__, offset, data)); | |
| 347 | return data; | |
| 345 | UINT8 data = 0; | |
| 346 | LOG(("%s: solenoid[%02x] -> %x\n", __FUNCTION__, offset, data)); | |
| 347 | return data; | |
| 348 | 348 | } |
| 349 | 349 | |
| 350 | 350 | WRITE8_MEMBER(gts1_state::gts1_solenoid_w) |
| 351 | 351 | { |
| 352 | switch (offset) | |
| 353 | { | |
| 354 | case 0: | |
| 355 | LOG(("%s: outhole <- %x\n", __FUNCTION__, data)); | |
| 356 | break; | |
| 357 | case 1: | |
| 358 | LOG(("%s: knocker <- %x\n", __FUNCTION__, data)); | |
| 359 | break; | |
| 360 | case 2: | |
| 361 | LOG(("%s: tens chime <- %x\n", __FUNCTION__, data)); | |
| 362 | break; | |
| 363 | case 3: | |
| 364 | LOG(("%s: hundreds chime <- %x\n", __FUNCTION__, data)); | |
| 365 | break; | |
| 366 | case 4: | |
| 367 | LOG(("%s: thousands chime <- %x\n", __FUNCTION__, data)); | |
| 368 | break; | |
| 369 | case 5: | |
| 370 | LOG(("%s: no. 6 <- %x\n", __FUNCTION__, data)); | |
| 371 | break; | |
| 372 | case 6: | |
| 373 | LOG(("%s: no. 7 <- %x\n", __FUNCTION__, data)); | |
| 374 | break; | |
| 375 | case 7: | |
| 376 | LOG(("%s: no. 8 <- %x\n", __FUNCTION__, data)); | |
| 377 | break; | |
| 378 | case 8: case 9: case 10: case 11: | |
| 379 | LOG(("%s: not used [%x] <- %x\n", __FUNCTION__, offset, data)); | |
| 380 | break; | |
| 381 | case 12: // spare | |
| 382 | LOG(("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data)); | |
| 383 | break; | |
| 384 | case 13: // RAM control E2 | |
| 385 | LOG(("%s: RAM control E2 <- %x\n", __FUNCTION__, data)); | |
| 386 | m_nvram_e2 = (data & 1) ? true : false; | |
| 387 | break; | |
| 388 | case 14: // RAM control W/R | |
| 389 | LOG(("%s: RAM control W/R <- %x\n", __FUNCTION__, data)); | |
| 390 | break; | |
| 391 | m_nvram_wr = (data & 1) ? true : false; | |
| 392 | case 15: // spare | |
| 393 | LOG(("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data)); | |
| 394 | break; | |
| 395 | } | |
| 352 | switch (offset) | |
| 353 | { | |
| 354 | case 0: | |
| 355 | LOG(("%s: outhole <- %x\n", __FUNCTION__, data)); | |
| 356 | break; | |
| 357 | case 1: | |
| 358 | LOG(("%s: knocker <- %x\n", __FUNCTION__, data)); | |
| 359 | break; | |
| 360 | case 2: | |
| 361 | LOG(("%s: tens chime <- %x\n", __FUNCTION__, data)); | |
| 362 | break; | |
| 363 | case 3: | |
| 364 | LOG(("%s: hundreds chime <- %x\n", __FUNCTION__, data)); | |
| 365 | break; | |
| 366 | case 4: | |
| 367 | LOG(("%s: thousands chime <- %x\n", __FUNCTION__, data)); | |
| 368 | break; | |
| 369 | case 5: | |
| 370 | LOG(("%s: no. 6 <- %x\n", __FUNCTION__, data)); | |
| 371 | break; | |
| 372 | case 6: | |
| 373 | LOG(("%s: no. 7 <- %x\n", __FUNCTION__, data)); | |
| 374 | break; | |
| 375 | case 7: | |
| 376 | LOG(("%s: no. 8 <- %x\n", __FUNCTION__, data)); | |
| 377 | break; | |
| 378 | case 8: case 9: case 10: case 11: | |
| 379 | LOG(("%s: not used [%x] <- %x\n", __FUNCTION__, offset, data)); | |
| 380 | break; | |
| 381 | case 12: // spare | |
| 382 | LOG(("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data)); | |
| 383 | break; | |
| 384 | case 13: // RAM control E2 | |
| 385 | LOG(("%s: RAM control E2 <- %x\n", __FUNCTION__, data)); | |
| 386 | m_nvram_e2 = (data & 1) ? true : false; | |
| 387 | break; | |
| 388 | case 14: // RAM control W/R | |
| 389 | LOG(("%s: RAM control W/R <- %x\n", __FUNCTION__, data)); | |
| 390 | break; | |
| 391 | m_nvram_wr = (data & 1) ? true : false; | |
| 392 | case 15: // spare | |
| 393 | LOG(("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data)); | |
| 394 | break; | |
| 395 | } | |
| 396 | 396 | } |
| 397 | 397 | |
| 398 | 398 | READ8_MEMBER (gts1_state::gts1_switches_r) |
| 399 | 399 | { |
| 400 | UINT8 data = 1; | |
| 401 | if (offset >= 8 && offset < 16) { | |
| 402 | const int bit = offset - 8; | |
| 403 | for (int i = 0; i < 5; i++) { | |
| 404 | if (m_strobe & (1 << i)) { | |
| 405 | data &= BIT(m_switches[i]->read(), bit); | |
| 406 | } | |
| 407 | } | |
| 408 | } | |
| 409 | LOG(("%s: switches[%x,%x] -> %x\n", __FUNCTION__, m_strobe, offset, data)); | |
| 410 | return data; | |
| 400 | UINT8 data = 1; | |
| 401 | if (offset >= 8 && offset < 16) { | |
| 402 | const int bit = offset - 8; | |
| 403 | for (int i = 0; i < 5; i++) { | |
| 404 | if (m_strobe & (1 << i)) { | |
| 405 | data &= BIT(m_switches[i]->read(), bit); | |
| 406 | } | |
| 407 | } | |
| 408 | } | |
| 409 | LOG(("%s: switches[%x,%x] -> %x\n", __FUNCTION__, m_strobe, offset, data)); | |
| 410 | return data; | |
| 411 | 411 | } |
| 412 | 412 | |
| 413 | 413 | WRITE8_MEMBER(gts1_state::gts1_switches_w) |
| 414 | 414 | { |
| 415 | LOG(("%s: switches[%x] <- %x\n", __FUNCTION__, offset, data)); | |
| 416 | if (offset < 5) { | |
| 417 | // outputs O-0 to O-4 are the 5 strobe lines | |
| 418 | m_strobe = (m_strobe & ~(1 << offset)) | ((data & 1) << offset); | |
| 419 | } | |
| 415 | LOG(("%s: switches[%x] <- %x\n", __FUNCTION__, offset, data)); | |
| 416 | if (offset < 5) { | |
| 417 | // outputs O-0 to O-4 are the 5 strobe lines | |
| 418 | m_strobe = (m_strobe & ~(1 << offset)) | ((data & 1) << offset); | |
| 419 | } | |
| 420 | 420 | } |
| 421 | 421 | |
| 422 | 422 | /** |
| r242703 | r242704 | |
| 426 | 426 | */ |
| 427 | 427 | WRITE8_MEMBER(gts1_state::gts1_display_w) |
| 428 | 428 | { |
| 429 | /* | |
| 430 | * The 7448 is modified to be disabled through RI/RBO | |
| 431 | * when the input is 0001, and in this case the extra | |
| 432 | * output H is generated instead. | |
| 433 | */ | |
| 429 | /* | |
| 430 | * The 7448 is modified to be disabled through RI/RBO | |
| 431 | * when the input is 0001, and in this case the extra | |
| 432 | * output H is generated instead. | |
| 433 | */ | |
| 434 | 434 | #define _a (1 << 0) |
| 435 | 435 | #define _b (1 << 1) |
| 436 | 436 | #define _c (1 << 2) |
| r242703 | r242704 | |
| 439 | 439 | #define _f (1 << 5) |
| 440 | 440 | #define _g (1 << 6) |
| 441 | 441 | #define _h (1 << 7) |
| 442 | static const UINT8 ttl7448_mod[16] = { | |
| 443 | /* 0 */ _a | _b | _c | _d | _e | _f, | |
| 444 | /* 1 */ _h, | |
| 445 | /* 2 */ _a | _b | _d | _e | _g, | |
| 446 | /* 3 */ _a | _b | _c | _d | _g, | |
| 447 | /* 4 */ _b | _c | _f | _g, | |
| 448 | /* 5 */ _a | _c | _d | _f | _g, | |
| 449 | /* 6 */ _a | _c | _d | _e | _f | _g, | |
| 450 | /* 7 */ _a | _b | _c, | |
| 451 | /* 8 */ _a | _b | _c | _d | _e | _f | _g, | |
| 452 | /* 9 */ _a | _b | _c | _d | _f | _g, | |
| 453 | /* a */ _d | _e | _g, | |
| 454 | /* b */ _c | _d | _g, | |
| 455 | /* c */ _b | _f | _g, | |
| 456 | /* d */ _a | _d | _f | _g, | |
| 457 | /* e */ _d | _e | _f | _g, | |
| 458 | /* f */ 0 | |
| 459 | }; | |
| 460 | UINT8 a = ttl7448_mod[(data >> 0) & 15]; | |
| 461 | UINT8 b = ttl7448_mod[(data >> 4) & 15]; | |
| 462 | // LOG(("%s: offset:%d data:%02x a:%02x b:%02x\n", __FUNCTION__, offset, data, a, b)); | |
| 463 | if ((offset % 8) < 7) { | |
| 464 | output_set_indexed_value("digit8_", offset, a); | |
| 465 | output_set_indexed_value("digit8_", offset + 16, b); | |
| 466 | } else { | |
| 467 | /* | |
| 468 | * For the 4 7-seg displays the segment h is turned back into | |
| 469 | * segments b and c to display the 7-seg "1". | |
| 470 | */ | |
| 471 | if (a & _h) | |
| 472 | a = _b | _c; | |
| 473 | if (b & _h) | |
| 474 | b = _b | _c; | |
| 475 | output_set_indexed_value("digit7_", offset, a); | |
| 476 | // FIXME: there is nothing on outputs 22, 23, 30 and 31? | |
| 477 | output_set_indexed_value("digit7_", offset + 16, b); | |
| 478 | } | |
| 442 | static const UINT8 ttl7448_mod[16] = { | |
| 443 | /* 0 */ _a | _b | _c | _d | _e | _f, | |
| 444 | /* 1 */ _h, | |
| 445 | /* 2 */ _a | _b | _d | _e | _g, | |
| 446 | /* 3 */ _a | _b | _c | _d | _g, | |
| 447 | /* 4 */ _b | _c | _f | _g, | |
| 448 | /* 5 */ _a | _c | _d | _f | _g, | |
| 449 | /* 6 */ _a | _c | _d | _e | _f | _g, | |
| 450 | /* 7 */ _a | _b | _c, | |
| 451 | /* 8 */ _a | _b | _c | _d | _e | _f | _g, | |
| 452 | /* 9 */ _a | _b | _c | _d | _f | _g, | |
| 453 | /* a */ _d | _e | _g, | |
| 454 | /* b */ _c | _d | _g, | |
| 455 | /* c */ _b | _f | _g, | |
| 456 | /* d */ _a | _d | _f | _g, | |
| 457 | /* e */ _d | _e | _f | _g, | |
| 458 | /* f */ 0 | |
| 459 | }; | |
| 460 | UINT8 a = ttl7448_mod[(data >> 0) & 15]; | |
| 461 | UINT8 b = ttl7448_mod[(data >> 4) & 15]; | |
| 462 | // LOG(("%s: offset:%d data:%02x a:%02x b:%02x\n", __FUNCTION__, offset, data, a, b)); | |
| 463 | if ((offset % 8) < 7) { | |
| 464 | output_set_indexed_value("digit8_", offset, a); | |
| 465 | output_set_indexed_value("digit8_", offset + 16, b); | |
| 466 | } else { | |
| 467 | /* | |
| 468 | * For the 4 7-seg displays the segment h is turned back into | |
| 469 | * segments b and c to display the 7-seg "1". | |
| 470 | */ | |
| 471 | if (a & _h) | |
| 472 | a = _b | _c; | |
| 473 | if (b & _h) | |
| 474 | b = _b | _c; | |
| 475 | output_set_indexed_value("digit7_", offset, a); | |
| 476 | // FIXME: there is nothing on outputs 22, 23, 30 and 31? | |
| 477 | output_set_indexed_value("digit7_", offset + 16, b); | |
| 478 | } | |
| 479 | 479 | #undef _a |
| 480 | 480 | #undef _b |
| 481 | 481 | #undef _c |
| r242703 | r242704 | |
| 493 | 493 | */ |
| 494 | 494 | READ8_MEMBER (gts1_state::gts1_nvram_r) |
| 495 | 495 | { |
| 496 | UINT8 data = 0x0f; | |
| 497 | switch (offset) | |
| 498 | { | |
| 499 | case 0: // group A | |
| 500 | // FIXME: Schematics says TO Z5 | |
| 501 | if (!m_nvram_wr && m_nvram_e2) { | |
| 502 | UINT8* nvram = memregion("nvram")->base(); | |
| 503 | assert(nvram != NULL); | |
| 504 | data = nvram[m_nvram_addr]; | |
| 505 | LOG(("%s: nvram[%02x] -> %x\n", __FUNCTION__, m_nvram_addr, data)); | |
| 506 | } | |
| 507 | break; | |
| 508 | case 1: // group B | |
| 509 | case 2: // group C | |
| 510 | // Schematics says: SPARES | |
| 511 | break; | |
| 512 | } | |
| 513 | return data; | |
| 496 | UINT8 data = 0x0f; | |
| 497 | switch (offset) | |
| 498 | { | |
| 499 | case 0: // group A | |
| 500 | // FIXME: Schematics says TO Z5 | |
| 501 | if (!m_nvram_wr && m_nvram_e2) { | |
| 502 | UINT8* nvram = memregion("nvram")->base(); | |
| 503 | assert(nvram != NULL); | |
| 504 | data = nvram[m_nvram_addr]; | |
| 505 | LOG(("%s: nvram[%02x] -> %x\n", __FUNCTION__, m_nvram_addr, data)); | |
| 506 | } | |
| 507 | break; | |
| 508 | case 1: // group B | |
| 509 | case 2: // group C | |
| 510 | // Schematics says: SPARES | |
| 511 | break; | |
| 512 | } | |
| 513 | return data; | |
| 514 | 514 | } |
| 515 | 515 | |
| 516 | 516 | /** |
| r242703 | r242704 | |
| 520 | 520 | */ |
| 521 | 521 | WRITE8_MEMBER(gts1_state::gts1_nvram_w) |
| 522 | 522 | { |
| 523 | switch (offset) | |
| 524 | { | |
| 525 | case 0: // group A - address lines 3:0 | |
| 526 | m_nvram_addr = (m_nvram_addr & ~15) | (data & 15); | |
| 527 | break; | |
| 528 | case 1: // group B - address lines 7:4 | |
| 529 | m_nvram_addr = (m_nvram_addr & ~(15 << 4)) | ((data & 15) << 4); | |
| 530 | break; | |
| 531 | case 2: // group C - data bits 3:0 of NVRAM | |
| 532 | if (m_nvram_wr && m_nvram_e2) { | |
| 533 | LOG(("%s: nvram[%02x] <- %x\n", __FUNCTION__, m_nvram_addr, data & 15)); | |
| 534 | UINT8* nvram = memregion("nvram")->base(); | |
| 535 | assert(nvram != NULL); | |
| 536 | nvram[m_nvram_addr] = data & 15; | |
| 537 | } | |
| 538 | break; | |
| 539 | } | |
| 523 | switch (offset) | |
| 524 | { | |
| 525 | case 0: // group A - address lines 3:0 | |
| 526 | m_nvram_addr = (m_nvram_addr & ~15) | (data & 15); | |
| 527 | break; | |
| 528 | case 1: // group B - address lines 7:4 | |
| 529 | m_nvram_addr = (m_nvram_addr & ~(15 << 4)) | ((data & 15) << 4); | |
| 530 | break; | |
| 531 | case 2: // group C - data bits 3:0 of NVRAM | |
| 532 | if (m_nvram_wr && m_nvram_e2) { | |
| 533 | LOG(("%s: nvram[%02x] <- %x\n", __FUNCTION__, m_nvram_addr, data & 15)); | |
| 534 | UINT8* nvram = memregion("nvram")->base(); | |
| 535 | assert(nvram != NULL); | |
| 536 | nvram[m_nvram_addr] = data & 15; | |
| 537 | } | |
| 538 | break; | |
| 539 | } | |
| 540 | 540 | } |
| 541 | 541 | |
| 542 | 542 | /** |
| r242703 | r242704 | |
| 546 | 546 | */ |
| 547 | 547 | READ8_MEMBER (gts1_state::gts1_lamp_apm_r) |
| 548 | 548 | { |
| 549 | UINT8 data = 0x0f; | |
| 550 | switch (offset) { | |
| 551 | case 0: // group A switches S01-S04, S09-S12, S17-S20 | |
| 552 | if (m_z30_out & 1) { | |
| 553 | UINT8 dsw0 = ioport("DSW0")->read(); | |
| 554 | if (0 == BIT(dsw0,0)) // S01 | |
| 555 | data &= ~(1 << 3); | |
| 556 | if (0 == BIT(dsw0,1)) // S02 | |
| 557 | data &= ~(1 << 2); | |
| 558 | if (0 == BIT(dsw0,2)) // S03 | |
| 559 | data &= ~(1 << 1); | |
| 560 | if (0 == BIT(dsw0,3)) // S04 | |
| 561 | data &= ~(1 << 0); | |
| 562 | } | |
| 563 | if (m_z30_out & 2) { | |
| 564 | UINT8 dsw1 = ioport("DSW1")->read(); | |
| 565 | if (0 == BIT(dsw1,0)) // S09 | |
| 566 | data &= ~(1 << 0); | |
| 567 | if (0 == BIT(dsw1,1)) // S10 | |
| 568 | data &= ~(1 << 1); | |
| 569 | if (0 == BIT(dsw1,2)) // S11 | |
| 570 | data &= ~(1 << 2); | |
| 571 | if (0 == BIT(dsw1,3)) // S12 | |
| 572 | data &= ~(1 << 3); | |
| 573 | } | |
| 574 | if (m_z30_out & 4) { | |
| 575 | UINT8 dsw2 = ioport("DSW2")->read(); | |
| 576 | if (0 == BIT(dsw2,0)) // S17 | |
| 577 | data &= ~(1 << 0); | |
| 578 | if (0 == BIT(dsw2,1)) // S18 | |
| 579 | data &= ~(1 << 1); | |
| 580 | if (0 == BIT(dsw2,2)) // S19 | |
| 581 | data &= ~(1 << 2); | |
| 582 | if (0 == BIT(dsw2,3)) // S20 | |
| 583 | data &= ~(1 << 3); | |
| 584 | } | |
| 585 | break; | |
| 586 | case 1: // group B switches S05-S08, S09-S12, S17-S20 | |
| 587 | if (m_z30_out & 1) { | |
| 588 | UINT8 dsw0 = ioport("DSW0")->read(); | |
| 589 | if (0 == BIT(dsw0,4)) // S05 | |
| 590 | data &= ~(1 << 3); | |
| 591 | if (0 == BIT(dsw0,5)) // S06 | |
| 592 | data &= ~(1 << 2); | |
| 593 | if (0 == BIT(dsw0,6)) // S07 | |
| 594 | data &= ~(1 << 1); | |
| 595 | if (0 == BIT(dsw0,7)) // S08 | |
| 596 | data &= ~(1 << 0); | |
| 597 | } | |
| 598 | if (m_z30_out & 2) { | |
| 599 | UINT8 dsw1 = ioport("DSW1")->read(); | |
| 600 | if (0 == BIT(dsw1,4)) // S13 | |
| 601 | data &= ~(1 << 0); | |
| 602 | if (0 == BIT(dsw1,5)) // S14 | |
| 603 | data &= ~(1 << 1); | |
| 604 | if (0 == BIT(dsw1,6)) // S15 | |
| 605 | data &= ~(1 << 2); | |
| 606 | if (0 == BIT(dsw1,7)) // S16 | |
| 607 | data &= ~(1 << 3); | |
| 608 | } | |
| 609 | if (m_z30_out & 4) { | |
| 610 | UINT8 dsw2 = ioport("DSW2")->read(); | |
| 611 | if (0 == BIT(dsw2,4)) // S21 | |
| 612 | data &= ~(1 << 0); | |
| 613 | if (0 == BIT(dsw2,5)) // S22 | |
| 614 | data &= ~(1 << 1); | |
| 615 | if (0 == BIT(dsw2,6)) // S23 | |
| 616 | data &= ~(1 << 2); | |
| 617 | if (0 == BIT(dsw2,7)) // S24 | |
| 618 | data &= ~(1 << 3); | |
| 619 | } | |
| 620 | break; | |
| 621 | case 2: // TODO: connect | |
| 622 | // IN-9 (unused?) | |
| 623 | // IN-10 (reset sw25) | |
| 624 | // IN-11 (outhole sw) | |
| 625 | // IN-12 (slam sw) | |
| 626 | break; | |
| 627 | } | |
| 628 | return data; | |
| 549 | UINT8 data = 0x0f; | |
| 550 | switch (offset) { | |
| 551 | case 0: // group A switches S01-S04, S09-S12, S17-S20 | |
| 552 | if (m_z30_out & 1) { | |
| 553 | UINT8 dsw0 = ioport("DSW0")->read(); | |
| 554 | if (0 == BIT(dsw0,0)) // S01 | |
| 555 | data &= ~(1 << 3); | |
| 556 | if (0 == BIT(dsw0,1)) // S02 | |
| 557 | data &= ~(1 << 2); | |
| 558 | if (0 == BIT(dsw0,2)) // S03 | |
| 559 | data &= ~(1 << 1); | |
| 560 | if (0 == BIT(dsw0,3)) // S04 | |
| 561 | data &= ~(1 << 0); | |
| 562 | } | |
| 563 | if (m_z30_out & 2) { | |
| 564 | UINT8 dsw1 = ioport("DSW1")->read(); | |
| 565 | if (0 == BIT(dsw1,0)) // S09 | |
| 566 | data &= ~(1 << 0); | |
| 567 | if (0 == BIT(dsw1,1)) // S10 | |
| 568 | data &= ~(1 << 1); | |
| 569 | if (0 == BIT(dsw1,2)) // S11 | |
| 570 | data &= ~(1 << 2); | |
| 571 | if (0 == BIT(dsw1,3)) // S12 | |
| 572 | data &= ~(1 << 3); | |
| 573 | } | |
| 574 | if (m_z30_out & 4) { | |
| 575 | UINT8 dsw2 = ioport("DSW2")->read(); | |
| 576 | if (0 == BIT(dsw2,0)) // S17 | |
| 577 | data &= ~(1 << 0); | |
| 578 | if (0 == BIT(dsw2,1)) // S18 | |
| 579 | data &= ~(1 << 1); | |
| 580 | if (0 == BIT(dsw2,2)) // S19 | |
| 581 | data &= ~(1 << 2); | |
| 582 | if (0 == BIT(dsw2,3)) // S20 | |
| 583 | data &= ~(1 << 3); | |
| 584 | } | |
| 585 | break; | |
| 586 | case 1: // group B switches S05-S08, S09-S12, S17-S20 | |
| 587 | if (m_z30_out & 1) { | |
| 588 | UINT8 dsw0 = ioport("DSW0")->read(); | |
| 589 | if (0 == BIT(dsw0,4)) // S05 | |
| 590 | data &= ~(1 << 3); | |
| 591 | if (0 == BIT(dsw0,5)) // S06 | |
| 592 | data &= ~(1 << 2); | |
| 593 | if (0 == BIT(dsw0,6)) // S07 | |
| 594 | data &= ~(1 << 1); | |
| 595 | if (0 == BIT(dsw0,7)) // S08 | |
| 596 | data &= ~(1 << 0); | |
| 597 | } | |
| 598 | if (m_z30_out & 2) { | |
| 599 | UINT8 dsw1 = ioport("DSW1")->read(); | |
| 600 | if (0 == BIT(dsw1,4)) // S13 | |
| 601 | data &= ~(1 << 0); | |
| 602 | if (0 == BIT(dsw1,5)) // S14 | |
| 603 | data &= ~(1 << 1); | |
| 604 | if (0 == BIT(dsw1,6)) // S15 | |
| 605 | data &= ~(1 << 2); | |
| 606 | if (0 == BIT(dsw1,7)) // S16 | |
| 607 | data &= ~(1 << 3); | |
| 608 | } | |
| 609 | if (m_z30_out & 4) { | |
| 610 | UINT8 dsw2 = ioport("DSW2")->read(); | |
| 611 | if (0 == BIT(dsw2,4)) // S21 | |
| 612 | data &= ~(1 << 0); | |
| 613 | if (0 == BIT(dsw2,5)) // S22 | |
| 614 | data &= ~(1 << 1); | |
| 615 | if (0 == BIT(dsw2,6)) // S23 | |
| 616 | data &= ~(1 << 2); | |
| 617 | if (0 == BIT(dsw2,7)) // S24 | |
| 618 | data &= ~(1 << 3); | |
| 619 | } | |
| 620 | break; | |
| 621 | case 2: // TODO: connect | |
| 622 | // IN-9 (unused?) | |
| 623 | // IN-10 (reset sw25) | |
| 624 | // IN-11 (outhole sw) | |
| 625 | // IN-12 (slam sw) | |
| 626 | break; | |
| 627 | } | |
| 628 | return data; | |
| 629 | 629 | } |
| 630 | 630 | |
| 631 | 631 | /** |
| r242703 | r242704 | |
| 635 | 635 | */ |
| 636 | 636 | WRITE8_MEMBER(gts1_state::gts1_lamp_apm_w) |
| 637 | 637 | { |
| 638 | switch (offset) { | |
| 639 | case 0: // LD1-LD4 on jumper J5 | |
| 640 | break; | |
| 641 | case 1: // Z30 1-of-16 decoder | |
| 642 | m_z30_out = 1 << (data & 15); | |
| 643 | break; | |
| 644 | case 2: // O9: PGOL PROM A8, O10: PGOL PROM A9 | |
| 645 | m_6351_addr = (m_6351_addr & ~(3 << 8)) | ((data & 3) << 8); | |
| 646 | // O11 and O12 are unused(?) | |
| 647 | break; | |
| 648 | } | |
| 638 | switch (offset) { | |
| 639 | case 0: // LD1-LD4 on jumper J5 | |
| 640 | break; | |
| 641 | case 1: // Z30 1-of-16 decoder | |
| 642 | m_z30_out = 1 << (data & 15); | |
| 643 | break; | |
| 644 | case 2: // O9: PGOL PROM A8, O10: PGOL PROM A9 | |
| 645 | m_6351_addr = (m_6351_addr & ~(3 << 8)) | ((data & 3) << 8); | |
| 646 | // O11 and O12 are unused(?) | |
| 647 | break; | |
| 648 | } | |
| 649 | 649 | } |
| 650 | 650 | |
| 651 | 651 | READ8_MEMBER (gts1_state::gts1_io_r) |
| 652 | 652 | { |
| 653 | const UINT8 data = 0x0f; | |
| 654 | LOG(("%s: unmapped io[%02x] -> %x\n", __FUNCTION__, offset, data)); | |
| 655 | return data; | |
| 653 | const UINT8 data = 0x0f; | |
| 654 | LOG(("%s: unmapped io[%02x] -> %x\n", __FUNCTION__, offset, data)); | |
| 655 | return data; | |
| 656 | 656 | } |
| 657 | 657 | |
| 658 | 658 | WRITE8_MEMBER(gts1_state::gts1_io_w) |
| 659 | 659 | { |
| 660 | ||
| 660 | LOG(("%s: unmapped io[%02x] <- %x\n", __FUNCTION__, offset, data)); | |
| 661 | 661 | } |
| 662 | 662 | |
| 663 | 663 | READ8_MEMBER (gts1_state::gts1_pa_r) |
| 664 | 664 | { |
| 665 | // return ROM nibble | |
| 666 | UINT8 *ROM = memregion("maincpu")->base(); | |
| 667 | UINT8 data = ROM[0x2000 + m_6351_addr] & 0x0f; | |
| 668 | LOG(("%s: ROM[%03x]:%02x\n", __FUNCTION__, m_6351_addr, data)); | |
| 669 | return data; | |
| 665 | // return ROM nibble | |
| 666 | UINT8 *ROM = memregion("maincpu")->base(); | |
| 667 | UINT8 data = ROM[0x2000 + m_6351_addr] & 0x0f; | |
| 668 | LOG(("%s: ROM[%03x]:%02x\n", __FUNCTION__, m_6351_addr, data)); | |
| 669 | return data; | |
| 670 | 670 | } |
| 671 | 671 | |
| 672 | 672 | WRITE8_MEMBER(gts1_state::gts1_pa_w) |
| 673 | 673 | { |
| 674 | // write address lines 7-4 | |
| 675 | m_6351_addr = (m_6351_addr & 0x0f) | ((data & 0x0f) << 4); | |
| 676 | LOG(("%s: ROM hi:%x addr:%02x\n", __FUNCTION__, data & 0x0f, m_6351_addr)); | |
| 674 | // write address lines 7-4 | |
| 675 | m_6351_addr = (m_6351_addr & 0x0f) | ((data & 0x0f) << 4); | |
| 676 | LOG(("%s: ROM hi:%x addr:%02x\n", __FUNCTION__, data & 0x0f, m_6351_addr)); | |
| 677 | 677 | } |
| 678 | 678 | |
| 679 | 679 | WRITE8_MEMBER(gts1_state::gts1_pb_w) |
| 680 | 680 | { |
| 681 | // write address lines 3-0 | |
| 682 | m_6351_addr = (m_6351_addr & 0xf0) | (data & 0x0f); | |
| 683 | LOG(("%s: ROM lo:%x addr:%02x\n", __FUNCTION__, data & 0x0f, m_6351_addr)); | |
| 681 | // write address lines 3-0 | |
| 682 | m_6351_addr = (m_6351_addr & 0xf0) | (data & 0x0f); | |
| 683 | LOG(("%s: ROM lo:%x addr:%02x\n", __FUNCTION__, data & 0x0f, m_6351_addr)); | |
| 684 | 684 | } |
| 685 | 685 | |
| 686 | 686 | |
| 687 | 687 | static MACHINE_CONFIG_START( gts1, gts1_state ) |
| 688 | /* basic machine hardware */ | |
| 689 | MCFG_CPU_ADD("maincpu", PPS4, XTAL_3_579545MHz / 18) // divided in the CPU | |
| 690 | MCFG_CPU_PROGRAM_MAP(gts1_map) | |
| 691 | MCFG_CPU_DATA_MAP(gts1_data) | |
| 692 | MCFG_CPU_IO_MAP(gts1_io) | |
| 688 | /* basic machine hardware */ | |
| 689 | MCFG_CPU_ADD("maincpu", PPS4, XTAL_3_579545MHz / 18) // divided in the CPU | |
| 690 | MCFG_CPU_PROGRAM_MAP(gts1_map) | |
| 691 | MCFG_CPU_DATA_MAP(gts1_data) | |
| 692 | MCFG_CPU_IO_MAP(gts1_io) | |
| 693 | 693 | |
| 694 | ||
| 694 | MCFG_NVRAM_ADD_0FILL("nvram") | |
| 695 | 695 | |
| 696 | /* A1753CE 2048 x 8 ROM (000-7ff), 128 x 4 RAM (00-7f) and 16 I/O lines (20 ... 2f) */ | |
| 697 | MCFG_DEVICE_ADD( "u5", RA17XX, 0 ) | |
| 698 | MCFG_RA17XX_READ ( READ8 (gts1_state,gts1_switches_r) ) | |
| 699 | MCFG_RA17XX_WRITE( WRITE8(gts1_state,gts1_switches_w) ) | |
| 696 | /* A1753CE 2048 x 8 ROM (000-7ff), 128 x 4 RAM (00-7f) and 16 I/O lines (20 ... 2f) */ | |
| 697 | MCFG_DEVICE_ADD( "u5", RA17XX, 0 ) | |
| 698 | MCFG_RA17XX_READ ( READ8 (gts1_state,gts1_switches_r) ) | |
| 699 | MCFG_RA17XX_WRITE( WRITE8(gts1_state,gts1_switches_w) ) | |
| 700 | 700 | |
| 701 | /* A1752CF 2048 x 8 ROM (800-fff), 128 x 4 RAM (80-ff) and 16 I/O lines (40 ... 4f) */ | |
| 702 | MCFG_DEVICE_ADD( "u4", RA17XX, 0 ) | |
| 703 | MCFG_RA17XX_READ ( READ8 (gts1_state,gts1_solenoid_r) ) | |
| 704 | MCFG_RA17XX_WRITE( WRITE8(gts1_state,gts1_solenoid_w) ) | |
| 701 | /* A1752CF 2048 x 8 ROM (800-fff), 128 x 4 RAM (80-ff) and 16 I/O lines (40 ... 4f) */ | |
| 702 | MCFG_DEVICE_ADD( "u4", RA17XX, 0 ) | |
| 703 | MCFG_RA17XX_READ ( READ8 (gts1_state,gts1_solenoid_r) ) | |
| 704 | MCFG_RA17XX_WRITE( WRITE8(gts1_state,gts1_solenoid_w) ) | |
| 705 | 705 | |
| 706 | /* 10696 General Purpose Input/Output */ | |
| 707 | MCFG_DEVICE_ADD( "u2", R10696, 0 ) | |
| 708 | MCFG_R10696_IO( READ8 (gts1_state,gts1_nvram_r), | |
| 709 | WRITE8(gts1_state,gts1_nvram_w) ) | |
| 706 | /* 10696 General Purpose Input/Output */ | |
| 707 | MCFG_DEVICE_ADD( "u2", R10696, 0 ) | |
| 708 | MCFG_R10696_IO( READ8 (gts1_state,gts1_nvram_r), | |
| 709 | WRITE8(gts1_state,gts1_nvram_w) ) | |
| 710 | 710 | |
| 711 | /* 10696 General Purpose Input/Output */ | |
| 712 | MCFG_DEVICE_ADD( "u3", R10696, 0 ) | |
| 713 | MCFG_R10696_IO( READ8 (gts1_state,gts1_lamp_apm_r), | |
| 714 | WRITE8(gts1_state,gts1_lamp_apm_w) ) | |
| 711 | /* 10696 General Purpose Input/Output */ | |
| 712 | MCFG_DEVICE_ADD( "u3", R10696, 0 ) | |
| 713 | MCFG_R10696_IO( READ8 (gts1_state,gts1_lamp_apm_r), | |
| 714 | WRITE8(gts1_state,gts1_lamp_apm_w) ) | |
| 715 | 715 | |
| 716 | /* 10788 General Purpose Display and Keyboard */ | |
| 717 | MCFG_DEVICE_ADD( "u6", R10788, XTAL_3_579545MHz / 18 ) // divided in the circuit | |
| 718 | MCFG_R10788_UPDATE( WRITE8(gts1_state,gts1_display_w) ) | |
| 716 | /* 10788 General Purpose Display and Keyboard */ | |
| 717 | MCFG_DEVICE_ADD( "u6", R10788, XTAL_3_579545MHz / 18 ) // divided in the circuit | |
| 718 | MCFG_R10788_UPDATE( WRITE8(gts1_state,gts1_display_w) ) | |
| 719 | 719 | |
| 720 | /* Video */ | |
| 721 | MCFG_DEFAULT_LAYOUT( layout_gts1 ) | |
| 720 | /* Video */ | |
| 721 | MCFG_DEFAULT_LAYOUT( layout_gts1 ) | |
| 722 | 722 | |
| 723 | /* Sound */ | |
| 724 | MCFG_FRAGMENT_ADD( genpin_audio ) | |
| 723 | /* Sound */ | |
| 724 | MCFG_FRAGMENT_ADD( genpin_audio ) | |
| 725 | 725 | MACHINE_CONFIG_END |
| 726 | 726 | |
| 727 | 727 | |
| 728 | 728 | ROM_START( gts1 ) |
| 729 | ROM_REGION( 0x10000, "maincpu", 0 ) | |
| 730 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 731 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 729 | ROM_REGION( 0x10000, "maincpu", 0 ) | |
| 730 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 731 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 732 | 732 | ROM_END |
| 733 | 733 | |
| 734 | 734 | ROM_START( gts1s ) |
| 735 | ROM_REGION( 0x10000, "maincpu", 0 ) | |
| 736 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 737 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 735 | ROM_REGION( 0x10000, "maincpu", 0 ) | |
| 736 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 737 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 738 | 738 | ROM_END |
| 739 | 739 | |
| 740 | 740 | /*------------------------------------------------------------------- |
| 741 | 741 | / Asteroid Annie and the Aliens (12/1980) #442 |
| 742 | 742 | /-------------------------------------------------------------------*/ |
| 743 | 743 | ROM_START(astannie) |
| 744 | ROM_REGION(0x10000, "maincpu", 0) | |
| 745 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 746 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 747 | ROM_LOAD("442.cpu", 0x2000, 0x0400, CRC(579521e0) SHA1(b1b19473e1ca3373955ee96104b87f586c4c311c)) | |
| 748 | ROM_REGION(0x10000, "cpu2", 0) | |
| 749 | ROM_LOAD("442.snd", 0x0400, 0x0400, CRC(c70195b4) SHA1(ff06197f07111d6a4b8942dcfe8d2279bda6f281)) | |
| 750 | ROM_RELOAD( 0x0800, 0x0400) | |
| 751 | ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) | |
| 752 | ROM_RELOAD( 0xfc00, 0x0400) | |
| 744 | ROM_REGION(0x10000, "maincpu", 0) | |
| 745 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 746 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 747 | ROM_LOAD("442.cpu", 0x2000, 0x0400, CRC(579521e0) SHA1(b1b19473e1ca3373955ee96104b87f586c4c311c)) | |
| 748 | ROM_REGION(0x10000, "cpu2", 0) | |
| 749 | ROM_LOAD("442.snd", 0x0400, 0x0400, CRC(c70195b4) SHA1(ff06197f07111d6a4b8942dcfe8d2279bda6f281)) | |
| 750 | ROM_RELOAD( 0x0800, 0x0400) | |
| 751 | ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) | |
| 752 | ROM_RELOAD( 0xfc00, 0x0400) | |
| 753 | 753 | ROM_END |
| 754 | 754 | |
| 755 | 755 | /*------------------------------------------------------------------- |
| 756 | 756 | / Buck Rogers (01/1980) #437 |
| 757 | 757 | /-------------------------------------------------------------------*/ |
| 758 | 758 | ROM_START(buckrgrs) |
| 759 | ROM_REGION(0x10000, "maincpu", 0) | |
| 760 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 761 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 762 | ROM_LOAD("437.cpu", 0x2000, 0x0400, CRC(e57d9278) SHA1(dfc4ebff1e14b9a074468671a8e5ac7948d5b352)) | |
| 763 | ROM_REGION(0x10000, "cpu2", 0) | |
| 764 | ROM_LOAD("437.snd", 0x0400, 0x0400, CRC(732b5a27) SHA1(7860ea54e75152246c3ac3205122d750b243b40c)) | |
| 765 | ROM_RELOAD( 0x0800, 0x0400) | |
| 766 | ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) | |
| 767 | ROM_RELOAD( 0xfc00, 0x0400) | |
| 759 | ROM_REGION(0x10000, "maincpu", 0) | |
| 760 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 761 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 762 | ROM_LOAD("437.cpu", 0x2000, 0x0400, CRC(e57d9278) SHA1(dfc4ebff1e14b9a074468671a8e5ac7948d5b352)) | |
| 763 | ROM_REGION(0x10000, "cpu2", 0) | |
| 764 | ROM_LOAD("437.snd", 0x0400, 0x0400, CRC(732b5a27) SHA1(7860ea54e75152246c3ac3205122d750b243b40c)) | |
| 765 | ROM_RELOAD( 0x0800, 0x0400) | |
| 766 | ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) | |
| 767 | ROM_RELOAD( 0xfc00, 0x0400) | |
| 768 | 768 | ROM_END |
| 769 | 769 | |
| 770 | 770 | /*------------------------------------------------------------------- |
| 771 | 771 | / Charlie's Angels (11/1978) #425 |
| 772 | 772 | /-------------------------------------------------------------------*/ |
| 773 | 773 | ROM_START(charlies) |
| 774 | ROM_REGION(0x10000, "maincpu", 0) | |
| 775 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 776 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 777 | ROM_LOAD("425.cpu", 0x2000, 0x0400, CRC(928b4279) SHA1(51096d45e880d6a8263eaeaa0cdab0f61ad2f58d)) | |
| 774 | ROM_REGION(0x10000, "maincpu", 0) | |
| 775 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 776 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 777 | ROM_LOAD("425.cpu", 0x2000, 0x0400, CRC(928b4279) SHA1(51096d45e880d6a8263eaeaa0cdab0f61ad2f58d)) | |
| 778 | 778 | ROM_END |
| 779 | 779 | /*------------------------------------------------------------------- |
| 780 | 780 | / Cleopatra (11/1977) #409 |
| 781 | 781 | /-------------------------------------------------------------------*/ |
| 782 | 782 | ROM_START(cleoptra) |
| 783 | ROM_REGION(0x10000, "maincpu", 0) | |
| 784 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 785 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 786 | ROM_LOAD("409.cpu", 0x2000, 0x0400, CRC(8063ff71) SHA1(205f09f067bf79544d2ce2a48d23259901f935dd)) | |
| 783 | ROM_REGION(0x10000, "maincpu", 0) | |
| 784 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 785 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 786 | ROM_LOAD("409.cpu", 0x2000, 0x0400, CRC(8063ff71) SHA1(205f09f067bf79544d2ce2a48d23259901f935dd)) | |
| 787 | 787 | ROM_END |
| 788 | 788 | |
| 789 | 789 | /*------------------------------------------------------------------- |
| 790 | 790 | / Close Encounters of the Third Kind (10/1978) #424 |
| 791 | 791 | /-------------------------------------------------------------------*/ |
| 792 | 792 | ROM_START(closeenc) |
| 793 | ROM_REGION(0x10000, "maincpu", 0) | |
| 794 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 795 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 796 | ROM_LOAD("424.cpu", 0x2000, 0x0400, CRC(a7a5dd13) SHA1(223c67b9484baa719c91de52b363ff22813db160)) | |
| 793 | ROM_REGION(0x10000, "maincpu", 0) | |
| 794 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 795 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 796 | ROM_LOAD("424.cpu", 0x2000, 0x0400, CRC(a7a5dd13) SHA1(223c67b9484baa719c91de52b363ff22813db160)) | |
| 797 | 797 | ROM_END |
| 798 | 798 | |
| 799 | 799 | /*------------------------------------------------------------------- |
| 800 | 800 | / Count-Down (05/1979) #422 |
| 801 | 801 | /-------------------------------------------------------------------*/ |
| 802 | 802 | ROM_START(countdwn) |
| 803 | ROM_REGION(0x10000, "maincpu", 0) | |
| 804 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 805 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 806 | ROM_LOAD("422.cpu", 0x2000, 0x0400, CRC(51bc2df0) SHA1(d4b555d106c6b4e420b0fcd1df8871f869476c22)) | |
| 803 | ROM_REGION(0x10000, "maincpu", 0) | |
| 804 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 805 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 806 | ROM_LOAD("422.cpu", 0x2000, 0x0400, CRC(51bc2df0) SHA1(d4b555d106c6b4e420b0fcd1df8871f869476c22)) | |
| 807 | 807 | ROM_END |
| 808 | 808 | |
| 809 | 809 | /*------------------------------------------------------------------- |
| 810 | 810 | / Dragon (10/1978) #419 |
| 811 | 811 | /-------------------------------------------------------------------*/ |
| 812 | 812 | ROM_START(dragon) |
| 813 | ROM_REGION(0x10000, "maincpu", 0) | |
| 814 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 815 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 816 | ROM_LOAD("419.cpu", 0x2000, 0x0400, CRC(018d9b3a) SHA1(da37ef5017c71bc41bdb1f30d3fd7ac3b7e1ee7e)) | |
| 813 | ROM_REGION(0x10000, "maincpu", 0) | |
| 814 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 815 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 816 | ROM_LOAD("419.cpu", 0x2000, 0x0400, CRC(018d9b3a) SHA1(da37ef5017c71bc41bdb1f30d3fd7ac3b7e1ee7e)) | |
| 817 | 817 | ROM_END |
| 818 | 818 | |
| 819 | 819 | /*------------------------------------------------------------------- |
| 820 | 820 | / Genie (11/1979) #435 |
| 821 | 821 | /-------------------------------------------------------------------*/ |
| 822 | 822 | ROM_START(geniep) |
| 823 | ROM_REGION(0x10000, "maincpu", 0) | |
| 824 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 825 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 826 | ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58)) | |
| 827 | ROM_REGION(0x10000, "cpu2", 0) | |
| 828 | ROM_LOAD("435.snd", 0x0400, 0x0400, CRC(4a98ceed) SHA1(f1d7548e03107033c39953ee04b043b5301dbb47)) | |
| 829 | ROM_RELOAD( 0x0800, 0x0400) | |
| 830 | ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) | |
| 831 | ROM_RELOAD( 0xfc00, 0x0400) | |
| 823 | ROM_REGION(0x10000, "maincpu", 0) | |
| 824 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 825 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 826 | ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58)) | |
| 827 | ROM_REGION(0x10000, "cpu2", 0) | |
| 828 | ROM_LOAD("435.snd", 0x0400, 0x0400, CRC(4a98ceed) SHA1(f1d7548e03107033c39953ee04b043b5301dbb47)) | |
| 829 | ROM_RELOAD( 0x0800, 0x0400) | |
| 830 | ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) | |
| 831 | ROM_RELOAD( 0xfc00, 0x0400) | |
| 832 | 832 | ROM_END |
| 833 | 833 | |
| 834 | 834 | /*------------------------------------------------------------------- |
| 835 | 835 | / Joker Poker (08/1978) #417 |
| 836 | 836 | /-------------------------------------------------------------------*/ |
| 837 | 837 | ROM_START(jokrpokr) |
| 838 | ROM_REGION(0x10000, "maincpu", 0) | |
| 839 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 840 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 841 | ROM_LOAD("417.cpu", 0x2000, 0x0400, CRC(33dade08) SHA1(23b8dbd7b6c84b806fc0d2da95478235cbf9f80a)) | |
| 838 | ROM_REGION(0x10000, "maincpu", 0) | |
| 839 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 840 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 841 | ROM_LOAD("417.cpu", 0x2000, 0x0400, CRC(33dade08) SHA1(23b8dbd7b6c84b806fc0d2da95478235cbf9f80a)) | |
| 842 | 842 | ROM_END |
| 843 | 843 | |
| 844 | 844 | /*------------------------------------------------------------------- |
| r242703 | r242704 | |
| 848 | 848 | / L'Hexagone (04/1986) |
| 849 | 849 | /-------------------------------------------------------------------*/ |
| 850 | 850 | ROM_START(hexagone) |
| 851 | ROM_REGION(0x10000, "maincpu", 0) | |
| 852 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 853 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 854 | ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58)) | |
| 855 | ROM_REGION(0x10000, "cpu2", 0) | |
| 856 | ROM_LOAD("hexagone.bin", 0, 0x4000, CRC(002b5464) SHA1(e2d971c4e85b4fb6580c2d3945c9946ea0cebc2e)) | |
| 851 | ROM_REGION(0x10000, "maincpu", 0) | |
| 852 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 853 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 854 | ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58)) | |
| 855 | ROM_REGION(0x10000, "cpu2", 0) | |
| 856 | ROM_LOAD("hexagone.bin", 0, 0x4000, CRC(002b5464) SHA1(e2d971c4e85b4fb6580c2d3945c9946ea0cebc2e)) | |
| 857 | 857 | ROM_END |
| 858 | 858 | /*------------------------------------------------------------------- |
| 859 | 859 | / Movie |
| r242703 | r242704 | |
| 863 | 863 | / Pinball Pool (08/1979) #427 |
| 864 | 864 | /-------------------------------------------------------------------*/ |
| 865 | 865 | ROM_START(pinpool) |
| 866 | ROM_REGION(0x10000, "maincpu", 0) | |
| 867 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 868 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 869 | ROM_LOAD("427.cpu", 0x2000, 0x0400, CRC(c496393d) SHA1(e91d9596aacdb4277fa200a3f8f9da099c278f32)) | |
| 866 | ROM_REGION(0x10000, "maincpu", 0) | |
| 867 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 868 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 869 | ROM_LOAD("427.cpu", 0x2000, 0x0400, CRC(c496393d) SHA1(e91d9596aacdb4277fa200a3f8f9da099c278f32)) | |
| 870 | 870 | ROM_END |
| 871 | 871 | |
| 872 | 872 | /*------------------------------------------------------------------- |
| 873 | 873 | / Roller Disco (02/1980) #440 |
| 874 | 874 | /-------------------------------------------------------------------*/ |
| 875 | 875 | ROM_START(roldisco) |
| 876 | ROM_REGION(0x10000, "maincpu", 0) | |
| 877 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 878 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 879 | ROM_LOAD("440.cpu", 0x2000, 0x0400, CRC(bc50631f) SHA1(6aa3124d09fc4e369d087a5ad6dd1737ace55e41)) | |
| 880 | ROM_REGION(0x10000, "cpu2", 0) | |
| 881 | ROM_LOAD("440.snd", 0x0400, 0x0400, CRC(4a0a05ae) SHA1(88f21b5638494d8e78dc0b6b7d69873b76b5f75d)) | |
| 882 | ROM_RELOAD( 0x0800, 0x0400) | |
| 883 | ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) | |
| 884 | ROM_RELOAD( 0xfc00, 0x0400) | |
| 876 | ROM_REGION(0x10000, "maincpu", 0) | |
| 877 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 878 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 879 | ROM_LOAD("440.cpu", 0x2000, 0x0400, CRC(bc50631f) SHA1(6aa3124d09fc4e369d087a5ad6dd1737ace55e41)) | |
| 880 | ROM_REGION(0x10000, "cpu2", 0) | |
| 881 | ROM_LOAD("440.snd", 0x0400, 0x0400, CRC(4a0a05ae) SHA1(88f21b5638494d8e78dc0b6b7d69873b76b5f75d)) | |
| 882 | ROM_RELOAD( 0x0800, 0x0400) | |
| 883 | ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) | |
| 884 | ROM_RELOAD( 0xfc00, 0x0400) | |
| 885 | 885 | ROM_END |
| 886 | 886 | |
| 887 | 887 | /*------------------------------------------------------------------- |
| r242703 | r242704 | |
| 892 | 892 | / Sinbad (05/1978) #412 |
| 893 | 893 | /-------------------------------------------------------------------*/ |
| 894 | 894 | ROM_START(sinbad) |
| 895 | ROM_REGION(0x10000, "maincpu", 0) | |
| 896 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 897 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 898 | ROM_LOAD("412.cpu", 0x2000, 0x0400, CRC(84a86b83) SHA1(f331f2ffd7d1b279b4ffbb939aa8649e723f5fac)) | |
| 895 | ROM_REGION(0x10000, "maincpu", 0) | |
| 896 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 897 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 898 | ROM_LOAD("412.cpu", 0x2000, 0x0400, CRC(84a86b83) SHA1(f331f2ffd7d1b279b4ffbb939aa8649e723f5fac)) | |
| 899 | 899 | ROM_END |
| 900 | 900 | |
| 901 | 901 | ROM_START(sinbadn) |
| 902 | ROM_REGION(0x10000, "maincpu", 0) | |
| 903 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 904 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 905 | ROM_LOAD("412no1.cpu", 0x2000, 0x0400, CRC(f5373f5f) SHA1(027840501416ff01b2adf07188c7d667adf3ad5f)) | |
| 902 | ROM_REGION(0x10000, "maincpu", 0) | |
| 903 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 904 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 905 | ROM_LOAD("412no1.cpu", 0x2000, 0x0400, CRC(f5373f5f) SHA1(027840501416ff01b2adf07188c7d667adf3ad5f)) | |
| 906 | 906 | ROM_END |
| 907 | 907 | |
| 908 | 908 | /*------------------------------------------------------------------- |
| r242703 | r242704 | |
| 913 | 913 | / Solar Ride (02/1979) #421 |
| 914 | 914 | /-------------------------------------------------------------------*/ |
| 915 | 915 | ROM_START(solaride) |
| 916 | ROM_REGION(0x10000, "maincpu", 0) | |
| 917 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 918 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 919 | ROM_LOAD("421.cpu", 0x2000, 0x0400, CRC(6b5c5da6) SHA1(a09b7009473be53586f53f48b7bfed9a0c5ecd55)) | |
| 916 | ROM_REGION(0x10000, "maincpu", 0) | |
| 917 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 918 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 919 | ROM_LOAD("421.cpu", 0x2000, 0x0400, CRC(6b5c5da6) SHA1(a09b7009473be53586f53f48b7bfed9a0c5ecd55)) | |
| 920 | 920 | ROM_END |
| 921 | 921 | |
| 922 | 922 | /*------------------------------------------------------------------- |
| 923 | 923 | / The Incredible Hulk (10/1979) #433 |
| 924 | 924 | /-------------------------------------------------------------------*/ |
| 925 | 925 | ROM_START(hulk) |
| 926 | ROM_REGION(0x10000, "maincpu", 0) | |
| 927 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 928 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 929 | ROM_LOAD("433.cpu", 0x2000, 0x0400, CRC(c05d2b52) SHA1(393fe063b029246317c90ee384db95a84d61dbb7)) | |
| 930 | ROM_REGION(0x10000, "cpu2", 0) | |
| 931 | ROM_LOAD("433.snd", 0x0400, 0x0400, CRC(20cd1dff) SHA1(93e7c47ff7051c3c0dc9f8f95aa33ba094e7cf25)) | |
| 932 | ROM_RELOAD( 0x0800, 0x0400) | |
| 933 | ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) | |
| 934 | ROM_RELOAD( 0xfc00, 0x0400) | |
| 926 | ROM_REGION(0x10000, "maincpu", 0) | |
| 927 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 928 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 929 | ROM_LOAD("433.cpu", 0x2000, 0x0400, CRC(c05d2b52) SHA1(393fe063b029246317c90ee384db95a84d61dbb7)) | |
| 930 | ROM_REGION(0x10000, "cpu2", 0) | |
| 931 | ROM_LOAD("433.snd", 0x0400, 0x0400, CRC(20cd1dff) SHA1(93e7c47ff7051c3c0dc9f8f95aa33ba094e7cf25)) | |
| 932 | ROM_RELOAD( 0x0800, 0x0400) | |
| 933 | ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) | |
| 934 | ROM_RELOAD( 0xfc00, 0x0400) | |
| 935 | 935 | ROM_END |
| 936 | 936 | |
| 937 | 937 | /*------------------------------------------------------------------- |
| 938 | 938 | / Torch (02/1980) #438 |
| 939 | 939 | /-------------------------------------------------------------------*/ |
| 940 | 940 | ROM_START(torch) |
| 941 | ROM_REGION(0x10000, "maincpu", 0) | |
| 942 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 943 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 944 | ROM_LOAD("438.cpu", 0x2000, 0x0400, CRC(2d396a64) SHA1(38a1862771500faa471071db08dfbadc6e8759e8)) | |
| 945 | ROM_REGION(0x10000, "cpu2", 0) | |
| 946 | ROM_LOAD("438.snd", 0x0400, 0x0400, CRC(a9619b48) SHA1(1906bc1b059bf31082e3b4546f5a30159479ad3c)) | |
| 947 | ROM_RELOAD( 0x0800, 0x0400) | |
| 948 | ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) | |
| 949 | ROM_RELOAD( 0xfc00, 0x0400) | |
| 941 | ROM_REGION(0x10000, "maincpu", 0) | |
| 942 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 943 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 944 | ROM_LOAD("438.cpu", 0x2000, 0x0400, CRC(2d396a64) SHA1(38a1862771500faa471071db08dfbadc6e8759e8)) | |
| 945 | ROM_REGION(0x10000, "cpu2", 0) | |
| 946 | ROM_LOAD("438.snd", 0x0400, 0x0400, CRC(a9619b48) SHA1(1906bc1b059bf31082e3b4546f5a30159479ad3c)) | |
| 947 | ROM_RELOAD( 0x0800, 0x0400) | |
| 948 | ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) | |
| 949 | ROM_RELOAD( 0xfc00, 0x0400) | |
| 950 | 950 | ROM_END |
| 951 | 951 | |
| 952 | 952 | /*------------------------------------------------------------------- |
| 953 | 953 | / Totem (10/1979) #429 |
| 954 | 954 | /-------------------------------------------------------------------*/ |
| 955 | 955 | ROM_START(totem) |
| 956 | ROM_REGION(0x10000, "maincpu", 0) | |
| 957 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 958 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 959 | ROM_LOAD("429.cpu", 0x2000, 0x0400, CRC(7885a384) SHA1(1770662af7d48ad8297097a9877c5c497119978d)) | |
| 960 | ROM_REGION(0x10000, "cpu2", 0) | |
| 961 | ROM_LOAD("429.snd", 0x0400, 0x0400, CRC(5d1b7ed4) SHA1(4a584f880e907fb21da78f3b3a0617f20599688f)) | |
| 962 | ROM_RELOAD( 0x0800, 0x0400) | |
| 963 | ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) | |
| 964 | ROM_RELOAD( 0xfc00, 0x0400) | |
| 956 | ROM_REGION(0x10000, "maincpu", 0) | |
| 957 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 958 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 959 | ROM_LOAD("429.cpu", 0x2000, 0x0400, CRC(7885a384) SHA1(1770662af7d48ad8297097a9877c5c497119978d)) | |
| 960 | ROM_REGION(0x10000, "cpu2", 0) | |
| 961 | ROM_LOAD("429.snd", 0x0400, 0x0400, CRC(5d1b7ed4) SHA1(4a584f880e907fb21da78f3b3a0617f20599688f)) | |
| 962 | ROM_RELOAD( 0x0800, 0x0400) | |
| 963 | ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) | |
| 964 | ROM_RELOAD( 0xfc00, 0x0400) | |
| 965 | 965 | ROM_END |
| 966 | 966 | |
| 967 | 967 | /*------------------------------------------------------------------- |
| 968 | 968 | / System 1 Test prom |
| 969 | 969 | /-------------------------------------------------------------------*/ |
| 970 | 970 | ROM_START(sys1test) |
| 971 | ROM_REGION(0x10000, "maincpu", 0) | |
| 972 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 973 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 974 | ROM_LOAD("test.cpu", 0x2000, 0x0400, CRC(8b0704bb) SHA1(5f0eb8d5af867b815b6012c9d078927398efe6d8)) | |
| 971 | ROM_REGION(0x10000, "maincpu", 0) | |
| 972 | ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) | |
| 973 | ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) | |
| 974 | ROM_LOAD("test.cpu", 0x2000, 0x0400, CRC(8b0704bb) SHA1(5f0eb8d5af867b815b6012c9d078927398efe6d8)) | |
| 975 | 975 | ROM_END |
| 976 | 976 | |
| 977 | 977 |
| r242703 | r242704 | |
|---|---|---|
| 495 | 495 | |
| 496 | 496 | static MACHINE_CONFIG_DERIVED( yamyam, gundealr ) |
| 497 | 497 | |
| 498 | MCFG_TIMER_DRIVER_ADD_PERIODIC("mcusim", gundealr_state, yamyam_mcu_sim, attotime::from_hz(6000000/60)) | |
| 498 | MCFG_TIMER_DRIVER_ADD_PERIODIC("mcusim", gundealr_state, yamyam_mcu_sim, attotime::from_hz(6000000/60)) /* 6mhz confirmed */ | |
| 499 | 499 | MACHINE_CONFIG_END |
| 500 | 500 | |
| 501 | 501 |
| r242703 | r242704 | |
|---|---|---|
| 510 | 510 | |
| 511 | 511 | static INPUT_PORTS_START( jingbell ) |
| 512 | 512 | PORT_START("DSW1") |
| 513 | PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) | |
| 513 | PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW1:1") | |
| 514 | 514 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
| 515 | 515 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 516 | PORT_DIPNAME( 0x02, 0x00, "W-Up Bonus" ) | |
| 516 | PORT_DIPNAME( 0x02, 0x00, "W-Up Bonus" ) PORT_DIPLOCATION("DSW1:2") | |
| 517 | 517 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 518 | 518 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 519 | PORT_DIPNAME( 0x04, 0x04, "Min Bet" ) | |
| 519 | PORT_DIPNAME( 0x04, 0x04, "Min Bet" ) PORT_DIPLOCATION("DSW1:3") | |
| 520 | 520 | PORT_DIPSETTING( 0x04, "1" ) |
| 521 | 521 | PORT_DIPSETTING( 0x00, "8" ) |
| 522 | PORT_DIPNAME( 0x08, 0x08, "Spin Speed" ) | |
| 522 | PORT_DIPNAME( 0x08, 0x08, "Spin Speed" ) PORT_DIPLOCATION("DSW1:4") | |
| 523 | 523 | PORT_DIPSETTING( 0x08, "Slow" ) |
| 524 | 524 | PORT_DIPSETTING( 0x00, "Quick" ) |
| 525 | PORT_DIPNAME( 0x10, 0x00, "Strip Girl" ) | |
| 525 | PORT_DIPNAME( 0x10, 0x00, "Strip Girl" ) PORT_DIPLOCATION("DSW1:5") | |
| 526 | 526 | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) |
| 527 | 527 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 528 | PORT_DIPNAME( 0x20, 0x20, "Payout Mode" ) | |
| 528 | PORT_DIPNAME( 0x20, 0x20, "Payout Mode" ) PORT_DIPLOCATION("DSW1:6") | |
| 529 | 529 | PORT_DIPSETTING( 0x20, DEF_STR( Normal ) ) |
| 530 | 530 | PORT_DIPSETTING( 0x00, "Auto" ) |
| 531 | PORT_DIPNAME( 0xc0, 0xc0, "Player's Panel" ) | |
| 531 | PORT_DIPNAME( 0xc0, 0xc0, "Player's Panel" ) PORT_DIPLOCATION("DSW1:7,8") | |
| 532 | 532 | PORT_DIPSETTING( 0x00, "Type A" ) |
| 533 | 533 | PORT_DIPSETTING( 0xc0, "Type A" ) |
| 534 | 534 | PORT_DIPSETTING( 0x80, "Type B" ) |
| 535 | 535 | PORT_DIPSETTING( 0x40, "Type C" ) |
| 536 | 536 | |
| 537 | 537 | PORT_START("DSW2") |
| 538 | PORT_DIPNAME( 0x07, 0x07, "Main Game Rate (%)" ) | |
| 538 | PORT_DIPNAME( 0x07, 0x07, "Main Game Rate (%)" ) PORT_DIPLOCATION("DSW2:1,2,3") | |
| 539 | 539 | PORT_DIPSETTING( 0x07, "55" ) |
| 540 | 540 | PORT_DIPSETTING( 0x06, "60" ) |
| 541 | 541 | PORT_DIPSETTING( 0x05, "65" ) |
| r242703 | r242704 | |
| 544 | 544 | PORT_DIPSETTING( 0x02, "80" ) |
| 545 | 545 | PORT_DIPSETTING( 0x01, "85" ) |
| 546 | 546 | PORT_DIPSETTING( 0x00, "90" ) |
| 547 | PORT_DIPNAME( 0x38, 0x38, "W-Up Chance (%)" ) | |
| 547 | PORT_DIPNAME( 0x38, 0x38, "W-Up Chance (%)" ) PORT_DIPLOCATION("DSW2:4,5,6") | |
| 548 | 548 | PORT_DIPSETTING( 0x38, "93" ) |
| 549 | 549 | PORT_DIPSETTING( 0x30, "94" ) |
| 550 | 550 | PORT_DIPSETTING( 0x28, "95" ) |
| r242703 | r242704 | |
| 553 | 553 | PORT_DIPSETTING( 0x10, "98" ) |
| 554 | 554 | PORT_DIPSETTING( 0x08, "99" ) |
| 555 | 555 | PORT_DIPSETTING( 0x00, "100" ) |
| 556 | PORT_DIPNAME( 0xc0, 0xc0, "Key In Limit" ) | |
| 556 | PORT_DIPNAME( 0xc0, 0xc0, "Key In Limit" ) PORT_DIPLOCATION("DSW2:7,8") | |
| 557 | 557 | PORT_DIPSETTING( 0xc0, "1k" ) |
| 558 | 558 | PORT_DIPSETTING( 0x80, "3k" ) |
| 559 | 559 | PORT_DIPSETTING( 0x40, "5k" ) |
| 560 | 560 | PORT_DIPSETTING( 0x00, "10k" ) |
| 561 | 561 | |
| 562 | 562 | PORT_START("DSW3") |
| 563 | PORT_DIPNAME( 0x07, 0x07, "Key In Rate" ) | |
| 563 | PORT_DIPNAME( 0x07, 0x07, "Key In Rate" ) PORT_DIPLOCATION("DSW3:1,2,3") | |
| 564 | 564 | PORT_DIPSETTING( 0x07, "1" ) |
| 565 | 565 | PORT_DIPSETTING( 0x06, "5" ) |
| 566 | 566 | PORT_DIPSETTING( 0x05, "10" ) |
| r242703 | r242704 | |
| 569 | 569 | PORT_DIPSETTING( 0x02, "100" ) |
| 570 | 570 | PORT_DIPSETTING( 0x01, "200" ) |
| 571 | 571 | PORT_DIPSETTING( 0x00, "500" ) |
| 572 | PORT_DIPNAME( 0x38, 0x38, "Coin 1 Rate" ) | |
| 572 | PORT_DIPNAME( 0x38, 0x38, "Coin 1 Rate" ) PORT_DIPLOCATION("DSW3:4,5,6") | |
| 573 | 573 | PORT_DIPSETTING( 0x38, "1" ) |
| 574 | 574 | PORT_DIPSETTING( 0x30, "2" ) |
| 575 | 575 | PORT_DIPSETTING( 0x28, "5" ) |
| r242703 | r242704 | |
| 578 | 578 | PORT_DIPSETTING( 0x10, "25" ) |
| 579 | 579 | PORT_DIPSETTING( 0x08, "50" ) |
| 580 | 580 | PORT_DIPSETTING( 0x00, "100" ) |
| 581 | PORT_DIPNAME( 0xc0, 0xc0, "System Limit" ) | |
| 581 | PORT_DIPNAME( 0xc0, 0xc0, "System Limit" ) PORT_DIPLOCATION("DSW3:7,8") | |
| 582 | 582 | PORT_DIPSETTING( 0xc0, "5k" ) |
| 583 | 583 | PORT_DIPSETTING( 0x80, "10k" ) |
| 584 | 584 | PORT_DIPSETTING( 0x40, "30k" ) |
| 585 | 585 | PORT_DIPSETTING( 0x00, "Unlimited" ) |
| 586 | 586 | |
| 587 | 587 | PORT_START("DSW4") |
| 588 | PORT_DIPNAME( 0x01, 0x01, "Min Play For Fever" ) | |
| 588 | PORT_DIPNAME( 0x01, 0x01, "Min Play For Fever" ) PORT_DIPLOCATION("DSW4:1") | |
| 589 | 589 | PORT_DIPSETTING( 0x01, "8" ) |
| 590 | 590 | PORT_DIPSETTING( 0x00, "16" ) |
| 591 | PORT_DIPNAME( 0x02, 0x02, "Max Bet" ) | |
| 591 | PORT_DIPNAME( 0x02, 0x02, "Max Bet" ) PORT_DIPLOCATION("DSW4:2") | |
| 592 | 592 | PORT_DIPSETTING( 0x02, "16" ) |
| 593 | 593 | PORT_DIPSETTING( 0x00, "32" ) |
| 594 | PORT_DIPNAME( 0x1c, 0x1c, "Coin 2 Rate" ) | |
| 594 | PORT_DIPNAME( 0x1c, 0x1c, "Coin 2 Rate" ) PORT_DIPLOCATION("DSW4:3,4,5") | |
| 595 | 595 | PORT_DIPSETTING( 0x1c, "1" ) |
| 596 | 596 | PORT_DIPSETTING( 0x18, "2" ) |
| 597 | 597 | PORT_DIPSETTING( 0x14, "5" ) |
| r242703 | r242704 | |
| 600 | 600 | PORT_DIPSETTING( 0x08, "40" ) |
| 601 | 601 | PORT_DIPSETTING( 0x04, "50" ) |
| 602 | 602 | PORT_DIPSETTING( 0x00, "100" ) |
| 603 | PORT_DIPNAME( 0x60, 0x60, "Key Out Rate" ) | |
| 603 | PORT_DIPNAME( 0x60, 0x60, "Key Out Rate" ) PORT_DIPLOCATION("DSW4:6,7") | |
| 604 | 604 | PORT_DIPSETTING( 0x60, "1" ) |
| 605 | 605 | PORT_DIPSETTING( 0x40, "10" ) |
| 606 | 606 | PORT_DIPSETTING( 0x20, "50" ) |
| 607 | 607 | PORT_DIPSETTING( 0x00, "100" ) |
| 608 | PORT_DIPNAME( 0x80, 0x80, "Play Line" ) | |
| 608 | PORT_DIPNAME( 0x80, 0x80, "Play Line" ) PORT_DIPLOCATION("DSW4:8") | |
| 609 | 609 | PORT_DIPSETTING( 0x80, "8" ) |
| 610 | 610 | PORT_DIPSETTING( 0x00, "16" ) |
| 611 | 611 | |
| 612 | // These are from the manual for v201us - DSW1-DSW4 match but DSW5 doesn't seem to match or actuallly do anything | |
| 612 | // These are from the manual for v201us - DSW1-DSW4 match but DSW5 doesn't seem to match or actuallly do anything | |
| 613 | 613 | PORT_START("DSW5") |
| 614 | PORT_DIPNAME( 0x03, 0x00, "Maximum Play" ) | |
| 614 | PORT_DIPNAME( 0x03, 0x00, "Maximum Play" ) PORT_DIPLOCATION("DSW5:1,2") | |
| 615 | 615 | PORT_DIPSETTING( 0x00, "64" ) |
| 616 | 616 | PORT_DIPSETTING( 0x01, "32" ) |
| 617 | 617 | PORT_DIPSETTING( 0x02, "16" ) |
| 618 | 618 | PORT_DIPSETTING( 0x03, "8" ) |
| 619 | PORT_DIPNAME( 0x04, 0x04, "Skill Stop" ) | |
| 619 | PORT_DIPNAME( 0x04, 0x04, "Skill Stop" ) PORT_DIPLOCATION("DSW5:3") | |
| 620 | 620 | PORT_DIPSETTING( 0x04, "On" ) |
| 621 | 621 | PORT_DIPSETTING( 0x00, "Off" ) |
| 622 | PORT_DIPNAME( 0x08, 0x00, "Hands Count" ) | |
| 622 | PORT_DIPNAME( 0x08, 0x00, "Hands Count" ) PORT_DIPLOCATION("DSW5:4") | |
| 623 | 623 | PORT_DIPSETTING( 0x08, "No" ) |
| 624 | 624 | PORT_DIPSETTING( 0x00, "Yes" ) |
| 625 | PORT_DIPNAME( 0x30, 0x00, "Hands Coin Rate" ) | |
| 625 | PORT_DIPNAME( 0x30, 0x00, "Hands Coin Rate" ) PORT_DIPLOCATION("DSW5:5,6") | |
| 626 | 626 | PORT_DIPSETTING( 0x00, "25" ) |
| 627 | 627 | PORT_DIPSETTING( 0x20, "10" ) |
| 628 | 628 | PORT_DIPSETTING( 0x10, "5" ) |
| 629 | 629 | PORT_DIPSETTING( 0x30, "1" ) |
| 630 | PORT_DIPNAME( 0x40, 0x40, "Hands Coin Value" ) | |
| 630 | PORT_DIPNAME( 0x40, 0x40, "Hands Coin Value" ) PORT_DIPLOCATION("DSW5:7") | |
| 631 | 631 | PORT_DIPSETTING( 0x00, "40" ) |
| 632 | 632 | PORT_DIPSETTING( 0x40, "20" ) |
| 633 | PORT_DIPNAME( 0x80, 0x80, "Unused" ) | |
| 633 | PORT_DIPNAME( 0x80, 0x80, "Unused" ) PORT_DIPLOCATION("DSW5:8") | |
| 634 | 634 | PORT_DIPSETTING( 0x00, "On" ) |
| 635 | 635 | PORT_DIPSETTING( 0x80, "Off" ) |
| 636 | 636 |
| r242703 | r242704 | |
|---|---|---|
| 1324 | 1324 | MCFG_SOUND_ADD("upd",UPD7759, UPD7759_STANDARD_CLOCK) |
| 1325 | 1325 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) |
| 1326 | 1326 | MCFG_DEFAULT_LAYOUT(layout_jpmimpct) |
| 1327 | ||
| 1327 | ||
| 1328 | 1328 | MCFG_STARPOINT_48STEP_ADD("reel0") |
| 1329 | 1329 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(jpmimpct_state, reel0_optic_cb)) |
| 1330 | 1330 | MCFG_STARPOINT_48STEP_ADD("reel1") |
| r242703 | r242704 | |
| 1337 | 1337 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(jpmimpct_state, reel4_optic_cb)) |
| 1338 | 1338 | MCFG_STARPOINT_48STEP_ADD("reel5") |
| 1339 | 1339 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(jpmimpct_state, reel5_optic_cb)) |
| 1340 | ||
| 1340 | ||
| 1341 | 1341 | MACHINE_CONFIG_END |
| 1342 | 1342 | |
| 1343 | 1343 |
| r242703 | r242704 | |
|---|---|---|
| 342 | 342 | |
| 343 | 343 | */ |
| 344 | 344 | |
| 345 | #include "cdrom.h" | |
| 345 | 346 | #include "cpu/psx/psx.h" |
| 346 | 347 | #include "machine/adc083x.h" |
| 347 | 348 | #include "machine/ataintf.h" |
| r242703 | r242704 | |
| 360 | 361 | #include "sound/spu.h" |
| 361 | 362 | #include "sound/cdda.h" |
| 362 | 363 | #include "video/psx.h" |
| 363 | #include "cdrom.h" | |
| 364 | 364 | |
| 365 | 365 | #define VERBOSE_LEVEL ( 0 ) |
| 366 | 366 |
| r242703 | r242704 | |
|---|---|---|
| 114 | 114 | WCC Football Intercontinental Clubs 2008-2009 ? ? ? |
| 115 | 115 | WCC Football Intercontinental Clubs 2009-2010 ? ? ? |
| 116 | 116 | |
| 117 | * denotes these DVDs are archived. | |
| 118 | ^ denotes these PICs are archived. | |
| 117 | * denotes these DVDs are archived. | |
| 118 | ^ denotes these PICs are archived. | |
| 119 | 119 | This list is not necessarily correct or complete. |
| 120 | 120 | Corrections and additions to the above are welcome. |
| 121 | 121 | |
| r242703 | r242704 | |
| 386 | 386 | ROM_LOAD("fpr-24370b.ic6", 0x000000, 0x400000, CRC(c3b021a4) SHA1(1b6938a50fe0e4ae813864649eb103838c399ac0)) \ |
| 387 | 387 | \ |
| 388 | 388 | ROM_REGION32_LE(0x10000, ":pci:01.0:00.0", 0) /* Geforce bios extension (custom for the card) */ \ |
| 389 | ROM_LOAD("vid_bios.u504", 0x00000, 0x10000, CRC(f78d14d7) SHA1(f129787e487984edd23bf344f2e9500c85052275)) | |
| 389 | ROM_LOAD("vid_bios.u504", 0x00000, 0x10000, CRC(f78d14d7) SHA1(f129787e487984edd23bf344f2e9500c85052275)) \ | |
| 390 | ||
| 390 | 391 | ROM_START(lindbios) |
| 391 | 392 | LINDBERGH_BIOS |
| 392 | 393 | ROM_END |
| r242703 | r242704 | |
|---|---|---|
| 105 | 105 | // FIRQ, related to the sample playback? |
| 106 | 106 | READ8_MEMBER( maygay1b_state::m1_firq_trg_r ) |
| 107 | 107 | { |
| 108 | if (m_msm6376) | |
| 108 | int nar = m_msm6376->nar_r(); | |
| 109 | if (nar) | |
| 109 | 110 | { |
| 110 | int nar = m_msm6376->nar_r(); | |
| 111 | if (nar) | |
| 112 | { | |
| 113 | cpu0_firq(1); | |
| 114 | } | |
| 111 | cpu0_firq(1); | |
| 115 | 112 | } |
| 116 | 113 | return 0xff; |
| 117 | 114 | } |
| r242703 | r242704 | |
| 380 | 377 | //A strange setup this, the address lines are used to move st to the right level |
| 381 | 378 | READ8_MEMBER(maygay1b_state::latch_st_hi) |
| 382 | 379 | { |
| 383 | if (m_msm6376) | |
| 384 | { | |
| 385 | m_msm6376->st_w(1); | |
| 386 | } | |
| 380 | m_msm6376->st_w(1); | |
| 387 | 381 | return 0xff; |
| 388 | 382 | } |
| 389 | 383 | |
| 390 | 384 | READ8_MEMBER(maygay1b_state::latch_st_lo) |
| 391 | 385 | { |
| 392 | if (m_msm6376) | |
| 393 | { | |
| 394 | m_msm6376->st_w(0); | |
| 395 | } | |
| 386 | m_msm6376->st_w(0); | |
| 396 | 387 | return 0xff; |
| 397 | 388 | } |
| 398 | 389 | |
| r242703 | r242704 | |
| 637 | 628 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(maygay1b_state, reel4_optic_cb)) |
| 638 | 629 | MCFG_STARPOINT_48STEP_ADD("reel5") |
| 639 | 630 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(maygay1b_state, reel5_optic_cb)) |
| 640 | ||
| 631 | ||
| 641 | 632 | MCFG_NVRAM_ADD_0FILL("nvram") |
| 642 | 633 | |
| 643 | 634 | MCFG_DEFAULT_LAYOUT(layout_maygay1b) |
| r242703 | r242704 | |
|---|---|---|
| 211 | 211 | ROM_START( m1bankrlp ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sa5-227", 0x0000, 0x010000, CRC(96528366) SHA1(5927c519d9a610b1026d685647cdac285566b1fc) ) ROM_END_M1A_MCU //1.1P |
| 212 | 212 | ROM_START( m1bankrl2p ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sa5-225", 0x0000, 0x010000, CRC(14d2a45e) SHA1(8f5875dfd517826a89b3b13063474eda2725be68) ) ROM_END_M1A_MCU //2.1p |
| 213 | 213 | |
| 214 | GAME( 1995, m1bankrl ,0 ,maygay_m1_no_oki,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Bank Roll (Maygay) v1.1 (M1A/B)",GAME_FLAGS ) | |
| 215 | GAME( 1995, m1bankrlp ,m1bankrl ,maygay_m1_no_oki,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Bank Roll (Maygay) v1.1 (Protocol) (M1A/B)",GAME_FLAGS ) | |
| 216 | GAME( 1995, m1bankrl2p ,m1bankrl ,maygay_m1_no_oki,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Bank Roll (Maygay) v2.1 (Protocol) (M1A/B)",GAME_FLAGS ) | |
| 214 | GAME( 1995, m1bankrl ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Bank Roll (Maygay) v1.1 (M1A/B)",GAME_FLAGS ) | |
| 215 | GAME( 1995, m1bankrlp ,m1bankrl ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Bank Roll (Maygay) v1.1 (Protocol) (M1A/B)",GAME_FLAGS ) | |
| 216 | GAME( 1995, m1bankrl2p ,m1bankrl ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Bank Roll (Maygay) v2.1 (Protocol) (M1A/B)",GAME_FLAGS ) | |
| 217 | 217 | |
| 218 | 218 | /******************************************************************************************************************************************************************************************************* |
| 219 | 219 | Club Fever |
| r242703 | r242704 | |
|---|---|---|
| 4888 | 4888 | HSync - 15.55kHz |
| 4889 | 4889 | |
| 4890 | 4890 | |
| 4891 | Korean version & international version of Dharma run on Metro hardware PCB Number - METRO CORP. MTR527 | |
| 4891 | Korean version of Dharma runs on Metro hardware PCB Number - METRO CORP. MTR527 | |
| 4892 | There is known to be an international version of Dharma on the MTR527 PCB: | |
| 4892 | 4893 | |
| 4894 | DD WEA5 | Program roms | |
| 4895 | DD WEA6 / | |
| 4893 | 4896 | |
| 4897 | DD WA 1 | Graphics roms | |
| 4898 | DD WA 2 | | |
| 4899 | DD WA 3 | | |
| 4900 | DD WA 4/ | |
| 4901 | ||
| 4902 | DD WA 7 - Samples rom | |
| 4903 | DD WA 8 - 78C10 program rom | |
| 4904 | ||
| 4894 | 4905 | ***************************************************************************/ |
| 4895 | 4906 | |
| 4896 | 4907 | ROM_START( dharma ) |
| 4897 | 4908 | ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */ |
| 4898 | ROM_LOAD16_BYTE( "dd__wea5.u39", 0x000000, 0x020000, CRC(960319d7) SHA1(f76783fcbb5e5a027889620c783f053d372346a8) ) | |
| 4899 | ROM_LOAD16_BYTE( "dd__wea6.u42", 0x000001, 0x020000, CRC(386eb6b3) SHA1(e353ea70bae521c4cc362cf2f5ce643c98c61681) ) | |
| 4900 | ||
| 4901 | ROM_REGION( 0x02c000, "audiocpu", 0 ) /* NEC78C10 Code */ | |
| 4902 | ROM_LOAD( "dd__wa-8.u9", 0x000000, 0x004000, CRC(af7ebc4c) SHA1(6abf0036346da10be56932f9674f8c250a3ea592) ) // (c)1992 Imagetek (11xxxxxxxxxxxxxxx = 0xFF) // == dd_ja-8 | |
| 4903 | ROM_CONTINUE( 0x010000, 0x01c000 ) | |
| 4904 | ||
| 4905 | ROM_REGION( 0x200000, "gfx1", 0 ) /* Gfx + Data (Addressable by CPU & Blitter) */ | |
| 4906 | ROMX_LOAD( "dd__wa-2.u4", 0x000000, 0x080000, CRC(2c67a5c8) SHA1(777d5f64446004bbb6dafee610ad9a1ff262349d) , ROM_GROUPWORD | ROM_SKIP(6)) | |
| 4907 | ROMX_LOAD( "dd__wa-4.u5", 0x000002, 0x080000, CRC(36ca7848) SHA1(278788727193ae65ed012d230a4e5966c07afe9e) , ROM_GROUPWORD | ROM_SKIP(6)) | |
| 4908 | ROMX_LOAD( "dd__wa-1.u10", 0x000004, 0x080000, CRC(d8034574) SHA1(a9bf29ae980033dfaae43b6ab46f850744020d92) , ROM_GROUPWORD | ROM_SKIP(6)) | |
| 4909 | ROMX_LOAD( "dd__wa-3.u11", 0x000006, 0x080000, CRC(fe320fa3) SHA1(80532cc38bd21608e4cff1254d993e0df72eaccf) , ROM_GROUPWORD | ROM_SKIP(6)) | |
| 4910 | ||
| 4911 | ROM_REGION( 0x040000, "oki", 0 ) /* Samples */ | |
| 4912 | ROM_LOAD( "dd__wa-7.u3", 0x000000, 0x040000, CRC(7ce817eb) SHA1(9dfb79021a552877fbc26049cca853c0b93735b5) ) // == dd_ja-7 | |
| 4913 | ROM_END | |
| 4914 | ||
| 4915 | ROM_START( dharmaj ) | |
| 4916 | ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */ | |
| 4917 | 4909 | ROM_LOAD16_BYTE( "dd_jc-5", 0x000000, 0x020000, CRC(b5d44426) SHA1(d68aaf6b9976ccf5cb665d7ec0afa44e2453094d) ) |
| 4918 | 4910 | ROM_LOAD16_BYTE( "dd_jc-6", 0x000001, 0x020000, CRC(bc5a202e) SHA1(c2b6d2e44e3605e0525bde4030c5162badad4d4b) ) |
| 4919 | 4911 | |
| r242703 | r242704 | |
| 6289 | 6281 | GAME( 1993, moegonta, ladykill, karatour, moegonta, metro_state, karatour, ROT90, "Yanyaka", "Moeyo Gonta!! (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 6290 | 6282 | GAME( 1993, poitto, 0, poitto, poitto, metro_state, metro, ROT0, "Metro / Able Corp.", "Poitto!", GAME_SUPPORTS_SAVE ) |
| 6291 | 6283 | GAME( 1994, blzntrnd, 0, blzntrnd, blzntrnd, metro_state, blzntrnd, ROT0, "Human Amusement", "Blazing Tornado", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 6292 | GAME( 1994, dharma, 0, dharma, dharma, metro_state, dharmak, ROT0, "Metro", "Dharma Doujou", GAME_SUPPORTS_SAVE ) | |
| 6293 | GAME( 1994, dharmaj, dharma, dharma, dharma, metro_state, metro, ROT0, "Metro", "Dharma Doujou (Japan)", GAME_SUPPORTS_SAVE ) | |
| 6284 | GAME( 1994, dharma, 0, dharma, dharma, metro_state, metro, ROT0, "Metro", "Dharma Doujou", GAME_SUPPORTS_SAVE ) | |
| 6294 | 6285 | GAME( 1994, dharmak, dharma, dharma, dharma, metro_state, dharmak, ROT0, "Metro", "Dharma Doujou (Korea)", GAME_SUPPORTS_SAVE ) |
| 6295 | 6286 | GAME( 1994, lastfort, 0, lastfort, lastfort, metro_state, metro, ROT0, "Metro", "Last Fortress - Toride", GAME_SUPPORTS_SAVE ) |
| 6296 | 6287 | GAME( 1994, lastforte, lastfort, lastfort, lastfero, metro_state, metro, ROT0, "Metro", "Last Fortress - Toride (Erotic, Rev C)", GAME_SUPPORTS_SAVE ) |
| r242703 | r242704 | |
|---|---|---|
| 282 | 282 | void mjkjidai_state::machine_start() |
| 283 | 283 | { |
| 284 | 284 | membank("bank1")->configure_entries(0, 4, memregion("maincpu")->base() + 0x8000, 0x4000); |
| 285 | ||
| 285 | ||
| 286 | 286 | save_item(NAME(m_adpcm_pos)); |
| 287 | 287 | save_item(NAME(m_adpcm_end)); |
| 288 | 288 | save_item(NAME(m_keyb)); |
| r242703 | r242704 | |
|---|---|---|
| 801 | 801 | MCFG_STEPPER_END_INDEX(3)\ |
| 802 | 802 | MCFG_STEPPER_INDEX_PATTERN(0x00)\ |
| 803 | 803 | MCFG_STEPPER_INIT_PHASE(2) |
| 804 | ||
| 804 | ||
| 805 | 805 | static MACHINE_CONFIG_START( mpu3base, mpu3_state ) |
| 806 | 806 | MCFG_CPU_ADD("maincpu", M6808, MPU3_MASTER_CLOCK)///4) |
| 807 | 807 | MCFG_CPU_PROGRAM_MAP(mpu3_basemap) |
| r242703 | r242704 | |
|---|---|---|
| 2241 | 2241 | ROM_START( m4nod ) |
| 2242 | 2242 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2243 | 2243 | ROM_LOAD( "nod.bin", 0x0000, 0x010000, CRC(bc738af5) SHA1(8df436139554ccfb48c4db0a32e3333dbf3c4f46) ) |
| 2244 | ROM_REGION( 0x200000, " | |
| 2244 | ROM_REGION( 0x200000, "upd", ROMREGION_ERASE00 ) | |
| 2245 | 2245 | ROM_LOAD( "nodsnd.bin", 0x0000, 0x080000, CRC(2134494a) SHA1(3b665bf79567a71195b20e76c50b02707d15b78d) ) |
| 2246 | 2246 | ROM_END |
| 2247 | 2247 |
| r242703 | r242704 | |
|---|---|---|
| 2477 | 2477 | MCFG_STEPPER_END_INDEX(3)\ |
| 2478 | 2478 | MCFG_STEPPER_INDEX_PATTERN(0x00)\ |
| 2479 | 2479 | MCFG_STEPPER_INIT_PHASE(2) |
| 2480 | ||
| 2480 | ||
| 2481 | 2481 | #define MCFG_MPU4_TYPE2_REEL_ADD(_tag)\ |
| 2482 | 2482 | MCFG_STEPPER_ADD(_tag)\ |
| 2483 | 2483 | MCFG_STEPPER_REEL_TYPE(BARCREST_48STEP_REEL)\ |
| r242703 | r242704 | |
| 2501 | 2501 | MCFG_STEPPER_END_INDEX(3)\ |
| 2502 | 2502 | MCFG_STEPPER_INDEX_PATTERN(0x00)\ |
| 2503 | 2503 | MCFG_STEPPER_INIT_PHASE(2) |
| 2504 | ||
| 2504 | 2505 | |
| 2505 | ||
| 2506 | 2506 | MACHINE_CONFIG_FRAGMENT( mpu4_std_4reel ) |
| 2507 | 2507 | MCFG_MPU4_STD_REEL_ADD("reel0") |
| 2508 | 2508 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) |
| r242703 | r242704 | |
| 2511 | 2511 | MCFG_MPU4_STD_REEL_ADD("reel2") |
| 2512 | 2512 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) |
| 2513 | 2513 | MCFG_MPU4_STD_REEL_ADD("reel3") |
| 2514 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) | |
| 2515 | MACHINE_CONFIG_END | |
| 2514 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) | |
| 2515 | MACHINE_CONFIG_END | |
| 2516 | 2516 | |
| 2517 | 2517 | MACHINE_CONFIG_FRAGMENT( mpu4_std_5reel ) |
| 2518 | 2518 | MCFG_MPU4_STD_REEL_ADD("reel0") |
| r242703 | r242704 | |
| 2522 | 2522 | MCFG_MPU4_STD_REEL_ADD("reel2") |
| 2523 | 2523 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) |
| 2524 | 2524 | MCFG_MPU4_STD_REEL_ADD("reel3") |
| 2525 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) | |
| 2525 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) | |
| 2526 | 2526 | MCFG_MPU4_STD_REEL_ADD("reel4") |
| 2527 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) | |
| 2528 | MACHINE_CONFIG_END | |
| 2527 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) | |
| 2528 | MACHINE_CONFIG_END | |
| 2529 | 2529 | |
| 2530 | 2530 | MACHINE_CONFIG_FRAGMENT( mpu4_std_6reel ) |
| 2531 | 2531 | MCFG_MPU4_STD_REEL_ADD("reel0") |
| r242703 | r242704 | |
| 2535 | 2535 | MCFG_MPU4_STD_REEL_ADD("reel2") |
| 2536 | 2536 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) |
| 2537 | 2537 | MCFG_MPU4_STD_REEL_ADD("reel3") |
| 2538 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) | |
| 2538 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) | |
| 2539 | 2539 | MCFG_MPU4_STD_REEL_ADD("reel4") |
| 2540 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) | |
| 2540 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) | |
| 2541 | 2541 | MCFG_MPU4_STD_REEL_ADD("reel5") |
| 2542 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) | |
| 2543 | MACHINE_CONFIG_END | |
| 2542 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) | |
| 2543 | MACHINE_CONFIG_END | |
| 2544 | 2544 | |
| 2545 | 2545 | MACHINE_CONFIG_FRAGMENT( mpu4_type2_6reel ) |
| 2546 | 2546 | MCFG_MPU4_TYPE2_REEL_ADD("reel0") |
| r242703 | r242704 | |
| 2550 | 2550 | MCFG_MPU4_TYPE2_REEL_ADD("reel2") |
| 2551 | 2551 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) |
| 2552 | 2552 | MCFG_MPU4_TYPE2_REEL_ADD("reel3") |
| 2553 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) | |
| 2553 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) | |
| 2554 | 2554 | MCFG_MPU4_TYPE2_REEL_ADD("reel4") |
| 2555 | 2555 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) |
| 2556 | 2556 | MCFG_MPU4_TYPE2_REEL_ADD("reel5") |
| 2557 | 2557 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) |
| 2558 | MACHINE_CONFIG_END | |
| 2558 | MACHINE_CONFIG_END | |
| 2559 | 2559 | |
| 2560 | 2560 | |
| 2561 | 2561 | MACHINE_CONFIG_FRAGMENT( mpu4_bwb_5reel ) |
| r242703 | r242704 | |
| 2566 | 2566 | MCFG_MPU4_BWB_REEL_ADD("reel2") |
| 2567 | 2567 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) |
| 2568 | 2568 | MCFG_MPU4_BWB_REEL_ADD("reel3") |
| 2569 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) | |
| 2569 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) | |
| 2570 | 2570 | MCFG_MPU4_BWB_REEL_ADD("reel4") |
| 2571 | 2571 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) |
| 2572 | MACHINE_CONFIG_END | |
| 2573 | ||
| 2572 | MACHINE_CONFIG_END | |
| 2573 | ||
| 2574 | 2574 | MACHINE_CONFIG_FRAGMENT( mpu4_alt_7reel ) |
| 2575 | 2575 | MCFG_MPU4_TYPE3_REEL_ADD("reel0") |
| 2576 | 2576 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) |
| r242703 | r242704 | |
| 2579 | 2579 | MCFG_MPU4_TYPE3_REEL_ADD("reel2") |
| 2580 | 2580 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) |
| 2581 | 2581 | MCFG_MPU4_TYPE3_REEL_ADD("reel3") |
| 2582 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) | |
| 2582 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) | |
| 2583 | 2583 | MCFG_MPU4_TYPE3_REEL_ADD("reel4") |
| 2584 | 2584 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) |
| 2585 | 2585 | MCFG_MPU4_TYPE3_REEL_ADD("reel5") |
| r242703 | r242704 | |
| 2587 | 2587 | MCFG_MPU4_TYPE3_REEL_ADD("reel6") |
| 2588 | 2588 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel6_optic_cb)) |
| 2589 | 2589 | MCFG_MPU4_TYPE3_REEL_ADD("reel7") |
| 2590 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb)) | |
| 2591 | MACHINE_CONFIG_END | |
| 2590 | MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb)) | |
| 2591 | MACHINE_CONFIG_END | |
| 2592 | 2592 | |
| 2593 | 2593 | MACHINE_CONFIG_FRAGMENT( mpu4_common ) |
| 2594 | 2594 | MCFG_TIMER_DRIVER_ADD_PERIODIC("50hz", mpu4_state, gen_50hz, attotime::from_hz(100)) |
| r242703 | r242704 | |
| 2654 | 2654 | MCFG_PIA_CB2_HANDLER(WRITELINE(mpu4_state, pia_ic8_cb2_w)) |
| 2655 | 2655 | MCFG_PIA_IRQA_HANDLER(WRITELINE(mpu4_state, cpu0_irq)) |
| 2656 | 2656 | MCFG_PIA_IRQB_HANDLER(WRITELINE(mpu4_state, cpu0_irq)) |
| 2657 | ||
| 2657 | ||
| 2658 | 2658 | MACHINE_CONFIG_END |
| 2659 | 2659 | |
| 2660 | 2660 | MACHINE_CONFIG_FRAGMENT( mpu4_common2 ) |
| r242703 | r242704 | |
| 2727 | 2727 | |
| 2728 | 2728 | MCFG_FRAGMENT_ADD(mpu4_common2) |
| 2729 | 2729 | MCFG_FRAGMENT_ADD(mpu4_std_6reel) |
| 2730 | ||
| 2730 | ||
| 2731 | 2731 | MCFG_SOUND_ADD("msm6376", OKIM6376, 128000) //16KHz sample Can also be 85430 at 10.5KHz and 64000 at 8KHz |
| 2732 | 2732 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) |
| 2733 | 2733 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) |
| r242703 | r242704 | |
| 2749 | 2749 | |
| 2750 | 2750 | MCFG_FRAGMENT_ADD(mpu4_common2) |
| 2751 | 2751 | MCFG_FRAGMENT_ADD(mpu4_std_5reel) |
| 2752 | ||
| 2752 | ||
| 2753 | 2753 | MCFG_SOUND_ADD("msm6376", OKIM6376, 128000) //16KHz sample Can also be 85430 at 10.5KHz and 64000 at 8KHz |
| 2754 | 2754 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) |
| 2755 | 2755 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) |
| r242703 | r242704 | |
| 2759 | 2759 | MCFG_MACHINE_START_OVERRIDE(mpu4_state,mpu4bwb) |
| 2760 | 2760 | MCFG_FRAGMENT_ADD(mpu4_common2) |
| 2761 | 2761 | MCFG_FRAGMENT_ADD(mpu4_bwb_5reel) |
| 2762 | ||
| 2762 | ||
| 2763 | 2763 | MCFG_SOUND_ADD("msm6376", OKIM6376, 128000) //16KHz sample Can also be 85430 at 10.5KHz and 64000 at 8KHz |
| 2764 | 2764 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) |
| 2765 | 2765 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) |
| r242703 | r242704 | |
|---|---|---|
| 325 | 325 | // only known System Super 256 game; if more surface the BIOS should be moved out like 246/256 |
| 326 | 326 | ROM_START( timecrs4 ) |
| 327 | 327 | ROM_REGION(0x200000, "bios", 0) |
| 328 | ROM_LOAD( "r27v1602f.8g", 0x000000, 0x200000, CRC(b2a8eeb6) SHA1(bc4fb4e1e53adbd92385f1726bd69663ff870f1e) ) | |
| 328 | ROM_LOAD( "r27v1602f.8g", 0x000000, 0x200000, CRC(b2a8eeb6) SHA1(bc4fb4e1e53adbd92385f1726bd69663ff870f1e) ) | |
| 329 | 329 | |
| 330 | 330 | ROM_REGION(0x840000, "key", ROMREGION_ERASE00) |
| 331 | ROM_LOAD( "tsf1002-na-a.ic002", 0x000000, 0x800000, CRC(406183a4) SHA1(dd6afaa4808254b277c5969d071f1dd0019633a0) ) | |
| 332 | ROM_LOAD( "tsf1002-na-a_spr.ic002", 0x800000, 0x040000, CRC(e7339b66) SHA1(99a2fd5528daf11a7ea548d9de804f899a2a9c6b) ) | |
| 331 | ROM_LOAD( "tsf1002-na-a.ic002", 0x000000, 0x800000, CRC(406183a4) SHA1(dd6afaa4808254b277c5969d071f1dd0019633a0) ) | |
| 332 | ROM_LOAD( "tsf1002-na-a_spr.ic002", 0x800000, 0x040000, CRC(e7339b66) SHA1(99a2fd5528daf11a7ea548d9de804f899a2a9c6b) ) | |
| 333 | 333 | |
| 334 | DISK_REGION("dvd") | |
| 334 | DISK_REGION("dvd") // HDD for this game | |
| 335 | 335 | DISK_IMAGE_READONLY( "tsf1-ha", 0, SHA1(8ba7eec0d1add2192a115b295a32265c8d084aea) ) |
| 336 | 336 | ROM_END |
| 337 | 337 | |
| r242703 | r242704 | |
| 411 | 411 | SYSTEM256_BIOS |
| 412 | 412 | |
| 413 | 413 | ROM_REGION(0x840000, "key", ROMREGION_ERASE00) |
| 414 | ROM_LOAD( "ted1vera.ic002", 0x000000, 0x800000, CRC(491521d1) SHA1(9c27836445690bc083c6f274a4b1a499d5677830) ) | |
| 415 | ROM_LOAD( "ted1vera_spr.ic002", 0x800000, 0x040000, CRC(a9e1e92b) SHA1(3843d0fea2f12f14f83d0a04430bb9b01cfdef07) ) | |
| 414 | ROM_LOAD( "ted1vera.ic002", 0x000000, 0x800000, CRC(491521d1) SHA1(9c27836445690bc083c6f274a4b1a499d5677830) ) | |
| 415 | ROM_LOAD( "ted1vera_spr.ic002", 0x800000, 0x040000, CRC(a9e1e92b) SHA1(3843d0fea2f12f14f83d0a04430bb9b01cfdef07) ) | |
| 416 | 416 | |
| 417 | 417 | DISK_REGION("dvd") |
| 418 | 418 | DISK_IMAGE_READONLY( "ted1dvd0b", 0, SHA1(5940cc628a1555763ef2055e518f840f9a44d123) ) |
| r242703 | r242704 | |
| 435 | 435 | SYSTEM246_BIOS |
| 436 | 436 | |
| 437 | 437 | ROM_REGION(0x840000, "key", ROMREGION_ERASE00) |
| 438 | ROM_LOAD( "pr21vera.ic002", 0x000000, 0x800000, CRC(36634ad2) SHA1(e365a79220202640e5bc80bbd8a329012f22f9c4) ) | |
| 439 | ROM_LOAD( "pr21vera_spr.ic002", 0x000000, 0x040000, CRC(4e81ef24) SHA1(7b7b9d9a0193bcaccb1578cae9dde37fc456e6f8) ) | |
| 438 | ROM_LOAD( "pr21vera.ic002", 0x000000, 0x800000, CRC(36634ad2) SHA1(e365a79220202640e5bc80bbd8a329012f22f9c4) ) | |
| 439 | ROM_LOAD( "pr21vera_spr.ic002", 0x000000, 0x040000, CRC(4e81ef24) SHA1(7b7b9d9a0193bcaccb1578cae9dde37fc456e6f8) ) | |
| 440 | 440 | |
| 441 | 441 | DISK_REGION("dvd") |
| 442 | 442 | DISK_IMAGE_READONLY( "pr21dvd0", 0, SHA1(6bad5c25996bbe68da71199fbe8377b51fe78d81) ) |
| r242703 | r242704 | |
| 513 | 513 | SYSTEM246_BIOS |
| 514 | 514 | |
| 515 | 515 | ROM_REGION(0x840000, "key", ROMREGION_ERASE00) |
| 516 | ROM_LOAD( "rrv2vera.ic002", 0x000000, 0x800000, CRC(4666f6b5) SHA1(974ed4f6c5869ecf879c0d3540db6ea576225c04) ) | |
| 517 | ROM_LOAD( "rrv2vera_spr.ic002", 0x800000, 0x040000, CRC(8d98ef04) SHA1(3f33046a8283b918226301fcf5538729be84bfbe) ) | |
| 516 | ROM_LOAD( "rrv2vera.ic002", 0x000000, 0x800000, CRC(4666f6b5) SHA1(974ed4f6c5869ecf879c0d3540db6ea576225c04) ) | |
| 517 | ROM_LOAD( "rrv2vera_spr.ic002", 0x800000, 0x040000, CRC(8d98ef04) SHA1(3f33046a8283b918226301fcf5538729be84bfbe) ) | |
| 518 | 518 | |
| 519 | 519 | ROM_REGION(0x4010, "jvsio", 0) // Namco "FCA" JVS I/O board PIC16F84 code (see namcos23.c for FCA details) |
| 520 | 520 | ROM_LOAD( "fcap11.ic2", 0x000000, 0x004010, CRC(1b2592ce) SHA1(a1a487361053af564f6ec67e545413e370a3b38c) ) |
| r242703 | r242704 | |
| 579 | 579 | SYSTEM246_BIOS |
| 580 | 580 | |
| 581 | 581 | ROM_REGION(0x840000, "key", ROMREGION_ERASE00) |
| 582 | ROM_LOAD( "qg1vera.ic002", 0x000000, 0x800000, CRC(650d55fa) SHA1(cf1210bc1f2d48c298ed19e3c6a1e5e564840e47) ) | |
| 583 | ROM_LOAD( "qg1vera_spr.ic002", 0x800000, 0x040000, CRC(d9715f53) SHA1(e45f0eef5b82b2e1afb054a137aced0344ddbd71) ) | |
| 582 | ROM_LOAD( "qg1vera.ic002", 0x000000, 0x800000, CRC(650d55fa) SHA1(cf1210bc1f2d48c298ed19e3c6a1e5e564840e47) ) | |
| 583 | ROM_LOAD( "qg1vera_spr.ic002", 0x800000, 0x040000, CRC(d9715f53) SHA1(e45f0eef5b82b2e1afb054a137aced0344ddbd71) ) | |
| 584 | 584 | |
| 585 | 585 | DISK_REGION("dvd") |
| 586 | 586 | DISK_IMAGE_READONLY( "qg1", 0, SHA1(80fe5cb325c7cfa439d66e9d264337c01559d0e5) ) |
| r242703 | r242704 | |
| 614 | 614 | SYSTEM256_BIOS |
| 615 | 615 | |
| 616 | 616 | ROM_REGION(0x840000, "key", ROMREGION_ERASE00) |
| 617 | ROM_LOAD( "gvs1vera.ic002", 0x000000, 0x800000, CRC(b938b96d) SHA1(e79bc7f8c234d51d1b6a34be88f34abc8205a370) ) | |
| 618 | ROM_LOAD( "gvs1vera_spr.ic002", 0x800000, 0x040000, CRC(f2d65d54) SHA1(297726098c3723e38cbaf3a3150a4a027a9c2124) ) | |
| 617 | ROM_LOAD( "gvs1vera.ic002", 0x000000, 0x800000, CRC(b938b96d) SHA1(e79bc7f8c234d51d1b6a34be88f34abc8205a370) ) | |
| 618 | ROM_LOAD( "gvs1vera_spr.ic002", 0x800000, 0x040000, CRC(f2d65d54) SHA1(297726098c3723e38cbaf3a3150a4a027a9c2124) ) | |
| 619 | 619 | |
| 620 | 620 | DISK_REGION("dvd") |
| 621 | 621 | DISK_IMAGE_READONLY( "gvs1dvd0b", 0, SHA1(3cf9ade5495982fcb8e106e7be4067429530f864) ) |
| r242703 | r242704 | |
| 703 | 703 | |
| 704 | 704 | // System Super 256 |
| 705 | 705 | GAME(2006, timecrs4, sys256, system256, system246, driver_device, 0, ROT0, "Namco", "Time Crisis 4", GAME_IS_SKELETON) |
| 706 |
| r242703 | r242704 | |
|---|---|---|
| 274 | 274 | static MACHINE_CONFIG_START( overdriv, overdriv_state ) |
| 275 | 275 | |
| 276 | 276 | /* basic machine hardware */ |
| 277 | MCFG_CPU_ADD("maincpu", M68000, | |
| 277 | MCFG_CPU_ADD("maincpu", M68000,24000000/2) /* 12 MHz */ | |
| 278 | 278 | MCFG_CPU_PROGRAM_MAP(overdriv_master_map) |
| 279 | 279 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", overdriv_state, overdriv_cpuA_scanline, "screen", 0, 1) |
| 280 | 280 | |
| 281 | MCFG_CPU_ADD("sub", M68000, | |
| 281 | MCFG_CPU_ADD("sub", M68000,24000000/2) /* 12 MHz */ | |
| 282 | 282 | MCFG_CPU_PROGRAM_MAP(overdriv_slave_map) |
| 283 | 283 | MCFG_CPU_VBLANK_INT_DRIVER("screen", overdriv_state, cpuB_interrupt) /* IRQ 5 and 6 are generated by the main CPU. */ |
| 284 | 284 | /* IRQ 5 is used only in test mode, to request the checksums of the gfx ROMs. */ |
| 285 | 285 | |
| 286 | MCFG_CPU_ADD("audiocpu", M6809, | |
| 286 | MCFG_CPU_ADD("audiocpu", M6809,3579545) /* 1.789 MHz?? This might be the right speed, but ROM testing */ | |
| 287 | 287 | MCFG_CPU_PROGRAM_MAP(overdriv_sound_map) /* takes a little too much (the counter wraps from 0000 to 9999). */ |
| 288 | 288 | /* This might just mean that the video refresh rate is less than */ |
| 289 | 289 | /* 60 fps, that's how I fixed it for now. */ |
| r242703 | r242704 | |
| 330 | 330 | MCFG_K053250_ADD("k053250_1", "palette", "screen", 0, 0) |
| 331 | 331 | MCFG_K053250_ADD("k053250_2", "palette", "screen", 0, 0) |
| 332 | 332 | |
| 333 | MCFG_DEVICE_ADD("k053252", K053252, | |
| 333 | MCFG_DEVICE_ADD("k053252", K053252, 24000000/4) | |
| 334 | 334 | MCFG_K053252_OFFSETS(13*8, 2*8) |
| 335 | 335 | |
| 336 | 336 | /* sound hardware */ |
| 337 | 337 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 338 | 338 | |
| 339 | MCFG_YM2151_ADD("ymsnd", | |
| 339 | MCFG_YM2151_ADD("ymsnd", 3579545) | |
| 340 | 340 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.5) |
| 341 | 341 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.5) |
| 342 | 342 | |
| 343 | MCFG_K053260_ADD("k053260_1", | |
| 343 | MCFG_K053260_ADD("k053260_1", 3579545) | |
| 344 | 344 | MCFG_K053260_REGION("shared") |
| 345 | 345 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.35) |
| 346 | 346 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.35) |
| 347 | 347 | |
| 348 | MCFG_K053260_ADD("k053260_2", | |
| 348 | MCFG_K053260_ADD("k053260_2", 3579545) | |
| 349 | 349 | MCFG_K053260_REGION("shared") |
| 350 | 350 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.35) |
| 351 | 351 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.35) |
| r242703 | r242704 | |
| 361 | 361 | |
| 362 | 362 | ROM_START( overdriv ) |
| 363 | 363 | ROM_REGION( 0x40000, "maincpu", 0 ) |
| 364 | ROM_LOAD16_BYTE( "789_n05.d17", 0x00000, 0x20000, CRC(f7885713) SHA1(8e84929dcc6ab889c3e11c450d22c56b183b0198) ) | |
| 365 | ROM_LOAD16_BYTE( "789_n04.b17", 0x00001, 0x20000, CRC(aefe87a6) SHA1(1bdf5a1f4c5e2b84d02b2981b3be91ed2406a1f8) ) | |
| 364 | ROM_LOAD16_BYTE( "789.2", 0x00000, 0x20000, CRC(77f18f3f) SHA1(a8c91435573c7851a7864d07eeacfb2f142abbe2) ) | |
| 365 | ROM_LOAD16_BYTE( "789.1", 0x00001, 0x20000, CRC(4f44e6ad) SHA1(9fa871f55e6b2ec353dd979ded568cd9da83f5d6) ) | |
| 366 | 366 | |
| 367 | 367 | ROM_REGION( 0x40000, "sub", 0 ) |
| 368 | ROM_LOAD16_BYTE( "789_e09.l10", 0x00000, 0x20000, CRC(46fb7e88) SHA1(f706a76aff9bec64abe6da325cba0715d6e6ed0a) ) /* also found labeled as "4" as well as "7" */ | |
| 369 | ROM_LOAD16_BYTE( "789_e08.k10", 0x00001, 0x20000, CRC(24427195) SHA1(48f4f81729acc0e497b40fddbde11242c5c4c573) ) /* also found labeled as "3" as well as "6" */ | |
| 368 | ROM_LOAD16_BYTE( "789.4", 0x00000, 0x20000, CRC(46fb7e88) SHA1(f706a76aff9bec64abe6da325cba0715d6e6ed0a) ) | |
| 369 | ROM_LOAD16_BYTE( "789.3", 0x00001, 0x20000, CRC(24427195) SHA1(48f4f81729acc0e497b40fddbde11242c5c4c573) ) | |
| 370 | 370 | |
| 371 | 371 | ROM_REGION( 0x10000, "audiocpu", 0 ) |
| 372 | ROM_LOAD( "789 | |
| 372 | ROM_LOAD( "789.5", 0x00000, 0x10000, CRC(1085f069) SHA1(27228cedb357ff2e130a4bd6d8aa01cf537e034f) ) | |
| 373 | 373 | |
| 374 | 374 | ROM_REGION( 0x400000, "gfx1", 0 ) /* graphics (addressable by the CPU) */ |
| 375 | ROM_LOAD64_WORD( "789e12.r1", 0x000000, 0x100000, CRC(14a10fb2) SHA1(03fb9c15514c5ecc2d9ae4a53961c4bbb49cec73) ) /* sprites */ | |
| 376 | ROM_LOAD64_WORD( "789e13.r4", 0x000002, 0x100000, CRC(6314a628) SHA1(f8a8918998c266109348c77427a7696b503daeb3) ) | |
| 377 | ROM_LOAD64_WORD( "789e14.r10", 0x000004, 0x100000, CRC(b5eca14b) SHA1(a1c5f5e9cd8bbcfc875e2acb33be024724da63aa) ) | |
| 378 | ROM_LOAD64_WORD( "789e15.r15", 0x000006, 0x100000, CRC(5d93e0c3) SHA1(d5cb7666c0c28fd465c860c7f9dbb18a7f739a93) ) | |
| 375 | ROM_LOAD64_WORD( "e12.r1", 0x000000, 0x100000, CRC(14a10fb2) SHA1(03fb9c15514c5ecc2d9ae4a53961c4bbb49cec73) ) /* sprites */ | |
| 376 | ROM_LOAD64_WORD( "e13.r4", 0x000002, 0x100000, CRC(6314a628) SHA1(f8a8918998c266109348c77427a7696b503daeb3) ) | |
| 377 | ROM_LOAD64_WORD( "e14.r10", 0x000004, 0x100000, CRC(b5eca14b) SHA1(a1c5f5e9cd8bbcfc875e2acb33be024724da63aa) ) | |
| 378 | ROM_LOAD64_WORD( "e15.r15", 0x000006, 0x100000, CRC(5d93e0c3) SHA1(d5cb7666c0c28fd465c860c7f9dbb18a7f739a93) ) | |
| 379 | 379 | |
| 380 | 380 | ROM_REGION( 0x020000, "k051316_1", 0 ) |
| 381 | ROM_LOAD( " | |
| 381 | ROM_LOAD( "e06.a21", 0x000000, 0x020000, CRC(14a085e6) SHA1(86dad6f223e13ff8af7075c3d99bb0a83784c384) ) /* zoom/rotate */ | |
| 382 | 382 | |
| 383 | 383 | ROM_REGION( 0x020000, "k051316_2", 0 ) |
| 384 | ROM_LOAD( " | |
| 384 | ROM_LOAD( "e07.c23", 0x000000, 0x020000, CRC(8a6ceab9) SHA1(1a52b7361f71a6126cd648a76af00223d5b25c7a) ) /* zoom/rotate */ | |
| 385 | 385 | |
| 386 | 386 | ROM_REGION( 0x0c0000, "k053250_1", 0 ) |
| 387 | ROM_LOAD( "789e18.p22", 0x000000, 0x040000, CRC(985a4a75) SHA1(b726166c295be6fbec38a9d11098cc4a4a5de456) ) | |
| 388 | ROM_LOAD( "789e19.r22", 0x040000, 0x040000, CRC(15c54ea2) SHA1(5b10bd28e48e51613359820ba8c75d4a91c2d322) ) | |
| 389 | ROM_LOAD( "789e20.s22", 0x080000, 0x040000, CRC(ea204acd) SHA1(52b8c30234eaefcba1074496028a4ac2bca48e95) ) | |
| 387 | ROM_LOAD( "e18.p22", 0x000000, 0x040000, CRC(985a4a75) SHA1(b726166c295be6fbec38a9d11098cc4a4a5de456) ) | |
| 388 | ROM_LOAD( "e19.r22", 0x040000, 0x040000, CRC(15c54ea2) SHA1(5b10bd28e48e51613359820ba8c75d4a91c2d322) ) | |
| 389 | ROM_LOAD( "e20.s22", 0x080000, 0x040000, CRC(ea204acd) SHA1(52b8c30234eaefcba1074496028a4ac2bca48e95) ) | |
| 390 | 390 | |
| 391 | 391 | ROM_REGION( 0x080000, "k053250_2", 0 ) |
| 392 | ROM_LOAD( "789e17.p17", 0x000000, 0x040000, CRC(04c07248) SHA1(873445002cbf90c9fc5a35bf4a8f6c43193ee342) ) | |
| 393 | ROM_LOAD( "789e16.p12", 0x040000, 0x040000, CRC(9348dee1) SHA1(367193373e28962b5b0e54cc15d68ed88ab83f12) ) | |
| 392 | ROM_LOAD( "e17.p17", 0x000000, 0x040000, CRC(04c07248) SHA1(873445002cbf90c9fc5a35bf4a8f6c43193ee342) ) | |
| 393 | ROM_LOAD( "e16.p12", 0x040000, 0x040000, CRC(9348dee1) SHA1(367193373e28962b5b0e54cc15d68ed88ab83f12) ) | |
| 394 | 394 | |
| 395 | 395 | ROM_REGION( 0x200000, "shared", 0 ) /* 053260 samples */ |
| 396 | ROM_LOAD( "789e03.j1", 0x000000, 0x100000, CRC(51ebfebe) SHA1(17f0c23189258e801f48d5833fe934e7a48d071b) ) | |
| 397 | ROM_LOAD( "789e02.f1", 0x100000, 0x100000, CRC(bdd3b5c6) SHA1(412332d64052c0a3714f4002c944b0e7d32980a4) ) | |
| 396 | ROM_LOAD( "e03.j1", 0x000000, 0x100000, CRC(51ebfebe) SHA1(17f0c23189258e801f48d5833fe934e7a48d071b) ) | |
| 397 | ROM_LOAD( "e02.f1", 0x100000, 0x100000, CRC(bdd3b5c6) SHA1(412332d64052c0a3714f4002c944b0e7d32980a4) ) | |
| 398 | 398 | ROM_END |
| 399 | 399 | |
| 400 | ROM_START( overdriva ) | |
| 401 | ROM_REGION( 0x40000, "maincpu", 0 ) | |
| 402 | ROM_LOAD16_BYTE( "2.d17", 0x00000, 0x20000, CRC(77f18f3f) SHA1(a8c91435573c7851a7864d07eeacfb2f142abbe2) ) | |
| 403 | ROM_LOAD16_BYTE( "1.b17", 0x00001, 0x20000, CRC(4f44e6ad) SHA1(9fa871f55e6b2ec353dd979ded568cd9da83f5d6) ) /* also found labeled as "3" */ | |
| 404 | ||
| 405 | ROM_REGION( 0x40000, "sub", 0 ) | |
| 406 | ROM_LOAD16_BYTE( "789_e09.l10", 0x00000, 0x20000, CRC(46fb7e88) SHA1(f706a76aff9bec64abe6da325cba0715d6e6ed0a) ) /* also found labeled as "4" as well as "7" */ | |
| 407 | ROM_LOAD16_BYTE( "789_e08.k10", 0x00001, 0x20000, CRC(24427195) SHA1(48f4f81729acc0e497b40fddbde11242c5c4c573) ) /* also found labeled as "3" as well as "6" */ | |
| 408 | ||
| 409 | ROM_REGION( 0x10000, "audiocpu", 0 ) | |
| 410 | ROM_LOAD( "789_e01.e4", 0x00000, 0x10000, CRC(1085f069) SHA1(27228cedb357ff2e130a4bd6d8aa01cf537e034f) ) /* also found labeled as "5" */ | |
| 411 | ||
| 412 | ROM_REGION( 0x400000, "gfx1", 0 ) /* graphics (addressable by the CPU) */ | |
| 413 | ROM_LOAD64_WORD( "789e12.r1", 0x000000, 0x100000, CRC(14a10fb2) SHA1(03fb9c15514c5ecc2d9ae4a53961c4bbb49cec73) ) /* sprites */ | |
| 414 | ROM_LOAD64_WORD( "789e13.r4", 0x000002, 0x100000, CRC(6314a628) SHA1(f8a8918998c266109348c77427a7696b503daeb3) ) | |
| 415 | ROM_LOAD64_WORD( "789e14.r10", 0x000004, 0x100000, CRC(b5eca14b) SHA1(a1c5f5e9cd8bbcfc875e2acb33be024724da63aa) ) | |
| 416 | ROM_LOAD64_WORD( "789e15.r15", 0x000006, 0x100000, CRC(5d93e0c3) SHA1(d5cb7666c0c28fd465c860c7f9dbb18a7f739a93) ) | |
| 417 | ||
| 418 | ROM_REGION( 0x020000, "k051316_1", 0 ) | |
| 419 | ROM_LOAD( "789e06.a21", 0x000000, 0x020000, CRC(14a085e6) SHA1(86dad6f223e13ff8af7075c3d99bb0a83784c384) ) /* zoom/rotate */ | |
| 420 | ||
| 421 | ROM_REGION( 0x020000, "k051316_2", 0 ) | |
| 422 | ROM_LOAD( "789e07.c23", 0x000000, 0x020000, CRC(8a6ceab9) SHA1(1a52b7361f71a6126cd648a76af00223d5b25c7a) ) /* zoom/rotate */ | |
| 423 | ||
| 424 | ROM_REGION( 0x0c0000, "k053250_1", 0 ) | |
| 425 | ROM_LOAD( "789e18.p22", 0x000000, 0x040000, CRC(985a4a75) SHA1(b726166c295be6fbec38a9d11098cc4a4a5de456) ) | |
| 426 | ROM_LOAD( "789e19.r22", 0x040000, 0x040000, CRC(15c54ea2) SHA1(5b10bd28e48e51613359820ba8c75d4a91c2d322) ) | |
| 427 | ROM_LOAD( "789e20.s22", 0x080000, 0x040000, CRC(ea204acd) SHA1(52b8c30234eaefcba1074496028a4ac2bca48e95) ) | |
| 428 | ||
| 429 | ROM_REGION( 0x080000, "k053250_2", 0 ) | |
| 430 | ROM_LOAD( "789e17.p17", 0x000000, 0x040000, CRC(04c07248) SHA1(873445002cbf90c9fc5a35bf4a8f6c43193ee342) ) | |
| 431 | ROM_LOAD( "789e16.p12", 0x040000, 0x040000, CRC(9348dee1) SHA1(367193373e28962b5b0e54cc15d68ed88ab83f12) ) | |
| 432 | ||
| 433 | ROM_REGION( 0x200000, "shared", 0 ) /* 053260 samples */ | |
| 434 | ROM_LOAD( "789e03.j1", 0x000000, 0x100000, CRC(51ebfebe) SHA1(17f0c23189258e801f48d5833fe934e7a48d071b) ) | |
| 435 | ROM_LOAD( "789e02.f1", 0x100000, 0x100000, CRC(bdd3b5c6) SHA1(412332d64052c0a3714f4002c944b0e7d32980a4) ) | |
| 436 | ROM_END | |
| 437 | ||
| 438 | ROM_START( overdrivb ) | |
| 439 | ROM_REGION( 0x40000, "maincpu", 0 ) | |
| 440 | ROM_LOAD16_BYTE( "4.d17", 0x00000, 0x20000, CRC(93c8e892) SHA1(fb41bb13787b93f533b962c3119e6b9f61e2f3f3) ) | |
| 441 | ROM_LOAD16_BYTE( "3.b17", 0x00001, 0x20000, CRC(4f44e6ad) SHA1(9fa871f55e6b2ec353dd979ded568cd9da83f5d6) ) /* also found labeled as "1" */ | |
| 442 | ||
| 443 | ROM_REGION( 0x40000, "sub", 0 ) | |
| 444 | ROM_LOAD16_BYTE( "789_e09.l10", 0x00000, 0x20000, CRC(46fb7e88) SHA1(f706a76aff9bec64abe6da325cba0715d6e6ed0a) ) /* also found labeled as "4" as well as "7" */ | |
| 445 | ROM_LOAD16_BYTE( "789_e08.k10", 0x00001, 0x20000, CRC(24427195) SHA1(48f4f81729acc0e497b40fddbde11242c5c4c573) ) /* also found labeled as "3" as well as "6" */ | |
| 446 | ||
| 447 | ROM_REGION( 0x10000, "audiocpu", 0 ) | |
| 448 | ROM_LOAD( "789_e01.e4", 0x00000, 0x10000, CRC(1085f069) SHA1(27228cedb357ff2e130a4bd6d8aa01cf537e034f) ) /* also found labeled as "5" */ | |
| 449 | ||
| 450 | ROM_REGION( 0x400000, "gfx1", 0 ) /* graphics (addressable by the CPU) */ | |
| 451 | ROM_LOAD64_WORD( "789e12.r1", 0x000000, 0x100000, CRC(14a10fb2) SHA1(03fb9c15514c5ecc2d9ae4a53961c4bbb49cec73) ) /* sprites */ | |
| 452 | ROM_LOAD64_WORD( "789e13.r4", 0x000002, 0x100000, CRC(6314a628) SHA1(f8a8918998c266109348c77427a7696b503daeb3) ) | |
| 453 | ROM_LOAD64_WORD( "789e14.r10", 0x000004, 0x100000, CRC(b5eca14b) SHA1(a1c5f5e9cd8bbcfc875e2acb33be024724da63aa) ) | |
| 454 | ROM_LOAD64_WORD( "789e15.r15", 0x000006, 0x100000, CRC(5d93e0c3) SHA1(d5cb7666c0c28fd465c860c7f9dbb18a7f739a93) ) | |
| 455 | ||
| 456 | ROM_REGION( 0x020000, "k051316_1", 0 ) | |
| 457 | ROM_LOAD( "789e06.a21", 0x000000, 0x020000, CRC(14a085e6) SHA1(86dad6f223e13ff8af7075c3d99bb0a83784c384) ) /* zoom/rotate */ | |
| 458 | ||
| 459 | ROM_REGION( 0x020000, "k051316_2", 0 ) | |
| 460 | ROM_LOAD( "789e07.c23", 0x000000, 0x020000, CRC(8a6ceab9) SHA1(1a52b7361f71a6126cd648a76af00223d5b25c7a) ) /* zoom/rotate */ | |
| 461 | ||
| 462 | ROM_REGION( 0x0c0000, "k053250_1", 0 ) | |
| 463 | ROM_LOAD( "789e18.p22", 0x000000, 0x040000, CRC(985a4a75) SHA1(b726166c295be6fbec38a9d11098cc4a4a5de456) ) | |
| 464 | ROM_LOAD( "789e19.r22", 0x040000, 0x040000, CRC(15c54ea2) SHA1(5b10bd28e48e51613359820ba8c75d4a91c2d322) ) | |
| 465 | ROM_LOAD( "789e20.s22", 0x080000, 0x040000, CRC(ea204acd) SHA1(52b8c30234eaefcba1074496028a4ac2bca48e95) ) | |
| 466 | ||
| 467 | ROM_REGION( 0x080000, "k053250_2", 0 ) | |
| 468 | ROM_LOAD( "789e17.p17", 0x000000, 0x040000, CRC(04c07248) SHA1(873445002cbf90c9fc5a35bf4a8f6c43193ee342) ) | |
| 469 | ROM_LOAD( "789e16.p12", 0x040000, 0x040000, CRC(9348dee1) SHA1(367193373e28962b5b0e54cc15d68ed88ab83f12) ) | |
| 470 | ||
| 471 | ROM_REGION( 0x200000, "shared", 0 ) /* 053260 samples */ | |
| 472 | ROM_LOAD( "789e03.j1", 0x000000, 0x100000, CRC(51ebfebe) SHA1(17f0c23189258e801f48d5833fe934e7a48d071b) ) | |
| 473 | ROM_LOAD( "789e02.f1", 0x100000, 0x100000, CRC(bdd3b5c6) SHA1(412332d64052c0a3714f4002c944b0e7d32980a4) ) | |
| 474 | ROM_END | |
| 475 | ||
| 476 | GAMEL( 1990, overdriv, 0, overdriv, overdriv, driver_device, 0, ROT90, "Konami", "Over Drive (set 1)", GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE, layout_overdriv ) | |
| 477 | GAMEL( 1990, overdriva, overdriv, overdriv, overdriv, driver_device, 0, ROT90, "Konami", "Over Drive (set 2)", GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE, layout_overdriv ) | |
| 478 | GAMEL( 1990, overdrivb, overdriv, overdriv, overdriv, driver_device, 0, ROT90, "Konami", "Over Drive (set 3)", GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE, layout_overdriv ) | |
| No newline at end of file | ||
| 400 | GAMEL( 1990, overdriv, 0, overdriv, overdriv, driver_device, 0, ROT90, "Konami", "Over Drive", GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE, layout_overdriv ) |
| r242703 | r242704 | |
|---|---|---|
| 106 | 106 | |
| 107 | 107 | static ADDRESS_MAP_START( oki_map, AS_0, 8, relief_state ) |
| 108 | 108 | AM_RANGE(0x00000, 0x1ffff) AM_ROMBANK("okibank") |
| 109 | AM_RANGE(0x20000, 0x3ffff) AM_ROM | |
| 109 | AM_RANGE(0x20000, 0x3ffff) AM_ROM | |
| 110 | 110 | ADDRESS_MAP_END |
| 111 | 111 | |
| 112 | 112 | |
| r242703 | r242704 | |
| 431 | 431 | } |
| 432 | 432 | |
| 433 | 433 | |
| 434 | ||
| 434 | 435 | |
| 435 | ||
| 436 | 436 | /************************************* |
| 437 | 437 | * |
| 438 | 438 | * Game driver(s) |
| r242703 | r242704 | |
|---|---|---|
| 131 | 131 | // (chip select for an unpopulated fourth ROM?) |
| 132 | 132 | switch (data & 0x1c) |
| 133 | 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 | |
| 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 | 138 | } |
| 139 | 139 | // bits 0-1 are a13-a14 |
| 140 | 140 | m_adpcm_pos |= (data & 0x03) * 0x2000 * 2; |
| r242703 | r242704 | |
|---|---|---|
| 6 | 6 | |
| 7 | 7 | Games supported: |
| 8 | 8 | * Super Breakout |
| 9 | * Super Breakout (Canyon and Vertical Breakout, prototype) | |
| 10 | * Super Breakout (Cocktail, prototype) | |
| 9 | * Super Breakout (Canyon and Vertical Breakout, prototype) - built from original source code | |
| 11 | 10 | |
| 12 | 11 | Known issues: |
| 13 | 12 | * none at this time |
| r242703 | r242704 | |
| 60 | 59 | UINT8 m_pot_trigger[2]; |
| 61 | 60 | DECLARE_WRITE8_MEMBER(irq_ack_w); |
| 62 | 61 | DECLARE_READ8_MEMBER(switches_r); |
| 63 | DECLARE_READ8_MEMBER(sbrkoutct_switches_r); | |
| 64 | 62 | DECLARE_WRITE8_MEMBER(pot_mask1_w); |
| 65 | 63 | DECLARE_WRITE8_MEMBER(pot_mask2_w); |
| 66 | 64 | DECLARE_WRITE8_MEMBER(start_1_led_w); |
| 67 | 65 | DECLARE_WRITE8_MEMBER(start_2_led_w); |
| 68 | 66 | DECLARE_WRITE8_MEMBER(serve_led_w); |
| 69 | DECLARE_WRITE8_MEMBER(serve_2_led_w); | |
| 70 | 67 | DECLARE_WRITE8_MEMBER(coincount_w); |
| 71 | 68 | DECLARE_READ8_MEMBER(sync_r); |
| 72 | 69 | DECLARE_READ8_MEMBER(sync2_r); |
| r242703 | r242704 | |
| 215 | 212 | return result; |
| 216 | 213 | } |
| 217 | 214 | |
| 218 | READ8_MEMBER(sbrkout_state::sbrkoutct_switches_r) | |
| 219 | { | |
| 220 | UINT8 result = 0xff; | |
| 221 | 215 | |
| 222 | switch( offset ) | |
| 223 | { | |
| 224 | case 0x28: result = ioport("SELECT")->read(); break; | |
| 225 | case 0x2e: result = ioport("SERVE")->read(); break; | |
| 226 | case 0x2f: result = ioport("SERVE2")->read(); break; | |
| 227 | case 0x30: result = (ioport("DIPS")->read() & 0x03) << 6; break; | |
| 228 | case 0x31: result = (ioport("DIPS")->read() & 0x0c) << 4; break; | |
| 229 | case 0x32: result = ioport("DIPS")->read() & 0xc0; break; | |
| 230 | case 0x33: result = (ioport("DIPS")->read() & 0x30) << 2; break; | |
| 231 | default: logerror("Unknown port read %x\n", offset); break; | |
| 232 | } | |
| 233 | return result; | |
| 234 | } | |
| 235 | ||
| 236 | 216 | void sbrkout_state::update_nmi_state() |
| 237 | 217 | { |
| 238 | 218 | if ((m_pot_trigger[0] & ~m_pot_mask[0]) | (m_pot_trigger[1] & ~m_pot_mask[1])) |
| r242703 | r242704 | |
| 295 | 275 | output_set_led_value(0, ~offset & 1); |
| 296 | 276 | } |
| 297 | 277 | |
| 298 | WRITE8_MEMBER(sbrkout_state::serve_2_led_w) | |
| 299 | { | |
| 300 | output_set_led_value(1, ~offset & 1); | |
| 301 | } | |
| 302 | 278 | |
| 303 | 279 | WRITE8_MEMBER(sbrkout_state::coincount_w) |
| 304 | 280 | { |
| r242703 | r242704 | |
| 411 | 387 | AM_RANGE(0x2800, 0x3fff) AM_ROM |
| 412 | 388 | ADDRESS_MAP_END |
| 413 | 389 | |
| 414 | static ADDRESS_MAP_START( sbrkoutct_main_map, AS_PROGRAM, 8, sbrkout_state ) | |
| 415 | ADDRESS_MAP_GLOBAL_MASK(0x3fff) | |
| 416 | AM_RANGE(0x0000, 0x007f) AM_MIRROR(0x380) AM_RAMBANK("bank1") | |
| 417 | AM_RANGE(0x0400, 0x07ff) AM_RAM_WRITE(sbrkout_videoram_w) AM_SHARE("videoram") | |
| 418 | AM_RANGE(0x0800, 0x083f) AM_READ(sbrkoutct_switches_r) | |
| 419 | AM_RANGE(0x0840, 0x0840) AM_MIRROR(0x003f) AM_READ_PORT("COIN") | |
| 420 | AM_RANGE(0x0880, 0x0880) AM_MIRROR(0x003f) AM_READ_PORT("START") | |
| 421 | AM_RANGE(0x08c0, 0x08c0) AM_MIRROR(0x003f) AM_READ_PORT("SERVICE") | |
| 422 | AM_RANGE(0x0c00, 0x0c00) AM_MIRROR(0x03ff) AM_READ(sync_r) | |
| 423 | AM_RANGE(0x0c10, 0x0c11) AM_MIRROR(0x000e) AM_WRITE(serve_led_w) | |
| 424 | AM_RANGE(0x0c20, 0x0c21) AM_MIRROR(0x000e) AM_WRITE(serve_2_led_w) | |
| 425 | AM_RANGE(0x0c30, 0x0c31) AM_MIRROR(0x000e) AM_WRITE(start_1_led_w) | |
| 426 | AM_RANGE(0x0c40, 0x0c41) AM_MIRROR(0x000e) AM_WRITE(start_2_led_w) | |
| 427 | AM_RANGE(0x0c50, 0x0c51) AM_MIRROR(0x000e) AM_WRITE(pot_mask1_w) | |
| 428 | AM_RANGE(0x0c60, 0x0c61) AM_MIRROR(0x000e) AM_WRITE(pot_mask2_w) | |
| 429 | AM_RANGE(0x0c70, 0x0c71) AM_MIRROR(0x000e) AM_WRITE(coincount_w) | |
| 430 | AM_RANGE(0x0c80, 0x0c80) AM_MIRROR(0x007f) AM_WRITE(watchdog_reset_w) | |
| 431 | AM_RANGE(0x0e00, 0x0e00) AM_MIRROR(0x007f) AM_WRITE(irq_ack_w) | |
| 432 | AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x03ff) AM_READ(sync2_r) | |
| 433 | AM_RANGE(0x2800, 0x3fff) AM_ROM | |
| 434 | ADDRESS_MAP_END | |
| 435 | 390 | |
| 436 | 391 | |
| 437 | 392 | /************************************* |
| r242703 | r242704 | |
| 520 | 475 | PORT_CONFSETTING( 0x02, "Vertical" ) |
| 521 | 476 | INPUT_PORTS_END |
| 522 | 477 | |
| 523 | static INPUT_PORTS_START( sbrkoutct ) | |
| 524 | PORT_INCLUDE(sbrkout) | |
| 525 | ||
| 526 | PORT_START("SERVE2") | |
| 527 | PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED ) | |
| 528 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) | |
| 529 | ||
| 530 | PORT_MODIFY("SELECT") | |
| 531 | PORT_CONFNAME(0x80, 0x00, "Game Select" ) | |
| 532 | PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) | |
| 533 | PORT_CONFSETTING( 0x80, DEF_STR( On ) ) | |
| 534 | INPUT_PORTS_END | |
| 535 | ||
| 536 | 478 | /************************************* |
| 537 | 479 | * |
| 538 | 480 | * Graphics definitions |
| r242703 | r242704 | |
| 601 | 543 | MACHINE_CONFIG_END |
| 602 | 544 | |
| 603 | 545 | |
| 604 | static MACHINE_CONFIG_DERIVED(sbrkoutct, sbrkout) | |
| 605 | MCFG_CPU_MODIFY("maincpu") | |
| 606 | MCFG_CPU_PROGRAM_MAP(sbrkoutct_main_map) | |
| 607 | MACHINE_CONFIG_END | |
| 608 | 546 | |
| 609 | 547 | /************************************* |
| 610 | 548 | * |
| r242703 | r242704 | |
| 660 | 598 | ROM_LOAD( "006401.e2", 0x0100, 0x0020, CRC(857df8db) SHA1(06313d5bde03220b2bc313d18e50e4bb1d0cfbbb) ) /* memory mapper */ |
| 661 | 599 | ROM_END |
| 662 | 600 | |
| 663 | ROM_START( sbrkoutc ) | |
| 601 | ROM_START( sbrkoutc ) | |
| 664 | 602 | ROM_REGION( 0x4000, "maincpu", 0 ) |
| 665 | 603 | ROM_LOAD( "a33443.bin", 0x2800, 0x1800, CRC(bf418976) SHA1(d766e220a284a7b9caf876207e8191aff0497a03) ) |
| 666 | 604 | |
| r242703 | r242704 | |
| 676 | 614 | ROM_LOAD( "006401.e2", 0x0100, 0x0020, CRC(857df8db) SHA1(06313d5bde03220b2bc313d18e50e4bb1d0cfbbb) ) /* memory mapper */ |
| 677 | 615 | ROM_END |
| 678 | 616 | |
| 679 | ROM_START( sbrkoutct ) // built from original Atari source code | |
| 680 | ROM_REGION( 0x4000, "maincpu", 0 ) | |
| 681 | ROM_LOAD( "034555-01.c1", 0x2800, 0x0800, CRC(2da82521) SHA1(1f53e549676052647486cea6738c5c7a45133538) ) | |
| 682 | ROM_LOAD( "034556-01.d11", 0x3000, 0x0800, CRC(5a6497ae) SHA1(96c2a136fb1e649e2db17bcb12bdc2a8d250a63e) ) | |
| 683 | ROM_LOAD( "034557-01.ef1", 0x3800, 0x0800, CRC(b6b3b07b) SHA1(c4d2cdcca89c2944afd4a4ed0bb5003b3eca4c7e) ) | |
| 684 | 617 | |
| 685 | ROM_REGION( 0x0400, "gfx1", 0 ) | |
| 686 | ROM_LOAD( "034559-01.r4", 0x0000, 0x0200, CRC(84368539) SHA1(50b2c3f443346e3a355492ed1f7ec0a8cc6364d4) ) | |
| 687 | ROM_LOAD( "034558-01.p4", 0x0200, 0x0200, CRC(cc0f81f2) SHA1(a2180280991c9cf43f4e941d9ba4fe5654d1af65) ) | |
| 688 | ||
| 689 | ROM_REGION( 0x0020, "gfx2", 0 ) | |
| 690 | ROM_LOAD( "033282.k6", 0x0000, 0x0020, CRC(6228736b) SHA1(bc176261dba11521df19d545ce604f8cc294287a) ) | |
| 691 | ||
| 692 | ROM_REGION( 0x0120, "proms", 0 ) | |
| 693 | ROM_LOAD( "006400.m2", 0x0000, 0x0100, CRC(b8094b4c) SHA1(82dc6799a19984f3b204ee3aeeb007e55afc8be3) ) /* sync (not used) */ | |
| 694 | ROM_LOAD( "006401.e2", 0x0100, 0x0020, CRC(857df8db) SHA1(06313d5bde03220b2bc313d18e50e4bb1d0cfbbb) ) /* memory mapper */ | |
| 695 | ROM_END | |
| 696 | ||
| 697 | 618 | /************************************* |
| 698 | 619 | * |
| 699 | 620 | * Game drivers |
| 700 | 621 | * |
| 701 | 622 | *************************************/ |
| 702 | 623 | |
| 703 | GAMEL( 1978, sbrkout, 0, sbrkout, sbrkout, driver_device, 0, ROT270, "Atari", "Super Breakout (rev 04)", GAME_SUPPORTS_SAVE, layout_sbrkout ) | |
| 704 | GAMEL( 1978, sbrkout3, sbrkout, sbrkout, sbrkout, driver_device, 0, ROT270, "Atari", "Super Breakout (rev 03)", GAME_SUPPORTS_SAVE, layout_sbrkout ) | |
| 705 | GAMEL( 1978, sbrkoutc, sbrkout, sbrkout, sbrkoutc, driver_device, 0, ROT270, "Atari", "Super Breakout (Canyon and Vertical Breakout, prototype)", GAME_SUPPORTS_SAVE, layout_sbrkout ) | |
| 706 | GAMEL( 1978, sbrkoutct, sbrkout, sbrkoutct, sbrkoutct, driver_device, 0, ROT270, "Atari", "Super Breakout (Cocktail, prototype)", GAME_SUPPORTS_SAVE, layout_sbrkout ) | |
| 624 | GAMEL( 1978, sbrkout, 0, sbrkout, sbrkout, driver_device, 0, ROT270, "Atari", "Super Breakout (rev 04)", GAME_SUPPORTS_SAVE, layout_sbrkout ) | |
| 625 | GAMEL( 1978, sbrkout3, sbrkout, sbrkout, sbrkout, driver_device, 0, ROT270, "Atari", "Super Breakout (rev 03)", GAME_SUPPORTS_SAVE, layout_sbrkout ) | |
| 626 | GAMEL( 1978, sbrkoutc, sbrkout, sbrkout, sbrkoutc, driver_device, 0, ROT270, "Atari", "Super Breakout (Canyon and Vertical Breakout, prototype)", GAME_SUPPORTS_SAVE, layout_sbrkout ) |
| r242703 | r242704 | |
|---|---|---|
| 399 | 399 | // signal a VBLANK to the main CPU |
| 400 | 400 | m_maincpu->set_input_line(4, HOLD_LINE); |
| 401 | 401 | |
| 402 | // clear add lifes protection flag | |
| 403 | m_workram[0x0f0/2] = 0; | |
| 404 | ||
| 405 | 402 | // read I/O ports |
| 406 | 403 | m_workram[0x492/2] = (ioport("ADC0")->read() << 8) | ioport("ADC1")->read(); |
| 407 | 404 | } |
| r242703 | r242704 | |
|---|---|---|
| 3102 | 3102 | INPUT_PORTS_END |
| 3103 | 3103 | |
| 3104 | 3104 | |
| 3105 | static INPUT_PORTS_START( fantzoneta ) | |
| 3106 | PORT_INCLUDE( system16b_generic ) | |
| 3107 | ||
| 3108 | PORT_MODIFY("DSW2") | |
| 3109 | PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:1") | |
| 3110 | PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) | |
| 3111 | PORT_DIPSETTING( 0x01, DEF_STR( Cocktail ) ) | |
| 3112 | PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2") | |
| 3113 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) | |
| 3114 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 3115 | PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:3,4") | |
| 3116 | PORT_DIPSETTING( 0x08, "2" ) | |
| 3117 | PORT_DIPSETTING( 0x0c, "3" ) | |
| 3118 | PORT_DIPSETTING( 0x04, "4" ) | |
| 3119 | PORT_DIPSETTING( 0x00, "240 (Cheat)") | |
| 3120 | PORT_DIPNAME( 0x30, 0x30, "Extra Ship Cost" ) PORT_DIPLOCATION("SW2:5,6") | |
| 3121 | PORT_DIPSETTING( 0x30, "5000" ) | |
| 3122 | PORT_DIPSETTING( 0x20, "10000" ) | |
| 3123 | PORT_DIPSETTING( 0x10, "15000" ) | |
| 3124 | PORT_DIPSETTING( 0x00, "20000" ) | |
| 3125 | PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:7,8") | |
| 3126 | PORT_DIPSETTING( 0x80, DEF_STR( Easy ) ) | |
| 3127 | PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) ) | |
| 3128 | PORT_DIPSETTING( 0x40, DEF_STR( Hard ) ) | |
| 3129 | PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) | |
| 3130 | INPUT_PORTS_END | |
| 3131 | ||
| 3132 | 3105 | // we use common sys16b tags to simplify port reads |
| 3133 | 3106 | static INPUT_PORTS_START( atomicp ) |
| 3134 | 3107 | PORT_START("SERVICE") // P1 |
| r242703 | r242704 | |
| 3205 | 3178 | INPUT_PORTS_END |
| 3206 | 3179 | |
| 3207 | 3180 | |
| 3208 | ||
| 3209 | ||
| 3210 | 3181 | // we use common sys16b tags to simplify port reads |
| 3211 | 3182 | static INPUT_PORTS_START( snapper ) |
| 3212 | 3183 | PORT_START("SERVICE") // P1 |
| r242703 | r242704 | |
| 6632 | 6603 | ROM_LOAD( "cpu2b.bin", 0x10000, 0x20000, CRC(2c8ad475) SHA1(9ef1ed5aab81a82844ccb0949cb393a8d1abac92) ) |
| 6633 | 6604 | ROM_END |
| 6634 | 6605 | |
| 6635 | ROM_START( fantzoneta ) // based on PS2 version, from bootleg conversion board | |
| 6636 | ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code | |
| 6637 | ROM_LOAD16_BYTE( "fzta__a07.bin", 0x00000, 0x20000, CRC(ad07d1fd) SHA1(63fbaa135a3860bd956d5147a5f64d951d2ebdba) ) | |
| 6638 | ROM_LOAD16_BYTE( "fzta__a05.bin", 0x00001, 0x20000, CRC(47dbe11b) SHA1(edc6960506745235bb8668eaf71139cef4a2cd16) ) | |
| 6639 | 6606 | |
| 6640 | ROM_REGION( 0x30000, "gfx1", 0 ) // tiles | |
| 6641 | ROM_LOAD( "fzta__a14.bin", 0x00000, 0x10000, CRC(9468ab33) SHA1(714660b9eafb78ef5d3aed218367b4e5708376f6) ) | |
| 6642 | ROM_LOAD( "fzta__a15.bin", 0x10000, 0x10000, CRC(22a3cf75) SHA1(6f21bc2a565738b997f898ed6ee631e9452662ca) ) | |
| 6643 | ROM_LOAD( "fzta__a16.bin", 0x20000, 0x10000, CRC(25cba87f) SHA1(abece2c27cd9d299319fa3ea87e016606426abc2) ) | |
| 6644 | 6607 | |
| 6645 | ROM_REGION16_BE( 0x180000, "sprites", ROMREGION_ERASEFF ) // sprites | |
| 6646 | ROM_LOAD16_BYTE( "fzta__b01.bin", 0x000001, 0x20000, CRC(0beb4a22) SHA1(e35f6d92b88f0730ccf03a090900ca2ed9824e74) ) | |
| 6647 | ROM_LOAD16_BYTE( "fzta__b05.bin", 0x000000, 0x20000, CRC(7f676c69) SHA1(231e7829b4ddb039f9075aebd1f2a123c79d396d) ) | |
| 6648 | ROM_LOAD16_BYTE( "fzta__a01.bin", 0x100001, 0x20000, CRC(40e1db9a) SHA1(305cd5e2d8512774638dfa724df6696ffa81ebb2) ) | |
| 6649 | ROM_LOAD16_BYTE( "fzta__b10.bin", 0x100000, 0x20000, CRC(acbb5cff) SHA1(bd356f664ec1c0e955161aa3afd06f2aeda80357) ) | |
| 6650 | ||
| 6651 | ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU | |
| 6652 | ROM_LOAD( "fzta__a10.bin", 0x00000, 0x08000, CRC(dab6fcd0) SHA1(151b62c5353533ae8660cbeebd8fe3219adbf4b5) ) | |
| 6653 | ROM_END | |
| 6654 | ||
| 6655 | ||
| 6656 | 6608 | //************************************************************************** |
| 6657 | 6609 | // CONFIGURATION |
| 6658 | 6610 | //************************************************************************** |
| r242703 | r242704 | |
| 6977 | 6929 | GAME( 2008, fantzn2x, 0, system16c, fz2, segas16b_state,generic_5704, ROT0, "Sega / M2", "Fantasy Zone II - The Tears of Opa-Opa (System 16C version)", 0 ) // The 1987 copyright date shown ingame is false |
| 6978 | 6930 | GAME( 2008, fantzn2xp, fantzn2x, system16c, fz2, segas16b_state,generic_5704, ROT0, "Sega / M2", "Fantasy Zone II - The Tears of Opa-Opa (System 16C version, prototype)", 0 ) // " |
| 6979 | 6931 | |
| 6980 | GAME( 2008, fantzoneta, fantzone, system16b, fantzoneta,segas16b_state,generic_5704, ROT0, "bootleg", "Fantasy Zone (Time Attack, bootleg)", 0 ) // based on the PS2 version, unlicensed PCB conversion | |
| 6981 | ||
| 6982 | ||
| 6983 | 6932 | // Custom Korean Board - these probably belong with the bootlegs... |
| 6984 | 6933 | GAME( 1990, atomicp, 0, atomicp, atomicp, segas16b_state,generic_korean, ROT0, "Philko", "Atomic Point (Korea)", 0) // korean clone board.. |
| 6985 | 6934 | GAME( 1990, snapper, 0, atomicp, snapper, segas16b_state,snapper, ROT0, "Philko", "Snapper (Korea)", 0) // korean clone board.. |
| r242703 | r242704 | |
|---|---|---|
| 1401 | 1401 | PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0000, "SW1:6" ) |
| 1402 | 1402 | PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0000, "SW1:7" ) |
| 1403 | 1403 | PORT_SERVICE_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW1:8" ) |
| 1404 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Button 4 / Stand / Stop / Drop / Full Bet / Take") PORT_CODE(KEYCODE_V) | |
| 1405 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Button 1 / High") PORT_CODE(KEYCODE_Z) | |
| 1406 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Button 2 / Low") PORT_CODE(KEYCODE_X) | |
| 1407 | PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Button 3 / Hit / Go / Double Up") PORT_CODE(KEYCODE_C) | |
| 1404 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Button 4 / Stand / Stop / Drop / Full Bet / Take") PORT_CODE(KEYCODE_V) | |
| 1405 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Button 1 / High") PORT_CODE(KEYCODE_Z) | |
| 1406 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Button 2 / Low") PORT_CODE(KEYCODE_X) | |
| 1407 | PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Button 3 / Hit / Go / Double Up") PORT_CODE(KEYCODE_C) | |
| 1408 | 1408 | PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1409 | PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Button 6 / Bet / Raise") PORT_CODE(KEYCODE_N) | |
| 1409 | PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Button 6 / Bet / Raise") PORT_CODE(KEYCODE_N) | |
| 1410 | 1410 | PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1411 | 1411 | PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1412 | 1412 | |
| r242703 | r242704 | |
| 1429 | 1429 | PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1430 | 1430 | |
| 1431 | 1431 | PORT_START("SYSTEM") |
| 1432 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Button 5 / Start / Double / Call / Check") PORT_CODE(KEYCODE_B) // Double != Double Up | |
| 1432 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Button 5 / Start / Double / Call / Check") PORT_CODE(KEYCODE_B) // Double != Double Up | |
| 1433 | 1433 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1434 | 1434 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 ) |
| 1435 | 1435 | PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 ) |
| r242703 | r242704 | |
|---|---|---|
| 39 | 39 | m_game = 3; |
| 40 | 40 | } |
| 41 | 41 | |
| 42 | DRIVER_INIT_MEMBER(sprint2_state,dominos4) | |
| 43 | { | |
| 44 | m_game = 3; | |
| 45 | m_maincpu->space(AS_PROGRAM).install_read_port(0x0880, 0x0880, "SELFTTEST"); | |
| 46 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x0c50, 0x0c5f, write8_delegate(FUNC(sprint2_state::dominos4_lamp3_w),this)); | |
| 47 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x0c60, 0x0c6f, write8_delegate(FUNC(sprint2_state::dominos4_lamp4_w),this)); | |
| 48 | } | |
| 49 | ||
| 50 | 42 | int sprint2_state::service_mode() |
| 51 | 43 | { |
| 52 | 44 | UINT8 v = ioport("INB")->read(); |
| r242703 | r242704 | |
| 242 | 234 | set_led_status(machine(), 1, offset & 1); |
| 243 | 235 | } |
| 244 | 236 | |
| 245 | WRITE8_MEMBER(sprint2_state::dominos4_lamp3_w) | |
| 246 | { | |
| 247 | set_led_status(machine(), 2, offset & 1); | |
| 248 | } | |
| 249 | WRITE8_MEMBER(sprint2_state::dominos4_lamp4_w) | |
| 250 | { | |
| 251 | set_led_status(machine(), 3, offset & 1); | |
| 252 | } | |
| 253 | 237 | |
| 254 | 238 | static ADDRESS_MAP_START( sprint2_map, AS_PROGRAM, 8, sprint2_state ) |
| 255 | ADDRESS_MAP_GLOBAL_MASK(0x3fff) | |
| 256 | 239 | AM_RANGE(0x0000, 0x03ff) AM_READWRITE(sprint2_wram_r,sprint2_wram_w) |
| 257 | 240 | AM_RANGE(0x0400, 0x07ff) AM_RAM_WRITE(sprint2_video_ram_w) AM_SHARE("video_ram") |
| 258 | 241 | AM_RANGE(0x0818, 0x081f) AM_READ(sprint2_input_A_r) |
| r242703 | r242704 | |
| 278 | 261 | AM_RANGE(0x1400, 0x17ff) AM_READ(sprint2_collision2_r) |
| 279 | 262 | AM_RANGE(0x1800, 0x1800) AM_READNOP /* debugger ROM location? */ |
| 280 | 263 | AM_RANGE(0x2000, 0x3fff) AM_ROM |
| 264 | AM_RANGE(0xe000, 0xffff) AM_ROM | |
| 281 | 265 | ADDRESS_MAP_END |
| 282 | 266 | |
| 283 | 267 | |
| r242703 | r242704 | |
| 457 | 441 | PORT_ADJUSTER( 50, "R23 - Tone Freq" ) |
| 458 | 442 | INPUT_PORTS_END |
| 459 | 443 | |
| 460 | static INPUT_PORTS_START( dominos4 ) | |
| 461 | PORT_INCLUDE(dominos) | |
| 462 | 444 | |
| 463 | PORT_MODIFY("INA") /* input A */ | |
| 464 | PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1) | |
| 465 | PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(1) | |
| 466 | PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1) | |
| 467 | PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(1) | |
| 468 | PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2) | |
| 469 | PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(2) | |
| 470 | PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(2) | |
| 471 | PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(2) | |
| 472 | ||
| 473 | PORT_MODIFY("INB") /* input A */ | |
| 474 | PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(3) | |
| 475 | PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(3) | |
| 476 | PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(3) | |
| 477 | PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(3) | |
| 478 | PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(4) | |
| 479 | PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(4) | |
| 480 | PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(4) | |
| 481 | PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(4) | |
| 482 | ||
| 483 | PORT_START("SELFTTEST") | |
| 484 | PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) | |
| 485 | INPUT_PORTS_END | |
| 486 | ||
| 487 | 445 | static const gfx_layout tile_layout = |
| 488 | 446 | { |
| 489 | 447 | 16, 8, |
| r242703 | r242704 | |
| 584 | 542 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 585 | 543 | MACHINE_CONFIG_END |
| 586 | 544 | |
| 545 | ||
| 587 | 546 | ROM_START( sprint1 ) |
| 588 | 547 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 589 | 548 | ROM_LOAD( "6290-01.b1", 0x2000, 0x0800, CRC(41fc985e) SHA1(7178846480cbf8d15955ccd987d0b0e902ab9f90) ) |
| 549 | ROM_RELOAD( 0xe000, 0x0800 ) | |
| 590 | 550 | ROM_LOAD( "6291-01.c1", 0x2800, 0x0800, CRC(07f7a920) SHA1(845f65d2bd290eb295ca6bae2575f27aaa08c0dd) ) |
| 551 | ROM_RELOAD( 0xe800, 0x0800 ) | |
| 591 | 552 | ROM_LOAD( "6442-01.d1", 0x3000, 0x0800, CRC(e9ff0124) SHA1(42fe028e2e595573ccc0821de3bb6970364c585d) ) |
| 553 | ROM_RELOAD( 0xf000, 0x0800 ) | |
| 592 | 554 | ROM_LOAD( "6443-01.e1", 0x3800, 0x0800, CRC(d6bb00d0) SHA1(cdcd4bb7b32be7a11480d3312fcd8d536e2d0caf) ) |
| 555 | ROM_RELOAD( 0xf800, 0x0800 ) | |
| 593 | 556 | |
| 594 | 557 | ROM_REGION( 0x0200, "gfx1", 0 ) /* tiles */ |
| 595 | 558 | ROM_LOAD_NIB_HIGH( "6396-01.p4", 0x0000, 0x0200, CRC(801b42dd) SHA1(1db58390d803f404253cbf36d562016441ca568d) ) |
| r242703 | r242704 | |
| 608 | 571 | ROM_START( sprint2 ) |
| 609 | 572 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 610 | 573 | ROM_LOAD( "6290-01.b1", 0x2000, 0x0800, CRC(41fc985e) SHA1(7178846480cbf8d15955ccd987d0b0e902ab9f90) ) |
| 574 | ROM_RELOAD( 0xe000, 0x0800 ) | |
| 611 | 575 | ROM_LOAD( "6291-01.c1", 0x2800, 0x0800, CRC(07f7a920) SHA1(845f65d2bd290eb295ca6bae2575f27aaa08c0dd) ) |
| 576 | ROM_RELOAD( 0xe800, 0x0800 ) | |
| 612 | 577 | ROM_LOAD( "6404.d1", 0x3000, 0x0800, CRC(d2878ff6) SHA1(b742a8896c1bf1cfacf48d06908920d88a2c9ea8) ) |
| 578 | ROM_RELOAD( 0xf000, 0x0800 ) | |
| 613 | 579 | ROM_LOAD( "6405.e1", 0x3800, 0x0800, CRC(6c991c80) SHA1(c30a5b340f05dd702c7a186eb62607a48fa19f72) ) |
| 580 | ROM_RELOAD( 0xf800, 0x0800 ) | |
| 614 | 581 | |
| 615 | 582 | ROM_REGION( 0x0200, "gfx1", 0 ) /* tiles */ |
| 616 | 583 | ROM_LOAD_NIB_HIGH( "6396-01.p4", 0x0000, 0x0200, CRC(801b42dd) SHA1(1db58390d803f404253cbf36d562016441ca568d) ) |
| r242703 | r242704 | |
| 629 | 596 | ROM_START( sprint2a ) |
| 630 | 597 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 631 | 598 | ROM_LOAD( "6290-01.b1", 0x2000, 0x0800, CRC(41fc985e) SHA1(7178846480cbf8d15955ccd987d0b0e902ab9f90) ) |
| 599 | ROM_RELOAD( 0xe000, 0x0800 ) | |
| 632 | 600 | ROM_LOAD( "6291-01.c1", 0x2800, 0x0800, CRC(07f7a920) SHA1(845f65d2bd290eb295ca6bae2575f27aaa08c0dd) ) |
| 601 | ROM_RELOAD( 0xe800, 0x0800 ) | |
| 633 | 602 | ROM_LOAD( "6404.d1", 0x3000, 0x0800, CRC(d2878ff6) SHA1(b742a8896c1bf1cfacf48d06908920d88a2c9ea8) ) |
| 603 | ROM_RELOAD( 0xf000, 0x0800 ) | |
| 634 | 604 | ROM_LOAD( "6405-02.e1", 0x3800, 0x0800, CRC(e80fd249) SHA1(7bcf7dfd72ca83fdd80593eaf392570da1f71298) ) |
| 605 | ROM_RELOAD( 0xf800, 0x0800 ) | |
| 635 | 606 | |
| 636 | 607 | ROM_REGION( 0x0200, "gfx1", 0 ) /* tiles */ |
| 637 | 608 | ROM_LOAD_NIB_HIGH( "6396-01.p4", 0x0000, 0x0200, CRC(801b42dd) SHA1(1db58390d803f404253cbf36d562016441ca568d) ) |
| r242703 | r242704 | |
| 650 | 621 | ROM_START( sprint2h ) |
| 651 | 622 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 652 | 623 | ROM_LOAD( "6290-01.b1", 0x2000, 0x0800, CRC(41fc985e) SHA1(7178846480cbf8d15955ccd987d0b0e902ab9f90) ) |
| 624 | ROM_RELOAD( 0xe000, 0x0800 ) | |
| 653 | 625 | ROM_LOAD( "6291-01.c1", 0x2800, 0x0800, CRC(07f7a920) SHA1(845f65d2bd290eb295ca6bae2575f27aaa08c0dd) ) |
| 626 | ROM_RELOAD( 0xe800, 0x0800 ) | |
| 654 | 627 | ROM_LOAD( "6404.d1", 0x3000, 0x0800, CRC(d2878ff6) SHA1(b742a8896c1bf1cfacf48d06908920d88a2c9ea8) ) |
| 628 | ROM_RELOAD( 0xf000, 0x0800 ) | |
| 655 | 629 | ROM_LOAD( "6405-02.e1", 0x3800, 0x0800, CRC(6de291f1) SHA1(00c2826011d80ac0784649a7bc156a97c26565fd) ) // sldh |
| 630 | ROM_RELOAD( 0xf800, 0x0800 ) | |
| 656 | 631 | |
| 657 | 632 | ROM_REGION( 0x0200, "gfx1", 0 ) /* tiles */ |
| 658 | 633 | ROM_LOAD_NIB_HIGH( "6396-01.p4", 0x0000, 0x0200, CRC(801b42dd) SHA1(1db58390d803f404253cbf36d562016441ca568d) ) |
| r242703 | r242704 | |
| 671 | 646 | ROM_START( dominos ) |
| 672 | 647 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 673 | 648 | ROM_LOAD( "7352-02.d1", 0x3000, 0x0800, CRC(738b4413) SHA1(3a90ab25bb5f65504692f97da43f03e21392dcd8) ) |
| 649 | ROM_RELOAD( 0xf000, 0x0800 ) | |
| 674 | 650 | ROM_LOAD( "7438-02.e1", 0x3800, 0x0800, CRC(c84e54e2) SHA1(383b388a1448a195f28352fc5e4ff1a2af80cc95) ) |
| 651 | ROM_RELOAD( 0xf800, 0x0800 ) | |
| 675 | 652 | |
| 676 | 653 | ROM_REGION( 0x200, "gfx1", 0 ) /* tiles */ |
| 677 | 654 | ROM_LOAD_NIB_HIGH( "7439-01.p4", 0x0000, 0x0200, CRC(4f42fdd6) SHA1(f8ea4b582e26cad37b746174cdc9f1c7ae0819c3) ) |
| r242703 | r242704 | |
| 685 | 662 | ROM_LOAD( "6401-01.e2", 0x0100, 0x0020, CRC(857df8db) SHA1(06313d5bde03220b2bc313d18e50e4bb1d0cfbbb) ) /* address */ |
| 686 | 663 | ROM_END |
| 687 | 664 | |
| 688 | ROM_START( dominos4 ) // built from original Atari source code | |
| 689 | ROM_REGION( 0x10000, "maincpu", 0 ) | |
| 690 | ROM_LOAD_NIB_HIGH( "007754-01.l1", 0x3000, 0x0400, CRC(03fae4a9) SHA1(a132bd8bc866e33cdf6b4881064c8d265c2b25f4) ) | |
| 691 | ROM_LOAD_NIB_LOW ( "007755-01.l0", 0x3000, 0x0400, CRC(fa2d0c04) SHA1(fcf618c7089db46d55933d58ea04701af515ad49) ) | |
| 692 | ROM_LOAD_NIB_HIGH( "007756-01.m1", 0x3400, 0x0400, CRC(d2acb1b5) SHA1(ad81eed9dd0a2d5ecfd42daf90825726e64063b3) ) | |
| 693 | ROM_LOAD_NIB_LOW ( "007757-01.m0", 0x3400, 0x0400, CRC(69f2db90) SHA1(a064c840599c4e7cb65670e5480adeb310247f16) ) | |
| 694 | ROM_LOAD_NIB_HIGH( "007758-01.n1", 0x3800, 0x0400, CRC(b49083b4) SHA1(41999e8d3fd6104c42f3a034045f9f9c75d8247a) ) | |
| 695 | ROM_LOAD_NIB_LOW ( "007759-01.n0", 0x3800, 0x0400, CRC(542200c7) SHA1(111f06e942e247b00b9f90fae2986c3c8d9ec8c5) ) | |
| 696 | ROM_LOAD_NIB_HIGH( "007760-01.p1", 0x3c00, 0x0400, CRC(7dc2a7a1) SHA1(9d02572cf689c6476b33226a5358dd1f72c4e61d) ) | |
| 697 | ROM_LOAD_NIB_LOW ( "007761-01.p0", 0x3c00, 0x0400, CRC(04365e0d) SHA1(fefc3c04e55f1aa8c80b1e5e1e403af8698c3530) ) | |
| 698 | 665 | |
| 699 | ROM_REGION( 0x200, "gfx1", 0 ) /* tiles */ | |
| 700 | ROM_LOAD_NIB_HIGH( "007764-01.p4", 0x0000, 0x0200, CRC(e4332dc0) SHA1(1f16c5b9f9fd7d478fd729cc79968f17746111f4) ) | |
| 701 | ROM_LOAD_NIB_LOW ( "007765-01.r4", 0x0000, 0x0200, CRC(6e4e6c75) SHA1(0fc77fecaa73eac57baf778bc51387c75883aad4) ) | |
| 702 | ||
| 703 | ROM_REGION( 0x200, "gfx2", 0 ) /* sprites, not used */ | |
| 704 | ROM_FILL( 0x0000, 0x0200, 0 ) | |
| 705 | ||
| 706 | ROM_REGION( 0x0120, "proms", 0 ) | |
| 707 | ROM_LOAD( "6400-01.m2", 0x0000, 0x0100, CRC(b8094b4c) SHA1(82dc6799a19984f3b204ee3aeeb007e55afc8be3) ) /* SYNC */ | |
| 708 | ROM_LOAD( "6401-01.e2", 0x0100, 0x0020, CRC(857df8db) SHA1(06313d5bde03220b2bc313d18e50e4bb1d0cfbbb) ) /* address */ | |
| 709 | ROM_END | |
| 710 | ||
| 711 | 666 | GAME( 1978, sprint1, 0, sprint1, sprint1, sprint2_state, sprint1, ROT0, "Atari (Kee Games)", "Sprint 1", 0 ) |
| 712 | 667 | GAME( 1976, sprint2, sprint1, sprint2, sprint2, sprint2_state, sprint2, ROT0, "Atari (Kee Games)", "Sprint 2 (set 1)", 0 ) |
| 713 | 668 | GAME( 1976, sprint2a, sprint1, sprint2, sprint2, sprint2_state, sprint2, ROT0, "Atari (Kee Games)", "Sprint 2 (set 2)", 0 ) |
| 714 | 669 | GAME( 1976, sprint2h, sprint1, sprint2, sprint2, sprint2_state, sprint2, ROT0, "hack", "Sprint 2 (color kit, Italy)", GAME_WRONG_COLORS ) // Italian hack, supposedly is color instead of b/w? how? |
| 715 | 670 | GAME( 1977, dominos, 0, dominos, dominos, sprint2_state, dominos, ROT0, "Atari", "Dominos", 0 ) |
| 716 | GAME( 1977, dominos4, dominos, dominos, dominos4,sprint2_state, dominos4,ROT0, "Atari", "Dominos 4 (Cocktail)", 0 ) |
| r242703 | r242704 | |
|---|---|---|
| 3143 | 3143 | ROM_LOAD16_BYTE("e29-04.ic39", 0x800000, 0x200000, CRC(d1f42457) SHA1(2c77be6365deb5ef215da0c66da23b415623bdb1) ) // D2 C8 C9 CA |
| 3144 | 3144 | ROM_LOAD16_BYTE("e29-05.ic41", 0xc00000, 0x200000, CRC(e33c1234) SHA1(84c336ed6fd8723e824889fe7b52c284be659e62) ) // CB CC -std- |
| 3145 | 3145 | |
| 3146 | ROM_REGION(0x034a, "pals", 0) | |
| 3147 | ROM_LOAD("d77-12.ic48.bin", 0x0000, 0x0001, NO_DUMP) /* PALCE16V8Q-15PC/4 */ | |
| 3148 | ROM_LOAD("d77-14.ic21.bin", 0x0001, 0x0001, NO_DUMP) /* PALCE16V8Q-15PC/4 */ | |
| 3149 | ROM_LOAD("d77-11.ic37.bin", 0x0002, 0x0001, NO_DUMP) /* PALCE16V8Q-15PC/4 */ | |
| 3150 | ROM_LOAD("d77-09.ic14.bin", 0x0003, 0x0001, NO_DUMP) /* PAL16L8ACN */ | |
| 3151 | ROM_LOAD("d77-10.ic28.bin", 0x0004, 0x0001, NO_DUMP) /* PAL16L8ACN */ | |
| 3146 | ROM_REGION(0x034a, "pals", 0) | |
| 3147 | ROM_LOAD("d77-12.ic48.bin", 0x0000, 0x0001, NO_DUMP) /* PALCE16V8Q-15PC/4 */ | |
| 3148 | ROM_LOAD("d77-14.ic21.bin", 0x0001, 0x0001, NO_DUMP) /* PALCE16V8Q-15PC/4 */ | |
| 3149 | ROM_LOAD("d77-11.ic37.bin", 0x0002, 0x0001, NO_DUMP) /* PALCE16V8Q-15PC/4 */ | |
| 3150 | ROM_LOAD("d77-09.ic14.bin", 0x0003, 0x0001, NO_DUMP) /* PAL16L8ACN */ | |
| 3151 | ROM_LOAD("d77-10.ic28.bin", 0x0004, 0x0001, NO_DUMP) /* PAL16L8ACN */ | |
| 3152 | 3152 | ROM_END |
| 3153 | 3153 | |
| 3154 | 3154 | ROM_START( arkretrn ) |
| r242703 | r242704 | |
|---|---|---|
| 619 | 619 | MCFG_SCREEN_PALETTE("palette") |
| 620 | 620 | |
| 621 | 621 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", tigeroad) |
| 622 | ||
| 622 | ||
| 623 | 623 | MCFG_DEVICE_ADD("spritegen", TIGEROAD_SPRITE, 0) |
| 624 | 624 | |
| 625 | 625 | MCFG_PALETTE_ADD("palette", 1024) |
| r242703 | r242704 | |
|---|---|---|
| 3374 | 3374 | ROM_LOAD( "borderb.14", 0x0000, 0x0020, CRC(55dcdef1) SHA1(6fbd041edc258b7e1b99bbe9526612cfb1b541f8) ) |
| 3375 | 3375 | ROM_END |
| 3376 | 3376 | |
| 3377 | ROM_START( startrks ) | |
| 3378 | ROM_REGION( 0x10000, "maincpu", 0 ) | |
| 3379 | ROM_LOAD( "0.1a", 0x0000, 0x0400, CRC(2ba4202a) SHA1(1e46e36c37c9f1cecb505a1fe393c24d0e271168) ) | |
| 3380 | ROM_LOAD( "1.3a", 0x0400, 0x0400, CRC(cf6081b8) SHA1(2294cf6849a8191928f268ba1dbef21659a1475f) ) | |
| 3381 | ROM_LOAD( "2.4a", 0x0800, 0x0400, CRC(fd983c0c) SHA1(a4aea8707878dcac8b4e3d9acad94f60eee956c6) ) | |
| 3382 | ROM_LOAD( "3.6a", 0x0c00, 0x0400, CRC(607991c7) SHA1(abfbfdbcedc7192a0cf84f2d28c600fe6f7c7a84) ) | |
| 3383 | ROM_LOAD( "4.8a", 0x1000, 0x0400, CRC(043bf767) SHA1(76dd79a4cdd23f75a4e7b5642db05e94e0d2b75e) ) | |
| 3384 | ROM_LOAD( "5.9a", 0x1400, 0x0400, CRC(2aa21da3) SHA1(85bb7b74b3df678bf32370ef77ee620c5d7249ab) ) | |
| 3385 | ROM_LOAD( "6.11a", 0x1800, 0x0400, CRC(a5315dc8) SHA1(ba6d27d03c9f0100fe89ebbf4b58d166bf259fa8) ) | |
| 3386 | ||
| 3387 | ROM_REGION( 0x0040, "user1", 0 ) /* timing PROMs */ | |
| 3388 | ROM_LOAD( "82s123.15c", 0x0000, 0x0020, CRC(e60a7960) SHA1(b8b8716e859c57c35310efc4594262afedb84823) ) /* control PROM */ | |
| 3389 | ROM_LOAD( "82s123.14c", 0x0020, 0x0020, CRC(a1506b9d) SHA1(037c3db2ea40eca459e8acba9d1506dd28d72d10) ) /* sequence PROM */ | |
| 3390 | ROM_END | |
| 3391 | ||
| 3392 | 3377 | ROM_START( digger ) |
| 3393 | 3378 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 3394 | 3379 | ROM_LOAD( "684.u27", 0x0000, 0x0400, CRC(bba0d7c2) SHA1(1e55dd95b07b562dcc1e52ecf9460d302b14ee60) ) |
| r242703 | r242704 | |
| 3485 | 3470 | ROM_END |
| 3486 | 3471 | |
| 3487 | 3472 | |
| 3473 | ||
| 3488 | 3474 | /************************************* |
| 3489 | 3475 | * |
| 3490 | 3476 | * Game drivers |
| r242703 | r242704 | |
| 3529 | 3515 | GAME( 1981, brdrlins, brdrline, brdrline, brdrline, driver_device, 0, ROT270, "bootleg (Sidam)", "Borderline (Sidam bootleg)", GAME_NO_SOUND ) |
| 3530 | 3516 | GAME( 1981, brdrlinb, brdrline, brdrline, brdrline, driver_device, 0, ROT270, "bootleg (Karateco)", "Borderline (Karateco bootleg)", GAME_NO_SOUND ) |
| 3531 | 3517 | GAME( 1981, brdrlinet, brdrline, tranqgun, tranqgun, driver_device, 0, ROT270, "Sega", "Borderline (Tranquilizer Gun conversion)", GAME_NO_SOUND ) // official factory conversion |
| 3532 | GAME( 198?, startrks, 0, headons, headons, driver_device, 0, ROT0, "bootleg (Sidam)", "Star Trek (Head On hardware)", GAME_IMPERFECT_SOUND ) | |
| 3533 | 3518 | |
| 3534 | 3519 | GAME( 1980, digger, 0, digger, digger, driver_device, 0, ROT270, "Sega", "Digger", GAME_NO_SOUND ) |
| 3535 | 3520 | GAME( 1981, pulsar, 0, pulsar, pulsar, driver_device, 0, ROT270, "Sega", "Pulsar", GAME_IMPERFECT_SOUND ) |
| 3536 | 3521 | GAME( 1979, heiankyo, 0, heiankyo, heiankyo, driver_device, 0, ROT270, "Denki Onkyo", "Heiankyo Alien", GAME_NO_SOUND ) |
| 3537 | 3522 | GAME( 19??, alphaho, 0, alphaho, alphaho, driver_device, 0, ROT270, "Data East Corporation", "Alpha Fighter / Head On", GAME_WRONG_COLORS | GAME_NO_SOUND ) |
| 3538 |
| r242703 | r242704 | |
|---|---|---|
| 80 | 80 | DS2430 - Dallas DS2430 256-bits 1-Wire EEPROM. Has 256 bits x8 EEPROM (32 bytes), 64 bits x8 (8 bytes) |
| 81 | 81 | one-time programmable application register and unique factory-lasered and tested 64-bit |
| 82 | 82 | registration number (8-bit family code + 48-bit serial number + 8-bit CRC) (TO-92 @ U37) |
| 83 | The OTP application register on the common DS2430 and the Police 911 2 DS2430 are not programmed | |
| 84 | (application register reads all 0xFF and the status register reads back 0xFF), so it's probably safe | |
| 83 | The OTP application register on the common DS2430 and the Police 911 2 DS2430 are not programmed | |
| 84 | (application register reads all 0xFF and the status register reads back 0xFF), so it's probably safe | |
| 85 | 85 | to assume they're not used on any of them. |
| 86 | 86 | It appears the DS2430 is not protected from reading and the unique silicon serial number is |
| 87 | 87 | included in the 40 byte dump. This serial number is used as a check to verify the NVRAM and DS2430. |
| 88 | 88 | In the Police 911 2 NVRAM dump the serial number of the DS2430 is located at 0x002A and 0x1026 |
| 89 | 89 | If the serial number in the NVRAM and DS2430 match then they are paired and the game accepts the NVRAM. |
| 90 | 90 | If they don't match the game requires an external DS2430 (i.e. dongle) and flags the NVRAM as 'BAD' |
| 91 | The serial number is not present in the CF card (2 different Police 911 2 cards of the same version | |
| 91 | The serial number is not present in the CF card (2 different Police 911 2 cards of the same version | |
| 92 | 92 | were dumped and matched). |
| 93 | When the lasered ROM is read from the DS2430, it comes out from LSB to MSB (family code, LSB of | |
| 93 | When the lasered ROM is read from the DS2430, it comes out from LSB to MSB (family code, LSB of | |
| 94 | 94 | S/N->MSB of S/N, CRC) |
| 95 | 95 | For Police 911 2 that is 0x14 0xB2 0xB7 0x4A 0x00 0x00 0x00 0x83 |
| 96 | 96 | Family code=0x14 |
| r242703 | r242704 | |
| 104 | 104 | It may be possible to hand craft a DS2430 for a dongle-protected version of a game simply by using |
| 105 | 105 | one of the existing DS2430 dumps and adjusting the serial number found in a dump of the NVRAM to pair them |
| 106 | 106 | or adjusting the serial number in the NVRAM to match the serial number found in one of the dumped DS2430s. |
| 107 | This Police 911 2 board was upgraded from Police 911 by plugging in the dongle and changing the CF card. | |
| 108 | The NVRAM had previously died and the board was dead. Normally for a Viper game that is fatal. Using | |
| 109 | the NVRAM from Police 911 allowed it to boot and then the NVRAM upgraded itself with some additional | |
| 107 | This Police 911 2 board was upgraded from Police 911 by plugging in the dongle and changing the CF card. | |
| 108 | The NVRAM had previously died and the board was dead. Normally for a Viper game that is fatal. Using | |
| 109 | the NVRAM from Police 911 allowed it to boot and then the NVRAM upgraded itself with some additional | |
| 110 | 110 | data (the original data remained untouched). This means the dongle does more than just protect the game. |
| 111 | Another interesting fact about this upgrade is it has been discovered that the PCB can write to the | |
| 112 | external DS2430 in the dongle. This has been proven because the serial number of the DS2430 soldered | |
| 111 | Another interesting fact about this upgrade is it has been discovered that the PCB can write to the | |
| 112 | external DS2430 in the dongle. This has been proven because the serial number of the DS2430 soldered | |
| 113 | 113 | on the PCB is present in the EEPROM area of the Police 911 2 DS2430. |
| 114 | 114 | Here is a dump of the DS2430 from Police 911. Note the EEPROM area is empty and the serial number (from 0x20 onwards) |
| 115 | 115 | is present in the above Police 911 2 DS2430 dump at locations 0x11, 0x10 and 0x0F |
| r242703 | r242704 | |
| 117 | 117 | 00000010h FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |
| 118 | 118 | 00000020h 14 A9 30 74 00 00 00 E7 |
| 119 | 119 | This proves that the EEPROM area in the DS2430 is unused by an unprotected game and in fact the on-board |
| 120 | DS2430 is completely unused by an unprotected game. That is why any unprotected game will work on any | |
| 120 | DS2430 is completely unused by an unprotected game. That is why any unprotected game will work on any | |
| 121 | 121 | Viper PCB regardless of the on-board DS2430 serial number. |
| 122 | The existing DS2430 'common' dump used in the unprotected games was actually from a (dongle-protected) | |
| 122 | The existing DS2430 'common' dump used in the unprotected games was actually from a (dongle-protected) | |
| 123 | 123 | Mahjong Fight Club PCB but that PCB was used to test and run all of the unprotected Viper games. |
| 124 | 124 | M48T58Y - ST Microelectronics M48T58Y Timekeeper RAM (DIP28 @ U39). When this dies (after 10 year lifespan) |
| 125 | 125 | the game will complain with error RTC BAD then reset. The data inside the RTC can not be hand created |
| 126 | 126 | (yet) so to revive the PCB the correct RTC data must be re-programmed to a new RTC and replaced |
| 127 | 127 | on the PCB. |
| 128 | 128 | Regarding the RTC and protection-related checks.... |
| 129 | "RTC OK" checks 0x0000->0x0945 (i.e. I can clear the contents after 0x0945 and the game will still | |
| 129 | "RTC OK" checks 0x0000->0x0945 (i.e. I can clear the contents after 0x0945 and the game will still | |
| 130 | 130 | happily boot). The NVRAM contents are split into chunks, each of which are checksummed. It is a 16-bit checksum, |
| 131 | computed by summing two consecutive bytes as a 16-bit integer, where the final sum must add up to 0xFFFF (mod | |
| 132 | 65536). The last two bytes in the chunk are used to make the value 0xFFFF. There doesn't appear to be a | |
| 133 | complete checksum over all the chunks (I can pick and choose chunks from various NVRAMs, as long as each chunk | |
| 131 | computed by summing two consecutive bytes as a 16-bit integer, where the final sum must add up to 0xFFFF (mod | |
| 132 | 65536). The last two bytes in the chunk are used to make the value 0xFFFF. There doesn't appear to be a | |
| 133 | complete checksum over all the chunks (I can pick and choose chunks from various NVRAMs, as long as each chunk | |
| 134 | 134 | checksum checks out). The important chunks for booting are the first two. |
| 135 | The first chunk goes from 0x0000-0x000F. This seems to be a game/region identifier, and doesn't like its | |
| 136 | contents changed (I didn't try changing every byte, but several of the bytes would throw RTC errors, even with a | |
| 137 | fixed checksum). I'd guess that the CF verifies this value, since it's different for every game (i.e. Mocap | |
| 135 | The first chunk goes from 0x0000-0x000F. This seems to be a game/region identifier, and doesn't like its | |
| 136 | contents changed (I didn't try changing every byte, but several of the bytes would throw RTC errors, even with a | |
| 137 | fixed checksum). I'd guess that the CF verifies this value, since it's different for every game (i.e. Mocap | |
| 138 | 138 | Boxing NVRAM would have a correct checksum, but shouldn't pass Police 911 checks). |
| 139 | The second chunk goes from 0x0010-0x0079. This seems to be a board identifier. This has (optionally) | |
| 140 | several fields, each of which are 20 bytes long. I'm unsure of the first 6 bytes, the following 6 | |
| 141 | bytes are the DS2430A S/N, and the last 8 bytes are a game/region/dongle identifier. If running | |
| 142 | without a dongle, only the first 20 byte field is present. With a dongle, a second 20 byte field will | |
| 143 | be present. Moving this second field into the place of the first field (and fixing the checksum) | |
| 144 | doesn't work, and the second field will be ignored if the first field is valid for the game (and in | |
| 145 | which case the dongle will be ignored). For example, Police 911 will boot with a valid first field, | |
| 146 | with or without the second field, and with or without the dongle plugged in. If you have both fields, | |
| 147 | and leave the dongle plugged in, you can switch between Police 911 and Police 911/2 by simply swapping | |
| 139 | The second chunk goes from 0x0010-0x0079. This seems to be a board identifier. This has (optionally) | |
| 140 | several fields, each of which are 20 bytes long. I'm unsure of the first 6 bytes, the following 6 | |
| 141 | bytes are the DS2430A S/N, and the last 8 bytes are a game/region/dongle identifier. If running | |
| 142 | without a dongle, only the first 20 byte field is present. With a dongle, a second 20 byte field will | |
| 143 | be present. Moving this second field into the place of the first field (and fixing the checksum) | |
| 144 | doesn't work, and the second field will be ignored if the first field is valid for the game (and in | |
| 145 | which case the dongle will be ignored). For example, Police 911 will boot with a valid first field, | |
| 146 | with or without the second field, and with or without the dongle plugged in. If you have both fields, | |
| 147 | and leave the dongle plugged in, you can switch between Police 911 and Police 911/2 by simply swapping | |
| 148 | 148 | CF cards. |
| 149 | 149 | 29F002 - Fujitsu 29F002 256k x8 EEPROM stamped '941B01' (PLCC44 @ U25). Earlier revision stamped '941A01' |
| 150 | 150 | CN4/CN5 - RCA-type network connection jacks |
| r242703 | r242704 | |
| 244 | 244 | CN2/CN3 - Video output connector to external monitors |
| 245 | 245 | CN4/CN5 - Multi-pin IDC connectors joining to main board CN15/CN16 |
| 246 | 246 | |
| 247 | An additional control PCB is used for Mocap Golf for the golf club sensor. It contains a ROMless MCU, an EPROM and | |
| 247 | An additional control PCB is used for Mocap Golf for the golf club sensor. It contains a ROMless MCU, an EPROM and | |
| 248 | 248 | some other components. It will be documented at a later date. |
| 249 | 249 | |
| 250 | 250 | */ |
| r242703 | r242704 | |
|---|---|---|
| 64 | 64 | |
| 65 | 65 | required_device<cpu_device> m_maincpu; |
| 66 | 66 | required_device<gfxdecode_device> m_gfxdecode; |
| 67 | ||
| 67 | ||
| 68 | 68 | required_shared_ptr<UINT8> m_videoram; |
| 69 | ||
| 69 | ||
| 70 | 70 | tilemap_t *m_bg_tilemap; |
| 71 | ||
| 71 | ||
| 72 | 72 | DECLARE_WRITE8_MEMBER(wallc_videoram_w); |
| 73 | 73 | DECLARE_WRITE8_MEMBER(wallc_coin_counter_w); |
| 74 | 74 | DECLARE_DRIVER_INIT(wallc); |
| r242703 | r242704 | |
|---|---|---|
| 126 | 126 | { |
| 127 | 127 | UINT8 *shareram = (UINT8 *)m_shareram.target(); |
| 128 | 128 | |
| 129 | return shareram[BYTE_XOR_ | |
| 129 | return shareram[BYTE_XOR_LE(offset) ^ 1]; | |
| 130 | 130 | } |
| 131 | 131 | |
| 132 | 132 | WRITE8_MEMBER(wrally_state::dallas_share_w) |
| 133 | 133 | { |
| 134 | 134 | UINT8 *shareram = (UINT8 *)m_shareram.target(); |
| 135 | 135 | |
| 136 | shareram[BYTE_XOR_ | |
| 136 | shareram[BYTE_XOR_LE(offset) ^ 1] = data; | |
| 137 | 137 | } |
| 138 | 138 | |
| 139 | 139 | static ADDRESS_MAP_START( dallas_rom, AS_PROGRAM, 8, wrally_state ) |
| r242703 | r242704 | |
|---|---|---|
| 634 | 634 | MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) |
| 635 | 635 | MCFG_CPU_PROGRAM_MAP(main_map) |
| 636 | 636 | MCFG_CPU_VBLANK_INT_DRIVER("screen", yunsun16_state, irq2_line_hold) |
| 637 | ||
| 637 | ||
| 638 | 638 | MCFG_MACHINE_START_OVERRIDE(yunsun16_state, shocking) |
| 639 | 639 | MCFG_MACHINE_RESET_OVERRIDE(yunsun16_state, shocking) |
| 640 | 640 | |
| r242703 | r242704 | |
| 876 | 876 | |
| 877 | 877 | ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ |
| 878 | 878 | ROM_LOAD( "u131.bin", 0x000000, 0x080000, CRC(bcf7aa12) SHA1(f7bf5258396ed0eb7e85eccf250c6d0a333a4d61) ) |
| 879 | ||
| 879 | ||
| 880 | 880 | ROM_END |
| 881 | 881 | |
| 882 | 882 | /*************************************************************************** |
| r242703 | r242704 | |
| 905 | 905 | |
| 906 | 906 | ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ |
| 907 | 907 | ROM_LOAD( "yunsun16.131", 0x000000, 0x080000, CRC(d0a1bb8c) SHA1(10f33521bd6031ed73ee5c7be1382165925aa8f8) ) |
| 908 | ||
| 908 | ||
| 909 | 909 | ROM_END |
| 910 | 910 | |
| 911 | 911 | ROM_START( shockingk ) |
| r242703 | r242704 | |
| 928 | 928 | |
| 929 | 929 | ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ |
| 930 | 930 | ROM_LOAD( "yunsun16.131", 0x000000, 0x080000, CRC(d0a1bb8c) SHA1(10f33521bd6031ed73ee5c7be1382165925aa8f8) ) |
| 931 | ||
| 931 | ||
| 932 | 932 | ROM_END |
| 933 | 933 | |
| 934 | 934 | |
| r242703 | r242704 | |
| 960 | 960 | |
| 961 | 961 | ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ |
| 962 | 962 | ROM_LOAD( "bk_u131", 0x000000, 0x080000, CRC(22cc5732) SHA1(38aefa4e543ea54e004eee428ee087121eb20905) ) |
| 963 | ||
| 963 | ||
| 964 | 964 | ROM_END |
| 965 | 965 | |
| 966 | 966 | ROM_START( bombkicka ) // marked 'Bomb Kick 98' |
| r242703 | r242704 | |
| 983 | 983 | |
| 984 | 984 | ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ |
| 985 | 985 | ROM_LOAD( "bk_u131", 0x000000, 0x080000, CRC(22cc5732) SHA1(38aefa4e543ea54e004eee428ee087121eb20905) ) |
| 986 | ||
| 986 | ||
| 987 | 987 | ROM_END |
| 988 | 988 | |
| 989 | 989 | /*************************************************************************** |
| r242703 | r242704 | |
|---|---|---|
| 315 | 315 | ROM_END |
| 316 | 316 | |
| 317 | 317 | |
| 318 | GAMEL(1979?,tinv2650, 0, tinvader, tinvader, driver_device, 0, ROT270, "Zaccaria / Zelco", "The Invaders", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE, layout_tinv2650 ) | |
| 319 | GAME( 1979?,sia2650, tinv2650, tinvader, sinvader, driver_device, 0, ROT270, "bootleg (Sidam)", "Super Invader Attack (bootleg of The Invaders)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // 1980? | |
| 320 | GAME( 1979, dodgem, 0, tinvader, dodgem, driver_device, 0, ROT0, "Zaccaria", "Dodgem", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) | |
| 318 | GAMEL(1979?,tinv2650, 0, tinvader, tinvader, driver_device, 0, ROT270, "Zaccaria / Zelco", "The Invaders", GAME_IMPERFECT_SOUND, layout_tinv2650 ) | |
| 319 | GAME( 1979?,sia2650, tinv2650, tinvader, sinvader, driver_device, 0, ROT270, "bootleg (Sidam)", "Super Invader Attack (bootleg of The Invaders)", GAME_IMPERFECT_SOUND ) // 1980? | |
| 320 | GAME( 1979, dodgem, 0, tinvader, dodgem, driver_device, 0, ROT0, "Zaccaria", "Dodgem", GAME_IMPERFECT_SOUND ) |
| r242703 | r242704 | |
|---|---|---|
| 40 | 40 | #include "emu.h" |
| 41 | 41 | #include "cpu/z80/z80.h" |
| 42 | 42 | #include "cpu/m6800/m6800.h" |
| 43 | #include "machine/6821pia.h" | |
| 43 | 44 | #include "machine/i8255.h" |
| 45 | #include "sound/ay8910.h" | |
| 44 | 46 | #include "sound/dac.h" |
| 47 | #include "sound/tms5220.h" | |
| 45 | 48 | #include "includes/zaccaria.h" |
| 46 | 49 | |
| 47 | 50 | |
| 48 | ||
| 51 | WRITE8_MEMBER(zaccaria_state::zaccaria_dsw_sel_w) | |
| 49 | 52 | { |
| 50 | save_item(NAME(m_dsw_sel)); | |
| 51 | save_item(NAME(m_active_8910)); | |
| 52 | save_item(NAME(m_port0a)); | |
| 53 | save_item(NAME(m_acs)); | |
| 54 | save_item(NAME(m_last_port0b)); | |
| 55 | save_item(NAME(m_toggle)); | |
| 56 | save_item(NAME(m_nmi_mask)); | |
| 57 | } | |
| 58 | ||
| 59 | void zaccaria_state::machine_reset() | |
| 60 | { | |
| 61 | m_dsw_sel = 0; | |
| 62 | m_active_8910 = 0; | |
| 63 | m_port0a = 0; | |
| 64 | m_acs = 0; | |
| 65 | m_last_port0b = 0; | |
| 66 | m_toggle = 0; | |
| 67 | m_nmi_mask = 0; | |
| 68 | } | |
| 69 | ||
| 70 | WRITE8_MEMBER(zaccaria_state::dsw_sel_w) | |
| 71 | { | |
| 72 | 53 | switch (data & 0xf0) |
| 73 | 54 | { |
| 74 | 55 | case 0xe0: |
| r242703 | r242704 | |
| 89 | 70 | } |
| 90 | 71 | } |
| 91 | 72 | |
| 92 | READ8_MEMBER(zaccaria_state::dsw_r) | |
| 73 | READ8_MEMBER(zaccaria_state::zaccaria_dsw_r) | |
| 93 | 74 | { |
| 94 | 75 | return m_dsw_port[m_dsw_sel]->read(); |
| 95 | 76 | } |
| r242703 | r242704 | |
| 113 | 94 | /* 150 below to scale to volume 100 */ |
| 114 | 95 | v = (150 * table[ba]) / (4700 + table[ba]); |
| 115 | 96 | //printf("dac1w %02d %04d\n", ba, v); |
| 116 | m_ay2->set_volume(1, v); | |
| 97 | machine().device<ay8910_device>("ay2")->set_volume(1, v); | |
| 117 | 98 | } |
| 118 | 99 | |
| 119 | READ8_MEMBER(zaccaria_state::port0a_r) | |
| 100 | ||
| 101 | WRITE_LINE_MEMBER(zaccaria_state::zaccaria_irq0a) | |
| 120 | 102 | { |
| 121 | | |
| 103 | m_audiocpu->set_input_line(INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE); | |
| 122 | 104 | } |
| 123 | 105 | |
| 124 | WRITE | |
| 106 | WRITE_LINE_MEMBER(zaccaria_state::zaccaria_irq0b) | |
| 125 | 107 | { |
| 108 | m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); | |
| 109 | } | |
| 110 | ||
| 111 | READ8_MEMBER(zaccaria_state::zaccaria_port0a_r) | |
| 112 | { | |
| 113 | return machine().device<ay8910_device>((m_active_8910 == 0) ? "ay1" : "ay2")->data_r(space, 0); | |
| 114 | } | |
| 115 | ||
| 116 | WRITE8_MEMBER(zaccaria_state::zaccaria_port0a_w) | |
| 117 | { | |
| 126 | 118 | m_port0a = data; |
| 127 | 119 | } |
| 128 | 120 | |
| 129 | WRITE8_MEMBER(zaccaria_state::port0b_w) | |
| 121 | WRITE8_MEMBER(zaccaria_state::zaccaria_port0b_w) | |
| 130 | 122 | { |
| 131 | 123 | /* bit 1 goes to 8910 #0 BDIR pin */ |
| 132 | 124 | if ((m_last_port0b & 0x02) == 0x02 && (data & 0x02) == 0x00) |
| 133 | 125 | { |
| 134 | 126 | /* bit 0 goes to the 8910 #0 BC1 pin */ |
| 135 | m_ay1->data_address_w(space, m_last_port0b, m_port0a); | |
| 127 | machine().device<ay8910_device>("ay1")->data_address_w(space, m_last_port0b, m_port0a); | |
| 136 | 128 | } |
| 137 | 129 | else if ((m_last_port0b & 0x02) == 0x00 && (data & 0x02) == 0x02) |
| 138 | 130 | { |
| r242703 | r242704 | |
| 144 | 136 | if ((m_last_port0b & 0x08) == 0x08 && (data & 0x08) == 0x00) |
| 145 | 137 | { |
| 146 | 138 | /* bit 2 goes to the 8910 #1 BC1 pin */ |
| 147 | m_ay2->data_address_w(space, m_last_port0b >> 2, m_port0a); | |
| 139 | machine().device<ay8910_device>("ay2")->data_address_w(space, m_last_port0b >> 2, m_port0a); | |
| 148 | 140 | } |
| 149 | 141 | else if ((m_last_port0b & 0x08) == 0x00 && (data & 0x08) == 0x08) |
| 150 | 142 | { |
| r242703 | r242704 | |
| 156 | 148 | m_last_port0b = data; |
| 157 | 149 | } |
| 158 | 150 | |
| 159 | INTERRUPT_GEN_MEMBER(zaccaria_state::cb1_toggle) | |
| 151 | INTERRUPT_GEN_MEMBER(zaccaria_state::zaccaria_cb1_toggle) | |
| 160 | 152 | { |
| 161 | m_pia0->cb1_w(m_toggle & 1); | |
| 153 | pia6821_device *pia0 = machine().device<pia6821_device>("pia0"); | |
| 154 | ||
| 155 | pia0->cb1_w(m_toggle & 1); | |
| 162 | 156 | m_toggle ^= 1; |
| 163 | 157 | } |
| 164 | 158 | |
| 165 | WRITE8_MEMBER(zaccaria_state::port1b_w) | |
| 159 | WRITE8_MEMBER(zaccaria_state::zaccaria_port1b_w) | |
| 166 | 160 | { |
| 161 | tms5220_device *tms5220 = machine().device<tms5220_device>("tms"); | |
| 162 | ||
| 167 | 163 | // bit 0 = /RS |
| 168 | | |
| 164 | tms5220->rsq_w((data >> 0) & 0x01); | |
| 169 | 165 | // bit 1 = /WS |
| 170 | | |
| 166 | tms5220->wsq_w((data >> 1) & 0x01); | |
| 171 | 167 | |
| 172 | 168 | // bit 3 = "ACS" (goes, inverted, to input port 6 bit 3) |
| 173 | 169 | m_acs = ~data & 0x08; |
| r242703 | r242704 | |
| 185 | 181 | |
| 186 | 182 | WRITE8_MEMBER(zaccaria_state::sound1_command_w) |
| 187 | 183 | { |
| 188 | m_pia0->ca1_w(data & 0x80); | |
| 184 | pia6821_device *pia0 = machine().device<pia6821_device>("pia0"); | |
| 185 | pia0->ca1_w(data & 0x80); | |
| 189 | 186 | soundlatch2_byte_w(space, 0, data); |
| 190 | 187 | } |
| 191 | 188 | |
| 189 | WRITE8_MEMBER(zaccaria_state::mc1408_data_w) | |
| 190 | { | |
| 191 | m_dac2->write_unsigned8(data); | |
| 192 | } | |
| 193 | ||
| 194 | ||
| 192 | 195 | GAME_EXTERN(monymony); |
| 193 | 196 | |
| 194 | READ8_MEMBER(zaccaria_state::prot1_r) | |
| 197 | READ8_MEMBER(zaccaria_state::zaccaria_prot1_r) | |
| 195 | 198 | { |
| 196 | 199 | switch (offset) |
| 197 | 200 | { |
| r242703 | r242704 | |
| 211 | 214 | } |
| 212 | 215 | } |
| 213 | 216 | |
| 214 | READ8_MEMBER(zaccaria_state::prot2_r) | |
| 217 | READ8_MEMBER(zaccaria_state::zaccaria_prot2_r) | |
| 215 | 218 | { |
| 216 | 219 | switch (offset) |
| 217 | 220 | { |
| r242703 | r242704 | |
| 246 | 249 | static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, zaccaria_state ) |
| 247 | 250 | AM_RANGE(0x0000, 0x5fff) AM_ROM |
| 248 | 251 | AM_RANGE(0x6000, 0x63ff) AM_READONLY |
| 249 | AM_RANGE(0x6400, 0x6407) AM_READ(prot1_r) | |
| 250 | AM_RANGE(0x6000, 0x67ff) AM_WRITE(videoram_w) AM_SHARE("videoram") /* 6400-67ff is 4 bits wide */ | |
| 251 | AM_RANGE(0x6800, 0x683f) AM_WRITE(attributes_w) AM_SHARE("attributesram") | |
| 252 | AM_RANGE(0x6400, 0x6407) AM_READ(zaccaria_prot1_r) | |
| 253 | AM_RANGE(0x6000, 0x67ff) AM_WRITE(zaccaria_videoram_w) AM_SHARE("videoram") /* 6400-67ff is 4 bits wide */ | |
| 254 | AM_RANGE(0x6800, 0x683f) AM_WRITE(zaccaria_attributes_w) AM_SHARE("attributesram") | |
| 252 | 255 | AM_RANGE(0x6840, 0x685f) AM_RAM AM_SHARE("spriteram") |
| 253 | 256 | AM_RANGE(0x6881, 0x68c0) AM_RAM AM_SHARE("spriteram2") |
| 254 | AM_RANGE(0x6c00, 0x6c00) AM_WRITE(flip_screen_x_w) | |
| 255 | AM_RANGE(0x6c01, 0x6c01) AM_WRITE(flip_screen_y_w) | |
| 257 | AM_RANGE(0x6c00, 0x6c00) AM_WRITE(zaccaria_flip_screen_x_w) | |
| 258 | AM_RANGE(0x6c01, 0x6c01) AM_WRITE(zaccaria_flip_screen_y_w) | |
| 256 | 259 | AM_RANGE(0x6c02, 0x6c02) AM_WRITENOP /* sound reset */ |
| 257 | 260 | AM_RANGE(0x6c06, 0x6c06) AM_WRITE(coin_w) |
| 258 | 261 | AM_RANGE(0x6c07, 0x6c07) AM_WRITE(nmi_mask_w) |
| 259 | AM_RANGE(0x6c00, 0x6c07) AM_READ(prot2_r) | |
| 260 | AM_RANGE(0x6e00, 0x6e00) AM_READWRITE(dsw_r, sound_command_w) | |
| 262 | AM_RANGE(0x6c00, 0x6c07) AM_READ(zaccaria_prot2_r) | |
| 263 | AM_RANGE(0x6e00, 0x6e00) AM_READWRITE(zaccaria_dsw_r, sound_command_w) | |
| 261 | 264 | AM_RANGE(0x7000, 0x77ff) AM_RAM |
| 262 | 265 | AM_RANGE(0x7800, 0x7803) AM_DEVREADWRITE("ppi8255", i8255_device, read, write) |
| 263 | 266 | AM_RANGE(0x7c00, 0x7c00) AM_READ(watchdog_reset_r) |
| r242703 | r242704 | |
| 315 | 318 | static ADDRESS_MAP_START( sound_map_2, AS_PROGRAM, 8, zaccaria_state ) |
| 316 | 319 | AM_RANGE(0x0000, 0x007f) AM_RAM /* 6802 internal ram */ |
| 317 | 320 | AM_RANGE(0x0090, 0x0093) AM_DEVREADWRITE("pia1", pia6821_device, read, write) AM_MIRROR(0x8F6C) |
| 318 | AM_RANGE(0x1000, 0x1000) AM_ | |
| 321 | AM_RANGE(0x1000, 0x1000) AM_WRITE(mc1408_data_w) AM_MIRROR(0x83FF) /* MC1408 */ | |
| 319 | 322 | AM_RANGE(0x1400, 0x1400) AM_WRITE(sound1_command_w) AM_MIRROR(0xC3FF) |
| 320 | 323 | AM_RANGE(0x1800, 0x1800) AM_READ(soundlatch_byte_r) AM_MIRROR(0xC3FF) |
| 321 | 324 | AM_RANGE(0x2000, 0x2fff) AM_ROM AM_MIRROR(0x8000) // rom 8 with A12 low |
| r242703 | r242704 | |
| 508 | 511 | |
| 509 | 512 | MCFG_CPU_ADD("audiocpu", M6802,XTAL_3_579545MHz) /* verified on pcb */ |
| 510 | 513 | MCFG_CPU_PROGRAM_MAP(sound_map_1) |
| 511 | MCFG_CPU_PERIODIC_INT_DRIVER(zaccaria_state, cb1_toggle, (double)XTAL_3_579545MHz/4096) | |
| 514 | MCFG_CPU_PERIODIC_INT_DRIVER(zaccaria_state, zaccaria_cb1_toggle, (double)XTAL_3_579545MHz/4096) | |
| 512 | 515 | MCFG_QUANTUM_TIME(attotime::from_hz(1000000)) |
| 513 | 516 | |
| 514 | 517 | MCFG_CPU_ADD("audio2", M6802,XTAL_3_579545MHz) /* verified on pcb */ |
| r242703 | r242704 | |
| 519 | 522 | MCFG_I8255_IN_PORTA_CB(IOPORT("P1")) |
| 520 | 523 | MCFG_I8255_IN_PORTB_CB(IOPORT("P2")) |
| 521 | 524 | MCFG_I8255_IN_PORTC_CB(IOPORT("SYSTEM")) |
| 522 | MCFG_I8255_OUT_PORTC_CB(WRITE8(zaccaria_state, dsw_sel_w)) | |
| 525 | MCFG_I8255_OUT_PORTC_CB(WRITE8(zaccaria_state, zaccaria_dsw_sel_w)) | |
| 523 | 526 | |
| 524 | 527 | MCFG_DEVICE_ADD( "pia0", PIA6821, 0) |
| 525 | MCFG_PIA_READPA_HANDLER(READ8(zaccaria_state, port0a_r)) | |
| 526 | MCFG_PIA_WRITEPA_HANDLER(WRITE8(zaccaria_state, port0a_w)) | |
| 527 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(zaccaria_state, port0b_w)) | |
| 528 | MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("audiocpu", m6802_cpu_device, nmi_line)) | |
| 529 | MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("audiocpu", m6802_cpu_device, irq_line)) | |
| 528 | MCFG_PIA_READPA_HANDLER(READ8(zaccaria_state, zaccaria_port0a_r)) | |
| 529 | MCFG_PIA_WRITEPA_HANDLER(WRITE8(zaccaria_state, zaccaria_port0a_w)) | |
| 530 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(zaccaria_state, zaccaria_port0b_w)) | |
| 531 | MCFG_PIA_IRQA_HANDLER(WRITELINE(zaccaria_state, zaccaria_irq0a)) | |
| 532 | MCFG_PIA_IRQB_HANDLER(WRITELINE(zaccaria_state, zaccaria_irq0b)) | |
| 530 | 533 | |
| 531 | 534 | MCFG_DEVICE_ADD( "pia1", PIA6821, 0) |
| 532 | 535 | MCFG_PIA_READPA_HANDLER(DEVREAD8("tms", tms5220_device, status_r)) |
| 533 | 536 | MCFG_PIA_WRITEPA_HANDLER(DEVWRITE8("tms", tms5220_device, data_w)) |
| 534 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(zaccaria_state,port1b_w)) | |
| 537 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(zaccaria_state,zaccaria_port1b_w)) | |
| 535 | 538 | |
| 536 | 539 | /* video hardware */ |
| 537 | 540 | MCFG_SCREEN_ADD("screen", RASTER) |
| r242703 | r242704 | |
| 539 | 542 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 540 | 543 | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 541 | 544 | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) |
| 542 | MCFG_SCREEN_UPDATE_DRIVER(zaccaria_state, screen_update) | |
| 545 | MCFG_SCREEN_UPDATE_DRIVER(zaccaria_state, screen_update_zaccaria) | |
| 543 | 546 | MCFG_SCREEN_PALETTE("palette") |
| 544 | 547 | |
| 545 | 548 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", zaccaria) |
| r242703 | r242704 | |
| 558 | 561 | MCFG_SOUND_ADD("ay2", AY8910, XTAL_3_579545MHz/2) /* verified on pcb */ |
| 559 | 562 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) |
| 560 | 563 | |
| 561 | MCFG_DAC_ADD(" | |
| 564 | MCFG_DAC_ADD("dac2") | |
| 562 | 565 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 563 | 566 | |
| 564 | 567 | /* There is no xtal, the clock is obtained from a RC oscillator as shown in the TMS5220 datasheet (R=100kOhm C=22pF) */ |
| r242703 | r242704 | |
| 723 | 726 | |
| 724 | 727 | |
| 725 | 728 | |
| 726 | GAME( 1983, monymony, 0, zaccaria, monymony, driver_device, 0, ROT90, "Zaccaria", "Money Money", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) | |
| 727 | GAME( 1984, jackrabt, 0, zaccaria, jackrabt, driver_device, 0, ROT90, "Zaccaria", "Jack Rabbit (set 1)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) | |
| 728 | GAME( 1984, jackrabt2, jackrabt, zaccaria, jackrabt, driver_device, 0, ROT90, "Zaccaria", "Jack Rabbit (set 2)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) | |
| 729 | GAME( 1984, jackrabts, jackrabt, zaccaria, jackrabt, driver_device, 0, ROT90, "Zaccaria", "Jack Rabbit (special)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) | |
| 729 | GAME( 1983, monymony, 0, zaccaria, monymony, driver_device, 0, ROT90, "Zaccaria", "Money Money", GAME_IMPERFECT_SOUND ) | |
| 730 | GAME( 1984, jackrabt, 0, zaccaria, jackrabt, driver_device, 0, ROT90, "Zaccaria", "Jack Rabbit (set 1)", GAME_IMPERFECT_SOUND ) | |
| 731 | GAME( 1984, jackrabt2, jackrabt, zaccaria, jackrabt, driver_device, 0, ROT90, "Zaccaria", "Jack Rabbit (set 2)", GAME_IMPERFECT_SOUND ) | |
| 732 | GAME( 1984, jackrabts, jackrabt, zaccaria, jackrabt, driver_device, 0, ROT90, "Zaccaria", "Jack Rabbit (special)", GAME_IMPERFECT_SOUND ) |
| r242703 | r242704 | |
|---|---|---|
| 22 | 22 | required_device<cpu_device> m_maincpu; |
| 23 | 23 | required_device<dvg_device> m_dvg; |
| 24 | 24 | required_device<discrete_device> m_discrete; |
| 25 | ||
| 26 | /* memory banks */ | |
| 27 | optional_memory_bank m_ram1; | |
| 28 | optional_memory_bank m_ram2; | |
| 29 | ||
| 25 | ||
| 26 | /* memory pointers */ | |
| 27 | optional_shared_ptr<UINT8> m_ram1; | |
| 28 | optional_shared_ptr<UINT8> m_ram2; | |
| 29 | ||
| 30 | int m_astdelux_bankswitch; // for postload | |
| 31 | ||
| 32 | void astdelux_bankswitch_restore(); | |
| 33 | ||
| 30 | 34 | DECLARE_WRITE8_MEMBER(astdelux_coin_counter_w); |
| 31 | 35 | DECLARE_WRITE8_MEMBER(llander_led_w); |
| 32 | 36 | DECLARE_READ8_MEMBER(asteroid_IN0_r); |
| r242703 | r242704 | |
| 43 | 47 | DECLARE_WRITE8_MEMBER(asteroid_noise_reset_w); |
| 44 | 48 | DECLARE_WRITE8_MEMBER(llander_snd_reset_w); |
| 45 | 49 | DECLARE_WRITE8_MEMBER(llander_sounds_w); |
| 46 | ||
| 50 | ||
| 47 | 51 | DECLARE_CUSTOM_INPUT_MEMBER(clock_r); |
| 48 | ||
| 52 | ||
| 49 | 53 | INTERRUPT_GEN_MEMBER(asteroid_interrupt); |
| 50 | 54 | INTERRUPT_GEN_MEMBER(asterock_interrupt); |
| 51 | 55 | INTERRUPT_GEN_MEMBER(llander_interrupt); |
| 52 | ||
| 56 | ||
| 53 | 57 | DECLARE_DRIVER_INIT(asterock); |
| 54 | 58 | DECLARE_DRIVER_INIT(asteroidb); |
| 55 | ||
| 56 | virtual void machine_start(); | |
| 59 | DECLARE_DRIVER_INIT(astdelux); | |
| 60 | ||
| 57 | 61 | virtual void machine_reset(); |
| 62 | DECLARE_MACHINE_RESET(llander); | |
| 58 | 63 | }; |
| 59 | 64 | |
| 60 | 65 | /*----------- defined in audio/asteroid.c -----------*/ |
| r242703 | r242704 | |
|---|---|---|
| 20 | 20 | m_maincpu(*this, "maincpu"), |
| 21 | 21 | m_gfxdecode(*this, "gfxdecode"), |
| 22 | 22 | m_palette(*this, "palette"), |
| 23 | m_spritegen(*this, "spritegen") | |
| 23 | m_spritegen(*this, "spritegen") | |
| 24 | 24 | { } |
| 25 | 25 | |
| 26 | 26 | /* memory pointers */ |
| r242703 | r242704 | |
|---|---|---|
| 191 | 191 | rendertarget = NULL; |
| 192 | 192 | depthbuffer = NULL; |
| 193 | 193 | displayedtarget = NULL; |
| 194 | puller_channel = 0; | |
| 195 | puller_subchannel = 0; | |
| 196 | puller_waiting = 0; | |
| 197 | 194 | debug_grab_texttype = -1; |
| 198 | 195 | debug_grab_textfile = NULL; |
| 199 | waitvblank_used = 0; | |
| 200 | 196 | memset(vertex_attribute_words, 0, sizeof(vertex_attribute_words)); |
| 201 | 197 | memset(vertex_attribute_offset, 0, sizeof(vertex_attribute_offset)); |
| 202 | 198 | } |
| r242703 | r242704 | |
| 212 | 208 | int geforce_commandkind(UINT32 word); |
| 213 | 209 | UINT32 geforce_object_offset(UINT32 handle); |
| 214 | 210 | void geforce_read_dma_object(UINT32 handle, UINT32 &offset, UINT32 &size); |
| 215 | i | |
| 211 | void geforce_exec_method(address_space &space, UINT32 channel, UINT32 subchannel, UINT32 method, UINT32 address, int &countlen); | |
| 216 | 212 | UINT32 texture_get_texel(int number, int x, int y); |
| 217 | 213 | void write_pixel(int x, int y, UINT32 color, UINT32 depth); |
| 218 | 214 | void combiner_initialize_registers(UINT32 argb8[6]); |
| r242703 | r242704 | |
| 242 | 238 | void computedilated(void); |
| 243 | 239 | void putpixtex(int xp, int yp, int up, int vp); |
| 244 | 240 | int toggle_register_combiners_usage(); |
| 245 | int toggle_wait_vblank_support(); | |
| 246 | 241 | void debug_grab_texture(int type, const char *filename); |
| 247 | 242 | void debug_grab_vertex_program_slot(int slot, UINT32 *instruction); |
| 248 | void start(); | |
| 249 | 243 | void savestate_items(); |
| 244 | ||
| 250 | 245 | void read_vertex(address_space & space, offs_t address, vertex_nv &vertex, int attrib); |
| 251 | 246 | int read_vertices_0x1810(address_space & space, vertex_nv *destination, int offset, int limit); |
| 252 | 247 | int read_vertices_0x1800(address_space & space, vertex_nv *destination, UINT32 address, int limit); |
| 253 | 248 | int read_vertices_0x1818(address_space & space, vertex_nv *destination, UINT32 address, int limit); |
| 254 | 249 | void convert_vertices_poly(vertex_nv *source, vertex_t *destination, int count); |
| 255 | TIMER_CALLBACK_MEMBER(puller_timer_work); | |
| 256 | 250 | |
| 257 | 251 | struct { |
| 258 | 252 | UINT32 regs[0x80 / 4]; |
| r242703 | r242704 | |
| 435 | 429 | int enabled_vertex_attributes; |
| 436 | 430 | int vertex_attribute_words[16]; |
| 437 | 431 | int vertex_attribute_offset[16]; |
| 438 | emu_timer *puller_timer; | |
| 439 | int puller_channel; | |
| 440 | int puller_subchannel; | |
| 441 | int puller_waiting; | |
| 442 | address_space *puller_space; | |
| 443 | 432 | UINT32 dilated0[16][2048]; |
| 444 | 433 | UINT32 dilated1[16][2048]; |
| 445 | 434 | int dilatechose[256]; |
| 446 | 435 | nvidia_object_data *objectdata; |
| 447 | 436 | int debug_grab_texttype; |
| 448 | 437 | char *debug_grab_textfile; |
| 449 | int waitvblank_used; | |
| 450 | 438 | |
| 451 | 439 | enum VERTEX_PARAMETER { |
| 452 | 440 | PARAM_COLOR_B = 0, |
| r242703 | r242704 | |
| 491 | 479 | TEX3 = 12 |
| 492 | 480 | }; |
| 493 | 481 | enum NV2A_VTXBUF_TYPE { |
| 494 | NV2A_VTXBUF_TYPE_U | |
| 482 | NV2A_VTXBUF_TYPE_UNKNOWN_0 = 0, // used for vertex color ? | |
| 495 | 483 | NV2A_VTXBUF_TYPE_FLOAT = 2, |
| 496 | 484 | NV2A_VTXBUF_TYPE_UBYTE = 4, |
| 497 | 485 | NV2A_VTXBUF_TYPE_USHORT = 5, |
| r242703 | r242704 | |
|---|---|---|
| 52 | 52 | required_device<gfxdecode_device> m_gfxdecode; |
| 53 | 53 | required_device<screen_device> m_screen; |
| 54 | 54 | required_device<palette_device> m_palette; |
| 55 | ||
| 55 | ||
| 56 | 56 | /* memory pointers */ |
| 57 | 57 | required_shared_ptr<UINT8> m_videoram; |
| 58 | 58 | required_shared_ptr<UINT8> m_spriteram; |
| r242703 | r242704 | |
| 66 | 66 | UINT8 m__4in1_bank; |
| 67 | 67 | tilemap_t *m_bg_tilemap; |
| 68 | 68 | tilemap_t *m_rockclim_tilemap; |
| 69 | int m_mooncrst_gfxextend; | |
| 69 | 70 | int m_spriteram2_present; |
| 70 | 71 | UINT8 m_gfxbank[5]; |
| 71 | 72 | UINT8 m_flipscreen_x; |
| r242703 | r242704 | |
| 73 | 74 | UINT8 m_color_mask; |
| 74 | 75 | tilemap_t *m_dambustr_tilemap2; |
| 75 | 76 | UINT8 *m_dambustr_videoram2; |
| 76 | ||
| 77 | ||
| 77 | 78 | void (galaxold_state::*m_modify_charcode)(UINT16 *code, UINT8 x); /* function to call to do character banking */ |
| 78 | 79 | void (galaxold_state::*m_modify_spritecode)(UINT8 *spriteram, int*, int*, int*, int); /* function to call to do sprite banking */ |
| 79 | 80 | void (galaxold_state::*m_modify_color)(UINT8 *color); /* function to call to do modify how the color codes map to the PROM */ |
| r242703 | r242704 | |
| 146 | 147 | DECLARE_WRITE8_MEMBER(dambustr_bg_split_line_w); |
| 147 | 148 | DECLARE_WRITE8_MEMBER(dambustr_bg_color_w); |
| 148 | 149 | DECLARE_WRITE_LINE_MEMBER(galaxold_7474_9m_2_q_callback); |
| 149 | DECLARE_WRITE_LINE_MEMBER(galaxold_7474_9m_1_callback); | |
| 150 | ||
| 150 | DECLARE_WRITE_LINE_MEMBER(galaxold_7474_9m_1_callback); | |
| 151 | ||
| 151 | 152 | DECLARE_CUSTOM_INPUT_MEMBER(_4in1_fake_port_r); |
| 152 | 153 | DECLARE_CUSTOM_INPUT_MEMBER(vpool_lives_r); |
| 153 | 154 | DECLARE_CUSTOM_INPUT_MEMBER(ckongg_coinage_r); |
| 154 | 155 | DECLARE_CUSTOM_INPUT_MEMBER(dkongjrm_coinage_r); |
| 155 | ||
| 156 | ||
| 156 | 157 | DECLARE_DRIVER_INIT(bullsdrtg); |
| 157 | 158 | DECLARE_DRIVER_INIT(ladybugg); |
| 158 | 159 | DECLARE_DRIVER_INIT(4in1); |
| 159 | 160 | DECLARE_DRIVER_INIT(guttangt); |
| 160 | 161 | DECLARE_DRIVER_INIT(ckonggx); |
| 161 | ||
| 162 | ||
| 162 | 163 | TILE_GET_INFO_MEMBER(drivfrcg_get_tile_info); |
| 163 | 164 | TILE_GET_INFO_MEMBER(racknrol_get_tile_info); |
| 164 | 165 | TILE_GET_INFO_MEMBER(dambustr_get_tile_info2); |
| 165 | 166 | TILE_GET_INFO_MEMBER(get_tile_info); |
| 166 | 167 | TILE_GET_INFO_MEMBER(rockclim_get_tile_info); |
| 167 | 168 | TILE_GET_INFO_MEMBER(harem_get_tile_info); |
| 168 | ||
| 169 | ||
| 169 | 170 | DECLARE_MACHINE_RESET(galaxold); |
| 170 | 171 | DECLARE_MACHINE_RESET(devilfsg); |
| 171 | 172 | DECLARE_MACHINE_RESET(hunchbkg); |
| 172 | ||
| 173 | ||
| 173 | 174 | DECLARE_PALETTE_INIT(galaxold); |
| 174 | 175 | DECLARE_PALETTE_INIT(rockclim); |
| 175 | 176 | DECLARE_PALETTE_INIT(scrambold); |
| r242703 | r242704 | |
| 180 | 181 | DECLARE_PALETTE_INIT(mariner); |
| 181 | 182 | DECLARE_PALETTE_INIT(dambustr); |
| 182 | 183 | DECLARE_PALETTE_INIT(turtles); |
| 183 | ||
| 184 | ||
| 184 | 185 | DECLARE_VIDEO_START(galaxold); |
| 185 | 186 | DECLARE_VIDEO_START(drivfrcg); |
| 186 | 187 | DECLARE_VIDEO_START(racknrol); |
| r242703 | r242704 | |
| 205 | 206 | DECLARE_VIDEO_START(dambustr); |
| 206 | 207 | DECLARE_VIDEO_START(harem); |
| 207 | 208 | DECLARE_VIDEO_START(bagmanmc); |
| 208 | ||
| 209 | ||
| 209 | 210 | UINT32 screen_update_galaxold(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 210 | 211 | UINT32 screen_update_dambustr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 211 | ||
| 212 | ||
| 212 | 213 | INTERRUPT_GEN_MEMBER(hunchbks_vh_interrupt); |
| 213 | 214 | TIMER_CALLBACK_MEMBER(stars_blink_callback); |
| 214 | 215 | TIMER_CALLBACK_MEMBER(stars_scroll_callback); |
| 215 | 216 | TIMER_DEVICE_CALLBACK_MEMBER(galaxold_interrupt_timer); |
| 216 | 217 | IRQ_CALLBACK_MEMBER(hunchbkg_irq_callback); |
| 217 | ||
| 218 | ||
| 218 | 219 | void state_save_register(); |
| 219 | 220 | void video_start_common(); |
| 220 | 221 | void pisces_modify_spritecode(UINT8 *spriteram, int *code, int *flipx, int *flipy, int offs); |
| r242703 | r242704 | |
|---|---|---|
| 84 | 84 | DECLARE_WRITE8_MEMBER(adpcm_addr_w); |
| 85 | 85 | DECLARE_WRITE8_MEMBER(adpcm_stop_w); |
| 86 | 86 | DECLARE_WRITE_LINE_MEMBER(adpcm_int); |
| 87 | ||
| 87 | ||
| 88 | 88 | DECLARE_DRIVER_INIT(kuniokun); |
| 89 | 89 | DECLARE_DRIVER_INIT(kuniokunb); |
| 90 | 90 | DECLARE_DRIVER_INIT(renegade); |
| r242703 | r242704 | |
|---|---|---|
| 22 | 22 | optional_shared_ptr<UINT8> m_soundram; |
| 23 | 23 | |
| 24 | 24 | UINT8 m_cavelon_bank; |
| 25 | UINT8 m_security_2B_counter; | |
| 26 | UINT8 m_xb; | |
| 25 | 27 | |
| 26 | 28 | // harem |
| 27 | 29 | UINT8 m_harem_decrypt_mode; |
| r242703 | r242704 | |
| 81 | 83 | DECLARE_DRIVER_INIT(billiard); |
| 82 | 84 | DECLARE_MACHINE_RESET(scramble); |
| 83 | 85 | DECLARE_MACHINE_RESET(explorer); |
| 86 | DECLARE_WRITE8_MEMBER(scramble_protection_w); | |
| 87 | DECLARE_READ8_MEMBER(scramble_protection_r); | |
| 84 | 88 | DECLARE_WRITE_LINE_MEMBER(scramble_sh_7474_q_callback); |
| 85 | 89 | void cavelon_banksw(); |
| 86 | 90 | inline int bit(int i,int n); |
| r242703 | r242704 | |
|---|---|---|
| 54 | 54 | DECLARE_WRITE8_MEMBER(sprint2_wram_w); |
| 55 | 55 | DECLARE_WRITE8_MEMBER(sprint2_lamp1_w); |
| 56 | 56 | DECLARE_WRITE8_MEMBER(sprint2_lamp2_w); |
| 57 | DECLARE_WRITE8_MEMBER(dominos4_lamp3_w); | |
| 58 | DECLARE_WRITE8_MEMBER(dominos4_lamp4_w); | |
| 59 | 57 | DECLARE_READ8_MEMBER(sprint2_collision1_r); |
| 60 | 58 | DECLARE_READ8_MEMBER(sprint2_collision2_r); |
| 61 | 59 | DECLARE_WRITE8_MEMBER(sprint2_collision_reset1_w); |
| r242703 | r242704 | |
| 68 | 66 | DECLARE_DRIVER_INIT(sprint1); |
| 69 | 67 | DECLARE_DRIVER_INIT(sprint2); |
| 70 | 68 | DECLARE_DRIVER_INIT(dominos); |
| 71 | DECLARE_DRIVER_INIT(dominos4); | |
| 72 | 69 | TILE_GET_INFO_MEMBER(get_tile_info); |
| 73 | 70 | virtual void video_start(); |
| 74 | 71 | DECLARE_PALETTE_INIT(sprint2); |
| r242703 | r242704 | |
|---|---|---|
| 27 | 27 | required_device<gfxdecode_device> m_gfxdecode; |
| 28 | 28 | required_device<screen_device> m_screen; |
| 29 | 29 | required_device<palette_device> m_palette; |
| 30 | ||
| 30 | ||
| 31 | 31 | /* memory pointers */ |
| 32 | 32 | required_shared_ptr<UINT16> m_vram_0; |
| 33 | 33 | required_shared_ptr<UINT16> m_vram_1; |
| r242703 | r242704 | |
|---|---|---|
| 5 | 5 | public: |
| 6 | 6 | zac2650_state(const machine_config &mconfig, device_type type, const char *tag) |
| 7 | 7 | : driver_device(mconfig, type, tag), |
| 8 | m_videoram(*this, "videoram"), | |
| 9 | m_s2636_0_ram(*this, "s2636_0_ram"), | |
| 8 | 10 | m_maincpu(*this, "maincpu"), |
| 9 | 11 | m_s2636(*this, "s2636"), |
| 10 | 12 | m_gfxdecode(*this, "gfxdecode"), |
| 11 | 13 | m_screen(*this, "screen"), |
| 12 | m_palette(*this, "palette"), | |
| 13 | m_videoram(*this, "videoram"), | |
| 14 | m_s2636_0_ram(*this, "s2636_0_ram") { } | |
| 14 | m_palette(*this, "palette") { } | |
| 15 | 15 | |
| 16 | /* devices */ | |
| 16 | required_shared_ptr<UINT8> m_videoram; | |
| 17 | required_shared_ptr<UINT8> m_s2636_0_ram; | |
| 18 | ||
| 17 | 19 | required_device<cpu_device> m_maincpu; |
| 18 | 20 | required_device<s2636_device> m_s2636; |
| 19 | 21 | required_device<gfxdecode_device> m_gfxdecode; |
| 20 | 22 | required_device<screen_device> m_screen; |
| 21 | 23 | required_device<palette_device> m_palette; |
| 22 | 24 | |
| 23 | /* memory pointers */ | |
| 24 | required_shared_ptr<UINT8> m_videoram; | |
| 25 | required_shared_ptr<UINT8> m_s2636_0_ram; | |
| 26 | ||
| 27 | 25 | bitmap_ind16 m_bitmap; |
| 28 | 26 | bitmap_ind16 m_spritebitmap; |
| 29 | 27 | int m_CollisionBackground; |
| 30 | 28 | int m_CollisionSprite; |
| 31 | 29 | tilemap_t *m_bg_tilemap; |
| 32 | ||
| 33 | 30 | DECLARE_WRITE8_MEMBER(tinvader_sound_w); |
| 34 | 31 | DECLARE_WRITE8_MEMBER(tinvader_videoram_w); |
| 35 | 32 | DECLARE_READ8_MEMBER(zac_s2636_r); |
| r242703 | r242704 | |
|---|---|---|
| 1 | #include "machine/6821pia.h" | |
| 2 | #include "sound/ay8910.h" | |
| 3 | #include "sound/tms5220.h" | |
| 1 | #include "sound/dac.h" | |
| 4 | 2 | |
| 5 | 3 | class zaccaria_state : public driver_device |
| 6 | 4 | { |
| 7 | 5 | public: |
| 8 | 6 | zaccaria_state(const machine_config &mconfig, device_type type, const char *tag) |
| 9 | 7 | : driver_device(mconfig, type, tag), |
| 10 | m_maincpu(*this, "maincpu"), | |
| 11 | m_audio2(*this, "audio2"), | |
| 12 | m_pia0(*this, "pia0"), | |
| 13 | m_ay1(*this, "ay1"), | |
| 14 | m_ay2(*this, "ay2"), | |
| 15 | m_tms(*this, "tms"), | |
| 16 | m_gfxdecode(*this, "gfxdecode"), | |
| 17 | m_palette(*this, "palette"), | |
| 18 | 8 | m_videoram(*this, "videoram"), |
| 19 | 9 | m_attributesram(*this, "attributesram"), |
| 20 | 10 | m_spriteram(*this, "spriteram"), |
| 21 | 11 | m_spriteram2(*this, "spriteram2"), |
| 12 | m_maincpu(*this, "maincpu"), | |
| 13 | m_audiocpu(*this, "audiocpu"), | |
| 14 | m_audio2(*this, "audio2"), | |
| 15 | m_dac2(*this, "dac2"), | |
| 16 | m_gfxdecode(*this, "gfxdecode"), | |
| 17 | m_palette(*this, "palette"), | |
| 22 | 18 | m_dsw_port(*this, "DSW") { } |
| 23 | 19 | |
| 24 | ||
| 25 | ||
| 26 | /* devices */ | |
| 27 | required_device<cpu_device> m_maincpu; | |
| 28 | required_device<cpu_device> m_audio2; | |
| 29 | required_device<pia6821_device> m_pia0; | |
| 30 | required_device<ay8910_device> m_ay1; | |
| 31 | required_device<ay8910_device> m_ay2; | |
| 32 | required_device<tms5220_device> m_tms; | |
| 33 | required_device<gfxdecode_device> m_gfxdecode; | |
| 34 | required_device<palette_device> m_palette; | |
| 35 | ||
| 36 | /* memory pointers */ | |
| 37 | required_shared_ptr<UINT8> m_videoram; | |
| 38 | required_shared_ptr<UINT8> m_attributesram; | |
| 39 | required_shared_ptr<UINT8> m_spriteram; | |
| 40 | required_shared_ptr<UINT8> m_spriteram2; | |
| 41 | ||
| 42 | required_ioport_array<3> m_dsw_port; | |
| 43 | ||
| 44 | 20 | int m_dsw_sel; |
| 45 | 21 | int m_active_8910; |
| 46 | 22 | int m_port0a; |
| 47 | 23 | int m_acs; |
| 48 | 24 | int m_last_port0b; |
| 49 | 25 | int m_toggle; |
| 26 | required_shared_ptr<UINT8> m_videoram; | |
| 27 | required_shared_ptr<UINT8> m_attributesram; | |
| 50 | 28 | tilemap_t *m_bg_tilemap; |
| 29 | required_shared_ptr<UINT8> m_spriteram; | |
| 30 | required_shared_ptr<UINT8> m_spriteram2; | |
| 51 | 31 | UINT8 m_nmi_mask; |
| 52 | ||
| 53 | DECLARE_READ8_MEMBER(dsw_r); | |
| 32 | DECLARE_READ8_MEMBER(zaccaria_dsw_r); | |
| 54 | 33 | DECLARE_WRITE8_MEMBER(sound_command_w); |
| 55 | 34 | DECLARE_WRITE8_MEMBER(sound1_command_w); |
| 56 | DECLARE_READ8_MEMBER(prot1_r); | |
| 57 | DECLARE_READ8_MEMBER(prot2_r); | |
| 35 | DECLARE_READ8_MEMBER(zaccaria_prot1_r); | |
| 36 | DECLARE_READ8_MEMBER(zaccaria_prot2_r); | |
| 58 | 37 | DECLARE_WRITE8_MEMBER(coin_w); |
| 59 | 38 | DECLARE_WRITE8_MEMBER(nmi_mask_w); |
| 60 | DECLARE_WRITE8_MEMBER(videoram_w); | |
| 61 | DECLARE_WRITE8_MEMBER(attributes_w); | |
| 62 | DECLARE_WRITE8_MEMBER(flip_screen_x_w); | |
| 63 | DECLARE_WRITE8_MEMBER(flip_screen_y_w); | |
| 39 | DECLARE_WRITE8_MEMBER(zaccaria_videoram_w); | |
| 40 | DECLARE_WRITE8_MEMBER(zaccaria_attributes_w); | |
| 41 | DECLARE_WRITE8_MEMBER(zaccaria_flip_screen_x_w); | |
| 42 | DECLARE_WRITE8_MEMBER(zaccaria_flip_screen_y_w); | |
| 64 | 43 | DECLARE_CUSTOM_INPUT_MEMBER(acs_r); |
| 65 | DECLARE_WRITE8_MEMBER(dsw_sel_w); | |
| 44 | DECLARE_WRITE8_MEMBER(zaccaria_dsw_sel_w); | |
| 66 | 45 | DECLARE_WRITE8_MEMBER(ay8910_port0a_w); |
| 67 | DECLARE_READ8_MEMBER(port0a_r); | |
| 68 | DECLARE_WRITE8_MEMBER(port0a_w); | |
| 69 | DECLARE_WRITE8_MEMBER(port0b_w); | |
| 70 | DECLARE_WRITE8_MEMBER(port1b_w); | |
| 46 | DECLARE_WRITE_LINE_MEMBER(zaccaria_irq0a); | |
| 47 | DECLARE_WRITE_LINE_MEMBER(zaccaria_irq0b); | |
| 48 | DECLARE_READ8_MEMBER(zaccaria_port0a_r); | |
| 49 | DECLARE_WRITE8_MEMBER(zaccaria_port0a_w); | |
| 50 | DECLARE_WRITE8_MEMBER(zaccaria_port0b_w); | |
| 51 | DECLARE_WRITE8_MEMBER(zaccaria_port1b_w); | |
| 52 | DECLARE_WRITE8_MEMBER(mc1408_data_w); | |
| 71 | 53 | TILE_GET_INFO_MEMBER(get_tile_info); |
| 72 | virtual void machine_start(); | |
| 73 | virtual void machine_reset(); | |
| 74 | 54 | virtual void video_start(); |
| 75 | 55 | DECLARE_PALETTE_INIT(zaccaria); |
| 76 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); | |
| 77 | INTERRUPT_GEN_MEMBER(cb1_toggle); | |
| 56 | UINT32 screen_update_zaccaria(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); | |
| 57 | INTERRUPT_GEN_MEMBER(zaccaria_cb1_toggle); | |
| 78 | 58 | INTERRUPT_GEN_MEMBER(vblank_irq); |
| 79 | 59 | void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,UINT8 *spriteram,int color,int section); |
| 60 | required_device<cpu_device> m_maincpu; | |
| 61 | required_device<cpu_device> m_audiocpu; | |
| 62 | required_device<cpu_device> m_audio2; | |
| 63 | required_device<dac_device> m_dac2; | |
| 64 | required_device<gfxdecode_device> m_gfxdecode; | |
| 65 | required_device<palette_device> m_palette; | |
| 66 | required_ioport_array<3> m_dsw_port; | |
| 80 | 67 | }; |
| r242703 | r242704 | |
|---|---|---|
| 94 | 94 | |
| 95 | 95 | WRITE8_MEMBER(asteroid_state::asteroid_bank_switch_w) |
| 96 | 96 | { |
| 97 | int bank = BIT(data, 2); | |
| 98 | m_ram1->set_entry(bank); | |
| 99 | m_ram2->set_entry(bank); | |
| 97 | if (data & 4) | |
| 98 | { | |
| 99 | membank("bank1")->set_base(m_ram2); | |
| 100 | membank("bank2")->set_base(m_ram1); | |
| 101 | } | |
| 102 | else | |
| 103 | { | |
| 104 | membank("bank1")->set_base(m_ram1); | |
| 105 | membank("bank2")->set_base(m_ram2); | |
| 106 | } | |
| 100 | 107 | |
| 101 | 108 | set_led_status (machine(), 0, ~data & 0x02); |
| 102 | 109 | set_led_status (machine(), 1, ~data & 0x01); |
| r242703 | r242704 | |
| 105 | 112 | |
| 106 | 113 | WRITE8_MEMBER(asteroid_state::astdelux_bank_switch_w) |
| 107 | 114 | { |
| 108 | int bank = BIT(data, 7); | |
| 109 | m_ram1->set_entry(bank); | |
| 110 | m_ram2->set_entry(bank); | |
| 115 | m_astdelux_bankswitch = data; | |
| 116 | astdelux_bankswitch_restore(); | |
| 111 | 117 | } |
| 112 | 118 | |
| 119 | void asteroid_state::astdelux_bankswitch_restore() | |
| 120 | { | |
| 121 | if (m_astdelux_bankswitch & 0x80) | |
| 122 | { | |
| 123 | membank("bank1")->set_base(m_ram2); | |
| 124 | membank("bank2")->set_base(m_ram1); | |
| 125 | } | |
| 126 | else | |
| 127 | { | |
| 128 | membank("bank1")->set_base(m_ram1); | |
| 129 | membank("bank2")->set_base(m_ram2); | |
| 130 | } | |
| 131 | } | |
| 132 | ||
| 113 | 133 | WRITE8_MEMBER(asteroid_state::astdelux_led_w) |
| 114 | 134 | { |
| 115 | 135 | set_led_status(machine(), offset, (data & 0x80) ? 0 : 1); |
| 116 | 136 | } |
| 117 | 137 | |
| 118 | void asteroid_state::machine_ | |
| 138 | void asteroid_state::machine_reset() | |
| 119 | 139 | { |
| 120 | /* configure RAM banks if present (not on llander) */ | |
| 121 | if (m_ram1.target() != NULL) | |
| 122 | { | |
| 123 | UINT8 *ram1 = reinterpret_cast<UINT8 *>(memshare("ram1")->ptr()); | |
| 124 | UINT8 *ram2 = reinterpret_cast<UINT8 *>(memshare("ram2")->ptr()); | |
| 125 | ||
| 126 | /* swapped */ | |
| 127 | m_ram1->configure_entry(1, ram2); | |
| 128 | m_ram2->configure_entry(1, ram1); | |
| 129 | /* normal */ | |
| 130 | m_ram1->configure_entry(0, ram1); | |
| 131 | m_ram2->configure_entry(0, ram2); | |
| 132 | } | |
| 140 | asteroid_bank_switch_w(m_maincpu->space(AS_PROGRAM), 0, 0); | |
| 141 | m_dvg->reset_w(m_maincpu->space(AS_PROGRAM), 0, 0); | |
| 133 | 142 | } |
| 134 | 143 | |
| 135 | ||
| 144 | MACHINE_RESET_MEMBER(asteroid_state, llander) | |
| 136 | 145 | { |
| 137 | 146 | m_dvg->reset_w(m_maincpu->space(AS_PROGRAM), 0, 0); |
| 138 | ||
| 139 | /* reset RAM banks if present */ | |
| 140 | if (m_ram1.target() != NULL) | |
| 141 | { | |
| 142 | m_ram1->set_entry(0); | |
| 143 | m_ram2->set_entry(0); | |
| 144 | } | |
| 145 | 147 | } |
| r242703 | r242704 | |
|---|---|---|
| 1199 | 1199 | { |
| 1200 | 1200 | if (!m_slapstic_device) |
| 1201 | 1201 | fatalerror("Slapstic device is missing?\n"); |
| 1202 | ||
| 1202 | ||
| 1203 | 1203 | slapstic_update_bank(m_slapstic_device->slapstic_bank()); |
| 1204 | 1204 | } |
| 1205 | 1205 | } |
| r242703 | r242704 | |
|---|---|---|
| 877 | 877 | { "ddsomj", { 0xae92fa94,0x315a9045 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1 |
| 878 | 878 | { "ddsomjr1", { 0xae92fa94,0x315a9045 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1 |
| 879 | 879 | { "ddsoma", { 0x8719abcd,0xef028345 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1 |
| 880 | { "ddsomar1", { 0x8719abcd,0xef028345 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1 | |
| 881 | 880 | { "ddsomh", { 0x42134245,0x120de607 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1 |
| 882 | 881 | { "ddsomb", { 0x7149a782,0xf3a5bfce }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1 |
| 883 | 882 | { "megaman2", { 0x50501cac,0xed346550 }, 0x100000 }, // 0C80 0164 7101 cmpi.l #$01647101,D0 |
| r242703 | r242704 | |
|---|---|---|
| 19 | 19 | |
| 20 | 20 | if (m_audiocpu != NULL) |
| 21 | 21 | sh_init(); |
| 22 | ||
| 23 | m_security_2B_counter = 0; | |
| 22 | 24 | } |
| 23 | 25 | |
| 24 | 26 | MACHINE_RESET_MEMBER(scramble_state,explorer) |
| r242703 | r242704 | |
| 47 | 49 | |
| 48 | 50 | /* state of the security PAL (6J) */ |
| 49 | 51 | |
| 52 | WRITE8_MEMBER(scramble_state::scramble_protection_w) | |
| 53 | { | |
| 54 | m_xb = data; | |
| 55 | } | |
| 50 | 56 | |
| 57 | READ8_MEMBER(scramble_state::scramble_protection_r) | |
| 58 | { | |
| 59 | switch (m_maincpu->pc()) | |
| 60 | { | |
| 61 | case 0x00a8: return 0xf0; | |
| 62 | case 0x00be: return 0xb0; | |
| 63 | case 0x0c1d: return 0xf0; | |
| 64 | case 0x0c6a: return 0xb0; | |
| 65 | case 0x0ceb: return 0x40; | |
| 66 | case 0x0d37: return 0x60; | |
| 67 | case 0x1ca2: return 0x00; /* I don't think it's checked */ | |
| 68 | case 0x1d7e: return 0xb0; | |
| 69 | default: | |
| 70 | logerror("%s: read protection\n",machine().describe_context()); | |
| 71 | return 0; | |
| 72 | } | |
| 73 | } | |
| 74 | ||
| 75 | ||
| 51 | 76 | READ8_MEMBER(scramble_state::mariner_protection_1_r ) |
| 52 | 77 | { |
| 53 | 78 | return 7; |
| r242703 | r242704 | |
|---|---|---|
| 32 | 32 | { |
| 33 | 33 | /* NTSC SNES draw range is 1-225. */ |
| 34 | 34 | for (int y = cliprect.min_y; y <= cliprect.max_y; y++) |
| 35 | m_ppu->refresh_scanline(bitmap, y + 1); | |
| 35 | m_ppu->refresh_scanline(machine(), bitmap, y + 1); | |
| 36 | 36 | |
| 37 | 37 | return 0; |
| 38 | 38 | } |
| r242703 | r242704 | |
| 87 | 87 | { |
| 88 | 88 | // latch the counters and pull IRQ |
| 89 | 89 | // (don't need to switch to the 65816 context, we don't do anything dependant on it) |
| 90 | m_ppu->latch_counters(); | |
| 90 | m_ppu->latch_counters(machine()); | |
| 91 | 91 | SNES_CPU_REG(TIMEUP) = 0x80; /* Indicate that irq occurred */ |
| 92 | 92 | m_maincpu->set_input_line(G65816_LINE_IRQ, ASSERT_LINE); |
| 93 | 93 | |
| r242703 | r242704 | |
| 142 | 142 | { |
| 143 | 143 | SNES_CPU_REG(TIMEUP) = 0x80; /* Indicate that irq occurred */ |
| 144 | 144 | // IRQ latches the counters, do it now |
| 145 | m_ppu->latch_counters(); | |
| 145 | m_ppu->latch_counters(machine()); | |
| 146 | 146 | m_maincpu->set_input_line(G65816_LINE_IRQ, ASSERT_LINE ); |
| 147 | 147 | } |
| 148 | 148 | } |
| r242703 | r242704 | |
| 539 | 539 | if (!(SNES_CPU_REG(WRIO) & 0x80) && (data & 0x80)) |
| 540 | 540 | { |
| 541 | 541 | // external latch |
| 542 | m_ppu->latch_counters(); | |
| 542 | m_ppu->latch_counters(space.machine()); | |
| 543 | 543 | } |
| 544 | 544 | SNES_CPU_REG(WRIO) = data; |
| 545 | 545 | return; |
| r242703 | r242704 | |
| 1075 | 1075 | |
| 1076 | 1076 | snes_init_timers(); |
| 1077 | 1077 | |
| 1078 | for (int i = 0; i < | |
| 1078 | for (int i = 0; i < 6; i++) | |
| 1079 | 1079 | { |
| 1080 | 1080 | save_item(NAME(m_dma_channel[i].dmap), i); |
| 1081 | 1081 | save_item(NAME(m_dma_channel[i].dest_addr), i); |
| r242703 | r242704 | |
|---|---|---|
| 3411 | 3411 | ddsomjr1 // 06/02/1996 (c) 1996 (Japan) |
| 3412 | 3412 | ddsomj // 19/06/1996 (c) 1996 (Japan) |
| 3413 | 3413 | ddsoma // 19/06/1996 (c) 1996 (Asia) |
| 3414 | ddsomar1 // 08/02/1996 (c) 1996 (Asia) | |
| 3415 | 3414 | ddsomh // 23/02/1996 (c) 1996 (Hispanic) |
| 3416 | 3415 | ddsomb // 23/02/1996 (c) 1996 (Brazil) |
| 3417 | 3416 | sfa2 // 06/03/1996 (c) 1996 (Euro) |
| r242703 | r242704 | |
| 4330 | 4329 | brdrlins // Sidam bootleg |
| 4331 | 4330 | brdrlinb // Karateco bootleg |
| 4332 | 4331 | brdrlinet // (c) 1981 Sega |
| 4333 | startrks // Sidam bootleg | |
| 4334 | 4332 | digger // 684-691 no copyright notice |
| 4335 | 4333 | pulsar // 790-805 (c) 1981 Sega |
| 4336 | 4334 | heiankyo // (c) [1979?] Denki Onkyo |
| r242703 | r242704 | |
| 4644 | 4642 | wrestwar // (c) 1989 (8751) |
| 4645 | 4643 | wrestwar2 // (c) 1989 (FD1094, decrypted) |
| 4646 | 4644 | wrestwar1 // (c) 1989 (FD1094, decrypted) |
| 4647 | fantzoneta // (c) 2008 Sega / M2 (bootleg conversion) | |
| 4648 | 4645 | |
| 4649 | 4646 | // System 16C |
| 4650 | 4647 | fantzn2x // (c) 2008 Sega / M2 |
| r242703 | r242704 | |
| 6595 | 6592 | |
| 6596 | 6593 | // Konami dual 68000 games |
| 6597 | 6594 | overdriv // GX789 (c) 1990 |
| 6598 | overdriva // GX789 (c) 1990 | |
| 6599 | overdrivb // GX789 (c) 1990 | |
| 6600 | 6595 | gradius3 // GX945 (c) 1989 (World) |
| 6601 | 6596 | gradius3j // GX945 (c) 1989 (Japan) |
| 6602 | 6597 | gradius3a // GX945 (c) 1989 (Asia) |
| r242703 | r242704 | |
| 6865 | 6860 | sprint4a // 008716 1977/12 [6502] |
| 6866 | 6861 | nitedrvr // 006321 1976/10 [6502] |
| 6867 | 6862 | dominos // 007305 1977/01 [6502] |
| 6868 | dominos4 // 007754-007765 ??????? [6502] | |
| 6869 | 6863 | triplhnt // 008422-008791 1977/04 [6800] |
| 6870 | 6864 | sprint8 // ?????? 1977/05 [6800] |
| 6871 | 6865 | sprint8a // ?????? 1977/05 [6800] |
| r242703 | r242704 | |
| 6892 | 6886 | sbrkout3 // 033442-033452 1978/09 [6502] |
| 6893 | 6887 | sbrkout // 033453-033455 1978/09 [6502] |
| 6894 | 6888 | sbrkoutc // unrealeased proto |
| 6895 | sbrkoutct // 034555-034559 proto ???? [6502] | |
| 6896 | 6889 | atarifb // 033xxx 1978/10 [6502] |
| 6897 | 6890 | atarifb1 // 033xxx 1978/10 [6502] |
| 6898 | atarifb2 | |
| 6891 | atarifb2 // 035330-035350 ??? [6502] | |
| 6899 | 6892 | orbit // 033689-033702 1978/11 [6800] |
| 6900 | 6893 | boxer // ?????? prototype 1978 [6502] |
| 6901 | 6894 | wolfpack // ?????? prototype [6502] |
| r242703 | r242704 | |
| 9249 | 9242 | wiseguy // (c) 1990 Dooyong |
| 9250 | 9243 | lastday // (c) 1990 Dooyong |
| 9251 | 9244 | lastdaya // (c) 1990 Dooyong |
| 9252 | ddaydoo | |
| 9245 | ddaydoo // (c) 1990 Dooyong | |
| 9253 | 9246 | gulfstrm // (c) 1991 Dooyong |
| 9254 | 9247 | gulfstrma // (c) 1991 Dooyong |
| 9255 | 9248 | gulfstrmb // (c) 1991 Dooyong |
| r242703 | r242704 | |
| 9369 | 9362 | skyalert // (c) 1992 |
| 9370 | 9363 | poitto // (c) 1993 Metro / Able Corp. |
| 9371 | 9364 | dharma // (c) 1994 |
| 9372 | dharmaj // (c) 1994 | |
| 9373 | 9365 | dharmak // (c) 1994 |
| 9374 | 9366 | lastfort // (c) 1994 |
| 9375 | 9367 | lastforte // (c) 1994 |
| r242703 | r242704 | |
| 10378 | 10370 | rundeep // (c) 1988 Cream (bootleg?) |
| 10379 | 10371 | wallc // (c) 1984 Midcoin |
| 10380 | 10372 | wallca // (c) 1984 Midcoin |
| 10381 | brkblast | |
| 10373 | brkblast // bootleg (Fadesa) | |
| 10382 | 10374 | sidampkr // |
| 10383 | 10375 | wink // (c) 1985 Midcoin |
| 10384 | 10376 | winka // (c) 1985 Midcoin |
| r242703 | r242704 | |
|---|---|---|
| 546 | 546 | } |
| 547 | 547 | } |
| 548 | 548 | if ((d->OutputWriteMask != 0) && (d->MultiplexerControl == 0)) { |
| 549 | //o[1] = 1; | |
| 549 | //o[1] = 1; | |
| 550 | 550 | if (d->OutputSelect) { // assign to output |
| 551 | 551 | int wm = d->OutputWriteMask; |
| 552 | 552 | for (p1 = 0; p1 < 4; p1++) { |
| r242703 | r242704 | |
| 737 | 737 | t_out[2] = par_in[p1_A + 2] * par_in[p2_B + 2]; |
| 738 | 738 | t_out[3] = par_in[p1_A + 3] * par_in[p2_B + 3]; |
| 739 | 739 | break; |
| 740 | case 3: // "ADD" | |
| 740 | case 3: // "ADD" | |
| 741 | 741 | t_out[0] = par_in[p1_A + 0] + par_in[p3_C + 0]; |
| 742 | 742 | t_out[1] = par_in[p1_A + 1] + par_in[p3_C + 1]; |
| 743 | 743 | t_out[2] = par_in[p1_A + 2] + par_in[p3_C + 2]; |
| 744 | 744 | t_out[3] = par_in[p1_A + 3] + par_in[p3_C + 3]; |
| 745 | 745 | break; |
| 746 | case 4: // "MAD" | |
| 746 | case 4: // "MAD" | |
| 747 | 747 | t_out[0] = par_in[p1_A + 0] * par_in[p2_B + 0] + par_in[p3_C + 0]; |
| 748 | 748 | t_out[1] = par_in[p1_A + 1] * par_in[p2_B + 1] + par_in[p3_C + 1]; |
| 749 | 749 | t_out[2] = par_in[p1_A + 2] * par_in[p2_B + 2] + par_in[p3_C + 2]; |
| 750 | 750 | t_out[3] = par_in[p1_A + 3] * par_in[p2_B + 3] + par_in[p3_C + 3]; |
| 751 | 751 | break; |
| 752 | case 5: // "DP3" | |
| 752 | case 5: // "DP3" | |
| 753 | 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 | 754 | t_out[1] = t_out[2] = t_out[3] = t_out[0]; |
| 755 | 755 | break; |
| 756 | case 6: // "DPH" | |
| 756 | case 6: // "DPH" | |
| 757 | 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 | 758 | t_out[1] = t_out[2] = t_out[3] = t_out[0]; |
| 759 | 759 | break; |
| 760 | case 7: // "DP4" | |
| 760 | case 7: // "DP4" | |
| 761 | 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 | 762 | t_out[1] = t_out[2] = t_out[3] = t_out[0]; |
| 763 | 763 | break; |
| 764 | case 8: // "DST" | |
| 764 | case 8: // "DST" | |
| 765 | 765 | t_out[0] = 1.0; |
| 766 | 766 | t_out[1] = par_in[p1_A + 1] * par_in[p2_B + 1]; |
| 767 | 767 | t_out[2] = par_in[p1_A + 2]; |
| 768 | 768 | t_out[3] = par_in[p2_B + 3]; |
| 769 | 769 | break; |
| 770 | case 9: // "MIN" | |
| 770 | case 9: // "MIN" | |
| 771 | 771 | t_out[0] = fmin(par_in[p1_A + 0], par_in[p2_B + 0]); |
| 772 | 772 | t_out[1] = fmin(par_in[p1_A + 1], par_in[p2_B + 1]); |
| 773 | 773 | t_out[2] = fmin(par_in[p1_A + 2], par_in[p2_B + 2]); |
| 774 | 774 | t_out[3] = fmin(par_in[p1_A + 3], par_in[p2_B + 3]); |
| 775 | 775 | break; |
| 776 | case 10: // "MAX" | |
| 776 | case 10: // "MAX" | |
| 777 | 777 | t_out[0] = fmax(par_in[p1_A + 0], par_in[p2_B + 0]); |
| 778 | 778 | t_out[1] = fmax(par_in[p1_A + 1], par_in[p2_B + 1]); |
| 779 | 779 | t_out[2] = fmax(par_in[p1_A + 2], par_in[p2_B + 2]); |
| 780 | 780 | t_out[3] = fmax(par_in[p1_A + 3], par_in[p2_B + 3]); |
| 781 | 781 | break; |
| 782 | case 11: // "SLT" | |
| 782 | case 11: // "SLT" | |
| 783 | 783 | t_out[0] = (par_in[p1_A + 0] < par_in[p2_B + 0]) ? 1.0 : 0; |
| 784 | 784 | t_out[1] = (par_in[p1_A + 1] < par_in[p2_B + 1]) ? 1.0 : 0; |
| 785 | 785 | t_out[2] = (par_in[p1_A + 2] < par_in[p2_B + 2]) ? 1.0 : 0; |
| 786 | 786 | t_out[3] = (par_in[p1_A + 3] < par_in[p2_B + 3]) ? 1.0 : 0; |
| 787 | 787 | break; |
| 788 | case 12: // "SGE" | |
| 788 | case 12: // "SGE" | |
| 789 | 789 | t_out[0] = (par_in[p1_A + 0] >= par_in[p2_B + 0]) ? 1.0 : 0; |
| 790 | 790 | t_out[1] = (par_in[p1_A + 1] >= par_in[p2_B + 1]) ? 1.0 : 0; |
| 791 | 791 | t_out[2] = (par_in[p1_A + 2] >= par_in[p2_B + 2]) ? 1.0 : 0; |
| r242703 | r242704 | |
| 817 | 817 | t_out[2] = par_in[p3_C + 2]; |
| 818 | 818 | t_out[3] = par_in[p3_C + 3]; |
| 819 | 819 | break; |
| 820 | case 2: | |
| 820 | case 2: // "RCP" | |
| 821 | 821 | t_out[0] = t_out[1] = t_out[2] = t_out[3] = 1.0 / par_in[p3_C + 0]; |
| 822 | 822 | break; |
| 823 | case 3: | |
| 823 | case 3: // "RCC" | |
| 824 | 824 | t_out[0] = t_out[1] = t_out[2] = t_out[3] = 1.0 / par_in[p3_C + 0]; // ? |
| 825 | 825 | break; |
| 826 | case 4: // "RSQ" | |
| 826 | case 4: // "RSQ" | |
| 827 | 827 | t_out[0] = t_out[1] = t_out[2] = t_out[3] = 1.0 / sqrt(abs(par_in[p3_C + 0])); |
| 828 | 828 | break; |
| 829 | case 5: // "EXP" | |
| 829 | case 5: // "EXP" | |
| 830 | 830 | t_out[0] = pow(2, floor(par_in[p3_C + 0])); |
| 831 | 831 | t_out[1] = par_in[p3_C + 0] - floor(par_in[p3_C + 0]); |
| 832 | 832 | t.f = pow(2, par_in[p3_C + 0]); |
| r242703 | r242704 | |
| 834 | 834 | t_out[2] = t.f; |
| 835 | 835 | t_out[3] = 1.0; |
| 836 | 836 | break; |
| 837 | case 6: // "LOG" | |
| 837 | case 6: // "LOG" | |
| 838 | 838 | t_out[1] = frexp(par_in[p3_C + 0], &e)*2.0; // frexp gives mantissa as 0.5....1 |
| 839 | 839 | t_out[0] = e - 1; |
| 840 | 840 | t.f = log2(abs(par_in[p3_C + 0])); |
| r242703 | r242704 | |
| 958 | 958 | { |
| 959 | 959 | int xx1,yy1,xx2,yy2; |
| 960 | 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 | } | |
| 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 | 982 | }*/ |
| 983 | 983 | |
| 984 | 984 | inline UINT32 convert_a4r4g4b4_a8r8g8b8(UINT32 a4r4g4b4) |
| r242703 | r242704 | |
| 2027 | 2027 | } |
| 2028 | 2028 | break; |
| 2029 | 2029 | case NV2A_VTXBUF_TYPE_UBYTE: |
| 2030 | u = space.read_dword(address + 0); | |
| 2031 | for (c = l-1; c >= l; c--) { | |
| 2032 | vertex.attribute[attrib].fv[c] = (u & 0xff) / 255.0; | |
| 2033 | u = u >> 8; | |
| 2034 | } | |
| 2035 | 2030 | break; |
| 2036 | case NV2A_VTXBUF_TYPE_U | |
| 2031 | case NV2A_VTXBUF_TYPE_UNKNOWN_0: | |
| 2037 | 2032 | u = space.read_dword(address + 0); |
| 2038 | 2033 | for (c = 0; c < l; c++) { |
| 2039 | 2034 | vertex.attribute[attrib].fv[c] = (u & 0xff) / 255.0; |
| r242703 | r242704 | |
| 2147 | 2142 | destination[m].p[PARAM_TEXTURE0_U + u * 2] = source[m].attribute[9 + u].fv[0]; |
| 2148 | 2143 | destination[m].p[PARAM_TEXTURE0_V + u * 2] = source[m].attribute[9 + u].fv[1]; |
| 2149 | 2144 | } |
| 2150 | destination[m].p[PARAM_Z] = 0xffffff; | |
| 2145 | destination[m].p[PARAM_Z] = 0+0xffffff; | |
| 2151 | 2146 | } |
| 2152 | 2147 | } |
| 2153 | 2148 | else { |
| r242703 | r242704 | |
| 2169 | 2164 | } |
| 2170 | 2165 | } |
| 2171 | 2166 | |
| 2172 | i | |
| 2167 | void nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UINT32 subchannel, UINT32 method, UINT32 address, int &countlen) | |
| 2173 | 2168 | { |
| 2174 | 2169 | UINT32 maddress; |
| 2175 | 2170 | UINT32 data; |
| r242703 | r242704 | |
| 2369 | 2364 | if (countlen < 0) { |
| 2370 | 2365 | logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen); |
| 2371 | 2366 | countlen = 0; |
| 2372 | return | |
| 2367 | return; | |
| 2373 | 2368 | } |
| 2374 | 2369 | address = address + c * 4; |
| 2375 | 2370 | for (n = 1; countlen > 0; n++) { |
| r242703 | r242704 | |
| 2397 | 2392 | if (countlen < 0) { |
| 2398 | 2393 | logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen); |
| 2399 | 2394 | countlen = 0; |
| 2400 | return | |
| 2395 | return; | |
| 2401 | 2396 | } |
| 2402 | 2397 | address = address + c * 4; |
| 2403 | 2398 | for (n = 0; countlen > 0; n++) { |
| r242703 | r242704 | |
| 2444 | 2439 | if (countlen < 0) { |
| 2445 | 2440 | logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen); |
| 2446 | 2441 | countlen = 0; |
| 2447 | return | |
| 2442 | return; | |
| 2448 | 2443 | } |
| 2449 | 2444 | address = address + c * 4; |
| 2450 | 2445 | for (n = 0; countlen > 0; n += 2) { |
| r242703 | r242704 | |
| 2454 | 2449 | if (countlen < 0) { |
| 2455 | 2450 | logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen); |
| 2456 | 2451 | countlen = 0; |
| 2457 | return | |
| 2452 | return; | |
| 2458 | 2453 | } |
| 2459 | 2454 | address = address + c * 4; |
| 2460 | 2455 | render_triangle(limits_rendertarget, renderspans, 4 + 4 * 2, xy[n & 3], xy[(n + 1) & 3], xy[(n + 2) & 3]); |
| r242703 | r242704 | |
| 2482 | 2477 | vertexbuffer_kind[bit] = data & 15; |
| 2483 | 2478 | vertexbuffer_size[bit] = (data >> 4) & 15; |
| 2484 | 2479 | switch (vertexbuffer_kind[bit]) { |
| 2485 | case NV2A_VTXBUF_TYPE_U | |
| 2480 | case NV2A_VTXBUF_TYPE_UNKNOWN_0: | |
| 2486 | 2481 | vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 1) >> 2; |
| 2487 | 2482 | break; |
| 2488 | 2483 | case NV2A_VTXBUF_TYPE_FLOAT: |
| r242703 | r242704 | |
| 2546 | 2541 | m = 2; |
| 2547 | 2542 | else |
| 2548 | 2543 | m = 1; |
| 2549 | // possible buffers: color, depth, stencil | |
| 2544 | // possible buffers: color, depth, stencil, and accumulation | |
| 2550 | 2545 | // clear framebuffer |
| 2551 | 2546 | if (data & 0xf0) { |
| 2552 | 2547 | bitmap_rgb32 bm(rendertarget, (limits_rendertarget.right() + 1) * m, (limits_rendertarget.bottom() + 1) * m, pitch_rendertarget / 4); // why *2 ? |
| r242703 | r242704 | |
| 2555 | 2550 | bm.fill(color); |
| 2556 | 2551 | //printf("clearscreen\n\r"); |
| 2557 | 2552 | } |
| 2558 | if ( | |
| 2553 | if (data & 0x01) { | |
| 2559 | 2554 | bitmap_rgb32 bm(depthbuffer, (limits_rendertarget.right() + 1) * m, (limits_rendertarget.bottom() + 1) * m, pitch_rendertarget / 4); // why *2 ? |
| 2560 | // clear zbuffer and stencil | |
| 2561 | UINT32 depth_stencil = channel[chanel][subchannel].object.method[0x1d8c / 4]; | |
| 2562 | bm.fill(depth_stencil); | |
| 2555 | // clear zbuffer | |
| 2556 | UINT32 depth = channel[chanel][subchannel].object.method[0x1d8c / 4]; | |
| 2557 | bm.fill(depth); | |
| 2563 | 2558 | } |
| 2564 | else if (((data & 0x03) == 1) || ((data & 0x03) == 2)) | |
| 2565 | logerror("Unsupported clear method parameter %d\n\r", data & 0x03); | |
| 2566 | 2559 | countlen--; |
| 2567 | 2560 | } |
| 2568 | 2561 | if (maddress == 0x0200) { |
| r242703 | r242704 | |
| 2590 | 2583 | displayedtarget = (UINT32 *)space.get_write_ptr(data); |
| 2591 | 2584 | } |
| 2592 | 2585 | } |
| 2593 | if (maddress == 0x0130) { | |
| 2594 | countlen--; | |
| 2595 | if (waitvblank_used == 1) | |
| 2596 | return 1; // block until next vblank | |
| 2597 | else | |
| 2598 | return 0; | |
| 2599 | } | |
| 2600 | 2586 | if (maddress == 0x0210) { |
| 2601 | 2587 | // framebuffer offset ? |
| 2602 | 2588 | rendertarget = (UINT32 *)space.get_write_ptr(data); |
| r242703 | r242704 | |
| 2970 | 2956 | //combiner.=(data >> 27) & 7; |
| 2971 | 2957 | countlen--; |
| 2972 | 2958 | } |
| 2973 | return 0; | |
| 2974 | 2959 | } |
| 2975 | 2960 | |
| 2976 | 2961 | int nv2a_renderer::toggle_register_combiners_usage() |
| r242703 | r242704 | |
| 2979 | 2964 | return combiner.used; |
| 2980 | 2965 | } |
| 2981 | 2966 | |
| 2982 | int nv2a_renderer::toggle_wait_vblank_support() | |
| 2983 | { | |
| 2984 | waitvblank_used = 1 - waitvblank_used; | |
| 2985 | return waitvblank_used; | |
| 2986 | } | |
| 2987 | ||
| 2988 | 2967 | void nv2a_renderer::debug_grab_texture(int type, const char *filename) |
| 2989 | 2968 | { |
| 2990 | 2969 | debug_grab_texttype = type; |
| r242703 | r242704 | |
| 3003 | 2982 | instruction[3] = vertexprogram.exec.op[slot].i[3]; |
| 3004 | 2983 | } |
| 3005 | 2984 | |
| 2985 | void nv2a_renderer::savestate_items() | |
| 2986 | { | |
| 2987 | } | |
| 2988 | ||
| 3006 | 2989 | void nv2a_renderer::combiner_argb8_float(UINT32 color, float reg[4]) |
| 3007 | 2990 | { |
| 3008 | 2991 | reg[0] = (float)(color & 0xff) / 255.0; |
| r242703 | r242704 | |
| 3586 | 3569 | pmc[0x100 / 4] |= 0x1000000; |
| 3587 | 3570 | else |
| 3588 | 3571 | pmc[0x100 / 4] &= ~0x1000000; |
| 3589 | if ((state == true) && (puller_waiting == 1)) { | |
| 3590 | puller_waiting = 0; | |
| 3591 | puller_timer_work(NULL, 0); | |
| 3592 | } | |
| 3593 | 3572 | if ((pmc[0x100 / 4] != 0) && (pmc[0x140 / 4] != 0)) { |
| 3594 | 3573 | // send interrupt |
| 3595 | 3574 | return true; |
| r242703 | r242704 | |
| 3610 | 3589 | return 0; |
| 3611 | 3590 | } |
| 3612 | 3591 | |
| 3613 | TIMER_CALLBACK_MEMBER(nv2a_renderer::puller_timer_work) | |
| 3614 | { | |
| 3615 | int chanel, subchannel; | |
| 3616 | int method, count, handle, objclass; | |
| 3617 | UINT32 *dmaput, *dmaget; | |
| 3618 | UINT32 cmd, cmdtype; | |
| 3619 | int countlen; | |
| 3620 | int ret; | |
| 3621 | address_space *space = puller_space; | |
| 3622 | ||
| 3623 | chanel = puller_channel; | |
| 3624 | subchannel = puller_subchannel; | |
| 3625 | dmaput = &channel[chanel][subchannel].regs[0x40 / 4]; | |
| 3626 | dmaget = &channel[chanel][subchannel].regs[0x44 / 4]; | |
| 3627 | chanel = puller_channel; | |
| 3628 | subchannel = puller_subchannel; | |
| 3629 | while (*dmaget != *dmaput) { | |
| 3630 | cmd = space->read_dword(*dmaget); | |
| 3631 | *dmaget += 4; | |
| 3632 | cmdtype = geforce_commandkind(cmd); | |
| 3633 | switch (cmdtype) | |
| 3634 | { | |
| 3635 | case 6: // jump | |
| 3636 | #ifdef LOG_NV2A | |
| 3637 | printf("jump dmaget %08X", *dmaget); | |
| 3638 | #endif | |
| 3639 | *dmaget = cmd & 0xfffffffc; | |
| 3640 | #ifdef LOG_NV2A | |
| 3641 | printf(" -> %08X\n\r", *dmaget); | |
| 3642 | #endif | |
| 3643 | break; | |
| 3644 | case 0: // increasing method | |
| 3645 | method = (cmd >> 2) & 2047; // method*4 is address // if method >= 0x40 send it to assigned object | |
| 3646 | #ifdef LOG_NV2A | |
| 3647 | subch = (cmd >> 13) & 7; | |
| 3648 | #endif | |
| 3649 | count = (cmd >> 18) & 2047; | |
| 3650 | if ((method == 0) && (count == 1)) { | |
| 3651 | handle = space->read_dword(*dmaget); | |
| 3652 | handle = geforce_object_offset(handle); | |
| 3653 | #ifdef LOG_NV2A | |
| 3654 | logerror(" assign to subchannel %d object at %d\n", subch, handle); | |
| 3655 | #endif | |
| 3656 | channel[chanel][subchannel].object.objhandle = handle; | |
| 3657 | handle = ramin[handle / 4]; | |
| 3658 | objclass = handle & 0xff; | |
| 3659 | channel[chanel][subchannel].object.objclass = objclass; | |
| 3660 | *dmaget += 4; | |
| 3661 | } | |
| 3662 | else { | |
| 3663 | #ifdef LOG_NV2A | |
| 3664 | logerror(" subch. %d method %04x offset %04x count %d\n", subch, method, method * 4, count); | |
| 3665 | #endif | |
| 3666 | ret = 0; | |
| 3667 | while (count > 0) { | |
| 3668 | countlen = 1; | |
| 3669 | ret=geforce_exec_method(*space, chanel, subchannel, method, *dmaget, countlen); | |
| 3670 | count--; | |
| 3671 | method++; | |
| 3672 | *dmaget += 4; | |
| 3673 | if (ret != 0) | |
| 3674 | break; | |
| 3675 | } | |
| 3676 | if (ret != 0) { | |
| 3677 | puller_timer->enable(false); | |
| 3678 | puller_waiting = 1; | |
| 3679 | return; | |
| 3680 | } | |
| 3681 | } | |
| 3682 | break; | |
| 3683 | case 5: // non-increasing method | |
| 3684 | method = (cmd >> 2) & 2047; | |
| 3685 | #ifdef LOG_NV2A | |
| 3686 | subch = (cmd >> 13) & 7; | |
| 3687 | #endif | |
| 3688 | count = (cmd >> 18) & 2047; | |
| 3689 | if ((method == 0) && (count == 1)) { | |
| 3690 | #ifdef LOG_NV2A | |
| 3691 | logerror(" assign channel %d\n", subch); | |
| 3692 | #endif | |
| 3693 | handle = space->read_dword(*dmaget); | |
| 3694 | handle = geforce_object_offset(handle); | |
| 3695 | #ifdef LOG_NV2A | |
| 3696 | logerror(" assign to subchannel %d object at %d\n", subch, handle); | |
| 3697 | #endif | |
| 3698 | channel[chanel][subchannel].object.objhandle = handle; | |
| 3699 | handle = ramin[handle / 4]; | |
| 3700 | objclass = handle & 0xff; | |
| 3701 | channel[chanel][subchannel].object.objclass = objclass; | |
| 3702 | *dmaget += 4; | |
| 3703 | } | |
| 3704 | else { | |
| 3705 | #ifdef LOG_NV2A | |
| 3706 | logerror(" subch. %d method %04x offset %04x count %d\n", subch, method, method * 4, count); | |
| 3707 | #endif | |
| 3708 | while (count > 0) { | |
| 3709 | countlen = count; | |
| 3710 | ret=geforce_exec_method(*space, chanel, subchannel, method, *dmaget, countlen); | |
| 3711 | *dmaget += 4 * (count - countlen); | |
| 3712 | count = countlen; | |
| 3713 | } | |
| 3714 | } | |
| 3715 | break; | |
| 3716 | case 3: // long non-increasing method | |
| 3717 | method = (cmd >> 2) & 2047; | |
| 3718 | #ifdef LOG_NV2A | |
| 3719 | subch = (cmd >> 13) & 7; | |
| 3720 | #endif | |
| 3721 | count = space->read_dword(*dmaget); | |
| 3722 | *dmaget += 4; | |
| 3723 | if ((method == 0) && (count == 1)) { | |
| 3724 | handle = space->read_dword(*dmaget); | |
| 3725 | handle = geforce_object_offset(handle); | |
| 3726 | #ifdef LOG_NV2A | |
| 3727 | logerror(" assign to subchannel %d object at %d\n", subch, handle); | |
| 3728 | #endif | |
| 3729 | channel[chanel][subchannel].object.objhandle = handle; | |
| 3730 | handle = ramin[handle / 4]; | |
| 3731 | objclass = handle & 0xff; | |
| 3732 | channel[chanel][subchannel].object.objclass = objclass; | |
| 3733 | *dmaget += 4; | |
| 3734 | } | |
| 3735 | else { | |
| 3736 | #ifdef LOG_NV2A | |
| 3737 | logerror(" subch. %d method %04x offset %04x count %d\n", subch, method, method * 4, count); | |
| 3738 | #endif | |
| 3739 | while (count > 0) { | |
| 3740 | countlen = count; | |
| 3741 | ret=geforce_exec_method(*space, chanel, subchannel, method, *dmaget, countlen); | |
| 3742 | *dmaget += 4 * (count - countlen); | |
| 3743 | count = countlen; | |
| 3744 | } | |
| 3745 | } | |
| 3746 | break; | |
| 3747 | default: | |
| 3748 | logerror(" unimplemented command %08X\n", cmd); | |
| 3749 | } | |
| 3750 | } | |
| 3751 | } | |
| 3752 | ||
| 3753 | 3592 | READ32_MEMBER(nv2a_renderer::geforce_r) |
| 3754 | 3593 | { |
| 3755 | 3594 | static int x, ret; |
| r242703 | r242704 | |
| 3845 | 3684 | else if ((offset >= 0x00800000 / 4) && (offset < 0x00900000 / 4)) { |
| 3846 | 3685 | // 32 channels size 0x10000 each, 8 subchannels per channel size 0x2000 each |
| 3847 | 3686 | int chanel, subchannel, suboffset; |
| 3848 | | |
| 3687 | int method, count, handle, objclass; | |
| 3849 | 3688 | #ifdef LOG_NV2A |
| 3850 | 3689 | int subch; |
| 3851 | 3690 | #endif |
| r242703 | r242704 | |
| 3860 | 3699 | COMBINE_DATA(&channel[chanel][subchannel].regs[suboffset]); |
| 3861 | 3700 | if ((suboffset == 0x40 / 4) || (suboffset == 0x44 / 4)) { // DMA_PUT or DMA_GET |
| 3862 | 3701 | UINT32 *dmaput, *dmaget; |
| 3702 | UINT32 cmd, cmdtype; | |
| 3703 | int countlen; | |
| 3863 | 3704 | |
| 3864 | 3705 | dmaput = &channel[chanel][subchannel].regs[0x40 / 4]; |
| 3865 | 3706 | dmaget = &channel[chanel][subchannel].regs[0x44 / 4]; |
| 3866 | 3707 | //printf("dmaget %08X dmaput %08X\n\r",*dmaget,*dmaput); |
| 3867 | if ((*dmaput == 0x048cf000) && (*dmaget == 0x07f4d000)) | |
| 3708 | if ((*dmaput == 0x048cf000) && (*dmaget == 0x07f4d000)) | |
| 3868 | 3709 | *dmaget = *dmaput; |
| 3869 | puller_waiting = 0; | |
| 3870 | puller_timer->enable(false); | |
| 3871 | return; | |
| 3872 | } | |
| 3873 | if (*dmaget != *dmaput) { | |
| 3874 | if (puller_waiting == 0) { | |
| 3875 | puller_channel = chanel; | |
| 3876 | puller_subchannel = subchannel; | |
| 3877 | puller_space = &space; | |
| 3878 | puller_timer->enable(); | |
| 3879 | puller_timer->adjust(attotime::zero); | |
| 3710 | while (*dmaget != *dmaput) { | |
| 3711 | cmd = space.read_dword(*dmaget); | |
| 3712 | *dmaget += 4; | |
| 3713 | cmdtype = geforce_commandkind(cmd); | |
| 3714 | switch (cmdtype) | |
| 3715 | { | |
| 3716 | case 6: // jump | |
| 3717 | #ifdef LOG_NV2A | |
| 3718 | printf("jump dmaget %08X", *dmaget); | |
| 3719 | #endif | |
| 3720 | *dmaget = cmd & 0xfffffffc; | |
| 3721 | #ifdef LOG_NV2A | |
| 3722 | printf(" -> %08X\n\r", *dmaget); | |
| 3723 | #endif | |
| 3724 | break; | |
| 3725 | case 0: // increasing method | |
| 3726 | method = (cmd >> 2) & 2047; // method*4 is address // if method >= 0x40 send it to assigned object | |
| 3727 | #ifdef LOG_NV2A | |
| 3728 | subch = (cmd >> 13) & 7; | |
| 3729 | #endif | |
| 3730 | count = (cmd >> 18) & 2047; | |
| 3731 | if ((method == 0) && (count == 1)) { | |
| 3732 | handle = space.read_dword(*dmaget); | |
| 3733 | handle = geforce_object_offset(handle); | |
| 3734 | #ifdef LOG_NV2A | |
| 3735 | logerror(" assign to subchannel %d object at %d\n", subch, handle); | |
| 3736 | #endif | |
| 3737 | channel[chanel][subchannel].object.objhandle = handle; | |
| 3738 | handle = ramin[handle / 4]; | |
| 3739 | objclass = handle & 0xff; | |
| 3740 | channel[chanel][subchannel].object.objclass = objclass; | |
| 3741 | *dmaget += 4; | |
| 3742 | } | |
| 3743 | else { | |
| 3744 | #ifdef LOG_NV2A | |
| 3745 | logerror(" subch. %d method %04x offset %04x count %d\n", subch, method, method * 4, count); | |
| 3746 | #endif | |
| 3747 | while (count > 0) { | |
| 3748 | countlen = 1; | |
| 3749 | geforce_exec_method(space, chanel, subchannel, method, *dmaget, countlen); | |
| 3750 | count--; | |
| 3751 | method++; | |
| 3752 | *dmaget += 4; | |
| 3753 | } | |
| 3754 | } | |
| 3755 | break; | |
| 3756 | case 5: // non-increasing method | |
| 3757 | method = (cmd >> 2) & 2047; | |
| 3758 | #ifdef LOG_NV2A | |
| 3759 | subch = (cmd >> 13) & 7; | |
| 3760 | #endif | |
| 3761 | count = (cmd >> 18) & 2047; | |
| 3762 | if ((method == 0) && (count == 1)) { | |
| 3763 | #ifdef LOG_NV2A | |
| 3764 | logerror(" assign channel %d\n", subch); | |
| 3765 | #endif | |
| 3766 | handle = space.read_dword(*dmaget); | |
| 3767 | handle = geforce_object_offset(handle); | |
| 3768 | #ifdef LOG_NV2A | |
| 3769 | logerror(" assign to subchannel %d object at %d\n", subch, handle); | |
| 3770 | #endif | |
| 3771 | channel[chanel][subchannel].object.objhandle = handle; | |
| 3772 | handle = ramin[handle / 4]; | |
| 3773 | objclass = handle & 0xff; | |
| 3774 | channel[chanel][subchannel].object.objclass = objclass; | |
| 3775 | *dmaget += 4; | |
| 3776 | } | |
| 3777 | else { | |
| 3778 | #ifdef LOG_NV2A | |
| 3779 | logerror(" subch. %d method %04x offset %04x count %d\n", subch, method, method * 4, count); | |
| 3780 | #endif | |
| 3781 | while (count > 0) { | |
| 3782 | countlen = count; | |
| 3783 | geforce_exec_method(space, chanel, subchannel, method, *dmaget, countlen); | |
| 3784 | *dmaget += 4 * (count - countlen); | |
| 3785 | count = countlen; | |
| 3786 | } | |
| 3787 | } | |
| 3788 | break; | |
| 3789 | case 3: // long non-increasing method | |
| 3790 | method = (cmd >> 2) & 2047; | |
| 3791 | #ifdef LOG_NV2A | |
| 3792 | subch = (cmd >> 13) & 7; | |
| 3793 | #endif | |
| 3794 | count = space.read_dword(*dmaget); | |
| 3795 | *dmaget += 4; | |
| 3796 | if ((method == 0) && (count == 1)) { | |
| 3797 | handle = space.read_dword(*dmaget); | |
| 3798 | handle = geforce_object_offset(handle); | |
| 3799 | #ifdef LOG_NV2A | |
| 3800 | logerror(" assign to subchannel %d object at %d\n", subch, handle); | |
| 3801 | #endif | |
| 3802 | channel[chanel][subchannel].object.objhandle = handle; | |
| 3803 | handle = ramin[handle / 4]; | |
| 3804 | objclass = handle & 0xff; | |
| 3805 | channel[chanel][subchannel].object.objclass = objclass; | |
| 3806 | *dmaget += 4; | |
| 3807 | } | |
| 3808 | else { | |
| 3809 | #ifdef LOG_NV2A | |
| 3810 | logerror(" subch. %d method %04x offset %04x count %d\n", subch, method, method * 4, count); | |
| 3811 | #endif | |
| 3812 | while (count > 0) { | |
| 3813 | countlen = count; | |
| 3814 | geforce_exec_method(space, chanel, subchannel, method, *dmaget, countlen); | |
| 3815 | *dmaget += 4 * (count - countlen); | |
| 3816 | count = countlen; | |
| 3817 | } | |
| 3818 | } | |
| 3819 | break; | |
| 3820 | default: | |
| 3821 | logerror(" unimplemented command %08X\n", cmd); | |
| 3880 | 3822 | } |
| 3881 | 3823 | } |
| 3882 | 3824 | } |
| 3883 | 3825 | } |
| 3884 | | |
| 3826 | else; | |
| 3885 | 3827 | // logerror("NV_2A: write at %08X mask %08X value %08X\n",0xfd000000+offset*4,mem_mask,data); |
| 3886 | 3828 | } |
| 3887 | ||
| 3888 | void nv2a_renderer::savestate_items() | |
| 3889 | { | |
| 3890 | } | |
| 3891 | ||
| 3892 | void nv2a_renderer::start() | |
| 3893 | { | |
| 3894 | puller_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(nv2a_renderer::puller_timer_work), this), (void *)"NV2A Puller Timer"); | |
| 3895 | puller_timer->enable(false); | |
| 3896 | } |
| r242703 | r242704 | |
|---|---|---|
| 404 | 404 | m_modify_color = 0; |
| 405 | 405 | m_modify_ypos = 0; |
| 406 | 406 | |
| 407 | m_mooncrst_gfxextend = 0; | |
| 408 | ||
| 407 | 409 | m_draw_bullets = 0; |
| 408 | 410 | |
| 409 | 411 | m_draw_background = &galaxold_state::galaxold_draw_background; |
| r242703 | r242704 | |
|---|---|---|
| 115 | 115 | void galpani2_state::copybg15(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| 116 | 116 | { |
| 117 | 117 | UINT16* ram = m_bg15 + 0x40000/2; |
| 118 | ||
| 118 | ||
| 119 | 119 | //int x = 0; |
| 120 | 120 | //int y = 0; |
| 121 | 121 |
| r242703 | r242704 | |
|---|---|---|
| 1320 | 1320 | { |
| 1321 | 1321 | case 0x000: // FIFO write |
| 1322 | 1322 | { |
| 1323 | | |
| 1323 | osd_printf_debug("K001005 FIFO write: %08X at %08X\n", data, space.device().safe_pc()); | |
| 1324 | 1324 | if (m_status != 1 && m_status != 2) |
| 1325 | 1325 | { |
| 1326 | 1326 | if (m_fifo_write_ptr < 0x400) |
| r242703 | r242704 | |
|---|---|---|
| 1126 | 1126 | info->tilemaps[pagenum]->set_scrolldx(0, 22); |
| 1127 | 1127 | info->tilemaps[pagenum]->set_scrolldy(0, 38); |
| 1128 | 1128 | } |
| 1129 | ||
| 1129 | ||
| 1130 | 1130 | save_item(NAME(info->flip), which); |
| 1131 | 1131 | save_item(NAME(info->rowscroll), which); |
| 1132 | 1132 | save_item(NAME(info->colscroll), which); |
| r242703 | r242704 | |
|---|---|---|
| 122 | 122 | m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2); |
| 123 | 123 | return 0; |
| 124 | 124 | } |
| 125 |
| r242703 | r242704 | |
|---|---|---|
| 1 | 1 | /* |
| 2 | 2 | |
| 3 | ||
| 3 | very simple sprite scheme, used by some Capcom games and hardware cloned from them | |
| 4 | 4 | |
| 5 | bionicc.c | |
| 6 | tigeroad.c | |
| 7 | supduck.c | |
| 5 | bionicc.c | |
| 6 | tigeroad.c | |
| 7 | supduck.c | |
| 8 | 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 | |
| 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 | 12 | |
| 13 | 13 | */ |
| 14 | 14 | |
| r242703 | r242704 | |
| 39 | 39 | 4 words per sprite |
| 40 | 40 | |
| 41 | 41 | 0 ---- ---t tttt tttt = tile number |
| 42 | ||
| 42 | ||
| 43 | 43 | 1 ---- ---- --cc cc-- = colour |
| 44 | 44 | 1 ---- ---- ---- --x- = flip x |
| 45 | 45 | 1 ---- ---- ---- ---y = flip y |
| r242703 | r242704 | |
|---|---|---|
| 16 | 16 | |
| 17 | 17 | WRITE8_MEMBER(zac2650_state::tinvader_videoram_w) |
| 18 | 18 | { |
| 19 | m_videoram[offset] = data; | |
| 19 | UINT8 *videoram = m_videoram; | |
| 20 | videoram[offset] = data; | |
| 20 | 21 | m_bg_tilemap->mark_tile_dirty(offset); |
| 21 | 22 | } |
| 22 | 23 | |
| r242703 | r242704 | |
| 110 | 111 | |
| 111 | 112 | TILE_GET_INFO_MEMBER(zac2650_state::get_bg_tile_info) |
| 112 | 113 | { |
| 113 | int code = m_videoram[tile_index]; | |
| 114 | UINT8 *videoram = m_videoram; | |
| 115 | int code = videoram[tile_index]; | |
| 114 | 116 | |
| 115 | 117 | SET_TILE_INFO_MEMBER(0, code, 0, 0); |
| 116 | 118 | } |
| r242703 | r242704 | |
| 125 | 127 | |
| 126 | 128 | m_gfxdecode->gfx(1)->set_source(m_s2636_0_ram); |
| 127 | 129 | m_gfxdecode->gfx(2)->set_source(m_s2636_0_ram); |
| 128 | ||
| 129 | save_item(NAME(m_bitmap)); | |
| 130 | save_item(NAME(m_spritebitmap)); | |
| 131 | save_item(NAME(m_CollisionBackground)); | |
| 132 | save_item(NAME(m_CollisionSprite)); | |
| 133 | 130 | } |
| 134 | 131 | |
| 135 | 132 | void zac2650_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) |
| r242703 | r242704 | |
|---|---|---|
| 142 | 142 | |
| 143 | 143 | ***************************************************************************/ |
| 144 | 144 | |
| 145 | WRITE8_MEMBER(zaccaria_state::videoram_w) | |
| 145 | WRITE8_MEMBER(zaccaria_state::zaccaria_videoram_w) | |
| 146 | 146 | { |
| 147 | 147 | m_videoram[offset] = data; |
| 148 | 148 | m_bg_tilemap->mark_tile_dirty(offset & 0x3ff); |
| 149 | 149 | } |
| 150 | 150 | |
| 151 | WRITE8_MEMBER(zaccaria_state::attributes_w) | |
| 151 | WRITE8_MEMBER(zaccaria_state::zaccaria_attributes_w) | |
| 152 | 152 | { |
| 153 | 153 | if (offset & 1) |
| 154 | 154 | { |
| r242703 | r242704 | |
| 166 | 166 | m_attributesram[offset] = data; |
| 167 | 167 | } |
| 168 | 168 | |
| 169 | WRITE8_MEMBER(zaccaria_state::flip_screen_x_w) | |
| 169 | WRITE8_MEMBER(zaccaria_state::zaccaria_flip_screen_x_w) | |
| 170 | 170 | { |
| 171 | 171 | flip_screen_x_set(data & 1); |
| 172 | 172 | } |
| 173 | 173 | |
| 174 | WRITE8_MEMBER(zaccaria_state::flip_screen_y_w) | |
| 174 | WRITE8_MEMBER(zaccaria_state::zaccaria_flip_screen_y_w) | |
| 175 | 175 | { |
| 176 | 176 | flip_screen_y_set(data & 1); |
| 177 | 177 | } |
| r242703 | r242704 | |
| 236 | 236 | } |
| 237 | 237 | } |
| 238 | 238 | |
| 239 | UINT32 zaccaria_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) | |
| 239 | UINT32 zaccaria_state::screen_update_zaccaria(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) | |
| 240 | 240 | { |
| 241 | 241 | m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0); |
| 242 | 242 |
| r242703 | r242704 | |
|---|---|---|
| 221 | 221 | WRITE8_MEMBER(altos5_state::memory_write_byte) |
| 222 | 222 | { |
| 223 | 223 | address_space& prog_space = m_maincpu->space(AS_PROGRAM); |
| 224 | prog_space.write_byte(offset, data); | |
| 224 | return prog_space.write_byte(offset, data); | |
| 225 | 225 | } |
| 226 | 226 | |
| 227 | 227 | READ8_MEMBER(altos5_state::io_read_byte) |
| r242703 | r242704 | |
| 233 | 233 | WRITE8_MEMBER(altos5_state::io_write_byte) |
| 234 | 234 | { |
| 235 | 235 | address_space& prog_space = m_maincpu->space(AS_IO); |
| 236 | prog_space.write_byte(offset, data); | |
| 236 | return prog_space.write_byte(offset, data); | |
| 237 | 237 | } |
| 238 | 238 | |
| 239 | 239 | WRITE_LINE_MEMBER( altos5_state::busreq_w ) |
| r242703 | r242704 | |
|---|---|---|
| 1 | // license:BSD-3-Clause | |
| 2 | // copyright-holders:hap | |
| 3 | /*************************************************************************** | |
| 4 | ||
| 5 | Coleco Amaze-A-Tron | |
| 6 | * TMS1100 MCU, labeled MP3405(die label too) | |
| 7 | ||
| 8 | This is an electronic board game with a selection of 8 maze games, | |
| 9 | most of them for 2 players. A 5x5 playing grid and four markers are | |
| 10 | required to play. Refer to the official manual for more information. | |
| 11 | ||
| 12 | ***************************************************************************/ | |
| 13 | ||
| 14 | #include "emu.h" | |
| 15 | #include "cpu/tms0980/tms0980.h" | |
| 16 | #include "sound/speaker.h" | |
| 17 | ||
| 18 | #include "amaztron.lh" | |
| 19 | ||
| 20 | // master clock is a single stage RC oscillator: R=33K?, C=100pf, | |
| 21 | // according to the TMS 1000 series data manual this is around 350kHz | |
| 22 | #define MASTER_CLOCK (350000) | |
| 23 | ||
| 24 | ||
| 25 | class amaztron_state : public driver_device | |
| 26 | { | |
| 27 | public: | |
| 28 | amaztron_state(const machine_config &mconfig, device_type type, const char *tag) | |
| 29 | : driver_device(mconfig, type, tag), | |
| 30 | m_maincpu(*this, "maincpu"), | |
| 31 | m_button_matrix(*this, "IN"), | |
| 32 | m_speaker(*this, "speaker") | |
| 33 | { } | |
| 34 | ||
| 35 | required_device<cpu_device> m_maincpu; | |
| 36 | required_ioport_array<6> m_button_matrix; | |
| 37 | required_device<speaker_sound_device> m_speaker; | |
| 38 | ||
| 39 | UINT16 m_r; | |
| 40 | UINT16 m_o; | |
| 41 | ||
| 42 | DECLARE_READ8_MEMBER(read_k); | |
| 43 | DECLARE_WRITE16_MEMBER(write_o); | |
| 44 | DECLARE_WRITE16_MEMBER(write_r); | |
| 45 | ||
| 46 | void leds_update(); | |
| 47 | ||
| 48 | virtual void machine_start(); | |
| 49 | }; | |
| 50 | ||
| 51 | ||
| 52 | ||
| 53 | /*************************************************************************** | |
| 54 | ||
| 55 | I/O | |
| 56 | ||
| 57 | ***************************************************************************/ | |
| 58 | ||
| 59 | void amaztron_state::leds_update() | |
| 60 | { | |
| 61 | for (int i = 0; i < 2; i++) | |
| 62 | if (m_r >> (i + 8) & 1) | |
| 63 | output_set_digit_value(i, m_o); | |
| 64 | } | |
| 65 | ||
| 66 | READ8_MEMBER(amaztron_state::read_k) | |
| 67 | { | |
| 68 | UINT8 k = 0; | |
| 69 | ||
| 70 | // read selected button rows | |
| 71 | for (int i = 0; i < 6; i++) | |
| 72 | { | |
| 73 | if (m_r >> i & 1) | |
| 74 | k |= m_button_matrix[i]->read(); | |
| 75 | } | |
| 76 | ||
| 77 | // the 5th row is tied to K4+K8 | |
| 78 | if (k & 0x10) k |= 0xc; | |
| 79 | return k & 0xf; | |
| 80 | } | |
| 81 | ||
| 82 | WRITE16_MEMBER(amaztron_state::write_r) | |
| 83 | { | |
| 84 | // R0-R5: input mux | |
| 85 | // R6,R7: lamps | |
| 86 | output_set_lamp_value(0, data >> 6 & 1); | |
| 87 | output_set_lamp_value(1, data >> 7 & 1); | |
| 88 | ||
| 89 | // R8,R9: select digit | |
| 90 | m_r = data; | |
| 91 | leds_update(); | |
| 92 | ||
| 93 | // R10: speaker out | |
| 94 | m_speaker->level_w(data >> 10 & 1); | |
| 95 | } | |
| 96 | ||
| 97 | WRITE16_MEMBER(amaztron_state::write_o) | |
| 98 | { | |
| 99 | // O0-O6: digit segments | |
| 100 | // O7: N/C | |
| 101 | m_o = data & 0x7f; | |
| 102 | leds_update(); | |
| 103 | } | |
| 104 | ||
| 105 | ||
| 106 | ||
| 107 | /*************************************************************************** | |
| 108 | ||
| 109 | Inputs | |
| 110 | ||
| 111 | ***************************************************************************/ | |
| 112 | ||
| 113 | static INPUT_PORTS_START( amaztron ) | |
| 114 | PORT_START("IN.0") // R0 | |
| 115 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_NAME("Button 1") | |
| 116 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_NAME("Button 6") | |
| 117 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_NAME("Button 11") | |
| 118 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_NAME("Button 16") | |
| 119 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_NAME("Button 21") | |
| 120 | ||
| 121 | PORT_START("IN.1") // R1 | |
| 122 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_NAME("Button 2") | |
| 123 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_NAME("Button 7") | |
| 124 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_NAME("Button 12") | |
| 125 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_NAME("Button 17") | |
| 126 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_NAME("Button 22") | |
| 127 | ||
| 128 | PORT_START("IN.2") // R2 | |
| 129 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_NAME("Button 3") | |
| 130 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_NAME("Button 8") | |
| 131 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_NAME("Button 13") | |
| 132 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_NAME("Button 18") | |
| 133 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_NAME("Button 23") | |
| 134 | ||
| 135 | PORT_START("IN.3") // R3 | |
| 136 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_NAME("Button 4") | |
| 137 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_NAME("Button 9") | |
| 138 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_NAME("Button 14") | |
| 139 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_NAME("Button 19") | |
| 140 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_NAME("Button 24") | |
| 141 | ||
| 142 | PORT_START("IN.4") // R4 | |
| 143 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_NAME("Button 5") | |
| 144 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_NAME("Button 10") | |
| 145 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_NAME("Button 15") | |
| 146 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_NAME("Button 20") | |
| 147 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_NAME("Button 25") | |
| 148 | ||
| 149 | PORT_START("IN.5") // R5 | |
| 150 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_NAME("Game Select") | |
| 151 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_NAME("Game Start") | |
| 152 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED) | |
| 153 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED) | |
| 154 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED) | |
| 155 | INPUT_PORTS_END | |
| 156 | ||
| 157 | ||
| 158 | ||
| 159 | /*************************************************************************** | |
| 160 | ||
| 161 | Machine Config | |
| 162 | ||
| 163 | ***************************************************************************/ | |
| 164 | ||
| 165 | void amaztron_state::machine_start() | |
| 166 | { | |
| 167 | m_r = 0; | |
| 168 | m_o = 0; | |
| 169 | ||
| 170 | save_item(NAME(m_r)); | |
| 171 | save_item(NAME(m_o)); | |
| 172 | } | |
| 173 | ||
| 174 | ||
| 175 | static MACHINE_CONFIG_START( amaztron, amaztron_state ) | |
| 176 | ||
| 177 | /* basic machine hardware */ | |
| 178 | MCFG_CPU_ADD("maincpu", TMS1100, MASTER_CLOCK) | |
| 179 | MCFG_TMS1XXX_READ_K_CB(READ8(amaztron_state, read_k)) | |
| 180 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(amaztron_state, write_o)) | |
| 181 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(amaztron_state, write_r)) | |
| 182 | ||
| 183 | MCFG_DEFAULT_LAYOUT(layout_amaztron) | |
| 184 | ||
| 185 | /* no video! */ | |
| 186 | ||
| 187 | /* sound hardware */ | |
| 188 | MCFG_SPEAKER_STANDARD_MONO("mono") | |
| 189 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) | |
| 190 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) | |
| 191 | MACHINE_CONFIG_END | |
| 192 | ||
| 193 | ||
| 194 | ||
| 195 | /*************************************************************************** | |
| 196 | ||
| 197 | Game driver(s) | |
| 198 | ||
| 199 | ***************************************************************************/ | |
| 200 | ||
| 201 | ROM_START( amaztron ) | |
| 202 | ROM_REGION( 0x0800, "maincpu", 0 ) | |
| 203 | ROM_LOAD( "tms1100nll_mp3405", 0x0000, 0x0800, CRC(9cbc0009) SHA1(17772681271b59280687492f37fa0859998f041d) ) | |
| 204 | ||
| 205 | ROM_REGION( 867, "maincpu:mpla", 0 ) | |
| 206 | ROM_LOAD( "tms1100_amaztron_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) ) | |
| 207 | ROM_REGION( 365, "maincpu:opla", 0 ) | |
| 208 | ROM_LOAD( "tms1100_amaztron_opla.pla", 0, 365, CRC(f3875384) SHA1(3c256a3db4f0aa9d93cf78124db39f4cbdc57e4a) ) | |
| 209 | ROM_END | |
| 210 | ||
| 211 | ||
| 212 | CONS( 1979, amaztron, 0, 0, amaztron, amaztron, driver_device, 0, "Coleco", "Amaze-A-Tron", GAME_SUPPORTS_SAVE ) |
| r242703 | r242704 | |
|---|---|---|
| 357 | 357 | MCFG_SCREEN_PALETTE("palette") |
| 358 | 358 | |
| 359 | 359 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", aquarius ) |
| 360 | MCFG_TEA1002_ADD("encoder", XTAL_8_867238MHz) | |
| 361 | 360 | MCFG_PALETTE_ADD("palette", 512) |
| 362 | 361 | MCFG_PALETTE_INDIRECT_ENTRIES(16) |
| 363 | 362 | MCFG_PALETTE_INIT_OWNER(aquarius_state, aquarius) |
| r242703 | r242704 | |
|---|---|---|
| 48 | 48 | #include "machine/atarifdc.h" |
| 49 | 49 | #include "bus/a800/a800_slot.h" |
| 50 | 50 | #include "bus/a800/a800_carts.h" |
| 51 | #include "bus/a8sio/a8sio.h" | |
| 52 | 51 | |
| 53 | 52 | |
| 54 | 53 | /****************************************************************************** |
| r242703 | r242704 | |
| 2076 | 2075 | * |
| 2077 | 2076 | **************************************************************/ |
| 2078 | 2077 | |
| 2079 | ||
| 2080 | 2078 | static MACHINE_CONFIG_START( atari_common_nodac, a400_state ) |
| 2081 | 2079 | /* basic machine hardware */ |
| 2082 | 2080 | MCFG_CPU_ADD("maincpu", M6502, FREQ_17_EXACT) |
| r242703 | r242704 | |
| 2096 | 2094 | MCFG_DEVICE_ADD("pia", PIA6821, 0) |
| 2097 | 2095 | MCFG_PIA_READPA_HANDLER(IOPORT("djoy_0_1")) |
| 2098 | 2096 | MCFG_PIA_READPB_HANDLER(IOPORT("djoy_2_3")) |
| 2099 | MCFG_PIA_CA2_HANDLER(DEVWRITELINE("a8sio", a8sio_device, motor_w)) | |
| 2100 | 2097 | MCFG_PIA_CB2_HANDLER(DEVWRITELINE("fdc", atari_fdc_device, pia_cb2_w)) |
| 2101 | 2098 | |
| 2102 | MCFG_DEVICE_ADD("a8sio", A8SIO, 0) | |
| 2103 | MCFG_A8SIO_DATA_IN_CB(DEVWRITELINE("pokey", pokey_device, sid_w)) | |
| 2104 | MCFG_A8SIO_SLOT_ADD("a8sio", "sio", NULL) | |
| 2105 | ||
| 2106 | 2099 | /* sound hardware */ |
| 2107 | 2100 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 2108 | 2101 | MCFG_SOUND_ADD("pokey", POKEY, FREQ_17_EXACT) |
| r242703 | r242704 | |
|---|---|---|
| 165 | 165 | static ADDRESS_MAP_START(bitgrapha_mem, AS_PROGRAM, 16, bitgraph_state) |
| 166 | 166 | ADDRESS_MAP_UNMAP_HIGH |
| 167 | 167 | AM_RANGE(0x000000, 0x007fff) AM_ROM |
| 168 | AM_RANGE(0x010000, 0x010001) AM_DEVREADWRITE8(ACIA0_TAG, acia6850_device, data_r, data_w, 0xff00) | |
| 168 | AM_RANGE(0x010000, 0x010001) AM_DEVREADWRITE8(ACIA0_TAG, acia6850_device, data_r, data_w, 0xff00) // HOST | |
| 169 | 169 | AM_RANGE(0x010002, 0x010003) AM_DEVREADWRITE8(ACIA0_TAG, acia6850_device, status_r, control_w, 0xff00) |
| 170 | AM_RANGE(0x010008, 0x010009) AM_DEVREADWRITE8(ACIA1_TAG, acia6850_device, data_r, data_w, 0x00ff) | |
| 170 | AM_RANGE(0x010008, 0x010009) AM_DEVREADWRITE8(ACIA1_TAG, acia6850_device, data_r, data_w, 0x00ff) // KEYBOARD | |
| 171 | 171 | AM_RANGE(0x01000a, 0x01000b) AM_DEVREADWRITE8(ACIA1_TAG, acia6850_device, status_r, control_w, 0x00ff) |
| 172 | AM_RANGE(0x010010, 0x010011) AM_DEVREADWRITE8(ACIA2_TAG, acia6850_device, data_r, data_w, 0x00ff) | |
| 172 | AM_RANGE(0x010010, 0x010011) AM_DEVREADWRITE8(ACIA2_TAG, acia6850_device, data_r, data_w, 0x00ff) // DEBUGGER | |
| 173 | 173 | AM_RANGE(0x010012, 0x010013) AM_DEVREADWRITE8(ACIA2_TAG, acia6850_device, status_r, control_w, 0x00ff) |
| 174 | AM_RANGE(0x010018, 0x010019) AM_DEVREADWRITE8(ACIA3_TAG, acia6850_device, data_r, data_w, 0x00ff) | |
| 174 | AM_RANGE(0x010018, 0x010019) AM_DEVREADWRITE8(ACIA3_TAG, acia6850_device, data_r, data_w, 0x00ff) // POINTER | |
| 175 | 175 | AM_RANGE(0x01001a, 0x01001b) AM_DEVREADWRITE8(ACIA3_TAG, acia6850_device, status_r, control_w, 0x00ff) |
| 176 | 176 | AM_RANGE(0x010020, 0x010027) AM_READWRITE8(adlc_r, adlc_w, 0xff00) |
| 177 | AM_RANGE(0x010028, 0x01002f) AM_READWRITE8(pia_r, pia_w, 0xff00) | |
| 177 | AM_RANGE(0x010028, 0x01002f) AM_READWRITE8(pia_r, pia_w, 0xff00) // EAROM, PSG | |
| 178 | 178 | AM_RANGE(0x010030, 0x010031) AM_WRITE(baud_write) |
| 179 | 179 | AM_RANGE(0x3e0000, 0x3fffff) AM_RAM |
| 180 | 180 | ADDRESS_MAP_END |
| r242703 | r242704 | |
| 182 | 182 | static ADDRESS_MAP_START(bitgraphb_mem, AS_PROGRAM, 16, bitgraph_state) |
| 183 | 183 | ADDRESS_MAP_UNMAP_HIGH |
| 184 | 184 | AM_RANGE(0x000000, 0x007fff) AM_ROM |
| 185 | AM_RANGE(0x010000, 0x010001) AM_DEVREADWRITE8(ACIA0_TAG, acia6850_device, data_r, data_w, 0xff00) | |
| 185 | AM_RANGE(0x010000, 0x010001) AM_DEVREADWRITE8(ACIA0_TAG, acia6850_device, data_r, data_w, 0xff00) // HOST | |
| 186 | 186 | AM_RANGE(0x010002, 0x010003) AM_DEVREADWRITE8(ACIA0_TAG, acia6850_device, status_r, control_w, 0xff00) |
| 187 | AM_RANGE(0x010008, 0x010009) AM_DEVREADWRITE8(ACIA1_TAG, acia6850_device, data_r, data_w, 0x00ff) | |
| 187 | AM_RANGE(0x010008, 0x010009) AM_DEVREADWRITE8(ACIA1_TAG, acia6850_device, data_r, data_w, 0x00ff) // KEYBOARD | |
| 188 | 188 | AM_RANGE(0x01000a, 0x01000b) AM_DEVREADWRITE8(ACIA1_TAG, acia6850_device, status_r, control_w, 0x00ff) |
| 189 | AM_RANGE(0x010010, 0x010011) AM_DEVREADWRITE8(ACIA2_TAG, acia6850_device, data_r, data_w, 0x00ff) | |
| 189 | AM_RANGE(0x010010, 0x010011) AM_DEVREADWRITE8(ACIA2_TAG, acia6850_device, data_r, data_w, 0x00ff) // DEBUGGER | |
| 190 | 190 | AM_RANGE(0x010012, 0x010013) AM_DEVREADWRITE8(ACIA2_TAG, acia6850_device, status_r, control_w, 0x00ff) |
| 191 | 191 | AM_RANGE(0x01001a, 0x01001b) AM_WRITE8(misccr_write, 0x00ff) |
| 192 | 192 | AM_RANGE(0x010020, 0x010027) AM_READWRITE8(adlc_r, adlc_w, 0xff00) |
| 193 | AM_RANGE(0x010028, 0x01002f) AM_READWRITE8(pia_r, pia_w, 0xff00) | |
| 193 | AM_RANGE(0x010028, 0x01002f) AM_READWRITE8(pia_r, pia_w, 0xff00) // EAROM, PSG | |
| 194 | 194 | AM_RANGE(0x010030, 0x010031) AM_WRITE(baud_write) |
| 195 | // AM_RANGE(0x010030, 0x010037) AM_READ8(ppu_read, 0x00ff) | |
| 196 | // AM_RANGE(0x010038, 0x01003f) AM_WRITE8(ppu_write, 0x00ff) | |
| 195 | // AM_RANGE(0x010030, 0x010037) AM_READ8(ppu_read, 0x00ff) | |
| 196 | // AM_RANGE(0x010038, 0x01003f) AM_WRITE8(ppu_write, 0x00ff) | |
| 197 | 197 | AM_RANGE(0x380000, 0x3fffff) AM_RAM |
| 198 | 198 | ADDRESS_MAP_END |
| 199 | 199 | |
| r242703 | r242704 | |
| 257 | 257 | m_pia_b = data; |
| 258 | 258 | |
| 259 | 259 | switch (m_pia_b & 0x03) { |
| 260 | case 2: m_psg->data_w(space, 0, m_pia_a); break; | |
| 261 | case 3: m_psg->address_w(space, 0, m_pia_a); break; | |
| 260 | case 2: m_psg->data_w(space, 0, m_pia_a); break; | |
| 261 | case 3: m_psg->address_w(space, 0, m_pia_a); break; | |
| 262 | 262 | } |
| 263 | 263 | |
| 264 | 264 | if (BIT(m_pia_b, 3)) { |
| r242703 | r242704 | |
| 302 | 302 | WRITE16_MEMBER(bitgraph_state::baud_write) |
| 303 | 303 | { |
| 304 | 304 | DBG_LOG(1,"Baud", ("%04X\n", data)); |
| 305 | m_dbrgb->str_w(data & 15); // 2 DBG | |
| 306 | m_dbrga->stt_w((data >> 4) & 15); // 1 KBD | |
| 307 | m_dbrgb->stt_w((data >> 8) & 15); // 3 PNT | |
| 308 | m_dbrga->str_w((data >> 12) & 15); // 0 HOST | |
| 305 | m_dbrgb->str_w(data & 15); // 2 DBG | |
| 306 | m_dbrga->stt_w((data >> 4) & 15); // 1 KBD | |
| 307 | m_dbrgb->stt_w((data >> 8) & 15); // 3 PNT | |
| 308 | m_dbrga->str_w((data >> 12) & 15); // 0 HOST | |
| 309 | 309 | } |
| 310 | 310 | |
| 311 | 311 | WRITE_LINE_MEMBER(bitgraph_state::com8116_a_fr_w) |
| r242703 | r242704 | |
| 398 | 398 | |
| 399 | 399 | #ifdef UNUSED_FUNCTION |
| 400 | 400 | static ADDRESS_MAP_START(ppu_io, AS_IO, 8, bitgraph_state) |
| 401 | // AM_RANGE(0x00, 0x00) AM_READ(ppu_irq) | |
| 402 | // AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) | |
| 403 | // AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(ppu_t0_r) | |
| 401 | // AM_RANGE(0x00, 0x00) AM_READ(ppu_irq) | |
| 402 | // AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) | |
| 403 | // AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(ppu_t0_r) | |
| 404 | 404 | AM_RANGE(MCS48_PORT_PROG, MCS48_PORT_PROG) AM_DEVWRITE("i8243", i8243_device, i8243_prog_w) |
| 405 | 405 | ADDRESS_MAP_END |
| 406 | 406 | #endif |
| 407 | 407 | |
| 408 | 408 | /* |
| 409 | p4 O: Centronics data 3..0 | |
| 410 | p5 O: Centronics data 7..4 | |
| 411 | p6 O: Centronics control | |
| 412 | p7 I: Centronics status | |
| 409 | p4 O: Centronics data 3..0 | |
| 410 | p5 O: Centronics data 7..4 | |
| 411 | p6 O: Centronics control | |
| 412 | p7 I: Centronics status | |
| 413 | 413 | */ |
| 414 | 414 | WRITE8_MEMBER(bitgraph_state::ppu_i8243_w) |
| 415 | 415 | { |
| r242703 | r242704 | |
| 572 | 572 | MCFG_CPU_PROGRAM_MAP(bitgraphb_mem) |
| 573 | 573 | |
| 574 | 574 | MCFG_FRAGMENT_ADD(bg_motherboard) |
| 575 | // | |
| 575 | // MCFG_FRAGMENT_ADD(bg_ppu) | |
| 576 | 576 | |
| 577 | 577 | MCFG_DEVICE_ADD("system_clock", CLOCK, 1040) |
| 578 | 578 | MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(bitgraph_state, system_clock_write)) |
| r242703 | r242704 | |
|---|---|---|
| 1615 | 1615 | MCFG_MOS8563_ADD(MOS8563_TAG, SCREEN_VDC_TAG, XTAL_16MHz, vdc_videoram_map) |
| 1616 | 1616 | MCFG_MC6845_SHOW_BORDER_AREA(true) |
| 1617 | 1617 | MCFG_MC6845_CHAR_WIDTH(8) |
| 1618 | MCFG_MC6845_SHOW_BORDER_AREA(true) | |
| 1619 | MCFG_MC6845_CHAR_WIDTH(8) | |
| 1618 | 1620 | MCFG_SCREEN_ADD(SCREEN_VDC_TAG, RASTER) |
| 1619 | 1621 | MCFG_SCREEN_REFRESH_RATE(60) |
| 1620 | 1622 | MCFG_SCREEN_SIZE(640, 200) |
| r242703 | r242704 | |
|---|---|---|
| 4 | 4 | |
| 5 | 5 | Parker Brothers Code Name: Sector |
| 6 | 6 | * MP0905BNL ZA0379 (die labeled 0970F-05B) |
| 7 | ||
| 7 | ||
| 8 | 8 | This is a tabletop submarine pursuit game. A grid board and small toy |
| 9 | 9 | boats are used to remember your locations (a Paint app should be ok too). |
| 10 | 10 | Refer to the official manual for more information, it is not a simple game. |
| r242703 | r242704 | |
| 69 | 69 | void cnsector_state::leds_update() |
| 70 | 70 | { |
| 71 | 71 | UINT16 active_state[0x10]; |
| 72 | ||
| 72 | ||
| 73 | 73 | for (int i = 0; i < 0x10; i++) |
| 74 | 74 | { |
| 75 | 75 | active_state[i] = 0; |
| 76 | ||
| 76 | ||
| 77 | 77 | for (int j = 0; j < 0x10; j++) |
| 78 | 78 | { |
| 79 | 79 | int di = j << 4 | i; |
| 80 | ||
| 80 | ||
| 81 | 81 | // turn on powered leds |
| 82 | 82 | if (m_leds_state[i] >> j & 1) |
| 83 | 83 | m_leds_decay[di] = LEDS_DECAY_TIME; |
| 84 | ||
| 84 | ||
| 85 | 85 | // determine active state |
| 86 | 86 | int ds = (m_leds_decay[di] != 0) ? 1 : 0; |
| 87 | 87 | active_state[i] |= (ds << j); |
| 88 | 88 | } |
| 89 | 89 | } |
| 90 | ||
| 90 | ||
| 91 | 91 | // on difference, send to output |
| 92 | 92 | for (int i = 0; i < 0x10; i++) |
| 93 | 93 | if (m_leds_cache[i] != active_state[i]) |
| 94 | 94 | output_set_digit_value(i, active_state[i]); |
| 95 | ||
| 95 | ||
| 96 | 96 | memcpy(m_leds_cache, active_state, sizeof(m_leds_cache)); |
| 97 | 97 | } |
| 98 | 98 | |
| r242703 | r242704 | |
| 102 | 102 | for (int i = 0; i < 0x100; i++) |
| 103 | 103 | if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i]) |
| 104 | 104 | m_leds_decay[i]--; |
| 105 | ||
| 105 | ||
| 106 | 106 | leds_update(); |
| 107 | 107 | } |
| 108 | 108 | |
| r242703 | r242704 | |
| 122 | 122 | for (int i = 0; i < 5; i++) |
| 123 | 123 | if (m_o >> i & 1) |
| 124 | 124 | k |= m_button_matrix[i]->read(); |
| 125 | ||
| 125 | ||
| 126 | 126 | return k; |
| 127 | 127 | } |
| 128 | 128 | |
| r242703 | r242704 | |
| 201 | 201 | memset(m_leds_decay, 0, sizeof(m_leds_decay)); |
| 202 | 202 | |
| 203 | 203 | m_o = 0; |
| 204 | ||
| 204 | ||
| 205 | 205 | // register for savestates |
| 206 | 206 | save_item(NAME(m_leds_state)); |
| 207 | 207 | save_item(NAME(m_leds_cache)); |
| r242703 | r242704 | |
| 218 | 218 | MCFG_TMS1XXX_READ_K_CB(READ8(cnsector_state, read_k)) |
| 219 | 219 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(cnsector_state, write_o)) |
| 220 | 220 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(cnsector_state, write_r)) |
| 221 | ||
| 221 | ||
| 222 | 222 | MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", cnsector_state, leds_decay_tick, attotime::from_msec(10)) |
| 223 | 223 | |
| 224 | 224 | MCFG_DEFAULT_LAYOUT(layout_cnsector) |
| r242703 | r242704 | |
|---|---|---|
| 4 | 4 | |
| 5 | 5 | Milton Bradley Comp IV |
| 6 | 6 | * TMC0904NL CP0904A (die labeled 4A0970D-04A) |
| 7 | ||
| 7 | ||
| 8 | 8 | This is small tabletop Mastermind game; a code-breaking game where the player |
| 9 | 9 | needs to find out the correct sequence of colours (numbers in our case). |
| 10 | 10 | It is known as Logic 5 in Europe, and as Pythaligoras in Japan. |
| 11 | ||
| 11 | ||
| 12 | 12 | Press the R key to start, followed by a set of unique numbers and E. |
| 13 | 13 | Refer to the official manual for more information. |
| 14 | 14 | |
| r242703 | r242704 | |
| 74 | 74 | // turn on powered leds |
| 75 | 75 | if (m_leds_state >> i & 1) |
| 76 | 76 | m_leds_decay[i] = LEDS_DECAY_TIME; |
| 77 | ||
| 77 | ||
| 78 | 78 | // send to output |
| 79 | 79 | output_set_lamp_value(i, (m_leds_decay[i] != 0) ? 1 : 0); |
| 80 | 80 | } |
| r242703 | r242704 | |
| 86 | 86 | for (int i = 0; i < 0x10; i++) |
| 87 | 87 | if (!(m_leds_state >> i & 1) && m_leds_decay[i]) |
| 88 | 88 | m_leds_decay[i]--; |
| 89 | ||
| 89 | ||
| 90 | 90 | leds_update(); |
| 91 | 91 | } |
| 92 | 92 | |
| r242703 | r242704 | |
| 106 | 106 | for (int i = 0; i < 3; i++) |
| 107 | 107 | if (m_o >> (i+1) & 1) |
| 108 | 108 | k |= m_button_matrix[i]->read(); |
| 109 | ||
| 109 | ||
| 110 | 110 | return k; |
| 111 | 111 | } |
| 112 | 112 | |
| r242703 | r242704 | |
| 173 | 173 | memset(m_leds_decay, 0, sizeof(m_leds_decay)); |
| 174 | 174 | |
| 175 | 175 | m_o = 0; |
| 176 | ||
| 176 | ||
| 177 | 177 | // register for savestates |
| 178 | 178 | save_item(NAME(m_leds_state)); |
| 179 | 179 | save_item(NAME(m_leds_decay)); |
| r242703 | r242704 | |
| 189 | 189 | MCFG_TMS1XXX_READ_K_CB(READ8(comp4_state, read_k)) |
| 190 | 190 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(comp4_state, write_o)) |
| 191 | 191 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(comp4_state, write_r)) |
| 192 | ||
| 192 | ||
| 193 | 193 | MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", comp4_state, leds_decay_tick, attotime::from_msec(10)) |
| 194 | 194 | |
| 195 | 195 | MCFG_DEFAULT_LAYOUT(layout_comp4) |
| r242703 | r242704 | |
|---|---|---|
| 202 | 202 | |
| 203 | 203 | static ADDRESS_MAP_START( ec1847_io, AS_IO, 8, ec184x_state ) |
| 204 | 204 | ADDRESS_MAP_UNMAP_HIGH |
| 205 | // | |
| 205 | // AM_RANGE(0x0210, 0x021f) AM_RAM // internal (non-standard?) bus extender | |
| 206 | 206 | ADDRESS_MAP_END |
| 207 | 207 | |
| 208 | 208 |
| r242703 | r242704 | |
|---|---|---|
| 101 | 101 | DECLARE_WRITE8_MEMBER(motor_w); |
| 102 | 102 | DECLARE_MACHINE_RESET(excali64); |
| 103 | 103 | required_device<palette_device> m_palette; |
| 104 | ||
| 104 | ||
| 105 | 105 | private: |
| 106 | 106 | const UINT8 *m_p_chargen; |
| 107 | 107 | UINT8 *m_p_videoram; |
| r242703 | r242704 | |
| 302 | 302 | if (BIT(data, 1)) |
| 303 | 303 | floppy = m_floppy1->get_device(); |
| 304 | 304 | |
| 305 | m_fdc->set_floppy(floppy); | |
| 306 | 305 | if (floppy) |
| 306 | { | |
| 307 | m_fdc->set_floppy(floppy); | |
| 307 | 308 | floppy->ss_w(BIT(data, 4)); |
| 308 | ||
| 309 | } | |
| 309 | 310 | #else |
| 310 | 311 | if BIT(data, 0) |
| 311 | 312 | m_fdc->set_drive(0); |
| r242703 | r242704 | |
| 585 | 586 | } |
| 586 | 587 | else |
| 587 | 588 | gfx = m_p_chargen[(chr<<4) | ra]; // normal character |
| 588 | ||
| 589 | ||
| 589 | 590 | gfx ^= (x == cursor_x) ? 0xff : 0; |
| 590 | 591 | |
| 591 | 592 | /* Display a scanline of a character */ |
| r242703 | r242704 | |
| 653 | 654 | MCFG_CASSETTE_ADD( "cassette" ) |
| 654 | 655 | #if NEWFDC |
| 655 | 656 | MCFG_WD2793x_ADD("fdc", XTAL_16MHz / 16) |
| 657 | MCFG_WD_FDC_FORCE_READY | |
| 656 | 658 | MCFG_WD_FDC_DRQ_CALLBACK(DEVWRITELINE("dma", z80dma_device, rdy_w)) |
| 657 | MCFG_FLOPPY_DRIVE_ADD("fdc:0", excali64_floppies, "525dd", excali64_state::floppy_formats) | |
| 658 | MCFG_FLOPPY_DRIVE_ADD("fdc:1", excali64_floppies, "525dd", excali64_state::floppy_formats) | |
| 659 | MCFG_FLOPPY_DRIVE_ADD("fdc:0", excali64_floppies, "525dd", floppy_image_device::default_floppy_formats)// excali64_state::floppy_formats) | |
| 660 | MCFG_FLOPPY_DRIVE_ADD("fdc:1", excali64_floppies, "525dd", floppy_image_device::default_floppy_formats) | |
| 659 | 661 | #else |
| 660 | 662 | MCFG_DEVICE_ADD("fdc", WD2793, 0) |
| 661 | 663 | MCFG_WD17XX_DEFAULT_DRIVE2_TAGS |
| r242703 | r242704 | |
|---|---|---|
| 2 | 2 | PeT mess@utanet.at 2007, 2014 |
| 3 | 3 | Peter Wilhelmsen peter.wilhelmsen@gmail.com |
| 4 | 4 | Morten Shearman Kirkegaard morten+gamate@afdelingp.dk |
| 5 | Juan F | |
| 5 | Juan Félix Mateos vectrex@hackermesh.org | |
| 6 | 6 | ******************************************************************************/ |
| 7 | 7 | |
| 8 | 8 | #include "emu.h" |
| r242703 | r242704 | |
| 18 | 18 | : driver_device(mconfig, type, tag) |
| 19 | 19 | , m_maincpu(*this, "maincpu") |
| 20 | 20 | , m_cart(*this, "cartslot") |
| 21 | // | |
| 21 | // , m_gfxdecode(*this, "gfxdecode") | |
| 22 | 22 | , m_io_joy(*this, "JOY") |
| 23 | 23 | , m_palette(*this, "palette") |
| 24 | 24 | , m_bios(*this, "bios") |
| r242703 | r242704 | |
| 47 | 47 | |
| 48 | 48 | struct |
| 49 | 49 | { |
| 50 | UINT8 reg[8]; | |
| 51 | struct { | |
| 52 | bool write; | |
| 53 | bool page2; // else page1 | |
| 50 | UINT8 reg[8]; | |
| 51 | struct { | |
| 52 | bool write; | |
| 53 | bool page2; // else page1 | |
| 54 | 54 | UINT8 ypos, xpos/*tennis*/; |
| 55 | UINT8 data[2][0x100][0x20]; | |
| 56 | } bitmap; | |
| 57 | UINT8 x, y; | |
| 55 | UINT8 data[2][0x100][0x20]; | |
| 56 | } bitmap; | |
| 57 | UINT8 x, y; | |
| 58 | 58 | bool y_increment; |
| 59 | 59 | } video; |
| 60 | 60 | |
| r242703 | r242704 | |
| 68 | 68 | |
| 69 | 69 | required_device<cpu_device> m_maincpu; |
| 70 | 70 | required_device<generic_slot_device> m_cart; |
| 71 | // | |
| 71 | // required_device<gfxdecode_device> m_gfxdecode; | |
| 72 | 72 | required_ioport m_io_joy; |
| 73 | 73 | required_device<palette_device> m_palette; |
| 74 | 74 | required_shared_ptr<UINT8> m_bios; |
| r242703 | r242704 | |
| 113 | 113 | |
| 114 | 114 | WRITE8_MEMBER( gamate_state::gamate_video_w ) |
| 115 | 115 | { |
| 116 | video.reg[offset]=data; | |
| 117 | switch (offset) { | |
| 118 | case 1: video.bitmap.write=data&0xc0; // more addressing mode | |
| 116 | video.reg[offset]=data; | |
| 117 | switch (offset) { | |
| 118 | case 1: video.bitmap.write=data&0xc0; // more addressing mode | |
| 119 | 119 | video.y_increment=data&0x40; |
| 120 | 120 | break; |
| 121 | 121 | case 2: video.bitmap.xpos=data;break; // at least 7 bits |
| 122 | 122 | case 3: video.bitmap.ypos=data;break; // at least 7 bits |
| 123 | case 4: video.bitmap.page2=data&0x80;video.x=data&0x7f;break; | |
| 124 | case 5: video.y=data;break; | |
| 125 | case 7: | |
| 126 | if (video.bitmap.write) { | |
| 127 | if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/) | |
| 128 | video.bitmap.data[video.bitmap.page2][video.y][video.x]=data; | |
| 129 | else | |
| 130 | logerror("%.6f %04x video bitmap x %x invalid\n",machine().time().as_double(), m_maincpu->pc(), video.x); | |
| 131 | } else { | |
| 132 | video.bitmap.data[0][video.y][video.x&(ARRAY_LENGTH(video.bitmap.data[0][0])-1)]=data; | |
| 133 | } | |
| 134 | if (video.y_increment) video.y++; | |
| 123 | case 4: video.bitmap.page2=data&0x80;video.x=data&0x7f;break; | |
| 124 | case 5: video.y=data;break; | |
| 125 | case 7: | |
| 126 | if (video.bitmap.write) { | |
| 127 | if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/) | |
| 128 | video.bitmap.data[video.bitmap.page2][video.y][video.x]=data; | |
| 129 | else | |
| 130 | logerror("%.6f %04x video bitmap x %x invalid\n",machine().time().as_double(), m_maincpu->pc(), video.x); | |
| 131 | } else { | |
| 132 | video.bitmap.data[0][video.y][video.x&(ARRAY_LENGTH(video.bitmap.data[0][0])-1)]=data; | |
| 133 | } | |
| 134 | if (video.y_increment) video.y++; | |
| 135 | 135 | else video.x++; |
| 136 | ||
| 136 | } | |
| 137 | 137 | } |
| 138 | 138 | |
| 139 | 139 | WRITE8_MEMBER( gamate_state::cart_bankswitchmulti_w ) |
| r242703 | r242704 | |
| 149 | 149 | READ8_MEMBER( gamate_state::gamate_video_r ) |
| 150 | 150 | { |
| 151 | 151 | if (offset!=6) return 0; |
| 152 | UINT8 data=0; | |
| 153 | if (video.bitmap.write) { | |
| 154 | if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/) | |
| 155 | data=video.bitmap.data[video.bitmap.page2][video.y][video.x]; | |
| 156 | else | |
| 157 | logerror("%.6f video bitmap x %x invalid\n",machine().time().as_double(),video.x); | |
| 158 | } else { | |
| 159 | data=video.bitmap.data[0][video.y][video.x&(ARRAY_LENGTH(video.bitmap.data[0][0])-1)]; | |
| 160 | } | |
| 161 | if (m_maincpu->pc()<0xf000) | |
| 162 | logerror("%.6f video read %04x %02x\n",machine().time().as_double(),offset, data); | |
| 163 | return data; | |
| 152 | UINT8 data=0; | |
| 153 | if (video.bitmap.write) { | |
| 154 | if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/) | |
| 155 | data=video.bitmap.data[video.bitmap.page2][video.y][video.x]; | |
| 156 | else | |
| 157 | logerror("%.6f video bitmap x %x invalid\n",machine().time().as_double(),video.x); | |
| 158 | } else { | |
| 159 | data=video.bitmap.data[0][video.y][video.x&(ARRAY_LENGTH(video.bitmap.data[0][0])-1)]; | |
| 160 | } | |
| 161 | if (m_maincpu->pc()<0xf000) | |
| 162 | logerror("%.6f video read %04x %02x\n",machine().time().as_double(),offset, data); | |
| 163 | return data; | |
| 164 | 164 | } |
| 165 | 165 | |
| 166 | 166 | WRITE8_MEMBER( gamate_state::gamate_audio_w ) |
| 167 | 167 | { |
| 168 | ||
| 168 | logerror("%.6f %04x audio write %04x %02x\n",machine().time().as_double(),m_maincpu->pc(),offset,data); | |
| 169 | 169 | } |
| 170 | 170 | |
| 171 | 171 | READ8_MEMBER( gamate_state::gamate_audio_r ) |
| 172 | 172 | { |
| 173 | ||
| 173 | logerror("%.6f %04x audio read %04x \n",machine().time().as_double(),m_maincpu->pc(),offset); | |
| 174 | 174 | return 0; |
| 175 | 175 | } |
| 176 | 176 | |
| 177 | 177 | |
| 178 | 178 | READ8_MEMBER( gamate_state::gamate_pad_r ) |
| 179 | 179 | { |
| 180 | UINT8 data=m_io_joy->read(); | |
| 181 | return data; | |
| 180 | UINT8 data=m_io_joy->read(); | |
| 181 | return data; | |
| 182 | 182 | } |
| 183 | 183 | |
| 184 | 184 | static ADDRESS_MAP_START( gamate_mem, AS_PROGRAM, 8, gamate_state ) |
| 185 | AM_RANGE(0x0000, 0x03ff) AM_RAM | |
| 186 | AM_RANGE(0x4000, 0x400d) AM_READWRITE(gamate_audio_r, gamate_audio_w) | |
| 187 | AM_RANGE(0x4400, 0x4400) AM_READ(gamate_pad_r) | |
| 188 | AM_RANGE(0x5000, 0x5007) AM_READWRITE(gamate_video_r, gamate_video_w) | |
| 189 | AM_RANGE(0x5a00, 0x5a00) AM_READ(protection_r) | |
| 185 | AM_RANGE(0x0000, 0x03ff) AM_RAM | |
| 186 | AM_RANGE(0x4000, 0x400d) AM_READWRITE(gamate_audio_r, gamate_audio_w) | |
| 187 | AM_RANGE(0x4400, 0x4400) AM_READ(gamate_pad_r) | |
| 188 | AM_RANGE(0x5000, 0x5007) AM_READWRITE(gamate_video_r, gamate_video_w) | |
| 189 | AM_RANGE(0x5a00, 0x5a00) AM_READ(protection_r) | |
| 190 | 190 | |
| 191 | AM_RANGE(0x6000, 0x9fff) AM_READ_BANK("bankmulti") | |
| 192 | AM_RANGE(0xa000, 0xdfff) AM_READ_BANK("bank") | |
| 191 | AM_RANGE(0x6000, 0x9fff) AM_READ_BANK("bankmulti") | |
| 192 | AM_RANGE(0xa000, 0xdfff) AM_READ_BANK("bank") | |
| 193 | 193 | |
| 194 | 194 | AM_RANGE(0x6000, 0x6002) AM_READWRITE(gamate_cart_protection_r, gamate_cart_protection_w) |
| 195 | // | |
| 195 | // AM_RANGE(0x6000, 0xdfff) AM_READWRITE(gamate_cart_r, gamate_cart_w) | |
| 196 | 196 | AM_RANGE(0x8000, 0x8000) AM_WRITE(cart_bankswitchmulti_w) |
| 197 | 197 | AM_RANGE(0xc000, 0xc000) AM_WRITE(cart_bankswitch_w) |
| 198 | 198 | |
| 199 | ||
| 199 | AM_RANGE(0xf000, 0xffff) AM_ROM AM_SHARE("bios") | |
| 200 | 200 | ADDRESS_MAP_END |
| 201 | 201 | |
| 202 | 202 | |
| r242703 | r242704 | |
| 215 | 215 | #ifdef UNUSED_CODE |
| 216 | 216 | static const struct gfx_layout gamate_charlayout = |
| 217 | 217 | { |
| 218 | 4, /* width of object */ | |
| 219 | 1, /* height of object */ | |
| 220 | 256,/* 256 characters */ | |
| 221 | 2, /* bits per pixel */ | |
| 222 | { 0,1 }, /* no bitplanes */ | |
| 223 | /* x offsets */ | |
| 224 | { 0,2,4,6 }, | |
| 225 | /* y offsets */ | |
| 226 | { 0 }, | |
| 227 | 8*1 /* size of 1 object in bits */ | |
| 218 | 4, /* width of object */ | |
| 219 | 1, /* height of object */ | |
| 220 | 256,/* 256 characters */ | |
| 221 | 2, /* bits per pixel */ | |
| 222 | { 0,1 }, /* no bitplanes */ | |
| 223 | /* x offsets */ | |
| 224 | { 0,2,4,6 }, | |
| 225 | /* y offsets */ | |
| 226 | { 0 }, | |
| 227 | 8*1 /* size of 1 object in bits */ | |
| 228 | 228 | }; |
| 229 | 229 | |
| 230 | 230 | static const unsigned short gamate_palette[4] = |
| r242703 | r242704 | |
| 233 | 233 | }; |
| 234 | 234 | |
| 235 | 235 | static GFXDECODE_START( gamate_charlayout ) |
| 236 | ||
| 236 | GFXDECODE_ENTRY( "gfx1", 0x0000, gamate_charlayout, 0, 0x100 ) | |
| 237 | 237 | GFXDECODE_END |
| 238 | 238 | #endif |
| 239 | 239 | |
| 240 | 240 | /* palette in red, green, blue tribles */ |
| 241 | 241 | static const unsigned char gamate_colors[4][3] = |
| 242 | 242 | { |
| 243 | { 255,255,255 }, | |
| 244 | { 0xa0, 0xa0, 0xa0 }, | |
| 245 | { 0x60, 0x60, 0x60 }, | |
| 246 | { 0, 0, 0 } | |
| 243 | { 255,255,255 }, | |
| 244 | { 0xa0, 0xa0, 0xa0 }, | |
| 245 | { 0x60, 0x60, 0x60 }, | |
| 246 | { 0, 0, 0 } | |
| 247 | 247 | }; |
| 248 | 248 | |
| 249 | 249 | PALETTE_INIT_MEMBER(gamate_state, gamate) |
| r242703 | r242704 | |
| 274 | 274 | |
| 275 | 275 | UINT32 gamate_state::screen_update_gamate(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 276 | 276 | { |
| 277 | int x, y, j; | |
| 278 | for (y=0;y<152;y++) { | |
| 279 | for (x=-(video.bitmap.xpos&7), j=0;x<160;x+=8, j++) { | |
| 280 | UINT8 d1=video.bitmap.data[0][(y+video.bitmap.ypos)&0xff][(j+video.bitmap.xpos/8)&0x1f]; | |
| 281 | UINT8 d2=video.bitmap.data[1][(y+video.bitmap.ypos)&0xff][(j+video.bitmap.xpos/8)&0x1f]; | |
| 282 | BlitPlane(&bitmap.pix16(y, x+4), d1, d2); | |
| 283 | BlitPlane(&bitmap.pix16(y, x), d1>>4, d2>>4); | |
| 284 | } | |
| 285 | } | |
| 286 | return 0; | |
| 277 | int x, y, j; | |
| 278 | for (y=0;y<152;y++) { | |
| 279 | for (x=-(video.bitmap.xpos&7), j=0;x<160;x+=8, j++) { | |
| 280 | UINT8 d1=video.bitmap.data[0][(y+video.bitmap.ypos)&0xff][(j+video.bitmap.xpos/8)&0x1f]; | |
| 281 | UINT8 d2=video.bitmap.data[1][(y+video.bitmap.ypos)&0xff][(j+video.bitmap.xpos/8)&0x1f]; | |
| 282 | BlitPlane(&bitmap.pix16(y, x+4), d1, d2); | |
| 283 | BlitPlane(&bitmap.pix16(y, x), d1>>4, d2>>4); | |
| 284 | } | |
| 285 | } | |
| 286 | return 0; | |
| 287 | 287 | } |
| 288 | 288 | |
| 289 | 289 | DRIVER_INIT_MEMBER(gamate_state,gamate) |
| 290 | 290 | { |
| 291 | 291 | memset(&video, 0, sizeof(video));/* memset(m_ram, 0, sizeof(m_ram));*/ |
| 292 | UINT8 *gfx=memregion("gfx1")->base(); | |
| 292 | UINT8 *gfx=memregion("gfx1")->base(); for (int i=0; i<256; i++) gfx[i]=i; | |
| 293 | 293 | timer1 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamate_state::gamate_timer),this)); |
| 294 | 294 | timer2 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamate_state::gamate_timer2),this)); |
| 295 | 295 | } |
| r242703 | r242704 | |
| 298 | 298 | void gamate_state::machine_start() |
| 299 | 299 | { |
| 300 | 300 | if (m_cart->exists()) { |
| 301 | // | |
| 301 | // m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000, 0x6000, READ8_DELEGATE(gamate_state, gamate_cart_protection_r)); | |
| 302 | 302 | membank("bankmulti")->set_base(m_cart->get_rom_base()); |
| 303 | 303 | membank("bank")->set_base(m_cart->get_rom_base()+0x4000); // bankswitched games in reality no offset |
| 304 | 304 | } |
| r242703 | r242704 | |
| 355 | 355 | MCFG_SCREEN_UPDATE_DRIVER(gamate_state, screen_update_gamate) |
| 356 | 356 | MCFG_SCREEN_PALETTE("palette") |
| 357 | 357 | |
| 358 | // | |
| 358 | // MCFG_GFXDECODE_ADD("gfxdecode", "palette", gamate ) | |
| 359 | 359 | MCFG_PALETTE_ADD("palette", ARRAY_LENGTH(gamate_colors)) |
| 360 | // | |
| 360 | // MCFG_PALETTE_INDIRECT_ENTRIES(4) | |
| 361 | 361 | MCFG_PALETTE_INIT_OWNER(gamate_state, gamate) |
| 362 | 362 | MCFG_DEFAULT_LAYOUT(layout_lcd) |
| 363 | 363 | |
| r242703 | r242704 | |
| 371 | 371 | ROM_START(gamate) |
| 372 | 372 | ROM_REGION(0x10000,"maincpu", 0) |
| 373 | 373 | ROM_LOAD("gamate_bios_umc.bin", 0xf000, 0x1000, CRC(07090415) SHA1(ea449dc607601f9a68d855ad6ab53800d2e99297) ) |
| 374 | ||
| 374 | ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF) | |
| 375 | 375 | ROM_END |
| 376 | 376 | |
| 377 | 377 | |
| 378 | 378 | /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */ |
| 379 | 379 | CONS( 19??, gamate, 0, 0, gamate, gamate, gamate_state, gamate, "Bit Corp", "Gamate", GAME_NO_SOUND) |
| 380 | ||
| 381 |
| r242703 | r242704 | |
|---|---|---|
| 1 | 1 | /*************************************************************************** |
| 2 | ||
| 3 | Hewlett-Packard HP16500b Logic Analyzer | |
| 2 | 4 | |
| 3 | Hewlett-Packard HP16500a/b/c Logic Analyzer | |
| 4 | ||
| 5 | These are weird, the "a" has more in common with the older 1650/1651 | |
| 6 | than the 16500b. | |
| 7 | ||
| 8 | 16500a rev 00.00: | |
| 9 | MC68000 @ 10 MHz | |
| 10 | MC68A45 CRTC | |
| 11 | FDC9793 floppy controller (WD1793 type) | |
| 12 | TMS9914A GPIB bus interface | |
| 13 | SCN2661 DUART/timer | |
| 14 | ||
| 15 | IRQ1 = VBL, IRQ2 = 20b007, IRQ3 = ?, IRQ4 = 20d000, IRQ5 = 20d007, | |
| 16 | IRQ6 = ?, IRQ7 = ? | |
| 17 | ||
| 18 | 16500a rev 00.02: | |
| 19 | MC68000 @ 10 MHz | |
| 20 | MC68A45 CRTC | |
| 21 | Z0765A08PSC floppy controller (NEC765 type) | |
| 22 | TMS9914A GPIB bus interface | |
| 23 | SCN2661 DUART/timer | |
| 24 | ||
| 25 | 16500b: | |
| 26 | 5 | MC68EC030 @ 25 MHz |
| 27 | 6 | |
| 28 | 7 | WD37C65C floppy controller (NEC765 type) |
| r242703 | r242704 | |
| 37 | 16 | IRQ 5 = 814a |
| 38 | 17 | IRQ 6 = 35c8 (jump 840120) |
| 39 | 18 | IRQ 7 = 35d4 (jump 840120) |
| 40 | ||
| 41 | 16500c: | |
| 42 | Same as 16500b, but add: | |
| 43 | 53C720 SCSI controller | |
| 44 | DP83934 SONIC ethernet | |
| 45 | ||
| 19 | ||
| 46 | 20 | ****************************************************************************/ |
| 47 | 21 | |
| 48 | 22 | #include "emu.h" |
| 49 | 23 | #include "cpu/m68000/m68000.h" |
| 50 | #include "video/mc6845.h" | |
| 51 | #include "machine/mc68681.h" | |
| 52 | 24 | |
| 53 | #define MAINCPU_TAG "maincpu" | |
| 54 | #define CRTC_TAG "crtc" | |
| 55 | #define SCREEN_TAG "screen" | |
| 56 | #define DUART_TAG "duart" | |
| 57 | ||
| 58 | 25 | class hp16500_state : public driver_device |
| 59 | 26 | { |
| 60 | 27 | public: |
| 61 | 28 | hp16500_state(const machine_config &mconfig, device_type type, const char *tag) |
| 62 | 29 | : driver_device(mconfig, type, tag), |
| 63 | m_maincpu(*this, MAINCPU_TAG) | |
| 64 | { } | |
| 30 | m_maincpu(*this, "maincpu") | |
| 31 | { } | |
| 65 | 32 | |
| 66 | 33 | virtual void video_start(); |
| 67 | 34 | UINT32 screen_update_hp16500(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); |
| 68 | UINT32 screen_update_hp16500a(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); | |
| 69 | 35 | |
| 70 | 36 | required_device<cpu_device> m_maincpu; |
| 71 | 37 | dynamic_array<UINT8> m_vram; |
| r242703 | r242704 | |
| 80 | 46 | DECLARE_WRITE8_MEMBER (val_w); |
| 81 | 47 | DECLARE_READ32_MEMBER(vbl_state_r); |
| 82 | 48 | DECLARE_WRITE32_MEMBER(vbl_ack_w); |
| 83 | DECLARE_READ16_MEMBER(vbl_ack16_r); | |
| 84 | DECLARE_WRITE16_MEMBER(vbl_ack16_w); | |
| 85 | 49 | |
| 86 | DECLARE_WRITE8_MEMBER(pal_ctrl_w); | |
| 87 | DECLARE_WRITE8_MEMBER(pal_r_w); | |
| 88 | DECLARE_WRITE8_MEMBER(pal_g_w); | |
| 89 | DECLARE_WRITE8_MEMBER(pal_b_w); | |
| 90 | ||
| 91 | DECLARE_WRITE16_MEMBER(maskval_w); | |
| 92 | ||
| 93 | DECLARE_WRITE_LINE_MEMBER(vsync_changed); | |
| 94 | MC6845_UPDATE_ROW(crtc_update_row); | |
| 95 | MC6845_UPDATE_ROW(crtc_update_row_1650); | |
| 96 | ||
| 97 | 50 | INTERRUPT_GEN_MEMBER(vblank); |
| 98 | 51 | |
| 99 | 52 | private: |
| r242703 | r242704 | |
| 102 | 55 | |
| 103 | 56 | READ32_MEMBER(hp16500_state::vbl_state_r) |
| 104 | 57 | { |
| 105 | return 0x03000000; | |
| 58 | return 0x03000000; // bit 0 set means the interrupt handler advances the pSOS tick counter. | |
| 106 | 59 | } |
| 107 | 60 | |
| 108 | 61 | WRITE32_MEMBER(hp16500_state::vbl_ack_w) |
| r242703 | r242704 | |
| 110 | 63 | m_maincpu->set_input_line(M68K_IRQ_1, CLEAR_LINE); |
| 111 | 64 | } |
| 112 | 65 | |
| 113 | READ16_MEMBER(hp16500_state::vbl_ack16_r) | |
| 114 | { | |
| 115 | m_maincpu->set_input_line(M68K_IRQ_1, CLEAR_LINE); | |
| 116 | return 0; | |
| 117 | } | |
| 118 | ||
| 119 | WRITE16_MEMBER(hp16500_state::vbl_ack16_w) | |
| 120 | { | |
| 121 | m_maincpu->set_input_line(M68K_IRQ_1, CLEAR_LINE); | |
| 122 | } | |
| 123 | ||
| 124 | WRITE_LINE_MEMBER( hp16500_state::vsync_changed ) | |
| 125 | { | |
| 126 | if (state) | |
| 127 | { | |
| 128 | m_maincpu->set_input_line(M68K_IRQ_1, ASSERT_LINE); | |
| 129 | } | |
| 130 | } | |
| 131 | ||
| 132 | MC6845_UPDATE_ROW( hp16500_state::crtc_update_row ) | |
| 133 | { | |
| 134 | UINT32 *p = &bitmap.pix32(y); | |
| 135 | int i, pos; | |
| 136 | ||
| 137 | pos = y * 144; | |
| 138 | ||
| 139 | for (i = 0; i < x_count; i++) | |
| 140 | { | |
| 141 | *p++ = m_palette[m_vram[pos+0x00000]]; | |
| 142 | *p++ = m_palette[m_vram[pos+0x10000]]; | |
| 143 | *p++ = m_palette[m_vram[pos+0x20000]]; | |
| 144 | *p++ = m_palette[m_vram[pos+0x30000]]; | |
| 145 | pos++; | |
| 146 | *p++ = m_palette[m_vram[pos+0x00000]]; | |
| 147 | *p++ = m_palette[m_vram[pos+0x10000]]; | |
| 148 | *p++ = m_palette[m_vram[pos+0x20000]]; | |
| 149 | *p++ = m_palette[m_vram[pos+0x30000]]; | |
| 150 | pos++; | |
| 151 | } | |
| 152 | } | |
| 153 | ||
| 154 | MC6845_UPDATE_ROW( hp16500_state::crtc_update_row_1650 ) | |
| 155 | { | |
| 156 | UINT32 *p = &bitmap.pix32(y); | |
| 157 | int i, pos; | |
| 158 | ||
| 159 | pos = y * 148; | |
| 160 | ||
| 161 | for (i = 0; i < x_count; i++) | |
| 162 | { | |
| 163 | *p++ = m_palette[m_vram[pos+0x00000]]; | |
| 164 | *p++ = m_palette[m_vram[pos+0x10000]]; | |
| 165 | *p++ = m_palette[m_vram[pos+0x20000]]; | |
| 166 | *p++ = m_palette[m_vram[pos+0x30000]]; | |
| 167 | pos++; | |
| 168 | *p++ = m_palette[m_vram[pos+0x00000]]; | |
| 169 | *p++ = m_palette[m_vram[pos+0x10000]]; | |
| 170 | *p++ = m_palette[m_vram[pos+0x20000]]; | |
| 171 | *p++ = m_palette[m_vram[pos+0x30000]]; | |
| 172 | pos++; | |
| 173 | } | |
| 174 | } | |
| 175 | ||
| 176 | WRITE8_MEMBER(hp16500_state::pal_ctrl_w) | |
| 177 | { | |
| 178 | m_clutoffs = data & 0xf; | |
| 179 | } | |
| 180 | ||
| 181 | ||
| 182 | WRITE8_MEMBER(hp16500_state::pal_r_w) | |
| 183 | { | |
| 184 | m_colors[0] = (data<<4); | |
| 185 | m_palette[m_clutoffs] = rgb_t(m_colors[0], m_colors[1], m_colors[2]); | |
| 186 | } | |
| 187 | ||
| 188 | WRITE8_MEMBER(hp16500_state::pal_g_w) | |
| 189 | { | |
| 190 | m_colors[1] = (data<<4); | |
| 191 | m_palette[m_clutoffs] = rgb_t(m_colors[0], m_colors[1], m_colors[2]); | |
| 192 | } | |
| 193 | ||
| 194 | WRITE8_MEMBER(hp16500_state::pal_b_w) | |
| 195 | { | |
| 196 | m_colors[2] = (data<<4); | |
| 197 | m_palette[m_clutoffs] = rgb_t(m_colors[0], m_colors[1], m_colors[2]); | |
| 198 | } | |
| 199 | ||
| 200 | WRITE16_MEMBER(hp16500_state::maskval_w) | |
| 201 | { | |
| 202 | // by analogy with the string printer code from the 16500b, which | |
| 203 | // appears to be a direct port... | |
| 204 | m_val = ((data>>8) & 0xff) ^ 0xff; | |
| 205 | m_mask = (data & 0xff) ^ 0xff; | |
| 206 | } | |
| 207 | ||
| 208 | static ADDRESS_MAP_START(hp1650_map, AS_PROGRAM, 16, hp16500_state) | |
| 209 | AM_RANGE(0x000000, 0x00ffff) AM_ROM AM_REGION("bios", 0) | |
| 210 | ||
| 211 | AM_RANGE(0x201000, 0x201001) AM_WRITE(maskval_w) | |
| 212 | ||
| 213 | AM_RANGE(0x204000, 0x204001) AM_WRITE8(pal_ctrl_w, 0x00ff) | |
| 214 | AM_RANGE(0x205000, 0x205001) AM_WRITE8(pal_r_w, 0x00ff) | |
| 215 | AM_RANGE(0x206000, 0x206001) AM_WRITE8(pal_g_w, 0x00ff) | |
| 216 | AM_RANGE(0x207000, 0x207001) AM_WRITE8(pal_b_w, 0x00ff) | |
| 217 | ||
| 218 | AM_RANGE(0x20c000, 0x20c001) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, status_r, address_w, 0x00ff) | |
| 219 | AM_RANGE(0x20c002, 0x20c003) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, register_r, register_w, 0x00ff) | |
| 220 | ||
| 221 | AM_RANGE(0x20e000, 0x20e001) AM_READWRITE(vbl_ack16_r, vbl_ack16_w) | |
| 222 | ||
| 223 | AM_RANGE(0x2050fe, 0x2050ff) AM_NOP | |
| 224 | AM_RANGE(0x206000, 0x206001) AM_NOP | |
| 225 | AM_RANGE(0x20f000, 0x20f001) AM_NOP | |
| 226 | ||
| 227 | AM_RANGE(0x600000, 0x61ffff) AM_WRITE(vram_w) | |
| 228 | AM_RANGE(0x600000, 0x67ffff) AM_READ8(vram_r, 0x00ff) | |
| 229 | ||
| 230 | AM_RANGE(0x900000, 0x9fffff) AM_RAM | |
| 231 | ADDRESS_MAP_END | |
| 232 | ||
| 233 | // like 1650 but moves main RAM to match 16500a | |
| 234 | static ADDRESS_MAP_START(hp1651_map, AS_PROGRAM, 16, hp16500_state) | |
| 235 | AM_RANGE(0x000000, 0x00ffff) AM_ROM AM_REGION("bios", 0) | |
| 236 | ||
| 237 | AM_RANGE(0x201000, 0x201001) AM_WRITE(maskval_w) | |
| 238 | ||
| 239 | AM_RANGE(0x204000, 0x204001) AM_WRITE8(pal_ctrl_w, 0x00ff) | |
| 240 | AM_RANGE(0x205000, 0x205001) AM_WRITE8(pal_r_w, 0x00ff) | |
| 241 | AM_RANGE(0x206000, 0x206001) AM_WRITE8(pal_g_w, 0x00ff) | |
| 242 | AM_RANGE(0x207000, 0x207001) AM_WRITE8(pal_b_w, 0x00ff) | |
| 243 | ||
| 244 | AM_RANGE(0x20c000, 0x20c001) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, status_r, address_w, 0x00ff) | |
| 245 | AM_RANGE(0x20c002, 0x20c003) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, register_r, register_w, 0x00ff) | |
| 246 | ||
| 247 | AM_RANGE(0x20e000, 0x20e001) AM_READWRITE(vbl_ack16_r, vbl_ack16_w) | |
| 248 | ||
| 249 | AM_RANGE(0x2050fe, 0x2050ff) AM_NOP | |
| 250 | AM_RANGE(0x206000, 0x206001) AM_NOP | |
| 251 | AM_RANGE(0x20f000, 0x20f001) AM_NOP | |
| 252 | ||
| 253 | AM_RANGE(0x600000, 0x61ffff) AM_WRITE(vram_w) | |
| 254 | AM_RANGE(0x600000, 0x67ffff) AM_READ8(vram_r, 0x00ff) | |
| 255 | ||
| 256 | AM_RANGE(0x980000, 0xa7ffff) AM_RAM | |
| 257 | ADDRESS_MAP_END | |
| 258 | ||
| 259 | static ADDRESS_MAP_START(hp16500a_map, AS_PROGRAM, 16, hp16500_state) | |
| 260 | AM_RANGE(0x000000, 0x00ffff) AM_ROM AM_REGION("bios", 0) | |
| 261 | ||
| 262 | AM_RANGE(0x201000, 0x201001) AM_WRITE(maskval_w) | |
| 263 | ||
| 264 | AM_RANGE(0x204000, 0x204001) AM_WRITE8(pal_ctrl_w, 0x00ff) | |
| 265 | AM_RANGE(0x205000, 0x205001) AM_WRITE8(pal_r_w, 0x00ff) | |
| 266 | AM_RANGE(0x206000, 0x206001) AM_WRITE8(pal_g_w, 0x00ff) | |
| 267 | AM_RANGE(0x207000, 0x207001) AM_WRITE8(pal_b_w, 0x00ff) | |
| 268 | ||
| 269 | AM_RANGE(0x20c000, 0x20c001) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, status_r, address_w, 0x00ff) | |
| 270 | AM_RANGE(0x20c002, 0x20c003) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, register_r, register_w, 0x00ff) | |
| 271 | ||
| 272 | AM_RANGE(0x20e000, 0x20e001) AM_READWRITE(vbl_ack16_r, vbl_ack16_w) | |
| 273 | ||
| 274 | AM_RANGE(0x600000, 0x61ffff) AM_WRITE(vram_w) | |
| 275 | AM_RANGE(0x600000, 0x67ffff) AM_READ8(vram_r, 0x00ff) | |
| 276 | ||
| 277 | AM_RANGE(0x980000, 0xa7ffff) AM_RAM | |
| 278 | ADDRESS_MAP_END | |
| 279 | ||
| 280 | UINT32 hp16500_state::screen_update_hp16500a(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) | |
| 281 | { | |
| 282 | return 0; | |
| 283 | } | |
| 284 | ||
| 285 | 66 | static ADDRESS_MAP_START(hp16500_map, AS_PROGRAM, 32, hp16500_state) |
| 286 | 67 | AM_RANGE(0x00000000, 0x0001ffff) AM_ROM AM_REGION("bios", 0) |
| 287 | 68 | AM_RANGE(0x0020f000, 0x0020f003) AM_WRITE(palette_w) |
| r242703 | r242704 | |
| 290 | 71 | AM_RANGE(0x00203000, 0x00203003) AM_WRITE(vbl_ack_w) |
| 291 | 72 | AM_RANGE(0x00209800, 0x00209803) AM_READ(vbl_state_r) |
| 292 | 73 | |
| 293 | AM_RANGE(0x0020b800, 0x0020b8ff) AM_RAM | |
| 74 | AM_RANGE(0x0020b800, 0x0020b8ff) AM_RAM // system ram test is really strange. | |
| 294 | 75 | |
| 295 | 76 | AM_RANGE(0x00600000, 0x0061ffff) AM_WRITE16(vram_w, 0xffffffff) |
| 296 | 77 | AM_RANGE(0x00600000, 0x0067ffff) AM_READ8 (vram_r, 0x00ff00ff) |
| r242703 | r242704 | |
| 393 | 174 | return 0; |
| 394 | 175 | } |
| 395 | 176 | |
| 396 | static MACHINE_CONFIG_START( hp1650, hp16500_state ) | |
| 397 | /* basic machine hardware */ | |
| 398 | MCFG_CPU_ADD(MAINCPU_TAG, M68000, 10000000) | |
| 399 | MCFG_CPU_PROGRAM_MAP(hp1650_map) | |
| 400 | ||
| 401 | MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) | |
| 402 | MCFG_SCREEN_RAW_PARAMS(25000000, 0x330, 0, 0x250, 0x198, 0, 0x180 ) | |
| 403 | MCFG_SCREEN_UPDATE_DEVICE( CRTC_TAG, mc6845_device, screen_update ) | |
| 404 | ||
| 405 | MCFG_MC6845_ADD(CRTC_TAG, MC6845, SCREEN_TAG, 25000000/9) | |
| 406 | MCFG_MC6845_SHOW_BORDER_AREA(false) | |
| 407 | MCFG_MC6845_CHAR_WIDTH(8) | |
| 408 | MCFG_MC6845_UPDATE_ROW_CB(hp16500_state, crtc_update_row_1650) | |
| 409 | MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(hp16500_state, vsync_changed)) | |
| 410 | ||
| 411 | MCFG_DEVICE_ADD(DUART_TAG, MC68681, 20000000) | |
| 412 | ||
| 413 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") | |
| 414 | MACHINE_CONFIG_END | |
| 415 | ||
| 416 | static MACHINE_CONFIG_START( hp1651, hp16500_state ) | |
| 417 | /* basic machine hardware */ | |
| 418 | MCFG_CPU_ADD(MAINCPU_TAG, M68000, 10000000) | |
| 419 | MCFG_CPU_PROGRAM_MAP(hp1651_map) | |
| 420 | ||
| 421 | MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) | |
| 422 | MCFG_SCREEN_RAW_PARAMS(25000000, 0x330, 0, 0x250, 0x198, 0, 0x180 ) | |
| 423 | MCFG_SCREEN_UPDATE_DEVICE( CRTC_TAG, mc6845_device, screen_update ) | |
| 424 | ||
| 425 | MCFG_MC6845_ADD(CRTC_TAG, MC6845, SCREEN_TAG, 25000000/9) | |
| 426 | MCFG_MC6845_SHOW_BORDER_AREA(false) | |
| 427 | MCFG_MC6845_CHAR_WIDTH(8) | |
| 428 | MCFG_MC6845_UPDATE_ROW_CB(hp16500_state, crtc_update_row_1650) | |
| 429 | MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(hp16500_state, vsync_changed)) | |
| 430 | ||
| 431 | MCFG_DEVICE_ADD(DUART_TAG, MC68681, 20000000) | |
| 432 | ||
| 433 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") | |
| 434 | MACHINE_CONFIG_END | |
| 435 | ||
| 436 | static MACHINE_CONFIG_START( hp16500a, hp16500_state ) | |
| 437 | /* basic machine hardware */ | |
| 438 | MCFG_CPU_ADD(MAINCPU_TAG, M68000, 10000000) | |
| 439 | MCFG_CPU_PROGRAM_MAP(hp16500a_map) | |
| 440 | ||
| 441 | MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) | |
| 442 | MCFG_SCREEN_RAW_PARAMS(25000000, 0x320, 0, 0x240, 0x19c, 0, 0x170 ) | |
| 443 | MCFG_SCREEN_UPDATE_DEVICE( CRTC_TAG, mc6845_device, screen_update ) | |
| 444 | ||
| 445 | MCFG_MC6845_ADD(CRTC_TAG, MC6845, SCREEN_TAG, 25000000/9) | |
| 446 | MCFG_MC6845_SHOW_BORDER_AREA(false) | |
| 447 | MCFG_MC6845_CHAR_WIDTH(8) | |
| 448 | MCFG_MC6845_UPDATE_ROW_CB(hp16500_state, crtc_update_row) | |
| 449 | MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(hp16500_state, vsync_changed)) | |
| 450 | ||
| 451 | MCFG_DEVICE_ADD(DUART_TAG, MC68681, 20000000) | |
| 452 | ||
| 453 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") | |
| 454 | MACHINE_CONFIG_END | |
| 455 | ||
| 456 | 177 | static MACHINE_CONFIG_START( hp16500, hp16500_state ) |
| 457 | 178 | /* basic machine hardware */ |
| 458 | MCFG_CPU_ADD( | |
| 179 | MCFG_CPU_ADD("maincpu", M68EC030, 25000000) | |
| 459 | 180 | MCFG_CPU_PROGRAM_MAP(hp16500_map) |
| 460 | MCFG_CPU_VBLANK_INT_DRIVER( | |
| 181 | MCFG_CPU_VBLANK_INT_DRIVER("screen", hp16500_state, vblank) | |
| 461 | 182 | |
| 462 | MCFG_SCREEN_ADD( | |
| 183 | MCFG_SCREEN_ADD("screen", RASTER) | |
| 463 | 184 | MCFG_SCREEN_UPDATE_DRIVER(hp16500_state, screen_update_hp16500) |
| 464 | 185 | MCFG_SCREEN_SIZE(576,384) |
| 465 | 186 | MCFG_SCREEN_VISIBLE_AREA(0, 576-1, 0, 384-1) |
| 466 | 187 | MCFG_SCREEN_REFRESH_RATE(60) |
| 467 | 188 | |
| 468 | MCFG_DEVICE_ADD(DUART_TAG, MC68681, 20000000) | |
| 469 | ||
| 470 | 189 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 471 | 190 | MACHINE_CONFIG_END |
| 472 | 191 | |
| 473 | 192 | static INPUT_PORTS_START( hp16500 ) |
| 474 | 193 | INPUT_PORTS_END |
| 475 | 194 | |
| 476 | ROM_START( hp1650b ) | |
| 477 | ROM_REGION16_BE(0x20000, "bios", 0) | |
| 478 | ROM_LOAD16_BYTE( "la1.bin", 0x000000, 0x008000, CRC(7c60e334) SHA1(c3661e4bb58e0951e9c13208b4991f5d9dda633b) ) | |
| 479 | ROM_LOAD16_BYTE( "la2.bin", 0x000001, 0x008000, CRC(b0c6fe60) SHA1(a77b2e7098f26af93b0946abe6e89711b3332210) ) | |
| 480 | ROM_END | |
| 481 | ||
| 482 | ROM_START( hp1651b ) | |
| 483 | ROM_REGION16_BE(0x20000, "bios", 0) | |
| 484 | ROM_LOAD16_BYTE( "u102.bin", 0x000000, 0x008000, CRC(d7e1b091) SHA1(af813cc7ae748aedf1b1d9d522ee2154961315c2) ) | |
| 485 | ROM_LOAD16_BYTE( "u103.bin", 0x000001, 0x008000, CRC(f32a37c7) SHA1(8addda59923f64fd9b7e909eb0e3a17cc02bb70e) ) | |
| 486 | ROM_END | |
| 487 | ||
| 488 | ROM_START( hp165ka0 ) | |
| 489 | ROM_REGION16_BE(0x20000, "bios", 0) | |
| 490 | ROM_LOAD16_BYTE( "16500-80002.bin", 0x000000, 0x008000, CRC(0324b75a) SHA1(837855fce9288139226c914cc0c43061e25b57d2) ) | |
| 491 | ROM_LOAD16_BYTE( "16500-80001.bin", 0x000001, 0x008000, CRC(362c8cbf) SHA1(812b79d1a31d09ec632a6842b11548168d82b5e7) ) | |
| 492 | ROM_END | |
| 493 | ||
| 494 | 195 | ROM_START( hp16500b ) |
| 495 | 196 | ROM_REGION32_BE(0x20000, "bios", 0) |
| 496 | ROM_LOAD32_BYTE( "16500-80014.bin", 0x000000, 0x008000, CRC(35187716) SHA1(82067737892ecd356a5454a43d9ce9b38ac2397f) ) | |
| 497 | ROM_LOAD32_BYTE( "16500-80015.bin", 0x000001, 0x008000, CRC(d8d26c1c) SHA1(b5b956c17c9d6e54519a686b5e4aa733b266bf6f) ) | |
| 498 | ROM_LOAD32_BYTE( "16500-80016.bin", 0x000002, 0x008000, CRC(61457b39) SHA1(f209315ec22a8ee9d44a0ec009b1afb47794bece) ) | |
| 499 | ROM_LOAD32_BYTE( "16500-80017.bin", 0x000003, 0x008000, CRC(e0b1096b) SHA1(426bb9a4756d8087bded4f6b61365d733ffbb09a) ) | |
| 197 | ROM_LOAD32_BYTE( "16500-80014.bin", 0x000000, 0x008000, CRC(35187716) SHA1(82067737892ecd356a5454a43d9ce9b38ac2397f) ) | |
| 198 | ROM_LOAD32_BYTE( "16500-80015.bin", 0x000001, 0x008000, CRC(d8d26c1c) SHA1(b5b956c17c9d6e54519a686b5e4aa733b266bf6f) ) | |
| 199 | ROM_LOAD32_BYTE( "16500-80016.bin", 0x000002, 0x008000, CRC(61457b39) SHA1(f209315ec22a8ee9d44a0ec009b1afb47794bece) ) | |
| 200 | ROM_LOAD32_BYTE( "16500-80017.bin", 0x000003, 0x008000, CRC(e0b1096b) SHA1(426bb9a4756d8087bded4f6b61365d733ffbb09a) ) | |
| 500 | 201 | ROM_END |
| 501 | 202 | |
| 502 | COMP( 1989, hp1650b, 0, 0, hp1650, hp16500, driver_device, 0, "Hewlett Packard", "HP 1650b", GAME_NOT_WORKING|GAME_NO_SOUND) | |
| 503 | COMP( 1989, hp1651b, 0, 0, hp1651, hp16500, driver_device, 0, "Hewlett Packard", "HP 1651b", GAME_NOT_WORKING|GAME_NO_SOUND) | |
| 504 | COMP( 1991, hp165ka0, 0, 0, hp16500a, hp16500, driver_device, 0, "Hewlett Packard", "HP 16500a", GAME_NOT_WORKING|GAME_NO_SOUND) | |
| 505 | COMP( 1991, hp16500b, 0, 0, hp16500, hp16500, driver_device, 0, "Hewlett Packard", "HP 16500b", GAME_NOT_WORKING|GAME_NO_SOUND) | |
| 203 | COMP( 1994, hp16500b, 0, 0, hp16500, hp16500, driver_device, 0, "Hewlett Packard", "HP 16500b", GAME_NOT_WORKING|GAME_NO_SOUND) | |
| 204 |
| r242703 | r242704 | |
|---|---|---|
| 1 | 1 | // license:BSD-3-Clause |
| 2 | 2 | // copyright-holders:R. Belmont |
| 3 | 3 | /*************************************************************************** |
| 4 | ||
| 4 | ||
| 5 | 5 | hp9k3xx.c: preliminary driver for HP9000 300 Series (aka HP9000/3xx) |
| 6 | ||
| 6 | ||
| 7 | 7 | Currently supporting: |
| 8 | ||
| 9 | 310: | |
| 10 | MC68010 CPU @ 10 MHz | |
| 11 | HP custom MMU | |
| 12 | ||
| 8 | ||
| 13 | 9 | 320: |
| 14 | 10 | MC68020 CPU @ 16.67 MHz |
| 15 | 11 | HP custom MMU |
| 16 | 12 | MC68881 FPU |
| 17 | ||
| 13 | ||
| 18 | 14 | 330: |
| 19 | 15 | MC68020 CPU @ 16.67 MHz |
| 20 | 16 | MC68851 MMU |
| 21 | 17 | MC68881 FPU |
| 22 | ||
| 23 | 340: | |
| 24 | MC68030 CPU @ 16.67 MHz w/built-in MMU | |
| 25 | MC68881 FPU | |
| 26 | ||
| 27 | 380: | |
| 28 | MC68040 CPU @ 25 MHz w/built-in MMU and FPU | |
| 29 | ||
| 30 | 382: | |
| 31 | MC68040 CPU @ 25? MHz w/built-in MMU and FPU | |
| 32 | Built-in VGA compatible video | |
| 33 | ||
| 18 | ||
| 34 | 19 | All models have an MC6840 PIT on IRQ6 clocked at 250 kHz. |
| 35 | ||
| 20 | ||
| 36 | 21 | TODO: |
| 37 | 22 | BBCADDR 0x420000 |
| 38 | 23 | RTC_DATA: 0x420001 |
| r242703 | r242704 | |
| 42 | 27 | KBDNMIST: 0x478005 |
| 43 | 28 | DMA: 0x500000 |
| 44 | 29 | FRAMEBUF: 0x560000 |
| 45 | ||
| 30 | ||
| 46 | 31 | 6840: 0x5F8001/3/5/7/9, IRQ 6 |
| 47 | ||
| 32 | ||
| 48 | 33 | ****************************************************************************/ |
| 49 | 34 | |
| 50 | 35 | #include "emu.h" |
| r242703 | r242704 | |
| 60 | 45 | hp9k3xx_state(const machine_config &mconfig, device_type type, const char *tag) |
| 61 | 46 | : driver_device(mconfig, type, tag), |
| 62 | 47 | m_maincpu(*this, MAINCPU_TAG), |
| 63 | m_vram16(*this, "vram16"), | |
| 64 | 48 | m_vram(*this, "vram") |
| 65 | 49 | { } |
| 66 | 50 | |
| 67 | 51 | required_device<cpu_device> m_maincpu; |
| 68 | 52 | virtual void machine_reset(); |
| 69 | 53 | |
| 70 | optional_shared_ptr<UINT16> m_vram16; | |
| 71 | 54 | optional_shared_ptr<UINT32> m_vram; |
| 72 | 55 | |
| 73 | 56 | UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); |
| 74 | 57 | UINT32 hp98544_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); |
| 75 | UINT32 hp98544_16_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); | |
| 76 | 58 | |
| 77 | DECLARE_READ16_MEMBER(buserror16_r); | |
| 78 | DECLARE_WRITE16_MEMBER(buserror16_w); | |
| 79 | 59 | DECLARE_READ32_MEMBER(buserror_r); |
| 80 | 60 | DECLARE_WRITE32_MEMBER(buserror_w); |
| 81 | 61 | |
| 82 | 62 | private: |
| 83 | bool m_in_buserr; | |
| 84 | UINT32 m_last_buserr_pc; | |
| 85 | 63 | }; |
| 86 | 64 | |
| 87 | UINT32 hp9k3xx_state::hp98544_16_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) | |
| 88 | { | |
| 89 | UINT32 *scanline; | |
| 90 | int x, y; | |
| 91 | UINT16 pixels; | |
| 92 | UINT32 m_palette[2] = { 0x00000000, 0xffffffff }; | |
| 93 | ||
| 94 | for (y = 0; y < 768; y++) | |
| 95 | { | |
| 96 | scanline = &bitmap.pix32(y); | |
| 97 | for (x = 0; x < 1024/2; x++) | |
| 98 | { | |
| 99 | pixels = m_vram16[(y * 512) + x]; | |
| 100 | ||
| 101 | *scanline++ = m_palette[(pixels>>8) & 1]; | |
| 102 | *scanline++ = m_palette[(pixels & 1)]; | |
| 103 | } | |
| 104 | } | |
| 105 | ||
| 106 | return 0; | |
| 107 | } | |
| 108 | ||
| 109 | 65 | UINT32 hp9k3xx_state::hp98544_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| 110 | 66 | { |
| 111 | 67 | UINT32 *scanline; |
| r242703 | r242704 | |
| 134 | 90 | static ADDRESS_MAP_START(hp9k3xx_common, AS_PROGRAM, 32, hp9k3xx_state) |
| 135 | 91 | AM_RANGE(0x00000000, 0x0001ffff) AM_ROM AM_REGION("maincpu",0) AM_WRITENOP // writes to 1fffc are the LED |
| 136 | 92 | |
| 137 | AM_RANGE(0x00500000, 0x0050000f) AM_RAM // this is sufficient to pass the DMA test for now | |
| 93 | AM_RANGE(0x00200000, 0x002fffff) AM_RAM AM_SHARE("vram") // 98544 mono framebuffer | |
| 94 | AM_RANGE(0x00560000, 0x00563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM | |
| 138 | 95 | |
| 139 | 96 | AM_RANGE(0x00510000, 0x00510003) AM_READWRITE(buserror_r, buserror_w) // no "Alpha display" |
| 140 | 97 | AM_RANGE(0x00538000, 0x00538003) AM_READWRITE(buserror_r, buserror_w) // no "Graphics" |
| r242703 | r242704 | |
| 142 | 99 | AM_RANGE(0x005f8000, 0x005f800f) AM_DEVREADWRITE8(PTM6840_TAG, ptm6840_device, read, write, 0x00ff00ff) |
| 143 | 100 | ADDRESS_MAP_END |
| 144 | 101 | |
| 145 | // 9000/310 - has onboard video that the graphics card used in other 3xxes conflicts with | |
| 146 | static ADDRESS_MAP_START(hp9k310_map, AS_PROGRAM, 16, hp9k3xx_state) | |
| 147 | AM_RANGE(0x000000, 0x01ffff) AM_ROM AM_REGION("maincpu",0) AM_WRITENOP // writes to 1fffc are the LED | |
| 148 | ||
| 149 | AM_RANGE(0x510000, 0x510003) AM_READWRITE(buserror16_r, buserror16_w) // no "Alpha display" | |
| 150 | AM_RANGE(0x538000, 0x538003) AM_READWRITE(buserror16_r, buserror16_w) // no "Graphics" | |
| 151 | AM_RANGE(0x5c0000, 0x5c0003) AM_READWRITE(buserror16_r, buserror16_w) // no add-on FP coprocessor | |
| 152 | ||
| 153 | AM_RANGE(0x5f8000, 0x5f800f) AM_DEVREADWRITE8(PTM6840_TAG, ptm6840_device, read, write, 0x00ff) | |
| 154 | ||
| 155 | AM_RANGE(0x200000, 0x2fffff) AM_RAM AM_SHARE("vram16") // 98544 mono framebuffer | |
| 156 | AM_RANGE(0x560000, 0x563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM | |
| 157 | ||
| 158 | AM_RANGE(0x700000, 0x7fffff) AM_READWRITE(buserror16_r, buserror16_w) | |
| 159 | AM_RANGE(0x800000, 0xffffff) AM_RAM | |
| 160 | ADDRESS_MAP_END | |
| 161 | ||
| 162 | 102 | // 9000/320 |
| 163 | 103 | static ADDRESS_MAP_START(hp9k320_map, AS_PROGRAM, 32, hp9k3xx_state) |
| 164 | AM_RANGE(0x00200000, 0x002fffff) AM_RAM AM_SHARE("vram") // 98544 mono framebuffer | |
| 165 | AM_RANGE(0x00560000, 0x00563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM | |
| 166 | ||
| 167 | 104 | AM_RANGE(0xffe00000, 0xffefffff) AM_READWRITE(buserror_r, buserror_w) |
| 168 | 105 | AM_RANGE(0xfff00000, 0xffffffff) AM_RAM |
| 169 | 106 | |
| 170 | 107 | AM_IMPORT_FROM(hp9k3xx_common) |
| 171 | 108 | ADDRESS_MAP_END |
| 172 | 109 | |
| 173 | // 9000/330 and 9000/340 | |
| 174 | static ADDRESS_MAP_START(hp9k330_map, AS_PROGRAM, 32, hp9k3xx_state) | |
| 175 | AM_RANGE(0x00200000, 0x002fffff) AM_RAM AM_SHARE("vram") // 98544 mono framebuffer | |
| 176 | AM_RANGE(0x00560000, 0x00563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM | |
| 177 | 110 | |
| 111 | static ADDRESS_MAP_START(hp9k330_map, AS_PROGRAM, 32, hp9k3xx_state) | |
| 178 | 112 | AM_RANGE(0xffb00000, 0xffbfffff) AM_READWRITE(buserror_r, buserror_w) |
| 179 | 113 | AM_RANGE(0xffc00000, 0xffffffff) AM_RAM |
| 180 | 114 | |
| 181 | 115 | AM_IMPORT_FROM(hp9k3xx_common) |
| 182 | 116 | ADDRESS_MAP_END |
| 183 | 117 | |
| 184 | // 9000/370 - 8 MB RAM standard | |
| 185 | static ADDRESS_MAP_START(hp9k370_map, AS_PROGRAM, 32, hp9k3xx_state) | |
| 186 | AM_RANGE(0x00200000, 0x002fffff) AM_RAM AM_SHARE("vram") // 98544 mono framebuffer | |
| 187 | AM_RANGE(0x00560000, 0x00563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM | |
| 188 | ||
| 189 | AM_RANGE(0xff700000, 0xff7fffff) AM_READWRITE(buserror_r, buserror_w) | |
| 190 | AM_RANGE(0xff800000, 0xffffffff) AM_RAM | |
| 191 | ||
| 192 | AM_IMPORT_FROM(hp9k3xx_common) | |
| 193 | ADDRESS_MAP_END | |
| 194 | ||
| 195 | // 9000/382 - onboard VGA compatible video (where?) | |
| 196 | static ADDRESS_MAP_START(hp9k382_map, AS_PROGRAM, 32, hp9k3xx_state) | |
| 197 | AM_RANGE(0xffb00000, 0xffbfffff) AM_READWRITE(buserror_r, buserror_w) | |
| 198 | AM_RANGE(0xffc00000, 0xffffffff) AM_RAM | |
| 199 | ||
| 200 | AM_IMPORT_FROM(hp9k3xx_common) | |
| 201 | ADDRESS_MAP_END | |
| 202 | ||
| 203 | 118 | UINT32 hp9k3xx_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| 204 | 119 | { |
| 205 | 120 | return 0; |
| r242703 | r242704 | |
| 212 | 127 | |
| 213 | 128 | void hp9k3xx_state::machine_reset() |
| 214 | 129 | { |
| 215 | m_in_buserr = false; | |
| 216 | m_last_buserr_pc = 0; | |
| 217 | 130 | } |
| 218 | 131 | |
| 219 | READ16_MEMBER(hp9k3xx_state::buserror16_r) | |
| 220 | { | |
| 221 | if (m_last_buserr_pc == space.device().safe_pc()) | |
| 222 | { | |
| 223 | return 0; | |
| 224 | } | |
| 225 | ||
| 226 | if (!m_in_buserr) | |
| 227 | { | |
| 228 | m_in_buserr = true; | |
| 229 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); | |
| 230 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); | |
| 231 | m_in_buserr = false; | |
| 232 | m_last_buserr_pc = space.device().safe_pc(); | |
| 233 | } | |
| 234 | return 0; | |
| 235 | } | |
| 236 | ||
| 237 | WRITE16_MEMBER(hp9k3xx_state::buserror16_w) | |
| 238 | { | |
| 239 | if (m_last_buserr_pc == space.device().safe_pc()) | |
| 240 | { | |
| 241 | return; | |
| 242 | } | |
| 243 | ||
| 244 | if (!m_in_buserr) | |
| 245 | { | |
| 246 | m_in_buserr = true; | |
| 247 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); | |
| 248 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); | |
| 249 | m_in_buserr = false; | |
| 250 | m_last_buserr_pc = space.device().safe_pc(); | |
| 251 | } | |
| 252 | } | |
| 253 | ||
| 254 | 132 | READ32_MEMBER(hp9k3xx_state::buserror_r) |
| 255 | 133 | { |
| 256 | if (m_last_buserr_pc == space.device().safe_pc()) | |
| 257 | { | |
| 258 | return 0; | |
| 259 | } | |
| 260 | ||
| 261 | if (!m_in_buserr) | |
| 262 | { | |
| 263 | m_in_buserr = true; | |
| 264 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); | |
| 265 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); | |
| 266 | m_in_buserr = false; | |
| 267 | m_last_buserr_pc = space.device().safe_pc(); | |
| 268 | } | |
| 134 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); | |
| 135 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); | |
| 269 | 136 | return 0; |
| 270 | 137 | } |
| 271 | 138 | |
| 272 | 139 | WRITE32_MEMBER(hp9k3xx_state::buserror_w) |
| 273 | 140 | { |
| 274 | if (m_last_buserr_pc == space.device().safe_pc()) | |
| 275 | { | |
| 276 | return; | |
| 277 | } | |
| 278 | ||
| 279 | if (!m_in_buserr) | |
| 280 | { | |
| 281 | m_in_buserr = true; | |
| 282 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); | |
| 283 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); | |
| 284 | m_in_buserr = false; | |
| 285 | m_last_buserr_pc = space.device().safe_pc(); | |
| 286 | } | |
| 141 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); | |
| 142 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); | |
| 287 | 143 | } |
| 288 | 144 | |
| 289 | static MACHINE_CONFIG_START( hp9k310, hp9k3xx_state ) | |
| 290 | /* basic machine hardware */ | |
| 291 | MCFG_CPU_ADD(MAINCPU_TAG, M68010, 10000000) | |
| 292 | MCFG_CPU_PROGRAM_MAP(hp9k310_map) | |
| 293 | ||
| 294 | MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 0) | |
| 295 | MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840 | |
| 296 | MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f) | |
| 297 | ||
| 298 | MCFG_SCREEN_ADD( "screen", RASTER) | |
| 299 | MCFG_SCREEN_UPDATE_DRIVER(hp9k3xx_state, hp98544_16_update) | |
| 300 | MCFG_SCREEN_SIZE(1024,768) | |
| 301 | MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1) | |
| 302 | MCFG_SCREEN_REFRESH_RATE(70) | |
| 303 | MACHINE_CONFIG_END | |
| 304 | ||
| 305 | 145 | static MACHINE_CONFIG_START( hp9k320, hp9k3xx_state ) |
| 306 | 146 | /* basic machine hardware */ |
| 307 | MCFG_CPU_ADD(MAINCPU_TAG, M68020 | |
| 147 | MCFG_CPU_ADD(MAINCPU_TAG, M68020, 16670000) | |
| 308 | 148 | MCFG_CPU_PROGRAM_MAP(hp9k320_map) |
| 309 | 149 | |
| 310 | 150 | MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 0) |
| r242703 | r242704 | |
| 334 | 174 | MCFG_SCREEN_REFRESH_RATE(70) |
| 335 | 175 | MACHINE_CONFIG_END |
| 336 | 176 | |
| 337 | static MACHINE_CONFIG_START( hp9k340, hp9k3xx_state ) | |
| 338 | /* basic machine hardware */ | |
| 339 | MCFG_CPU_ADD(MAINCPU_TAG, M68030, 16670000) | |
| 340 | MCFG_CPU_PROGRAM_MAP(hp9k330_map) | |
| 341 | ||
| 342 | MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 0) | |
| 343 | MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840 | |
| 344 | MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f) | |
| 345 | ||
| 346 | MCFG_SCREEN_ADD( "screen", RASTER) | |
| 347 | MCFG_SCREEN_UPDATE_DRIVER(hp9k3xx_state, hp98544_update) | |
| 348 | MCFG_SCREEN_SIZE(1024,768) | |
| 349 | MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1) | |
| 350 | MCFG_SCREEN_REFRESH_RATE(70) | |
| 351 | MACHINE_CONFIG_END | |
| 352 | ||
| 353 | static MACHINE_CONFIG_START( hp9k370, hp9k3xx_state ) | |
| 354 | /* basic machine hardware */ | |
| 355 | MCFG_CPU_ADD(MAINCPU_TAG, M68030, 33000000) | |
| 356 | MCFG_CPU_PROGRAM_MAP(hp9k370_map) | |
| 357 | ||
| 358 | MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 0) | |
| 359 | MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840 | |
| 360 | MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f) | |
| 361 | ||
| 362 | MCFG_SCREEN_ADD( "screen", RASTER) | |
| 363 | MCFG_SCREEN_UPDATE_DRIVER(hp9k3xx_state, hp98544_update) | |
| 364 | MCFG_SCREEN_SIZE(1024,768) | |
| 365 | MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1) | |
| 366 | MCFG_SCREEN_REFRESH_RATE(70) | |
| 367 | MACHINE_CONFIG_END | |
| 368 | ||
| 369 | static MACHINE_CONFIG_START( hp9k380, hp9k3xx_state ) | |
| 370 | /* basic machine hardware */ | |
| 371 | MCFG_CPU_ADD(MAINCPU_TAG, M68040, 25000000) // 25 MHz? 33? | |
| 372 | MCFG_CPU_PROGRAM_MAP(hp9k330_map) | |
| 373 | ||
| 374 | MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 0) | |
| 375 | MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840 | |
| 376 | MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f) | |
| 377 | ||
| 378 | MCFG_SCREEN_ADD( "screen", RASTER) | |
| 379 | MCFG_SCREEN_UPDATE_DRIVER(hp9k3xx_state, hp98544_update) | |
| 380 | MCFG_SCREEN_SIZE(1024,768) | |
| 381 | MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1) | |
| 382 | MCFG_SCREEN_REFRESH_RATE(70) | |
| 383 | MACHINE_CONFIG_END | |
| 384 | ||
| 385 | static MACHINE_CONFIG_START( hp9k382, hp9k3xx_state ) | |
| 386 | /* basic machine hardware */ | |
| 387 | MCFG_CPU_ADD(MAINCPU_TAG, M68040, 25000000) // 25 MHz? 33? | |
| 388 | MCFG_CPU_PROGRAM_MAP(hp9k382_map) | |
| 389 | ||
| 390 | MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 0) | |
| 391 | MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840 | |
| 392 | MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f) | |
| 393 | ||
| 394 | MCFG_SCREEN_ADD( "screen", RASTER) | |
| 395 | MCFG_SCREEN_UPDATE_DRIVER(hp9k3xx_state, screen_update) | |
| 396 | MCFG_SCREEN_SIZE(1024,768) | |
| 397 | MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1) | |
| 398 | MCFG_SCREEN_REFRESH_RATE(70) | |
| 399 | MACHINE_CONFIG_END | |
| 400 | ||
| 401 | ROM_START( hp9k310 ) | |
| 402 | ROM_REGION( 0x20000, MAINCPU_TAG, 0 ) | |
| 403 | ROM_LOAD16_BYTE( "1818-3771.bin", 0x000001, 0x008000, CRC(b9e4e3ad) SHA1(ed6f1fad94a15d95362701dbe124b52877fc3ec4) ) | |
| 404 | ROM_LOAD16_BYTE( "1818-3772.bin", 0x000000, 0x008000, CRC(a3665919) SHA1(ec1bc7e5b7990a1b09af947a06401e8ed3cb0516) ) | |
| 405 | ||
| 406 | ROM_REGION( 0x800, "mcu", 0 ) | |
| 407 | ROM_LOAD( "1820-4784_1.bin", 0x000000, 0x000800, CRC(e929044a) SHA1(90849a10bdb8c6e38e73ce027c9c0ad8b3956b1b) ) | |
| 408 | ROM_LOAD( "1820-4784_2.bin", 0x000000, 0x000800, CRC(8defcf50) SHA1(d3abfea468a43db7c2369500a3e390e77a8e22e6) ) | |
| 409 | ||
| 410 | ROM_REGION( 0x4000, "graphics", ROMREGION_ERASEFF | ROMREGION_BE ) | |
| 411 | ROM_LOAD16_BYTE( "98544_1818-1999.bin", 0x000000, 0x002000, CRC(8c7d6480) SHA1(d2bcfd39452c38bc652df39f84c7041cfdf6bd51) ) | |
| 412 | ROM_END | |
| 413 | ||
| 414 | 177 | ROM_START( hp9k320 ) |
| 415 | 178 | ROM_REGION( 0x20000, MAINCPU_TAG, 0 ) |
| 416 | 179 | ROM_LOAD16_BYTE( "5061-6538.bin", 0x000001, 0x004000, CRC(d6aafeb1) SHA1(88c6b0b2f504303cbbac0c496c26b85458ac5d63) ) |
| r242703 | r242704 | |
| 431 | 194 | ROM_LOAD16_BYTE( "98544_1818-1999.bin", 0x000001, 0x002000, CRC(8c7d6480) SHA1(d2bcfd39452c38bc652df39f84c7041cfdf6bd51) ) |
| 432 | 195 | ROM_END |
| 433 | 196 | |
| 434 | ROM_START( hp9k340 ) | |
| 435 | ROM_REGION( 0x20000, MAINCPU_TAG, 0 ) | |
| 436 | ROM_LOAD16_BYTE( "1818-4416.bin", 0x000000, 0x010000, CRC(cd71e85e) SHA1(3e83a80682f733417fdc3720410e45a2cfdcf869) ) | |
| 437 | ROM_LOAD16_BYTE( "1818-4417.bin", 0x000001, 0x010000, CRC(374d49db) SHA1(a12cbf6c151e2f421da4571000b5dffa3ef403b3) ) | |
| 438 | ||
| 439 | ROM_REGION( 0x4000, "graphics", ROMREGION_ERASEFF | ROMREGION_BE | ROMREGION_32BIT ) | |
| 440 | ROM_LOAD16_BYTE( "98544_1818-1999.bin", 0x000001, 0x002000, CRC(8c7d6480) SHA1(d2bcfd39452c38bc652df39f84c7041cfdf6bd51) ) | |
| 441 | ROM_END | |
| 442 | ||
| 443 | ROM_START( hp9k370 ) | |
| 444 | ROM_REGION( 0x20000, MAINCPU_TAG, 0 ) | |
| 445 | ROM_LOAD16_BYTE( "1818-4416.bin", 0x000000, 0x010000, CRC(cd71e85e) SHA1(3e83a80682f733417fdc3720410e45a2cfdcf869) ) | |
| 446 | ROM_LOAD16_BYTE( "1818-4417.bin", 0x000001, 0x010000, CRC(374d49db) SHA1(a12cbf6c151e2f421da4571000b5dffa3ef403b3) ) | |
| 447 | ||
| 448 | ROM_REGION( 0x4000, "graphics", ROMREGION_ERASEFF | ROMREGION_BE | ROMREGION_32BIT ) | |
| 449 | ROM_LOAD16_BYTE( "98544_1818-1999.bin", 0x000001, 0x002000, CRC(8c7d6480) SHA1(d2bcfd39452c38bc652df39f84c7041cfdf6bd51) ) | |
| 450 | ROM_END | |
| 451 | ||
| 452 | ROM_START( hp9k380 ) | |
| 453 | ROM_REGION( 0x20000, MAINCPU_TAG, 0 ) | |
| 454 | ROM_LOAD16_WORD_SWAP( "1818-5062_98754_9000-380_27c210.bin", 0x000000, 0x020000, CRC(500a0797) SHA1(4c0a3929e45202a2689e353657e5c4b58ff9a1fd) ) | |
| 455 | ||
| 456 | ROM_REGION( 0x4000, "graphics", ROMREGION_ERASEFF | ROMREGION_BE | ROMREGION_32BIT ) | |
| 457 | ROM_LOAD16_BYTE( "98544_1818-1999.bin", 0x000001, 0x002000, CRC(8c7d6480) SHA1(d2bcfd39452c38bc652df39f84c7041cfdf6bd51) ) | |
| 458 | ROM_END | |
| 459 | ||
| 460 | ROM_START( hp9k382 ) | |
| 461 | ROM_REGION( 0x20000, MAINCPU_TAG, 0 ) | |
| 462 | ROM_LOAD16_WORD_SWAP( "1818-5468_27c1024.bin", 0x000000, 0x020000, CRC(d1d9ef13) SHA1(6bbb17b9adad402fbc516dc2f3143e9c38ceef8e) ) | |
| 463 | ||
| 464 | ROM_REGION( 0x2000, "unknown", ROMREGION_ERASEFF | ROMREGION_BE | ROMREGION_32BIT ) | |
| 465 | ROM_LOAD( "1818-5282_8ce61e951207_28c64.bin", 0x000000, 0x002000, CRC(740442f3) SHA1(ab65bd4eec1024afb97fc2dd3bd3f017e90f49ae) ) | |
| 466 | ROM_END | |
| 467 | ||
| 468 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ | |
| 469 | COMP( 1985, hp9k310, 0, 0, hp9k310, hp9k330, driver_device, 0, "Hewlett-Packard", "HP9000/310", GAME_NOT_WORKING | GAME_NO_SOUND) | |
| 470 | COMP( 1985, hp9k320, 0, 0, hp9k320, hp9k330, driver_device, 0, "Hewlett-Packard", "HP9000/320", GAME_NOT_WORKING | GAME_NO_SOUND) | |
| 471 | COMP( 1987, hp9k330, 0, 0, hp9k330, hp9k330, driver_device, 0, "Hewlett-Packard", "HP9000/330", GAME_NOT_WORKING | GAME_NO_SOUND) | |
| 472 | COMP( 1989, hp9k340, hp9k330,0, hp9k340, hp9k330, driver_device, 0, "Hewlett-Packard", "HP9000/340", GAME_NOT_WORKING | GAME_NO_SOUND) | |
| 473 | COMP( 1988, hp9k370, hp9k330,0, hp9k370, hp9k330, driver_device, 0, "Hewlett-Packard", "HP9000/370", GAME_NOT_WORKING | GAME_NO_SOUND) | |
| 474 | COMP( 1991, hp9k380, 0, 0, hp9k380, hp9k330, driver_device, 0, "Hewlett-Packard", "HP9000/380", GAME_NOT_WORKING | GAME_NO_SOUND) | |
| 475 | COMP( 1991, hp9k382, 0, 0, hp9k382, hp9k330, driver_device, 0, "Hewlett-Packard", "HP9000/382", GAME_NOT_WORKING | GAME_NO_SOUND) | |
| 197 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ | |
| 198 | COMP( 1985, hp9k320, 0, 0, hp9k320, hp9k330, driver_device, 0, "Hewlett-Packard", "HP9000/320", GAME_NOT_WORKING | GAME_NO_SOUND) | |
| 199 | COMP( 1987, hp9k330, 0, 0, hp9k330, hp9k330, driver_device, 0, "Hewlett-Packard", "HP9000/330", GAME_NOT_WORKING | GAME_NO_SOUND) |
| r242703 | r242704 | |
|---|---|---|
| 682 | 682 | |
| 683 | 683 | TI 8S030N 1149-0360 0360.U58 32x8 Timing prom? |
| 684 | 684 | TI 8S030N 1149-0370 0370.U74 32x8 Timing prom? |
| 685 | ||
| 685 | ||
| 686 | 686 | GI RO-3-9502-024 024.U60 2Kx10 Mask ROM+Addr Decoder, CP1600 code |
| 687 | 687 | GI 9316B-4D72 4D72.U62 2Kx8 Mask ROM, CP1600 code (upper) |
| 688 | 688 | GI 9316B-4D71 4D71.U63 2Kx8 Mask ROM, CP1600 code (lower) |
| r242703 | r242704 | |
| 691 | 691 | Main board also includes: |
| 692 | 692 | |
| 693 | 693 | 2 2114 DRAMS 1Kx4 Character memory |
| 694 | 10 MM5290J DRAMS 16Kx10 CP1600 memory? | |
| 694 | 10 MM5290J DRAMS 16Kx10 CP1600 memory? | |
| 695 | 695 | 1 6502 |
| 696 | 696 | 1 Mystery 40-pin chip (under heat sink) |
| 697 | 697 | (actually a SMC CRT5027 aka TI TMS9927 CRT controller) |
| r242703 | r242704 | |
| 715 | 715 | |
| 716 | 716 | ROM_REGION(0x0100,"proms",0) |
| 717 | 717 | ROM_LOAD( "0360.u58", 0x00, 0x20, CRC(1295528a) SHA1(b35e598891f1185e02cbacb4811d2334357abd79)) |
| 718 | ROM_LOAD( "0370.u74", 0x20, 0x20, CRC(19da5096) SHA1(76af50e4fd29649fc4837120c245321a8fc84cd3)) | |
| 718 | ROM_LOAD( "0370.u74", 0x20, 0x20, CRC(19da5096) SHA1(76af50e4fd29649fc4837120c245321a8fc84cd3)) | |
| 719 | 719 | ROM_END |
| 720 | 720 | |
| 721 | 721 | DRIVER_INIT_MEMBER(intv_state,intv) |
| r242703 | r242704 | |
|---|---|---|
| 232 | 232 | return rand() | (rand()<<16); // there is a loop checking that this is above a certain value |
| 233 | 233 | } |
| 234 | 234 | |
| 235 | DECLARE_WRITE32_MEMBER(leapster_aux004b_w) | |
| 236 | { | |
| 237 | printf("leapster_aux004b_w %04x\n", data); | |
| 238 | } | |
| 239 | ||
| 240 | 235 | protected: |
| 241 | 236 | required_device<cpu_device> m_maincpu; |
| 242 | 237 | required_device<generic_slot_device> m_cart; |
| r242703 | r242704 | |
| 288 | 283 | static ADDRESS_MAP_START( leapster_map, AS_PROGRAM, 32, leapster_state ) |
| 289 | 284 | 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 |
| 290 | 285 | AM_RANGE(0x0180D800, 0x0180D803) AM_READ(leapster_random_r) |
| 291 | AM_RANGE(0x03000000, 0x030007ff) AM_RAM // puts stack here, writes a pointer @ 0x03000000 on startup | |
| 292 | AM_RANGE(0x3c000000, 0x3c1fffff) AM_RAM // really ram, or has our code execution gone wrong? | |
| 293 | // AM_RANGE(0x80000000, 0x807fffff) AM_ROMBANK("cartrom") // game ROM pointers are all to the 80xxxxxx region, so I assume it maps here - installed if a cart is present | |
| 286 | AM_RANGE(0x03000000, 0x030007ff) AM_RAM // puts stack here, writes a pointer @ 0x03000000 on startup | |
| 287 | // AM_RANGE(0x80000000, 0x807fffff) AM_ROMBANK("cartrom") // game ROM pointers are all to the 80xxxxxx region, so I assume it maps here - installed if a cart is present | |
| 294 | 288 | ADDRESS_MAP_END |
| 295 | 289 | |
| 296 | static ADDRESS_MAP_START( leapster_aux, AS_IO, 32, leapster_state ) | |
| 297 | AM_RANGE(0x00000012c, 0x00000012f) AM_WRITE(leapster_aux004b_w) // this address isn't used by ARC internal stuff afaik, so probably leapster specific | |
| 298 | ADDRESS_MAP_END | |
| 299 | ||
| 300 | 290 | static MACHINE_CONFIG_START( leapster, leapster_state ) |
| 301 | 291 | /* basic machine hardware */ |
| 302 | 292 | // CPU is ArcTangent-A5 '5.1' (ARCompact core) |
| 303 | 293 | MCFG_CPU_ADD("maincpu", ARCA5, 96000000/10) |
| 304 | 294 | MCFG_CPU_PROGRAM_MAP(leapster_map) |
| 305 | MCFG_CPU_IO_MAP(leapster_aux) | |
| 306 | 295 | |
| 296 | ||
| 307 | 297 | /* video hardware */ |
| 308 | 298 | MCFG_SCREEN_ADD("screen", LCD) |
| 309 | 299 | MCFG_SCREEN_REFRESH_RATE(60) |
| r242703 | r242704 | |
| 332 | 322 | |
| 333 | 323 | DRIVER_INIT_MEMBER(leapster_state,leapster) |
| 334 | 324 | { |
| 325 | ||
| 335 | 326 | } |
| 336 | 327 | |
| 337 | 328 | CONS(2003, leapster, 0, 0, leapster, leapster, leapster_state, leapster, "LeapFrog", "Leapster (Germany)", GAME_NOT_WORKING | GAME_NO_SOUND | GAME_IS_SKELETON ) |
| r242703 | r242704 | |
|---|---|---|
| 2220 | 2220 | |
| 2221 | 2221 | |
| 2222 | 2222 | ROM_START( macplus ) |
| 2223 | ROM_REGION16_BE(0x40000, "bootrom", 0) | |
| 2224 | ROM_SYSTEM_BIOS(0, "v3", "Loud Harmonicas") | |
| 2225 | ROMX_LOAD( "macplus.rom", 0x00000, 0x20000, CRC(b2102e8e) SHA1(7d2f808a045aa3a1b242764f0e2c7d13e288bf1f), ROM_GROUPWORD | ROM_BIOS(1) ) | |
| 2226 | ROM_SYSTEM_BIOS(1, "v2", "Lonely Heifers") | |
| 2227 | ROMX_LOAD( "23512-1007__342-0342-a.rom-lo.u7d", 0x000000, 0x010000, CRC(5aaa4a2f) SHA1(5dfbfbe279ddadfae691c95f552fd9db41e3ed90), ROM_SKIP(1) | ROM_BIOS(2) ) | |
| 2228 | ROMX_LOAD( "23512-1010__342-0341-b.rom-hi.u6d", 0x000001, 0x010000, CRC(65341487) SHA1(bf43fa4f5a3dcbbac20f1fe1deedee0895454379), ROM_SKIP(1) | ROM_BIOS(2) ) | |
| 2229 | ROM_SYSTEM_BIOS(2, "v1", "Lonely Hearts") | |
| 2230 | ROMX_LOAD( "4d1eeee1 - macplus v1.rom", 0x000000, 0x020000, CRC(4fa5b399) SHA1(e0da7165b92dee90d8b1522429c033729fa73fd2), ROM_GROUPWORD | ROM_BIOS(3) ) | |
| 2231 | ROM_SYSTEM_BIOS(3, "romdisk", "mac68k.info self-boot (1/1/2015)") | |
| 2232 | ROMX_LOAD( "modplus-harp2.bin", 0x000000, 0x028000, CRC(ba56078d) SHA1(debdf328ac73e1662d274a044d8750224f47edef), ROM_GROUPWORD | ROM_BIOS(4) ) | |
| 2223 | ROM_REGION16_BE(0x20000, "bootrom", 0) | |
| 2224 | ROM_LOAD16_WORD( "macplus.rom", 0x00000, 0x20000, CRC(b2102e8e) SHA1(7d2f808a045aa3a1b242764f0e2c7d13e288bf1f)) | |
| 2233 | 2225 | ROM_END |
| 2234 | 2226 | |
| 2235 | 2227 |
| r242703 | r242704 | |
|---|---|---|
| 6 | 6 | * TMS1100 MP1030 - MCU |
| 7 | 7 | * 2 x DS8870N - Hex LED Digit Driver |
| 8 | 8 | * 2 x DS8861N - MOS-to-LED 5-Segment Driver |
| 9 | ||
| 9 | ||
| 10 | 10 | This is a tabletop educational calculator. It came with plastic overlays |
| 11 | 11 | for playing different kind of games. Refer to the manual on how to use it. |
| 12 | 12 | In short, to start from scratch, press [SEL]. By default the device is in |
| 13 | 13 | calculator teaching mode. If [SEL] is followed with 1-6 and then [NXT], |
| 14 | 14 | one of the games is started. |
| 15 | ||
| 15 | ||
| 16 | 16 | 1) Number Machine |
| 17 | 17 | 2) Countin' On |
| 18 | 18 | 3) Walk The Plank |
| r242703 | r242704 | |
| 24 | 24 | TODO: |
| 25 | 25 | - some of the led symbols are probably wrong, output PLA is unknown |
| 26 | 26 | - microinstructions PLA is not verified |
| 27 | ||
| 27 | ||
| 28 | 28 | ***************************************************************************/ |
| 29 | 29 | |
| 30 | 30 | #include "emu.h" |
| r242703 | r242704 | |
| 102 | 102 | if (i >= 8) |
| 103 | 103 | for (int j = 0; j < 8; j++) |
| 104 | 104 | output_set_lamp_value(i*10 + j, m_o >> j & 1); |
| 105 | ||
| 105 | ||
| 106 | 106 | // R0-R7: 7seg leds |
| 107 | 107 | else |
| 108 | 108 | output_set_digit_value(i, m_o >> 1 & 0x7f); |
| r242703 | r242704 | |
|---|---|---|
| 15 | 15 | TeleTerm roms dumped by ejwords. The correct slots found by ubee512 author. |
| 16 | 16 | Swedish roms dumped by nama. The correct slots found by ubee512 author. |
| 17 | 17 | |
| 18 | Please note: the rom version 1.31 which appears to fit the 256TC is actually | |
| 19 | part of the Z80 emulation in the Matilda model. If you fit this rom into a real | |
| 20 | 256TC, the floppy disk will not be detected. | |
| 21 | ||
| 22 | The unemulated Matilda is a IBM XT clone fitted with a NEC V40, and has the | |
| 23 | ability to emulate the 256TC as mentioned above. | |
| 24 | ||
| 25 | 18 | Floppy Disk types (as used by ubee512) |
| 26 | 19 | - ss80 - single sided 80 track |
| 27 | 20 | - ds40 - double-sided 40 track - 400KB |
| r242703 | r242704 | |
| 656 | 649 | |
| 657 | 650 | static SLOT_INTERFACE_START( mbee_floppies ) |
| 658 | 651 | SLOT_INTERFACE( "35dd", FLOPPY_35_DD ) |
| 659 | SLOT_INTERFACE( "525dd", FLOPPY_525_QD ) | |
| 660 | 652 | SLOT_INTERFACE_END |
| 661 | 653 | |
| 662 | 654 | |
| r242703 | r242704 | |
| 813 | 805 | MCFG_CPU_IO_MAP(mbee56_io) |
| 814 | 806 | MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbee56 ) |
| 815 | 807 | MCFG_WD2793x_ADD("fdc", XTAL_4MHz / 4) // divided by 2 externally, then divided by 2 internally (/ENMF pin not emulated) |
| 816 | MCFG_FLOPPY_DRIVE_ADD("fdc:0", mbee_floppies, " | |
| 808 | MCFG_FLOPPY_DRIVE_ADD("fdc:0", mbee_floppies, "35dd", mbee_state::floppy_formats) | |
| 817 | 809 | MCFG_FLOPPY_DRIVE_ADD("fdc:1", mbee_floppies, "35dd", mbee_state::floppy_formats) |
| 818 | 810 | MACHINE_CONFIG_END |
| 819 | 811 | |
| r242703 | r242704 | |
| 831 | 823 | MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbee128 ) |
| 832 | 824 | MCFG_WD2793x_ADD("fdc", XTAL_4MHz / 4) |
| 833 | 825 | MCFG_FLOPPY_DRIVE_ADD("fdc:0", mbee_floppies, "35dd", mbee_state::floppy_formats) |
| 834 | MCFG_FLOPPY_DRIVE_ADD("fdc:1", mbee_floppies, " | |
| 826 | MCFG_FLOPPY_DRIVE_ADD("fdc:1", mbee_floppies, "35dd", mbee_state::floppy_formats) | |
| 835 | 827 | MACHINE_CONFIG_END |
| 836 | 828 | |
| 837 | 829 | static MACHINE_CONFIG_DERIVED( mbee256, mbee128 ) |
| r242703 | r242704 | |
| 1163 | 1155 | ROM_REGION(0x40000,"maincpu", ROMREGION_ERASEFF) |
| 1164 | 1156 | |
| 1165 | 1157 | ROM_REGION(0x7000,"bootrom", ROMREGION_ERASEFF) |
| 1166 | ROM_SYSTEM_BIOS( 0, "1.20", "Version 1.20" ) | |
| 1167 | ROMX_LOAD("256tc_boot_1.20.rom", 0x0000, 0x4000, CRC(fe8d6a84) SHA1(a037a1b90b18a2180e9f5f216b829fcd480449a4), ROM_BIOS(1) ) | |
| 1168 | ROM_SYSTEM_BIOS( 1, "1.15", "Version 1.15" ) | |
| 1169 | ROMX_LOAD("256tc_boot_1.15.rom", 0x0000, 0x4000, CRC(1902062d) SHA1(e4a1c0b3f4996e313da0bac0edb6d34e3270723e), ROM_BIOS(2) ) | |
| 1158 | ROM_SYSTEM_BIOS( 0, "1.31", "Version 1.31" ) | |
| 1159 | ROMX_LOAD("256tc_boot_1.31.rom", 0x0000, 0x4000, CRC(923baef9) SHA1(3d30d18e765439fb913fbd3e03dd5127fd6b9167), ROM_BIOS(1) ) | |
| 1160 | ROM_SYSTEM_BIOS( 1, "1.20", "Version 1.20" ) | |
| 1161 | ROMX_LOAD("256tc_boot_1.20.rom", 0x0000, 0x4000, CRC(fe8d6a84) SHA1(a037a1b90b18a2180e9f5f216b829fcd480449a4), ROM_BIOS(2) ) | |
| 1162 | ROM_SYSTEM_BIOS( 2, "1.15", "Version 1.15" ) | |
| 1163 | ROMX_LOAD("256tc_boot_1.15.rom", 0x0000, 0x4000, CRC(1902062d) SHA1(e4a1c0b3f4996e313da0bac0edb6d34e3270723e), ROM_BIOS(3) ) | |
| 1170 | 1164 | |
| 1171 | 1165 | ROM_REGION(0x9800, "gfx", 0) |
| 1172 | 1166 | ROM_LOAD("char256.bin", 0x1000, 0x1000, CRC(9372af3c) SHA1(a63591822c0504de2fed52e88d64e1dbd6124b74) ) |
| r242703 | r242704 | |
|---|---|---|
| 51 | 51 | key |= ioport("Y10")->read(); |
| 52 | 52 | key |= ioport("Y11")->read(); |
| 53 | 53 | key |= ioport("Y12")->read(); |
| 54 | // DBG_LOG(1,"mc1502_k_s_c",("= %02X (%d) %s\n", key, m_kbd.pulsing, | |
| 55 | // (key || m_kbd.pulsing) ? " will IRQ" : "")); | |
| 54 | // DBG_LOG(1,"mc1502_k_s_c",("= %02X (%d) %s\n", key, m_kbd.pulsing, | |
| 55 | // (key || m_kbd.pulsing) ? " will IRQ" : "")); | |
| 56 | 56 | |
| 57 | 57 | /* |
| 58 | 58 | If a key is pressed and we're not pulsing yet, start pulsing the IRQ1; |
| r242703 | r242704 | |
| 73 | 73 | |
| 74 | 74 | WRITE8_MEMBER(mc1502_state::mc1502_ppi_portb_w) |
| 75 | 75 | { |
| 76 | // | |
| 76 | // DBG_LOG(2,"mc1502_ppi_portb_w",("( %02X )\n", data)); | |
| 77 | 77 | m_ppi_portb = data; |
| 78 | 78 | m_pit8253->write_gate2(BIT(data, 0)); |
| 79 | 79 | mc1502_speaker_set_spkrdata(BIT(data, 1)); |
| r242703 | r242704 | |
| 87 | 87 | // bit 3: i8251 SYNDET pin triggers NMI (default = 1 = no) |
| 88 | 88 | WRITE8_MEMBER(mc1502_state::mc1502_ppi_portc_w) |
| 89 | 89 | { |
| 90 | // | |
| 90 | // DBG_LOG(2,"mc1502_ppi_portc_w",("( %02X )\n", data)); | |
| 91 | 91 | m_ppi_portc = data & 15; |
| 92 | 92 | } |
| 93 | 93 | |
| r242703 | r242704 | |
| 104 | 104 | data = ( data & ~0x20 ) | ( m_pit_out2 ? 0x20 : 0x00 ); |
| 105 | 105 | data = ( data & ~0x10 ) | ( (BIT(m_ppi_portb, 1) && m_pit_out2) ? 0x10 : 0x00 ); |
| 106 | 106 | |
| 107 | // DBG_LOG(2,"mc1502_ppi_portc_r",("= %02X (tap_val %f t2out %d) at %s\n", | |
| 108 | // data, tap_val, m_pit_out2, machine().describe_context())); | |
| 107 | // DBG_LOG(2,"mc1502_ppi_portc_r",("= %02X (tap_val %f t2out %d) at %s\n", | |
| 108 | // data, tap_val, m_pit_out2, machine().describe_context())); | |
| 109 | 109 | return data; |
| 110 | 110 | } |
| 111 | 111 | |
| r242703 | r242704 | |
| 126 | 126 | if (m_kbd.mask & 0x0400) { key |= ioport("Y11")->read(); } |
| 127 | 127 | if (m_kbd.mask & 0x0800) { key |= ioport("Y12")->read(); } |
| 128 | 128 | key ^= 0xff; |
| 129 | // | |
| 129 | // DBG_LOG(2,"mc1502_kppi_porta_r",("= %02X\n", key)); | |
| 130 | 130 | return key; |
| 131 | 131 | } |
| 132 | 132 | |
| r242703 | r242704 | |
| 138 | 138 | m_kbd.mask |= 1 << 11; |
| 139 | 139 | else |
| 140 | 140 | m_kbd.mask &= ~(1 << 11); |
| 141 | // | |
| 141 | // DBG_LOG(2,"mc1502_kppi_portb_w",("( %02X -> %04X )\n", data, m_kbd.mask)); | |
| 142 | 142 | } |
| 143 | 143 | |
| 144 | 144 | WRITE8_MEMBER(mc1502_state::mc1502_kppi_portc_w) |
| 145 | 145 | { |
| 146 | 146 | m_kbd.mask &= ~(7 << 8); |
| 147 | 147 | m_kbd.mask |= ((data ^ 7) & 7) << 8; |
| 148 | // | |
| 148 | // DBG_LOG(2,"mc1502_kppi_portc_w",("( %02X -> %04X )\n", data, m_kbd.mask)); | |
| 149 | 149 | } |
| 150 | 150 | |
| 151 | 151 | WRITE_LINE_MEMBER(mc1502_state::mc1502_i8251_syndet) |
| r242703 | r242704 | |
| 326 | 326 | MACHINE_CONFIG_END |
| 327 | 327 | |
| 328 | 328 | static MACHINE_CONFIG_DERIVED( pk88, mc1502 ) |
| 329 | MCFG_CPU_ | |
| 329 | MCFG_CPU_REPLACE("maincpu", I8088, XTAL_16MHz/3) | |
| 330 | 330 | MCFG_CPU_PROGRAM_MAP(pk88_map) |
| 331 | MCFG_CPU_IO_MAP(mc1502_io) | |
| 331 | 332 | MACHINE_CONFIG_END |
| 332 | 333 | |
| 333 | 334 |
| r242703 | r242704 | |
|---|---|---|
| 769 | 769 | |
| 770 | 770 | ROM_START( megacdj ) |
| 771 | 771 | ROM_REGION16_BE( 0x400000, "maincpu", ROMREGION_ERASE00 ) |
| 772 | ROM_DEFAULT_BIOS("v100g") | |
| 772 | ROM_DEFAULT_BIOS("v100g") // this seems the only revision where the cursor in CD menu works, allowing to boot games | |
| 773 | 773 | /* Confirmed by ElBarto */ |
| 774 | 774 | ROM_SYSTEM_BIOS(0, "v100s", "v1.00S") |
| 775 | 775 | ROMX_LOAD( "mpr-14088h.bin", 0x000000, 0x020000, CRC(3773d5aa) SHA1(bbf729a1aaa1667b783749299e1ad932aaf5f253), ROM_BIOS(1) | ROM_GROUPWORD | ROM_REVERSE) |
| r242703 | r242704 | |
| 782 | 782 | /* Confirmed by ElBarto */ |
| 783 | 783 | ROM_SYSTEM_BIOS(3, "v100o", "v1.00O") |
| 784 | 784 | ROMX_LOAD( "epr-14088d.bin", 0x000000, 0x020000, CRC(dfa95ee9) SHA1(e13666c76fa0a2e94e2f651b26b0fd625bf55f07), ROM_BIOS(4) | ROM_GROUPWORD | ROM_REVERSE) |
| 785 | ROM_SYSTEM_BIOS(4, "v100p", "v1.00P") | |
| 785 | ROM_SYSTEM_BIOS(4, "v100p", "v1.00P") // CRC: e2e70bc8 when byteswapped | |
| 786 | 786 | ROMX_LOAD( "epr-14088e.bin", 0x000000, 0x020000, CRC(9d2da8f2) SHA1(4846f448160059a7da0215a5df12ca160f26dd69), ROM_BIOS(5) ) |
| 787 | 787 | ROM_END |
| 788 | 788 |
| r242703 | r242704 | |
|---|---|---|
| 4 | 4 | |
| 5 | 5 | Parker Bros Merlin handheld computer game |
| 6 | 6 | * TMS1100NLL MP3404A-N2 (has internal ROM) |
| 7 | ||
| 7 | ||
| 8 | 8 | To start a game, press NEW GAME, followed by a number: |
| 9 | 9 | 1: Tic-Tac-Toe |
| 10 | 10 | 2: Music Machine |
| r242703 | r242704 | |
| 12 | 12 | 4: Blackjack 13 |
| 13 | 13 | 5: Magic Square |
| 14 | 14 | 6: Mindbender |
| 15 | ||
| 15 | ||
| 16 | 16 | Refer to the official manual for more information on the games. |
| 17 | ||
| 18 | ||
| 17 | ||
| 18 | ||
| 19 | 19 | Other handhelds assumed to be on similar hardware: |
| 20 | 20 | - Dr. Smith - by Tomy, released in Japan (basically a white version of Merlin, |
| 21 | 21 | let's assume for now that the ROM contents is identical) |
| 22 | 22 | - Master Merlin |
| 23 | ||
| 23 | ||
| 24 | 24 | Another sequel, called Split Second, looks like different hardware. |
| 25 | 25 | |
| 26 | 26 | |
| r242703 | r242704 | |
| 75 | 75 | READ8_MEMBER(merlin_state::read_k) |
| 76 | 76 | { |
| 77 | 77 | UINT8 k = 0; |
| 78 | ||
| 78 | ||
| 79 | 79 | // read selected button rows |
| 80 | 80 | for (int i = 0; i < 4; i++) |
| 81 | 81 | if (m_o >> i & 1) |
| r242703 | r242704 | |
|---|---|---|
| 757 | 757 | slot->prgram_alloc(0x8000); |
| 758 | 758 | |
| 759 | 759 | slot->pcb_start(machine(), m_ciram, FALSE); |
| 760 | slot->pcb_reg_postload(machine()); | |
| 760 | 761 | m_ppu->space(AS_PROGRAM).install_readwrite_handler(0, 0x1fff, read8_delegate(FUNC(device_nes_cart_interface::chr_r),(device_nes_cart_interface *)slot), write8_delegate(FUNC(device_nes_cart_interface::chr_w),(device_nes_cart_interface *)slot)); |
| 761 | 762 | m_ppu->space(AS_PROGRAM).install_readwrite_handler(0x2000, 0x3eff, read8_delegate(FUNC(device_nes_cart_interface::nt_r),(device_nes_cart_interface *)slot), write8_delegate(FUNC(device_nes_cart_interface::nt_w),(device_nes_cart_interface *)slot)); |
| 762 | 763 | m_ppu->set_scanline_callback(ppu2c0x_scanline_delegate(FUNC(device_nes_cart_interface::scanline_irq),(device_nes_cart_interface *)slot)); |
| r242703 | r242704 | |
| 771 | 772 | m_ciram = auto_alloc_array(machine(), UINT8, 0x800); |
| 772 | 773 | setup_ioports(); |
| 773 | 774 | setup_disk(m_disk); |
| 774 | state_register(); | |
| 775 | 775 | } |
| 776 | 776 | |
| 777 | 777 | MACHINE_RESET_MEMBER( nes_state, fds ) |
| r242703 | r242704 | |
|---|---|---|
| 4 | 4 | |
| 5 | 5 | 10-11-14 - Skeleton driver |
| 6 | 6 | |
| 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 | |
| 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 | 12 | |
| 13 | DMA channels: | |
| 14 | channel 0 - communications (RS-232) | |
| 15 | channel 1 - X-Bus expansion modules (except disk and graphics) | |
| 16 | channel 2 - graphics? | |
| 17 | channel 3 - hard disk | |
| 18 | ||
| 13 | DMA channels: | |
| 14 | channel 0 - communications (RS-232) | |
| 15 | channel 1 - X-Bus expansion modules (except disk and graphics) | |
| 16 | channel 2 - graphics? | |
| 17 | channel 3 - hard disk | |
| 18 | ||
| 19 | 19 | To get to "menu mode", press Space quickly after reset (might need good timing) |
| 20 | 20 | The bootstrap ROM version number is displayed, along with "B,D,L,M,P,T:" |
| 21 | 21 | You can press one of these keys for the following tests: |
| r242703 | r242704 | |
| 33 | 33 | T: Type of Operating System |
| 34 | 34 | Gives an "OS:" prompt, at which you can enter the number of the system image to |
| 35 | 35 | load at the master workstation. |
| 36 | ||
| 36 | ||
| 37 | 37 | Panel Debugger: |
| 38 | 38 | - Open/Modify RAM |
| 39 | 39 | Enter an address (seg:off) followed by a forward-slash, the contents of this word will |
| 40 | 40 | appear, you can enter a value to set it to, or just press Next (default: Enter) to leave |
| 41 | it as is. It will then go on to the next word. Pressing Return (scan code unknown | |
| 41 | it as is. It will then go on to the next word. Pressing Return (scan code unknown | |
| 42 | 42 | currently) will return to the debugger prompt. |
| 43 | 43 | - Open/Modify Register |
| 44 | 44 | Enter the register only, and the contents will appear, you can leave it or alter it (you |
| 45 | 45 | must enter all digits (eg: 0A03 if you're modifying DX) then press Return. |
| 46 | 46 | - I/O to or from a port |
| 47 | Input: Address (segment is ignored, and not required) followed by I, a byte is read from | |
| 47 | Input: Address (segment is ignored, and not required) followed by I, a byte is read from | |
| 48 | 48 | the port defined by the offset, and the byte is displayed. |
| 49 | 49 | Output: Address followed by O, you are now prompted with an '='. Enter the byte to send |
| 50 | 50 | to the port, and press Return. |
| r242703 | r242704 | |
| 52 | 52 | Enter an address (seg:off) followed by H. Sets a haltpoint at the specified address. Does |
| 53 | 53 | not work for ROM addresses. Only one allowed at a time. Haltpoint info is stored at |
| 54 | 54 | 0000:01F0. Uses a software interrupt (INT 7C), rather than INT 3. |
| 55 | ||
| 55 | ||
| 56 | 56 | To start or continue from the current address, enter P. |
| 57 | 57 | To start from a specific address, enter the address (seg:off) followed by a G. |
| 58 | 58 | */ |
| r242703 | r242704 | |
| 624 | 624 | MCFG_I8251_TXD_HANDLER(DEVWRITELINE("keyboard", rs232_port_device, write_txd)) |
| 625 | 625 | MCFG_RS232_PORT_ADD("keyboard", keyboard, "ngen") |
| 626 | 626 | MCFG_RS232_RXD_HANDLER(DEVWRITELINE("videouart", i8251_device, write_rxd)) |
| 627 | ||
| 627 | ||
| 628 | 628 | MCFG_DEVICE_ADD("refresh_clock", CLOCK, 19200*16) // should be 19530Hz |
| 629 | 629 | MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(ngen_state,timer_clk_out)) |
| 630 | 630 | |
| r242703 | r242704 | |
| 662 | 662 | ROM_REGION( 0x2000, "bios", 0) |
| 663 | 663 | ROM_LOAD16_BYTE( "72-00414_80186_cpu.bin", 0x000000, 0x001000, CRC(e1387a03) SHA1(ddca4eba67fbf8b731a8009c14f6b40edcbc3279) ) // bootstrap ROM v8.4 |
| 664 | 664 | ROM_LOAD16_BYTE( "72-00415_80186_cpu.bin", 0x000001, 0x001000, CRC(a6dde7d9) SHA1(b4d15c1bce31460ab5b92ff43a68c15ac5485816) ) |
| 665 | ||
| 665 | ||
| 666 | 666 | ROM_REGION( 0x1000, "disk", 0) |
| 667 | 667 | ROM_LOAD( "72-00422_10mb_disk.bin", 0x000000, 0x001000, CRC(f5b046b6) SHA1(b303c6f6aa40504016de9826879bc316e44389aa) ) |
| 668 | ||
| 668 | ||
| 669 | 669 | ROM_REGION( 0x20, "disk_prom", 0) |
| 670 | 670 | ROM_LOAD( "72-00422_10mb_disk_15d.bin", 0x000000, 0x000020, CRC(121ee494) SHA1(9a8d3c336cc7378a71f9d48c99f88515eb236fbf) ) |
| 671 | 671 | ROM_END |
| r242703 | r242704 | |
|---|---|---|
| 171 | 171 | PORT_DIPNAME( 0x40, 0x00, "IEEE-488 LISTEN" ) PORT_DIPLOCATION("J6:7") |
| 172 | 172 | PORT_DIPSETTING( 0x00, "Disabled" ) |
| 173 | 173 | PORT_DIPSETTING( 0x40, "Enabled" ) |
| 174 | PORT_DIPNAME( 0x80, 0x00, "IEEE-488 Consecutive Ad | |
| 174 | PORT_DIPNAME( 0x80, 0x00, "IEEE-488 Consecutive Adresses" ) PORT_DIPLOCATION("J6:8") | |
| 175 | 175 | PORT_DIPSETTING( 0x00, "1" ) |
| 176 | 176 | PORT_DIPSETTING( 0x80, "2" ) |
| 177 | 177 | INPUT_PORTS_END |
| r242703 | r242704 | |
|---|---|---|
| 9 | 9 | 22/06/2011 Working [Robbbert] |
| 10 | 10 | |
| 11 | 11 | TODO: |
| 12 | Add optional 2x 8255A port read/write logging | |
| 12 | Add 8251A for serial | |
| 13 | Add optional 2x 8255A | |
| 13 | 14 | |
| 14 | 15 | |
| 15 | 16 | |
| r242703 | r242704 | |
| 18 | 19 | There is no speaker or storage facility in the standard kit. |
| 19 | 20 | |
| 20 | 21 | Download the User Manual to get the operating procedures. |
| 21 | The user manual is available from: http://www.bitsavers.org/pdf/intel/8086/9800698A_SDK-86_Users_Man_Apr79.pdf | |
| 22 | 22 | |
| 23 | 23 | ToDo: |
| 24 | 24 | - Artwork |
| r242703 | r242704 | |
|---|---|---|
| 3 | 3 | /*************************************************************************** |
| 4 | 4 | |
| 5 | 5 | Milton Bradley Simon |
| 6 | ||
| 6 | ||
| 7 | 7 | Revision A hardware: |
| 8 | 8 | * TMS1000 (has internal ROM), DS75494 lamp driver |
| 9 | ||
| 9 | ||
| 10 | 10 | Newer revisions have a smaller 16-pin MB4850 chip instead of the TMS1000. |
| 11 | 11 | This one has been decapped too, but we couldn't find an internal ROM. |
| 12 | 12 | It is possibly a cost-reduced custom ASIC specifically for Simon. |
| 13 | ||
| 13 | ||
| 14 | 14 | Other games assumed to be on similar hardware: |
| 15 | 15 | - Pocket Simon, but there's a chance it only exists with MB4850 chip |
| 16 | 16 | - Super Simon (TMS1100) |
| r242703 | r242704 | |
| 61 | 61 | READ8_MEMBER(simon_state::read_k) |
| 62 | 62 | { |
| 63 | 63 | UINT8 k = 0; |
| 64 | ||
| 64 | ||
| 65 | 65 | // read selected button rows |
| 66 | 66 | for (int i = 0; i < 4; i++) |
| 67 | 67 | { |
| r242703 | r242704 | |
| 82 | 82 | // R7 -> 75494 IN2 -> blue lamp |
| 83 | 83 | for (int i = 0; i < 4; i++) |
| 84 | 84 | output_set_lamp_value(i, data >> (4 + i) & 1); |
| 85 | ||
| 85 | ||
| 86 | 86 | // R8 -> 75494 IN0 -> speaker |
| 87 | 87 | m_speaker->level_w(data >> 8 & 1); |
| 88 | 88 |
| r242703 | r242704 | |
|---|---|---|
| 13 | 13 | To do: |
| 14 | 14 | |
| 15 | 15 | - SIO interface for Game Gear (needs netplay, I guess) |
| 16 | - Gear to Gear Port SMS Controller Adaptor | |
| 16 | 17 | - Sega Demo Unit II (kiosk expansion device) |
| 17 | 18 | - SMS Disk System (floppy disk drive expansion device) - unreleased |
| 18 | 19 | - Rapid button of Japanese Master System |
| r242703 | r242704 | |
| 23 | 24 | - Software compatibility flags, by region and/or BIOS |
| 24 | 25 | - Emulate SRAM cartridges? (for use with Bock's dump tool) |
| 25 | 26 | - Support for other DE-9 compatible controllers, like the Mega Drive 6-Button |
| 26 | that has | |
| 27 | that has software support (at least a test tool made by Charles MacDonald) | |
| 27 | 28 | |
| 28 | 29 | The Game Gear SIO hardware is not emulated but has some |
| 29 | 30 | placeholders in 'machine/sms.c' |
| r242703 | r242704 | |
| 46 | 47 | |
| 47 | 48 | -------------------------------------------------------------------------------- |
| 48 | 49 | |
| 49 | General compatibility issues on real hardware (not emulation bugs): | |
| 50 | ||
| 51 | - Some ROMs have issues or don't work when running on a console of different | |
| 52 | region; | |
| 53 | - Many Japanese/Korean or homebrew ROMs don't have the signature required by | |
| 54 | BIOSes of consoles sold overseas; | |
| 55 | - Paddle games need to detect the system region as Japanese to work with the | |
| 56 | Paddle controller; | |
| 57 | - Few games of the ones with FM support need to detect the system region as | |
| 58 | Japanese to play FM sound; | |
| 59 | - The Light Phaser gun doesn't work with the Japanese SMS; | |
| 60 | - There are reports about Light Phaser working on the second Korean console | |
| 61 | version, and a Korean advert shows support on the first version (Gam*Boy I, | |
| 62 | although based on Japanese SMS); | |
| 63 | - The Korean SMS versions have Japanese-format cartridge slot, but only on the | |
| 64 | first (Gam*Boy I) the region is detected as Japanese; | |
| 65 | - Some SMS ROMs don't run when are plugged-in to SMS expansion slot, through | |
| 66 | the gender adapter; | |
| 67 | - Some SMS ROMs don't run when are plugged-in to a Game Gear, through the | |
| 68 | Master Gear adapter; | |
| 69 | ||
| 70 | -------------------------------------------------------------------------------- | |
| 71 | ||
| 72 | 50 | Sega Master System II |
| 73 | 51 | Sega 1990 |
| 74 | 52 | |
| r242703 | r242704 | |
| 360 | 338 | AM_RANGE(0x40, 0x7f) AM_DEVWRITE("gamegear", gamegear_device, write) |
| 361 | 339 | AM_RANGE(0x80, 0x80) AM_MIRROR(0x3e) AM_DEVREADWRITE("sms_vdp", sega315_5124_device, vram_read, vram_write) |
| 362 | 340 | AM_RANGE(0x81, 0x81) AM_MIRROR(0x3e) AM_DEVREADWRITE("sms_vdp", sega315_5124_device, register_read, register_write) |
| 363 | AM_RANGE(0xc0, 0xc0) AM_READ(sms_input_port_dc_r) | |
| 364 | AM_RANGE(0xc1, 0xc1) AM_READ(sms_input_port_dd_r) | |
| 365 | AM_RANGE(0xdc, 0xdc) AM_READ(sms_input_port_dc_r) | |
| 366 | AM_RANGE(0xdd, 0xdd) AM_READ(sms_input_port_dd_r) | |
| 341 | AM_RANGE(0xc0, 0xc0) AM_READ_PORT("GG_PORT_DC") | |
| 342 | AM_RANGE(0xc1, 0xc1) AM_READ_PORT("GG_PORT_DD") | |
| 343 | AM_RANGE(0xdc, 0xdc) AM_READ_PORT("GG_PORT_DC") | |
| 344 | AM_RANGE(0xdd, 0xdd) AM_READ_PORT("GG_PORT_DD") | |
| 367 | 345 | ADDRESS_MAP_END |
| 368 | 346 | |
| 369 | 347 | |
| r242703 | r242704 | |
| 461 | 439 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) |
| 462 | 440 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 463 | 441 | |
| 442 | PORT_START("GG_PORT_DD") | |
| 443 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) | |
| 444 | ||
| 464 | 445 | PORT_START("START") |
| 465 | 446 | PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 466 | 447 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START ) PORT_NAME("Start") /* Game Gear START */ |
| r242703 | r242704 | |
| 804 | 785 | MCFG_GG_CARTRIDGE_ADD("slot", gg_cart, NULL) |
| 805 | 786 | |
| 806 | 787 | MCFG_SOFTWARE_LIST_ADD("cart_list", "gamegear") |
| 807 | ||
| 808 | MCFG_GG_GEAR2GEAR_PORT_ADD("gear2gear", gg_gear2gear_port_devices, NULL) | |
| 809 | MCFG_GG_GEAR2GEAR_PORT_TH_INPUT_HANDLER(WRITELINE(sms_state, sms_ctrl2_th_input)) // not verified | |
| 810 | //MCFG_GG_GEAR2GEAR_PORT_PIXEL_HANDLER(READ32(sms_state, sms_pixel_color)) // only for GG-TV mod | |
| 811 | 788 | MACHINE_CONFIG_END |
| 812 | 789 | |
| 813 | 790 | |
| r242703 | r242704 | |
| 986 | 963 | - Sega Mark III Soft Desk 10 |
| 987 | 964 | - Sega Shooting Zone |
| 988 | 965 | |
| 989 | The SMS Store Display Unit is labeled PD-W UNIT. Pictures found on Internet | |
| 990 | show cartridges with a label where a not-for-sale message is written along | |
| 991 | the information that it is for use on the Product Display-Working Unit. | |
| 992 | ||
| 993 | 966 | ***************************************************************************/ |
| 994 | 967 | |
| 995 | 968 | /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ |
| r242703 | r242704 | |
|---|---|---|
| 4 | 4 | |
| 5 | 5 | Kenner Star Wars - Electronic Battle Command |
| 6 | 6 | * TMS1100 MCU, labeled MP3438A |
| 7 | ||
| 7 | ||
| 8 | 8 | This is a small tabletop space-dogfighting game. To start the game, |
| 9 | 9 | press BASIC/INTER/ADV and enter P#(number of players), then |
| 10 | 10 | START TURN. Refer to the official manual for more information. |
| r242703 | r242704 | |
| 46 | 46 | DECLARE_READ8_MEMBER(read_k); |
| 47 | 47 | DECLARE_WRITE16_MEMBER(write_o); |
| 48 | 48 | DECLARE_WRITE16_MEMBER(write_r); |
| 49 | ||
| 49 | ||
| 50 | 50 | TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick); |
| 51 | 51 | void leds_update(); |
| 52 | 52 | void prepare_and_update(); |
| r242703 | r242704 | |
| 71 | 71 | void starwbc_state::leds_update() |
| 72 | 72 | { |
| 73 | 73 | UINT16 active_state[0x10]; |
| 74 | ||
| 74 | ||
| 75 | 75 | for (int i = 0; i < 0x10; i++) |
| 76 | 76 | { |
| 77 | 77 | active_state[i] = 0; |
| 78 | ||
| 78 | ||
| 79 | 79 | for (int j = 0; j < 0x10; j++) |
| 80 | 80 | { |
| 81 | 81 | int di = j << 4 | i; |
| 82 | ||
| 82 | ||
| 83 | 83 | // turn on powered leds |
| 84 | 84 | if (m_leds_state[i] >> j & 1) |
| 85 | 85 | m_leds_decay[di] = LEDS_DECAY_TIME; |
| 86 | ||
| 86 | ||
| 87 | 87 | // determine active state |
| 88 | 88 | int ds = (m_leds_decay[di] != 0) ? 1 : 0; |
| 89 | 89 | active_state[i] |= (ds << j); |
| 90 | 90 | } |
| 91 | 91 | } |
| 92 | ||
| 92 | ||
| 93 | 93 | // on difference, send to output |
| 94 | 94 | for (int i = 0; i < 0x10; i++) |
| 95 | 95 | if (m_leds_cache[i] != active_state[i]) |
| 96 | 96 | { |
| 97 | 97 | output_set_digit_value(i, active_state[i]); |
| 98 | ||
| 98 | ||
| 99 | 99 | for (int j = 0; j < 8; j++) |
| 100 | 100 | output_set_lamp_value(i*10 + j, active_state[i] >> j & 1); |
| 101 | 101 | } |
| 102 | ||
| 102 | ||
| 103 | 103 | memcpy(m_leds_cache, active_state, sizeof(m_leds_cache)); |
| 104 | 104 | } |
| 105 | 105 | |
| r242703 | r242704 | |
| 109 | 109 | for (int i = 0; i < 0x100; i++) |
| 110 | 110 | if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i]) |
| 111 | 111 | m_leds_decay[i]--; |
| 112 | ||
| 112 | ||
| 113 | 113 | leds_update(); |
| 114 | 114 | } |
| 115 | 115 | |
| r242703 | r242704 | |
| 117 | 117 | { |
| 118 | 118 | UINT8 o = (m_o << 4 & 0xf0) | (m_o >> 4 & 0x0f); |
| 119 | 119 | const UINT8 mask[5] = { 0x30, 0xff, 0xff, 0x7f, 0x7f }; |
| 120 | ||
| 120 | ||
| 121 | 121 | // R0,R2,R4,R6,R8 |
| 122 | 122 | for (int i = 0; i < 5; i++) |
| 123 | 123 | m_leds_state[i*2] = (m_r >> (i*2) & 1) ? (o & mask[i]) : 0; |
| r242703 | r242704 | |
| 155 | 155 | // R0,R1,R3,R5,R7: input mux |
| 156 | 156 | // R9: piezo speaker |
| 157 | 157 | m_speaker->level_w(data >> 9 & 1); |
| 158 | ||
| 158 | ||
| 159 | 159 | m_r = data; |
| 160 | 160 | prepare_and_update(); |
| 161 | 161 | } |
| r242703 | r242704 | |
| 233 | 233 | |
| 234 | 234 | m_r = 0; |
| 235 | 235 | m_o = 0; |
| 236 | ||
| 236 | ||
| 237 | 237 | // register for savestates |
| 238 | 238 | save_item(NAME(m_leds_state)); |
| 239 | 239 | save_item(NAME(m_leds_cache)); |
| r242703 | r242704 | |
| 253 | 253 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(starwbc_state, write_r)) |
| 254 | 254 | |
| 255 | 255 | MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", starwbc_state, leds_decay_tick, attotime::from_msec(10)) |
| 256 | ||
| 256 | ||
| 257 | 257 | MCFG_DEFAULT_LAYOUT(layout_starwbc) |
| 258 | 258 | |
| 259 | 259 | /* no video! */ |
| r242703 | r242704 | |
|---|---|---|
| 4 | 4 | |
| 5 | 5 | Parker Brothers Stop Thief |
| 6 | 6 | * TMS0980NLL MP6101B (die labeled 0980B-01A) |
| 7 | ||
| 7 | ||
| 8 | 8 | Stop Thief is actually a board game, the electronic device emulated here |
| 9 | 9 | (called Electronic Crime Scanner) is an accessory. To start a game, press |
| 10 | 10 | the ON button. Otherwise, it is in test-mode where you can hear all sounds. |
| r242703 | r242704 | |
| 78 | 78 | void stopthief_state::leds_update() |
| 79 | 79 | { |
| 80 | 80 | UINT16 active_state[0x10]; |
| 81 | ||
| 81 | ||
| 82 | 82 | for (int i = 0; i < 0x10; i++) |
| 83 | 83 | { |
| 84 | 84 | active_state[i] = 0; |
| 85 | ||
| 85 | ||
| 86 | 86 | for (int j = 0; j < 0x10; j++) |
| 87 | 87 | { |
| 88 | 88 | int di = j << 4 | i; |
| 89 | ||
| 89 | ||
| 90 | 90 | // turn on powered leds |
| 91 | 91 | if (m_leds_state[i] >> j & 1) |
| 92 | 92 | m_leds_decay[di] = LEDS_DECAY_TIME; |
| 93 | ||
| 93 | ||
| 94 | 94 | // determine active state |
| 95 | 95 | int ds = (m_power_on && m_leds_decay[di] != 0) ? 1 : 0; |
| 96 | 96 | active_state[i] |= (ds << j); |
| 97 | 97 | } |
| 98 | 98 | } |
| 99 | ||
| 99 | ||
| 100 | 100 | // on difference, send to output |
| 101 | 101 | for (int i = 0; i < 0x10; i++) |
| 102 | 102 | if (m_leds_cache[i] != active_state[i]) |
| 103 | 103 | output_set_digit_value(i, active_state[i]); |
| 104 | ||
| 104 | ||
| 105 | 105 | memcpy(m_leds_cache, active_state, sizeof(m_leds_cache)); |
| 106 | 106 | } |
| 107 | 107 | |
| r242703 | r242704 | |
| 111 | 111 | for (int i = 0; i < 0x100; i++) |
| 112 | 112 | if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i]) |
| 113 | 113 | m_leds_decay[i]--; |
| 114 | ||
| 114 | ||
| 115 | 115 | leds_update(); |
| 116 | 116 | } |
| 117 | 117 | |
| r242703 | r242704 | |
| 145 | 145 | UINT8 o = BITSWAP8(m_o,3,5,2,1,4,0,6,7) & 0x7f; |
| 146 | 146 | for (int i = 0; i < 3; i++) |
| 147 | 147 | m_leds_state[i] = (data >> i & 1) ? o : 0; |
| 148 | ||
| 148 | ||
| 149 | 149 | leds_update(); |
| 150 | ||
| 150 | ||
| 151 | 151 | // R3-R8: speaker on |
| 152 | 152 | m_speaker->level_w((data & 0x1f8 && m_o & 8) ? 1 : 0); |
| 153 | 153 | } |
| r242703 | r242704 | |
| 261 | 261 | MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(stopthief_state, auto_power_off)) |
| 262 | 262 | |
| 263 | 263 | MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", stopthief_state, leds_decay_tick, attotime::from_msec(10)) |
| 264 | ||
| 264 | ||
| 265 | 265 | MCFG_DEFAULT_LAYOUT(layout_stopthie) |
| 266 | 266 | |
| 267 | 267 | /* no video! */ |
| r242703 | r242704 | |
|---|---|---|
| 367 | 367 | WRITE8_MEMBER(super6_state::memory_write_byte) |
| 368 | 368 | { |
| 369 | 369 | address_space& prog_space = m_maincpu->space(AS_PROGRAM); |
| 370 | prog_space.write_byte(offset, data); | |
| 370 | return prog_space.write_byte(offset, data); | |
| 371 | 371 | } |
| 372 | 372 | |
| 373 | 373 | READ8_MEMBER(super6_state::io_read_byte) |
| r242703 | r242704 | |
| 379 | 379 | WRITE8_MEMBER(super6_state::io_write_byte) |
| 380 | 380 | { |
| 381 | 381 | address_space& prog_space = m_maincpu->space(AS_IO); |
| 382 | prog_space.write_byte(offset, data); | |
| 382 | return prog_space.write_byte(offset, data); | |
| 383 | 383 | } |
| 384 | 384 | |
| 385 | 385 | //------------------------------------------------- |
| r242703 | r242704 | |
| 400 | 400 | //------------------------------------------------- |
| 401 | 401 | |
| 402 | 402 | static SLOT_INTERFACE_START( super6_floppies ) |
| 403 | SLOT_INTERFACE( "525dd", FLOPPY_525_ | |
| 403 | SLOT_INTERFACE( "525dd", FLOPPY_525_DD ) | |
| 404 | 404 | SLOT_INTERFACE_END |
| 405 | 405 | |
| 406 | 406 | WRITE_LINE_MEMBER( super6_state::fdc_intrq_w ) |
| r242703 | r242704 | |
|---|---|---|
| 4 | 4 | |
| 5 | 5 | Tandy Radio Shack Computerized Arcade (1981, 1982, 1995) |
| 6 | 6 | * TMS1100 CD7282SL |
| 7 | ||
| 7 | ||
| 8 | 8 | This handheld contains 12 minigames. It looks and plays like "Fabulous Fred" |
| 9 | 9 | by the Japanese company Mego Corp. in 1980, which in turn is a mix of Merlin |
| 10 | 10 | and Simon. Unlike Merlin and Simon, spin-offs like these were not successful. |
| 11 | 11 | There were releases with and without the prefix "Tandy-12", I don't know |
| 12 | 12 | which name was more common. Also not worth noting is that it needed five |
| 13 | 13 | batteries; 4 C-cells and a 9-volt. |
| 14 | ||
| 14 | ||
| 15 | 15 | Some of the games require accessories included with the toy (eg. the Baseball |
| 16 | 16 | game is played with a board representing the playing field). To start a game, |
| 17 | 17 | hold the [SELECT] button, then press [START] when the game button lights up. |
| 18 | 18 | As always, refer to the official manual for more information. |
| 19 | ||
| 19 | ||
| 20 | 20 | See below at the input defs for a list of the games. |
| 21 | 21 | |
| 22 | ||
| 22 | ||
| 23 | 23 | TODO: |
| 24 | 24 | - output PLA is not verified |
| 25 | 25 | - microinstructions PLA is not verified |
| r242703 | r242704 | |
| 70 | 70 | READ8_MEMBER(tandy12_state::read_k) |
| 71 | 71 | { |
| 72 | 72 | UINT8 k = 0; |
| 73 | ||
| 73 | ||
| 74 | 74 | // read selected button rows |
| 75 | 75 | for (int i = 0; i < 5; i++) |
| 76 | 76 | if (m_r >> (i+5) & 1) |
| r242703 | r242704 | |
| 114 | 114 | |
| 115 | 115 | [purple]1 [blue]5 [l-green]9 |
| 116 | 116 | ORGAN TAG-IT TREASURE HUNT |
| 117 | ||
| 117 | ||
| 118 | 118 | [l-orange]2 [turquoise]6 [red]10 |
| 119 | 119 | SONG WRITER ROULETTE COMPETE |
| 120 | ||
| 120 | ||
| 121 | 121 | [pink]3 [yellow]7 [violet]11 |
| 122 | 122 | REPEAT BASEBALL FIRE AWAY |
| 123 | 123 | |
| r242703 | r242704 | |
| 180 | 180 | // these are certain |
| 181 | 181 | 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, |
| 182 | 182 | 0x80, 0x00, 0x00, 0x00, 0x00, |
| 183 | ||
| 183 | ||
| 184 | 184 | // rest is unused? |
| 185 | 185 | 0x00, 0x00, 0x00, |
| 186 | 186 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| r242703 | r242704 | |
|---|---|---|
| 3 | 3 | /*************************************************************************** |
| 4 | 4 | |
| 5 | 5 | Texas Instruments TMS1xxx/0970/0980 handheld calculators (mostly single-chip) |
| 6 | ||
| 6 | ||
| 7 | 7 | Refer to their official manuals on how to use them. |
| 8 | 8 | |
| 9 | ||
| 9 | ||
| 10 | 10 | TODO: |
| 11 | 11 | - MCU clocks are unknown |
| 12 | 12 | |
| r242703 | r242704 | |
| 85 | 85 | void ticalc1x_state::leds_update() |
| 86 | 86 | { |
| 87 | 87 | UINT16 active_state[0x10]; |
| 88 | ||
| 88 | ||
| 89 | 89 | for (int i = 0; i < 0x10; i++) |
| 90 | 90 | { |
| 91 | 91 | active_state[i] = 0; |
| 92 | ||
| 92 | ||
| 93 | 93 | for (int j = 0; j < 0x10; j++) |
| 94 | 94 | { |
| 95 | 95 | int di = j << 4 | i; |
| 96 | ||
| 96 | ||
| 97 | 97 | // turn on powered leds |
| 98 | 98 | if (m_leds_state[i] >> j & 1) |
| 99 | 99 | m_leds_decay[di] = LEDS_DECAY_TIME; |
| 100 | ||
| 100 | ||
| 101 | 101 | // determine active state |
| 102 | 102 | int ds = (m_power_on && m_leds_decay[di] != 0) ? 1 : 0; |
| 103 | 103 | active_state[i] |= (ds << j); |
| 104 | 104 | } |
| 105 | 105 | } |
| 106 | ||
| 106 | ||
| 107 | 107 | // on difference, send to output |
| 108 | 108 | for (int i = 0; i < 0x10; i++) |
| 109 | 109 | if (m_leds_cache[i] != active_state[i]) |
| 110 | 110 | { |
| 111 | 111 | output_set_digit_value(i, active_state[i]); |
| 112 | ||
| 112 | ||
| 113 | 113 | for (int j = 0; j < 8; j++) |
| 114 | 114 | output_set_lamp_value(i*10 + j, active_state[i] >> j & 1); |
| 115 | 115 | } |
| r242703 | r242704 | |
| 123 | 123 | for (int i = 0; i < 0x100; i++) |
| 124 | 124 | if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i]) |
| 125 | 125 | m_leds_decay[i]--; |
| 126 | ||
| 126 | ||
| 127 | 127 | leds_update(); |
| 128 | 128 | } |
| 129 | 129 | |
| r242703 | r242704 | |
| 143 | 143 | for (int i = 0; i < 11; i++) |
| 144 | 144 | if (m_r >> i & 1) |
| 145 | 145 | m_leds_state[i] = m_o; |
| 146 | ||
| 146 | ||
| 147 | 147 | // exponent sign (not 100% sure this is correct) |
| 148 | 148 | m_leds_state[11] = (m_leds_state[0] | m_leds_state[1]) ? 0x40 : 0; |
| 149 | 149 | |
| r242703 | r242704 | |
| 169 | 169 | // R0-R10: input mux |
| 170 | 170 | // R0-R10: select digit (right-to-left) |
| 171 | 171 | m_r = data; |
| 172 | ||
| 172 | ||
| 173 | 173 | tisr16_leds_update(); |
| 174 | 174 | } |
| 175 | 175 | |
| r242703 | r242704 | |
| 233 | 233 | // note: 3rd digit is custom(not 7seg), for math symbols |
| 234 | 234 | for (int i = 0; i < 9; i++) |
| 235 | 235 | m_leds_state[i] = (data >> i & 1) ? m_o : 0; |
| 236 | ||
| 236 | ||
| 237 | 237 | // 6th digit only has A and G for = |
| 238 | 238 | m_leds_state[3] &= 0x41; |
| 239 | 239 | |
| r242703 | r242704 | |
| 272 | 272 | UINT8 o = BITSWAP8(m_o,7,5,2,1,4,0,6,3); |
| 273 | 273 | for (int i = 0; i < 9; i++) |
| 274 | 274 | m_leds_state[i] = (data >> i & 1) ? o : 0; |
| 275 | ||
| 275 | ||
| 276 | 276 | // 1st digit only has segments B,F,G,DP |
| 277 | 277 | m_leds_state[0] &= 0xe2; |
| 278 | 278 |
| r242703 | r242704 | |
|---|---|---|
| 3 | 3 | /*************************************************************************** |
| 4 | 4 | |
| 5 | 5 | Texas Instruments Speak & Spell hardware |
| 6 | ||
| 6 | ||
| 7 | 7 | (still need to write notes here..) |
| 8 | 8 | |
| 9 | Other stuff on similar hardware: | |
| 10 | - Language Tutor/Translator | |
| 11 | - Touch & Tell, but it runs on a TMS1100! | |
| 12 | - Speak & Spell Compact, Speak & Write (UK version), TMS1100? TMS0980? | |
| 13 | - Speak & Read | |
| 14 | ||
| 15 | 9 | ***************************************************************************/ |
| 16 | 10 | |
| 17 | 11 | #include "emu.h" |
| r242703 | r242704 | |
| 24 | 18 | #include "tispeak.lh" |
| 25 | 19 | |
| 26 | 20 | // The master clock is a single stage RC oscillator into TMS5100 RCOSC: |
| 27 | // In an early 1979 Speak & Spell, C is 68pf, R is a 50kohm trimpot which is set to around 33.6kohm | |
| 28 | // (measured in-circuit). CPUCLK is this osc freq /2, ROMCLK is this osc freq /4. | |
| 21 | // C is 68pf, R is a 50kohm trimpot wich is set to 33.6kohm. CPUCLK is this/2, ROMCLK is this/4. | |
| 29 | 22 | // The typical osc freq curve for TMS5100 is unknown. Let's assume it is set to the default frequency, |
| 30 | // which is 640kHz | |
| 23 | // which is 640kHz according to the TMS5100 documentation. | |
| 31 | 24 | |
| 32 | 25 | #define MASTER_CLOCK (640000) |
| 33 | 26 | |
| r242703 | r242704 | |
| 134 | 127 | // schedule delayed filament-off |
| 135 | 128 | m_filoff_timer->adjust(attotime::from_msec(FILOFF_DECAY_TIME)); |
| 136 | 129 | } |
| 137 | ||
| 130 | ||
| 138 | 131 | // update digit state |
| 139 | 132 | for (int i = 0; i < 9; i++) |
| 140 | 133 | if (m_r >> i & 1) |
| r242703 | r242704 | |
| 145 | 138 | { |
| 146 | 139 | // standard led14seg |
| 147 | 140 | output_set_digit_value(i, m_filament_on ? m_digit_state[i] & 0x3fff : 0); |
| 148 | ||
| 141 | ||
| 149 | 142 | // DP(display point) and AP(apostrophe) segments as lamps |
| 150 | 143 | output_set_lamp_value(i*10 + 0, m_digit_state[i] >> 14 & m_filament_on); |
| 151 | 144 | output_set_lamp_value(i*10 + 1, m_digit_state[i] >> 15 & m_filament_on); |
| r242703 | r242704 | |
| 233 | 226 | INPUT_CHANGED_MEMBER(tispeak_state::power_button) |
| 234 | 227 | { |
| 235 | 228 | int on = (int)(FPTR)param; |
| 236 | ||
| 229 | ||
| 237 | 230 | if (on && !m_power_on) |
| 238 | 231 | { |
| 239 | 232 | m_power_on = 1; |
| r242703 | r242704 | |
| 391 | 384 | save_item(NAME(m_o)); |
| 392 | 385 | save_item(NAME(m_filament_on)); |
| 393 | 386 | save_item(NAME(m_power_on)); |
| 394 | ||
| 387 | ||
| 395 | 388 | // init cartridge |
| 396 | 389 | if (m_cart != NULL && m_cart->exists()) |
| 397 | 390 | { |
| r242703 | r242704 | |
| 442 | 435 | /* basic machine hardware */ |
| 443 | 436 | MCFG_CPU_MODIFY("maincpu") |
| 444 | 437 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tispeak_state, snspell_write_o)) |
| 445 | ||
| 438 | ||
| 446 | 439 | /* cartridge */ |
| 447 | 440 | MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "snspell") |
| 448 | 441 | MCFG_GENERIC_EXTENSIONS("vsm") |
| r242703 | r242704 | |
| 461 | 454 | |
| 462 | 455 | ROM_START( snspell ) |
| 463 | 456 | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 464 | ROM_LOAD( "us4189779_tmc0271", 0x0000, 0x1000, BAD_DUMP CRC(d3f5a37d) SHA1(f75ab617a6067d4d3a954a9f86126d2089554df8) ) // | |
| 457 | ROM_LOAD( "us4189779_tmc0271", 0x0000, 0x1000, BAD_DUMP CRC(d3f5a37d) SHA1(f75ab617a6067d4d3a954a9f86126d2089554df8) ) // placeholder, use the one we have | |
| 465 | 458 | |
| 466 | 459 | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 467 | 460 | ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| r242703 | r242704 | |
| 490 | 483 | ROM_LOAD( "cd2350a.vsm", 0x0000, 0x4000, CRC(2adda742) SHA1(3f868ed8284b723c815a30343057e03467c043b5) ) |
| 491 | 484 | ROM_END |
| 492 | 485 | |
| 493 | ROM_START( snspell | |
| 486 | ROM_START( snspellp ) | |
| 494 | 487 | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 495 | ROM_LOAD( "us4189779_tmc0271", 0x0000, 0x1000, BAD_DUMP CRC(d3f5a37d) SHA1(f75ab617a6067d4d3a954a9f86126d2089554df8) ) // p | |
| 488 | ROM_LOAD( "us4189779_tmc0271", 0x0000, 0x1000, BAD_DUMP CRC(d3f5a37d) SHA1(f75ab617a6067d4d3a954a9f86126d2089554df8) ) // typed in from patent 4189779, may have errors | |
| 496 | 489 | |
| 497 | 490 | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 498 | 491 | ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| r242703 | r242704 | |
| 502 | 495 | ROM_LOAD( "tms0270_tmc0271_opla.pla", 0, 1246, CRC(9ebe12ab) SHA1(acb4e07ba26f2daca5f1c234885ac0371c7ce87f) ) |
| 503 | 496 | |
| 504 | 497 | ROM_REGION( 0xc000, "tms6100", ROMREGION_ERASEFF ) // 8000-bfff = space reserved for cartridge |
| 505 | ROM_LOAD( "cd2303.vsm", 0x0000, 0x4000, CRC(0fae755c) SHA1(b68c3120a63a61db474feb5d71a6e5dd67910d80) ) | |
| 506 | ROM_LOAD( "cd2304.vsm", 0x4000, 0x4000, CRC(e2a270eb) SHA1(c13c95ad15f1923a4841f66504e0f22646e71d99) ) | |
| 498 | ROM_LOAD( "tmc0351.vsm", 0x0000, 0x4000, CRC(beea3373) SHA1(8b0f7586d2f12c3d4a885fdb528cf23feffa1a3b) ) | |
| 499 | ROM_LOAD( "tmc0352.vsm", 0x4000, 0x4000, CRC(d51f0587) SHA1(ddaa484be1bba5fef46b481cafae517e4acaa8ed) ) | |
| 507 | 500 | ROM_END |
| 508 | 501 | |
| 509 | ROM_START( snspelluk | |
| 502 | ROM_START( snspelluk ) | |
| 510 | 503 | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 511 | 504 | ROM_LOAD( "us4189779_tmc0271", 0x0000, 0x1000, BAD_DUMP CRC(d3f5a37d) SHA1(f75ab617a6067d4d3a954a9f86126d2089554df8) ) // placeholder, use the one we have |
| 512 | 505 | |
| 513 | 506 | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 514 | 507 | ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| 515 | 508 | ROM_REGION( 2127, "maincpu:mpla", 0 ) |
| 516 | ROM_LOAD( "tms0270_cd2708_mpla.pla", 0, 2127, BAD_DUMP CRC(504b96bb) SHA1(67b691e7c0b97239410587e50e5182bf46475b43) ) // | |
| 509 | ROM_LOAD( "tms0270_cd2708_mpla.pla", 0, 2127, BAD_DUMP CRC(504b96bb) SHA1(67b691e7c0b97239410587e50e5182bf46475b43) ) // taken from cd2708, need to verify if it's same as tmc0271 | |
| 517 | 510 | ROM_REGION( 1246, "maincpu:opla", 0 ) |
| 518 | 511 | ROM_LOAD( "tms0270_tmc0271_opla.pla", 0, 1246, CRC(9ebe12ab) SHA1(acb4e07ba26f2daca5f1c234885ac0371c7ce87f) ) |
| 519 | 512 | |
| 520 | ROM_REGION( 0xc000, "tms6100", ROMREGION_ERASEFF ) // uses only 1 rom, 8000-bfff = space reserved for cartridge | |
| 521 | ROM_LOAD( "cd62175.vsm", 0x0000, 0x4000, CRC(6e1063d4) SHA1(b5c66c51148c5921ecb8ffccd7a460ae639cdb68) ) | |
| 513 | ROM_REGION( 0xc000, "tms6100", ROMREGION_ERASEFF ) // 8000-bfff = space reserved for cartridge | |
| 514 | ROM_LOAD( "cd2303.vsm", 0x0000, 0x4000, CRC(0fae755c) SHA1(b68c3120a63a61db474feb5d71a6e5dd67910d80) ) | |
| 515 | ROM_LOAD( "cd2304.vsm", 0x4000, 0x4000, CRC(e2a270eb) SHA1(c13c95ad15f1923a4841f66504e0f22646e71d99) ) | |
| 522 | 516 | ROM_END |
| 523 | 517 | |
| 524 | ROM_START( snspell | |
| 518 | ROM_START( snspelluka ) | |
| 525 | 519 | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 526 | 520 | ROM_LOAD( "us4189779_tmc0271", 0x0000, 0x1000, BAD_DUMP CRC(d3f5a37d) SHA1(f75ab617a6067d4d3a954a9f86126d2089554df8) ) // placeholder, use the one we have |
| 527 | 521 | |
| 528 | 522 | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 529 | 523 | ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| 530 | 524 | ROM_REGION( 2127, "maincpu:mpla", 0 ) |
| 531 | ROM_LOAD( "tms0270_cd2708_mpla.pla", 0, 2127, BAD_DUMP CRC(504b96bb) SHA1(67b691e7c0b97239410587e50e5182bf46475b43) ) // | |
| 525 | ROM_LOAD( "tms0270_cd2708_mpla.pla", 0, 2127, BAD_DUMP CRC(504b96bb) SHA1(67b691e7c0b97239410587e50e5182bf46475b43) ) // placeholder, use the one we have | |
| 532 | 526 | ROM_REGION( 1246, "maincpu:opla", 0 ) |
| 533 | 527 | ROM_LOAD( "tms0270_tmc0271_opla.pla", 0, 1246, CRC(9ebe12ab) SHA1(acb4e07ba26f2daca5f1c234885ac0371c7ce87f) ) |
| 534 | 528 | |
| 535 | ROM_REGION( 0xc000, "tms6100", ROMREGION_ERASEFF ) // 8000-bfff = space reserved for cartridge | |
| 536 | ROM_LOAD( "cd2321.vsm", 0x0000, 0x4000, CRC(ac010cce) SHA1(c0200d857b62be696248ac2d684a390c66ab0c31) ) | |
| 537 | ROM_LOAD( "cd2322.vsm", 0x4000, 0x4000, CRC(b6f4bba4) SHA1(65d686a9385b5ef3f080a5f47c6b2418bb9455b0) ) | |
| 529 | ROM_REGION( 0xc000, "tms6100", ROMREGION_ERASEFF ) // uses only 1 rom, 8000-bfff = space reserved for cartridge | |
| 530 | ROM_LOAD( "cd62175.vsm", 0x0000, 0x4000, CRC(6e1063d4) SHA1(b5c66c51148c5921ecb8ffccd7a460ae639cdb68) ) | |
| 538 | 531 | ROM_END |
| 539 | 532 | |
| 540 | 533 | ROM_START( ladictee ) |
| r242703 | r242704 | |
| 556 | 549 | |
| 557 | 550 | ROM_START( snmath ) |
| 558 | 551 | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 559 | // typed in from patent 4946391, verified with source code (mark BAD_DUMP just to be unsure) | |
| 560 | // BTANB note: Mix It does not work at all, this is an original bug in the prototype. There are probably other minor bugs too. | |
| 561 | ROM_LOAD( "us4946391_t2074", 0x0000, 0x1000, BAD_DUMP CRC(011f0c2d) SHA1(d2e14d72e03ca864abd51da78ffb71a9da82f624) ) | |
| 552 | ROM_LOAD( "us4946391_t2074", 0x0000, 0x1000, BAD_DUMP CRC(011f0c2d) SHA1(d2e14d72e03ca864abd51da78ffb71a9da82f624) ) // placeholder, use the one we have | |
| 562 | 553 | |
| 563 | 554 | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 564 | 555 | ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| 565 | 556 | ROM_REGION( 2127, "maincpu:mpla", 0 ) |
| 566 | ROM_LOAD( "tms0270_cd2708_mpla.pla", 0, 2127, BAD_DUMP CRC(504b96bb) SHA1(67b691e7c0b97239410587e50e5182bf46475b43) ) // | |
| 557 | ROM_LOAD( "tms0270_cd2708_mpla.pla", 0, 2127, BAD_DUMP CRC(504b96bb) SHA1(67b691e7c0b97239410587e50e5182bf46475b43) ) // placeholder, use the one we have | |
| 567 | 558 | ROM_REGION( 1246, "maincpu:opla", 0 ) |
| 568 | ROM_LOAD( "tms0270_cd2708_opla.pla", 0, 1246, BAD_DUMP CRC(1abad753) SHA1(53d20b519ed73ce248368047a056836afbe3cd46) ) // | |
| 559 | ROM_LOAD( "tms0270_cd2708_opla.pla", 0, 1246, BAD_DUMP CRC(1abad753) SHA1(53d20b519ed73ce248368047a056836afbe3cd46) ) // placeholder, use the one we have | |
| 569 | 560 | |
| 570 | 561 | ROM_REGION( 0x8000, "tms6100", 0 ) |
| 571 | 562 | ROM_LOAD( "cd2392.vsm", 0x0000, 0x4000, CRC(4ed2e920) SHA1(8896f29e25126c1e4d9a47c9a325b35dddecc61f) ) |
| r242703 | r242704 | |
| 591 | 582 | ROM_RELOAD( 0x7000, 0x1000 ) |
| 592 | 583 | ROM_END |
| 593 | 584 | |
| 585 | ROM_START( snmathp ) | |
| 586 | ROM_REGION( 0x1000, "maincpu", 0 ) | |
| 587 | // typed in from patent 4946391, verified with source code (mark BAD_DUMP just to be unsure) | |
| 588 | // BTANB note: Mix It does not work at all, this is an original bug in the prototype. There are probably other minor bugs too. | |
| 589 | ROM_LOAD( "us4946391_t2074", 0x0000, 0x1000, BAD_DUMP CRC(011f0c2d) SHA1(d2e14d72e03ca864abd51da78ffb71a9da82f624) ) | |
| 594 | 590 | |
| 591 | ROM_REGION( 1246, "maincpu:ipla", 0 ) | |
| 592 | ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) | |
| 593 | ROM_REGION( 2127, "maincpu:mpla", 0 ) | |
| 594 | ROM_LOAD( "tms0270_cd2708_mpla.pla", 0, 2127, BAD_DUMP CRC(504b96bb) SHA1(67b691e7c0b97239410587e50e5182bf46475b43) ) // taken from cd2708, need to verify if it's same as cd2704 | |
| 595 | ROM_REGION( 1246, "maincpu:opla", 0 ) | |
| 596 | ROM_LOAD( "tms0270_cd2708_opla.pla", 0, 1246, BAD_DUMP CRC(1abad753) SHA1(53d20b519ed73ce248368047a056836afbe3cd46) ) // " | |
| 595 | 597 | |
| 596 | COMP( 1978, snspell, 0, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (US prototype)", GAME_IMPERFECT_SOUND ) // also US set 1 | |
| 598 | ROM_REGION( 0x8000, "tms6100", 0 ) | |
| 599 | ROM_LOAD( "cd2392.vsm", 0x0000, 0x4000, CRC(4ed2e920) SHA1(8896f29e25126c1e4d9a47c9a325b35dddecc61f) ) | |
| 600 | ROM_LOAD( "cd2393.vsm", 0x4000, 0x4000, CRC(571d5b5a) SHA1(83284755d9b77267d320b5b87fdc39f352433715) ) | |
| 601 | ROM_END | |
| 602 | ||
| 603 | ||
| 604 | ||
| 605 | COMP( 1978, snspell, 0, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (US set 1)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) | |
| 597 | 606 | COMP( 1980, snspella, snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (US set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 607 | COMP( 1978, snspellp, snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (US prototype)", GAME_IMPERFECT_SOUND ) | |
| 598 | 608 | COMP( 1978, snspelluk, snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (UK set 1)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 599 | 609 | COMP( 1981, snspelluka, snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (UK set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // different voice actor |
| 600 | COMP( 1979, snspelljp, snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "Speak & Spell (Japan)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) | |
| 601 | COMP( 1980, ladictee, snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "La Dictee Magnifique (France)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // doesn't work due to missing CD2702 MCU dump, German version has CD2702 too | |
| 610 | COMP( 1980, ladictee, snspell, 0, snspell, snspell, driver_device, 0, "Texas Instruments", "La Dictee Magnifique (France)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // doesn't work, custom MCU ROM? | |
| 602 | 611 | |
| 603 | COMP( 1980, snmath, 0, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US | |
| 612 | COMP( 1980, snmath, 0, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US set 1)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) | |
| 604 | 613 | COMP( 1986, snmatha, snmath, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 614 | COMP( 1980, snmathp, snmath, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US prototype)", GAME_IMPERFECT_SOUND ) |
| r242703 | r242704 | |
|---|---|---|
| 5 | 5 | |
| 6 | 6 | 0000-2fff ROM R D0-D7 |
| 7 | 7 | 3000-37ff ROM on Model III R D0-D7 |
| 8 | unused on Model I | |
| 8 | unused on Model I | |
| 9 | 9 | 37de UART status R/W D0-D7 |
| 10 | 10 | 37df UART data R/W D0-D7 |
| 11 | 11 | 37e0 interrupt latch address (lnw80 = for the realtime clock) |
| r242703 | r242704 | |
| 16 | 16 | 37e5 select disk drive 2 W |
| 17 | 17 | 37e7 select disk drive 3 W |
| 18 | 18 | 37e0-37e3 floppy motor W D0-D3 |
| 19 | or floppy head select W D3 | |
| 19 | or floppy head select W D3 | |
| 20 | 20 | 37e8 send a byte to printer W D0-D7 |
| 21 | 21 | 37e8 read printer status R D7 |
| 22 | 22 | 37ec-37ef FDC WD179x R/W D0-D7 |
| r242703 | r242704 | |
| 42 | 42 | Due to the above, the only working emulated UART is for the Model 3. |
| 43 | 43 | |
| 44 | 44 | Cassette baud rates: Model I level I - 250 baud |
| 45 | Model I level II and all clones - 500 baud | |
| 46 | Model III/4 - 500 and 1500 baud selectable at boot time | |
| 47 | - When it says "Cass?" press L for 500 baud, or Enter otherwise. | |
| 48 | LNW-80 - 500 baud @1.77MHz and 1000 baud @4MHz. | |
| 45 | Model I level II and all clones - 500 baud | |
| 46 | Model III/4 - 500 and 1500 baud selectable at boot time | |
| 47 | - When it says "Cass?" press L for 500 baud, or Enter otherwise. | |
| 48 | LNW-80 - 500 baud @1.77MHz and 1000 baud @4MHz. | |
| 49 | 49 | |
| 50 | 50 | I/O ports |
| 51 | 51 | FF: |
| r242703 | r242704 | |
| 92 | 92 | - 80-8F hires graphics (optional) |
| 93 | 93 | |
| 94 | 94 | About the ht1080z - This was made for schools in Hungary. Each comes with a BASIC extension roms |
| 95 | which activated Hungarian features. To activate - start emulation - enter SYSTEM | |
| 96 | Enter /12288 and the extensions will be installed and you are returned to READY. | |
| 97 | The ht1080z is identical to the System 80, apart from the character rom. | |
| 98 | The ht1080z2 has a modified extension rom and character generator. | |
| 95 | which activated Hungarian features. To activate - start emulation - enter SYSTEM | |
| 96 | Enter /12288 and the extensions will be installed and you are returned to READY. | |
| 97 | The ht1080z is identical to the System 80, apart from the character rom. | |
| 98 | The ht1080z2 has a modified extension rom and character generator. | |
| 99 | 99 | |
| 100 | 100 | About the RTC - The time is incremented while ever the cursor is flashing. It is stored in a series |
| 101 | of bytes in the computer's work area. The bytes are in a certain order, this is: | |
| 102 | seconds, minutes, hours, year, day, month. On a model 1, the seconds are stored at | |
| 103 | 0x4041, while on the model 4 it is 0x4217. A reboot always sets the time to zero. | |
| 101 | of bytes in the computer's work area. The bytes are in a certain order, this is: | |
| 102 | seconds, minutes, hours, year, day, month. On a model 1, the seconds are stored at | |
| 103 | 0x4041, while on the model 4 it is 0x4217. A reboot always sets the time to zero. | |
| 104 | 104 | |
| 105 | 105 | Model 4 memory organisation - |
| 106 | Mode 0: ROM=0-37E7 and 37EA-3FFF; Printer=37E8-37E9; Keyboard=3800-3BFF; Video=3C00-3FFF | |
| 107 | Mode 1: Keyboard and Video as above; 0-3FFF read=ROM and write=RAM | |
| 108 | Mode 2: Keyboard=F400-F7FF; Video=F800-FFFF; the rest is RAM | |
| 109 | Mode 3: All RAM | |
| 110 | In the "maincpu" memory map, the first 64k is given to the ROM, keyboard, printer and video, | |
| 111 | while the second 64k is RAM that is switched in as needed. The area from 4800-FFFF | |
| 112 | is considered a "black hole", any writes to there will disappear. | |
| 113 | The video is organised as 2 banks of 0x400 bytes, except in Mode 2 where it becomes contiguous. | |
| 106 | Mode 0: ROM=0-37E7 and 37EA-3FFF; Printer=37E8-37E9; Keyboard=3800-3BFF; Video=3C00-3FFF | |
| 107 | Mode 1: Keyboard and Video as above; 0-3FFF read=ROM and write=RAM | |
| 108 | Mode 2: Keyboard=F400-F7FF; Video=F800-FFFF; the rest is RAM | |
| 109 | Mode 3: All RAM | |
| 110 | In the "maincpu" memory map, the first 64k is given to the ROM, keyboard, printer and video, | |
| 111 | while the second 64k is RAM that is switched in as needed. The area from 4800-FFFF | |
| 112 | is considered a "black hole", any writes to there will disappear. | |
| 113 | The video is organised as 2 banks of 0x400 bytes, except in Mode 2 where it becomes contiguous. | |
| 114 | 114 | |
| 115 | 115 | Model 4P - is the same as Model 4 except: |
| 116 | - ROM is only 0000-0FFF, while 1000-37FF is given over to RAM | |
| 117 | - There is no cassette support in hardware. | |
| 116 | - ROM is only 0000-0FFF, while 1000-37FF is given over to RAM | |
| 117 | - There is no cassette support in hardware. | |
| 118 | 118 | |
| 119 | 119 | *************************************************************************** |
| 120 | 120 |
| r242703 | r242704 | |
|---|---|---|
| 1 | // license:BSD-3-Clause | |
| 2 | // copyright-holders:hap | |
| 3 | /*************************************************************************** | |
| 4 | ||
| 5 | TMS1100NLL MP3403 DBS 7836 SINGAPORE some game board with 7-segs. | |
| 6 | ||
| 7 | What old electronic game is this? | |
| 8 | ||
| 9 | some clues: | |
| 10 | - it's from 1978 | |
| 11 | - Merlin is MP3404, Amaze-A-Tron is MP3405, this one is MP3403 | |
| 12 | - it plays some short jingles (you need to be lucky with button mashing), | |
| 13 | jingles feel like maybe a horse racing game | |
| 14 | ||
| 15 | ***************************************************************************/ | |
| 16 | ||
| 17 | #include "emu.h" | |
| 18 | #include "cpu/tms0980/tms0980.h" | |
| 19 | #include "sound/speaker.h" | |
| 20 | ||
| 21 | // master clock is unknown, the value below is an approximation | |
| 22 | #define MASTER_CLOCK (350000) | |
| 23 | ||
| 24 | ||
| 25 | class unk3403_state : public driver_device | |
| 26 | { | |
| 27 | public: | |
| 28 | unk3403_state(const machine_config &mconfig, device_type type, const char *tag) | |
| 29 | : driver_device(mconfig, type, tag), | |
| 30 | m_maincpu(*this, "maincpu"), | |
| 31 | m_button_matrix(*this, "IN"), | |
| 32 | m_speaker(*this, "speaker") | |
| 33 | { } | |
| 34 | ||
| 35 | required_device<cpu_device> m_maincpu; | |
| 36 | required_ioport_array<4> m_button_matrix; | |
| 37 | required_device<speaker_sound_device> m_speaker; | |
| 38 | ||
| 39 | UINT16 m_r; | |
| 40 | UINT16 m_o; | |
| 41 | ||
| 42 | DECLARE_READ8_MEMBER(read_k); | |
| 43 | DECLARE_WRITE16_MEMBER(write_o); | |
| 44 | DECLARE_WRITE16_MEMBER(write_r); | |
| 45 | ||
| 46 | void leds_update(); | |
| 47 | ||
| 48 | virtual void machine_start(); | |
| 49 | }; | |
| 50 | ||
| 51 | ||
| 52 | ||
| 53 | /*************************************************************************** | |
| 54 | ||
| 55 | I/O | |
| 56 | ||
| 57 | ***************************************************************************/ | |
| 58 | ||
| 59 | void unk3403_state::leds_update() | |
| 60 | { | |
| 61 | // show debug clues | |
| 62 | static UINT8 leds[0x10] = { 0 }; | |
| 63 | char msg[0x100] = { 0 }; | |
| 64 | char dig[0x100] = { 0 }; | |
| 65 | sprintf(msg, "R, *R, O[R]"); | |
| 66 | ||
| 67 | for (int i = 0; i < 11; i++) | |
| 68 | { | |
| 69 | if (m_r >> i & 1) | |
| 70 | { | |
| 71 | leds[i]=m_o; | |
| 72 | } | |
| 73 | sprintf(dig, "\n %X %c %02X",i, (m_r >> i & 1) ? 'X' : '_', leds[i]); | |
| 74 | strcat(msg, dig); | |
| 75 | } | |
| 76 | ||
| 77 | popmessage("%s", msg); | |
| 78 | } | |
| 79 | ||
| 80 | READ8_MEMBER(unk3403_state::read_k) | |
| 81 | { | |
| 82 | UINT8 k = 0; | |
| 83 | ||
| 84 | // read selected button rows | |
| 85 | for (int i = 0; i < 4; i++) | |
| 86 | { | |
| 87 | if (m_r >> (i + 4) & 1) | |
| 88 | k |= m_button_matrix[i]->read(); | |
| 89 | } | |
| 90 | ||
| 91 | return k; | |
| 92 | } | |
| 93 | ||
| 94 | WRITE16_MEMBER(unk3403_state::write_r) | |
| 95 | { | |
| 96 | // R4-R7: input mux | |
| 97 | // R10: maybe a switch or other button row? | |
| 98 | // R9: speaker out | |
| 99 | m_speaker->level_w(data >> 9 & 1); | |
| 100 | ||
| 101 | // others: ? | |
| 102 | m_r = data; | |
| 103 | leds_update(); | |
| 104 | } | |
| 105 | ||
| 106 | WRITE16_MEMBER(unk3403_state::write_o) | |
| 107 | { | |
| 108 | // ? | |
| 109 | m_o = data; | |
| 110 | leds_update(); | |
| 111 | } | |
| 112 | ||
| 113 | ||
| 114 | ||
| 115 | /*************************************************************************** | |
| 116 | ||
| 117 | Inputs | |
| 118 | ||
| 119 | ***************************************************************************/ | |
| 120 | ||
| 121 | static INPUT_PORTS_START( unk3403 ) | |
| 122 | PORT_START("IN.0") // R4 | |
| 123 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) | |
| 124 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) | |
| 125 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) | |
| 126 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) | |
| 127 | ||
| 128 | PORT_START("IN.1") // R5 | |
| 129 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) | |
| 130 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) | |
| 131 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) | |
| 132 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) | |
| 133 | ||
| 134 | PORT_START("IN.2") // R6 | |
| 135 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) | |
| 136 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) | |
| 137 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) | |
| 138 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) // reset/newgame? | |
| 139 | ||
| 140 | PORT_START("IN.3") // R7 | |
| 141 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) | |
| 142 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) | |
| 143 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) | |
| 144 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) | |
| 145 | INPUT_PORTS_END | |
| 146 | ||
| 147 | ||
| 148 | ||
| 149 | /*************************************************************************** | |
| 150 | ||
| 151 | Machine Config | |
| 152 | ||
| 153 | ***************************************************************************/ | |
| 154 | ||
| 155 | void unk3403_state::machine_start() | |
| 156 | { | |
| 157 | m_r = 0; | |
| 158 | m_o = 0; | |
| 159 | ||
| 160 | save_item(NAME(m_r)); | |
| 161 | save_item(NAME(m_o)); | |
| 162 | } | |
| 163 | ||
| 164 | ||
| 165 | static const UINT16 unk3403_output_pla[0x20] = | |
| 166 | { | |
| 167 | /* O output PLA configuration currently unknown */ | |
| 168 | 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, | |
| 169 | 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, | |
| 170 | 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, | |
| 171 | 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f | |
| 172 | }; | |
| 173 | ||
| 174 | ||
| 175 | static MACHINE_CONFIG_START( unk3403, unk3403_state ) | |
| 176 | ||
| 177 | /* basic machine hardware */ | |
| 178 | MCFG_CPU_ADD("maincpu", TMS1100, MASTER_CLOCK) | |
| 179 | MCFG_TMS1XXX_OUTPUT_PLA(unk3403_output_pla) | |
| 180 | MCFG_TMS1XXX_READ_K_CB(READ8(unk3403_state, read_k)) | |
| 181 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(unk3403_state, write_o)) | |
| 182 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(unk3403_state, write_r)) | |
| 183 | ||
| 184 | /* no video! */ | |
| 185 | ||
| 186 | /* sound hardware */ | |
| 187 | MCFG_SPEAKER_STANDARD_MONO("mono") | |
| 188 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) | |
| 189 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) | |
| 190 | MACHINE_CONFIG_END | |
| 191 | ||
| 192 | ||
| 193 | ||
| 194 | /*************************************************************************** | |
| 195 | ||
| 196 | Game driver(s) | |
| 197 | ||
| 198 | ***************************************************************************/ | |
| 199 | ||
| 200 | ROM_START( unk3403 ) | |
| 201 | ROM_REGION( 0x0800, "maincpu", 0 ) | |
| 202 | ROM_LOAD( "tms1100nll_mp3403", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) ) | |
| 203 | ||
| 204 | ROM_REGION( 867, "maincpu:mpla", 0 ) | |
| 205 | ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified | |
| 206 | ROM_REGION( 365, "maincpu:opla", 0 ) | |
| 207 | ROM_LOAD( "tms1100_xxx_opla.pla", 0, 365, NO_DUMP ) | |
| 208 | ROM_END | |
| 209 | ||
| 210 | ||
| 211 | CONS( 1978, unk3403, 0, 0, unk3403, unk3403, driver_device, 0, "<unknown>", "unknown TMS1100 electronic game", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) |
| r242703 | r242704 | |
|---|---|---|
| 14 | 14 | TODO: |
| 15 | 15 | |
| 16 | 16 | - keyboard |
| 17 | - expansion bus | |
| 18 | - Z80 card | |
| 19 | - Winchester DMA card (Xebec S1410 + Tandon TM502/TM603SE) | |
| 20 | - RAM cards | |
| 21 | - clock cards | |
| 17 | - expansion bus | |
| 18 | - Z80 card | |
| 19 | - Winchester DMA card (Xebec S1410 + Tandon TM502/TM603SE) | |
| 20 | - RAM cards | |
| 21 | - clock cards | |
| 22 | 22 | - floppy 8048 |
| 23 | 23 | - hires graphics |
| 24 | 24 | - brightness/contrast |
| r242703 | r242704 | |
|---|---|---|
| 205 | 205 | MCFG_T11_INITIAL_MODE(5 << 13) |
| 206 | 206 | |
| 207 | 207 | /* |
| 208 | MCFG_CPU_ADD("charcpu", I8085A, XTAL_16MHz / 4) | |
| 209 | MCFG_CPU_PROGRAM_MAP(vt240_char_mem) | |
| 210 | MCFG_CPU_IO_MAP(vt240_char_io) | |
| 211 | MCFG_CPU_VBLANK_INT_DRIVER("screen", vt240_state, vt240_irq) | |
| 208 | MCFG_CPU_ADD("charcpu", I8085A, XTAL_16MHz / 4) | |
| 209 | MCFG_CPU_PROGRAM_MAP(vt240_char_mem) | |
| 210 | MCFG_CPU_IO_MAP(vt240_char_io) | |
| 211 | MCFG_CPU_VBLANK_INT_DRIVER("screen", vt240_state, vt240_irq) | |
| 212 | 212 | */ |
| 213 | 213 | |
| 214 | 214 | MCFG_SCREEN_ADD("screen", RASTER) |
| r242703 | r242704 | |
| 216 | 216 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 217 | 217 | MCFG_SCREEN_SIZE(640, 480) |
| 218 | 218 | MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) |
| 219 | // | |
| 219 | // MCFG_VIDEO_START_OVERRIDE(vt240_state,vt240) | |
| 220 | 220 | MCFG_SCREEN_UPDATE_DEVICE("upd7220", upd7220_device, screen_update) |
| 221 | 221 | MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette") |
| 222 | 222 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", vt240) |
| r242703 | r242704 | |
| 226 | 226 | MCFG_UPD7220_DRAW_TEXT_CALLBACK_OWNER(vt240_state, hgdc_draw_text) |
| 227 | 227 | |
| 228 | 228 | MCFG_MC68681_ADD("duart", XTAL_3_6864MHz) /* 2681 duart (not 68681!) */ |
| 229 | // | |
| 229 | // MCFG_MC68681_IRQ_CALLBACK(WRITELINE(dectalk_state, dectalk_duart_irq_handler)) | |
| 230 | 230 | MCFG_MC68681_A_TX_CALLBACK(DEVWRITELINE("rs232", rs232_port_device, write_txd)) |
| 231 | // MCFG_MC68681_B_TX_CALLBACK(WRITELINE(dectalk_state, dectalk_duart_txa)) | |
| 232 | // MCFG_MC68681_INPORT_CALLBACK(READ8(dectalk_state, dectalk_duart_input)) | |
| 233 | // MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(dectalk_state, dectalk_duart_output)) | |
| 234 | // MCFG_I8251_DTR_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_dtr)) | |
| 235 | // MCFG_I8251_RTS_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_rts)) | |
| 231 | // MCFG_MC68681_B_TX_CALLBACK(WRITELINE(dectalk_state, dectalk_duart_txa)) | |
| 232 | // MCFG_MC68681_INPORT_CALLBACK(READ8(dectalk_state, dectalk_duart_input)) | |
| 233 | // MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(dectalk_state, dectalk_duart_output)) | |
| 234 | // MCFG_I8251_DTR_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_dtr)) | |
| 235 | // MCFG_I8251_RTS_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_rts)) | |
| 236 | 236 | |
| 237 | 237 | MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "null_modem") |
| 238 | 238 | MCFG_RS232_RXD_HANDLER(DEVWRITELINE("duart", mc68681_device, rx_a_w)) |
| 239 | // | |
| 239 | // MCFG_RS232_DSR_HANDLER(DEVWRITELINE("duart", mc68681_device, ipX_w)) | |
| 240 | 240 | MACHINE_CONFIG_END |
| 241 | 241 | |
| 242 | 242 | static MACHINE_CONFIG_START( mc7105, vt240_state ) |
| r242703 | r242704 | |
| 244 | 244 | |
| 245 | 245 | // serial connection to MS7004 keyboard |
| 246 | 246 | MCFG_DEVICE_ADD("i8251", I8251, 0) |
| 247 | // | |
| 247 | // MCFG_I8251_RXRDY_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir1_w)) | |
| 248 | 248 | |
| 249 | 249 | MCFG_DEVICE_ADD("ms7004", MS7004, 0) |
| 250 | 250 | MCFG_MS7004_TX_HANDLER(DEVWRITELINE("i8251", i8251_device, write_rxd)) |
| r242703 | r242704 | |
|---|---|---|
| 9 | 9 | |
| 10 | 10 | #include "emu.h" |
| 11 | 11 | #include "cpu/z80/z80.h" |
| 12 | #include "video/tea1002.h" | |
| 13 | 12 | #include "imagedev/cassette.h" |
| 14 | 13 | #include "machine/ram.h" |
| 15 | 14 | #include "sound/ay8910.h" |
| r242703 | r242704 | |
| 39 | 38 | m_y7(*this, "Y7"), |
| 40 | 39 | m_gfxdecode(*this, "gfxdecode"), |
| 41 | 40 | m_screen(*this, "screen"), |
| 42 | m_tea1002(*this, "encoder"), | |
| 43 | 41 | m_palette(*this, "palette") |
| 44 | 42 | { } |
| 45 | 43 | |
| r242703 | r242704 | |
| 60 | 58 | required_ioport m_y7; |
| 61 | 59 | required_device<gfxdecode_device> m_gfxdecode; |
| 62 | 60 | required_device<screen_device> m_screen; |
| 63 | required_device<tea1002_device> m_tea1002; | |
| 64 | 61 | required_device<palette_device> m_palette; |
| 65 | 62 | |
| 66 | 63 | UINT8 m_scrambler; |
| r242703 | r242704 | |
|---|---|---|
| 19 | 19 | #define CONTROL1_TAG "ctrl1" |
| 20 | 20 | #define CONTROL2_TAG "ctrl2" |
| 21 | 21 | |
| 22 | #include "bus/gamegear/gear2gear.h" | |
| 23 | 22 | #include "bus/sms_ctrl/smsctrl.h" |
| 24 | 23 | #include "bus/sms_exp/smsexp.h" |
| 25 | 24 | #include "bus/sega8/sega8_slot.h" |
| r242703 | r242704 | |
| 37 | 36 | m_region_maincpu(*this, "maincpu"), |
| 38 | 37 | m_port_ctrl1(*this, CONTROL1_TAG), |
| 39 | 38 | m_port_ctrl2(*this, CONTROL2_TAG), |
| 40 | m_port_gear2gear(*this, "gear2gear"), | |
| 41 | m_port_gg_dc(*this, "GG_PORT_DC"), | |
| 42 | 39 | m_port_pause(*this, "PAUSE"), |
| 43 | 40 | m_port_reset(*this, "RESET"), |
| 44 | 41 | m_port_start(*this, "START"), |
| r242703 | r242704 | |
| 66 | 63 | required_memory_region m_region_maincpu; |
| 67 | 64 | optional_device<sms_control_port_device> m_port_ctrl1; |
| 68 | 65 | optional_device<sms_control_port_device> m_port_ctrl2; |
| 69 | optional_device<gg_gear2gear_port_device> m_port_gear2gear; | |
| 70 | optional_ioport m_port_gg_dc; | |
| 71 | 66 | optional_ioport m_port_pause; |
| 72 | 67 | optional_ioport m_port_reset; |
| 73 | 68 | optional_ioport m_port_start; |
| r242703 | r242704 | |
| 200 | 195 | void setup_media_slots(); |
| 201 | 196 | void setup_enabled_slots(); |
| 202 | 197 | void lphaser_hcount_latch(); |
| 203 | void sms_get_inputs(); | |
| 198 | void sms_get_inputs(address_space &space); | |
| 204 | 199 | }; |
| 205 | 200 | |
| 206 | 201 | class smssdisp_state : public sms_state |
| r242703 | r242704 | |
|---|---|---|
| 48 | 48 | #define RS232_A_TAG "rs232a" |
| 49 | 49 | #define RS232_B_TAG "rs232b" |
| 50 | 50 | #define SCREEN_TAG "screen" |
| 51 | #define KB_TAG | |
| 51 | #define KB_TAG "kb" | |
| 52 | 52 | #define FDC_TAG "fdc" |
| 53 | 53 | |
| 54 | 54 | class victor9k_state : public driver_device |
| r242703 | r242704 | |
|---|---|---|
| 1 | <?xml version="1.0"?> | |
| 2 | <mamelayout version="2"> | |
| 3 | ||
| 4 | <!-- define elements --> | |
| 5 | ||
| 6 | <element name="digit" defstate="0"> | |
| 7 | <led7seg><color red="1.0" green="0.2" blue="0.2" /></led7seg> | |
| 8 | </element> | |
| 9 | ||
| 10 | <element name="lamp_red" defstate="0"> | |
| 11 | <disk state="0"><color red="0.2" green="0.04" blue="0.04" /></disk> | |
| 12 | <disk state="1"><color red="1.0" green="0.2" blue="0.2" /></disk> | |
| 13 | </element> | |
| 14 | <element name="lamp_green" defstate="0"> | |
| 15 | <disk state="0"><color red="0.04" green="0.2" blue="0.04" /></disk> | |
| 16 | <disk state="1"><color red="0.2" green="1.0" blue="0.2" /></disk> | |
| 17 | </element> | |
| 18 | ||
| 19 | ||
| 20 | ||
| 21 | <!-- build screen --> | |
| 22 | ||
| 23 | <view name="Internal Layout"> | |
| 24 | <bounds left="0" right="50" top="0" bottom="15" /> | |
| 25 | ||
| 26 | <bezel name="lamp0" element="lamp_red"><bounds x="3.5" y="6" width="3" height="3" /></bezel> | |
| 27 | <bezel name="lamp1" element="lamp_green"><bounds x="13.5" y="6" width="3" height="3" /></bezel> | |
| 28 | ||
| 29 | <bezel name="digit1" element="digit"><bounds x="30" y="0" width="10" height="15" /></bezel> | |
| 30 | <bezel name="digit0" element="digit"><bounds x="40" y="0" width="10" height="15" /></bezel> | |
| 31 | ||
| 32 | </view> | |
| 33 | </mamelayout> |
| r242703 | r242704 | |
|---|---|---|
| 50 | 50 | |
| 51 | 51 | <view name="Internal Layout"> |
| 52 | 52 | <bounds left="0" right="165" top="0" bottom="105" /> |
| 53 | ||
| 53 | ||
| 54 | 54 | <bezel element="static_yellow"><bounds x="3" y="17" width="10" height="83" /></bezel> |
| 55 | 55 | <bezel element="static_black"><bounds x="4" y="18" width="8" height="81" /></bezel> |
| 56 | 56 | |
| r242703 | r242704 | |
| 75 | 75 | <bezel element="text_3"><bounds x="64.5" y="4" width="8" height="8" /></bezel> |
| 76 | 76 | <bezel element="text_4"><bounds x="84.5" y="4" width="8" height="8" /></bezel> |
| 77 | 77 | |
| 78 | ||
| 78 | ||
| 79 | 79 | <!-- lamp matrix --> |
| 80 | ||
| 80 | ||
| 81 | 81 | <bezel element="static_gray"><bounds x="17" y="17" width="83" height="83" /></bezel> |
| 82 | 82 | |
| 83 | 83 | <bezel name="lamp20" element="lamp"><bounds x="20" y="20" width="17" height="17" /></bezel> |
| r242703 | r242704 | |
|---|---|---|
| 500 | 500 | UINT16 dest_addr = m_dma.dest_current & m_dma.dest_mask; |
| 501 | 501 | UINT8 dest_adj = (3 - (m_dma.dest_x_current & 3)) << 1; |
| 502 | 502 | UINT8 src_adj = (3 - (m_dma.source_x_current & 3)) << 1; |
| 503 | ||
| 503 | ||
| 504 | 504 | /* handle DMA for 1 pixel */ |
| 505 | 505 | // Get new pixel |
| 506 | 506 | UINT8 source_pixel = (m_dma.source_bank[src_addr] >> src_adj) & 3; |
| r242703 | r242704 | |
|---|---|---|
| 725 | 725 | if (LOG_KEYBOARD) |
| 726 | 726 | logerror("keyboard command : inquiry\n"); |
| 727 | 727 | |
| 728 | m_inquiry_timeout->adjust( | |
| 729 | attotime(0, DOUBLE_TO_ATTOSECONDS(0.25)), 0); | |
| 728 | m_keyboard_reply = scan_keyboard(); | |
| 729 | if (m_keyboard_reply == 0x7B) | |
| 730 | { | |
| 731 | /* if NULL, wait until key pressed or timeout */ | |
| 732 | m_inquiry_timeout->adjust( | |
| 733 | attotime(0, DOUBLE_TO_ATTOSECONDS(0.25)), 0); | |
| 734 | } | |
| 730 | 735 | break; |
| 731 | 736 | |
| 732 | 737 | case 0x14: |
| r242703 | r242704 | |
| 835 | 840 | { |
| 836 | 841 | count_x++; |
| 837 | 842 | m_mouse_bit_x = 0; |
| 838 | x_needs_update = 2; | |
| 839 | 843 | } |
| 840 | 844 | else |
| 841 | 845 | { |
| 842 | 846 | count_x--; |
| 843 | 847 | m_mouse_bit_x = 1; |
| 844 | x_needs_update = 1; | |
| 845 | 848 | } |
| 849 | x_needs_update = 1; | |
| 846 | 850 | } |
| 847 | 851 | else if (count_y) |
| 848 | 852 | { |
| r242703 | r242704 | |
| 850 | 854 | { |
| 851 | 855 | count_y++; |
| 852 | 856 | m_mouse_bit_y = 1; |
| 853 | y_needs_update = 1; | |
| 854 | 857 | } |
| 855 | 858 | else |
| 856 | 859 | { |
| 857 | 860 | count_y--; |
| 858 | 861 | m_mouse_bit_y = 0; |
| 859 | y_needs_update = 2; | |
| 860 | 862 | } |
| 863 | y_needs_update = 1; | |
| 861 | 864 | } |
| 862 | 865 | |
| 863 | 866 | if (x_needs_update || y_needs_update) |
| r242703 | r242704 | |
| 1037 | 1040 | void mac_state::scc_mouse_irq(int x, int y) |
| 1038 | 1041 | { |
| 1039 | 1042 | scc8530_t *scc = machine().device<scc8530_t>("scc"); |
| 1040 | static int lasty = 0; | |
| 1041 | static int lastx = 0; | |
| 1042 | ||
| 1043 | 1043 | if (x && y) |
| 1044 | 1044 | { |
| 1045 | if (m_last_was_x) | |
| 1045 | if (m_last_was_x) | |
| 1046 | 1046 | scc->set_status(0x0a); |
| 1047 | if(x == 2) { | |
| 1048 | if(lastx) { | |
| 1049 | scc->set_reg_a(0, 0x04); | |
| 1050 | m_mouse_bit_x = 0; | |
| 1051 | } else { | |
| 1052 | scc->set_reg_a(0, 0x0C); | |
| 1053 | m_mouse_bit_x = 1; | |
| 1054 | } | |
| 1055 | } else { | |
| 1056 | if(lastx) { | |
| 1057 | scc->set_reg_a(0, 0x04); | |
| 1058 | m_mouse_bit_x = 1; | |
| 1059 | } else { | |
| 1060 | scc->set_reg_a(0, 0x0C); | |
| 1061 | m_mouse_bit_x = 0; | |
| 1062 | } | |
| 1063 | } | |
| 1064 | lastx = !lastx; | |
| 1065 | } else { | |
| 1047 | else | |
| 1066 | 1048 | scc->set_status(0x02); |
| 1067 | if(y == 2) { | |
| 1068 | if(lasty) { | |
| 1069 | scc->set_reg_b(0, 0x04); | |
| 1070 | m_mouse_bit_y = 0; | |
| 1071 | } else { | |
| 1072 | scc->set_reg_b(0, 0x0C); | |
| 1073 | m_mouse_bit_y = 1; | |
| 1074 | } | |
| 1075 | } else { | |
| 1076 | if(lasty) { | |
| 1077 | scc->set_reg_b(0, 0x04); | |
| 1078 | m_mouse_bit_y = 1; | |
| 1079 | } else { | |
| 1080 | scc->set_reg_b(0, 0x0C); | |
| 1081 | m_mouse_bit_y = 0; | |
| 1082 | } | |
| 1083 | } | |
| 1084 | lasty = !lasty; | |
| 1085 | } | |
| 1086 | 1049 | |
| 1087 | 1050 | m_last_was_x ^= 1; |
| 1088 | 1051 | } |
| 1089 | 1052 | else |
| 1090 | 1053 | { |
| 1091 | if (x) | |
| 1054 | if (x) | |
| 1092 | 1055 | scc->set_status(0x0a); |
| 1093 | if(x == 2) { | |
| 1094 | if(lastx) { | |
| 1095 | scc->set_reg_a(0, 0x04); | |
| 1096 | m_mouse_bit_x = 0; | |
| 1097 | } else { | |
| 1098 | scc->set_reg_a(0, 0x0C); | |
| 1099 | m_mouse_bit_x = 1; | |
| 1100 | } | |
| 1101 | } else { | |
| 1102 | if(lastx) { | |
| 1103 | scc->set_reg_a(0, 0x04); | |
| 1104 | m_mouse_bit_x = 1; | |
| 1105 | } else { | |
| 1106 | scc->set_reg_a(0, 0x0C); | |
| 1107 | m_mouse_bit_x = 0; | |
| 1108 | } | |
| 1109 | } | |
| 1110 | lastx = !lastx; | |
| 1111 | } else { | |
| 1056 | else | |
| 1112 | 1057 | scc->set_status(0x02); |
| 1113 | if(y == 2) { | |
| 1114 | if(lasty) { | |
| 1115 | scc->set_reg_b(0, 0x04); | |
| 1116 | m_mouse_bit_y = 0; | |
| 1117 | } else { | |
| 1118 | scc->set_reg_b(0, 0x0C); | |
| 1119 | m_mouse_bit_y = 1; | |
| 1120 | } | |
| 1121 | } else { | |
| 1122 | if(lasty) { | |
| 1123 | scc->set_reg_b(0, 0x04); | |
| 1124 | m_mouse_bit_y = 1; | |
| 1125 | } else { | |
| 1126 | scc->set_reg_b(0, 0x0C); | |
| 1127 | m_mouse_bit_y = 0; | |
| 1128 | } | |
| 1129 | } | |
| 1130 | lasty = !lasty; | |
| 1131 | } | |
| 1132 | 1058 | } |
| 1133 | 1059 | |
| 1134 | 1060 | this->set_scc_interrupt(1); |
| r242703 | r242704 | |
| 2090 | 2016 | /* set up RAM mirror at 0x600000-0x6fffff (0x7fffff ???) */ |
| 2091 | 2017 | mac_install_memory(0x600000, 0x6fffff, m_ram->size(), m_ram->pointer(), FALSE, "bank2"); |
| 2092 | 2018 | |
| 2093 | /* set up ROM at 0x400000-0x4fffff (-0x5fffff for mac 128k/512k/512ke) */ | |
| 2094 | mac_install_memory(0x400000, (model >= MODEL_MAC_PLUS) ? 0x4fffff : 0x5fffff, | |
| 2019 | /* set up ROM at 0x400000-0x43ffff (-0x5fffff for mac 128k/512k/512ke) */ | |
| 2020 | mac_install_memory(0x400000, (model >= MODEL_MAC_PLUS) ? 0x43ffff : 0x5fffff, | |
| 2095 | 2021 | memregion("bootrom")->bytes(), memregion("bootrom")->base(), TRUE, "bank3"); |
| 2096 | 2022 | } |
| 2097 | 2023 | |
| r242703 | r242704 | |
| 2222 | 2148 | |
| 2223 | 2149 | #ifndef MAC_USE_EMULATED_KBD |
| 2224 | 2150 | /* handle keyboard */ |
| 2225 | if (m_kbd_comm == TRUE | |
| 2151 | if (m_kbd_comm == TRUE) | |
| 2226 | 2152 | { |
| 2227 | 2153 | int keycode = scan_keyboard(); |
| 2228 | 2154 |
| r242703 | r242704 | |
|---|---|---|
| 216 | 216 | } |
| 217 | 217 | |
| 218 | 218 | const device_type NGEN_KEYBOARD = &device_creator<ngen_keyboard_device>; |
| 219 |
| r242703 | r242704 | |
|---|---|---|
| 940 | 940 | } |
| 941 | 941 | else |
| 942 | 942 | { |
| 943 | logerror("Succes | |
| 943 | logerror("Succesfully read mode1 frame #%d\n", m_current_frame); | |
| 944 | 944 | } |
| 945 | 945 | |
| 946 | 946 | m_data_buffer_index = 0; |
| r242703 | r242704 | |
|---|---|---|
| 45 | 45 | |
| 46 | 46 | WRITE_LINE_MEMBER(sms_state::sms_ctrl2_th_input) |
| 47 | 47 | { |
| 48 | if (m_is_gamegear && (!m_cartslot->exists() || !m_cartslot->m_cart->get_sms_mode())) | |
| 49 | return; | |
| 50 | ||
| 51 | 48 | // Check if TH of controller port 2 is set to input (1) |
| 52 | 49 | if (m_io_ctrl_reg & 0x08) |
| 53 | 50 | { |
| r242703 | r242704 | |
| 66 | 63 | } |
| 67 | 64 | |
| 68 | 65 | |
| 69 | void sms_state::sms_get_inputs() | |
| 66 | void sms_state::sms_get_inputs( address_space &space ) | |
| 70 | 67 | { |
| 71 | UINT8 data1 = 0xff; | |
| 72 | UINT8 data2 = 0xff; | |
| 68 | UINT8 data1, data2; | |
| 73 | 69 | |
| 74 | 70 | m_port_dc_reg = 0xff; |
| 75 | 71 | m_port_dd_reg = 0xff; |
| r242703 | r242704 | |
| 78 | 74 | // physical pins numbering. For register bits whose order differs, |
| 79 | 75 | // it's necessary move the equivalent controller bits to match. |
| 80 | 76 | |
| 81 | if (m_is_gamegear) | |
| 82 | { | |
| 83 | data1 = m_port_gg_dc->read(); | |
| 84 | m_port_dc_reg &= ~0x03f | data1; | |
| 85 | } | |
| 86 | else | |
| 87 | { | |
| 88 | data1 = m_port_ctrl1->port_r(); | |
| 89 | m_port_dc_reg &= ~0x0f | data1; // Up, Down, Left, Right | |
| 90 | m_port_dc_reg &= ~0x10 | (data1 >> 1); // TL (Button 1) | |
| 91 | m_port_dc_reg &= ~0x20 | (data1 >> 2); // TR (Button 2) | |
| 92 | } | |
| 77 | data1 = m_port_ctrl1->port_r(); | |
| 78 | m_port_dc_reg &= ~0x0f | data1; // Up, Down, Left, Right | |
| 79 | m_port_dc_reg &= ~0x10 | (data1 >> 1); // TL (Button 1) | |
| 80 | m_port_dc_reg &= ~0x20 | (data1 >> 2); // TR (Button 2) | |
| 93 | 81 | |
| 94 | if (m_is_gamegear) | |
| 95 | { | |
| 96 | if (m_cartslot->exists() && m_cartslot->m_cart->get_sms_mode()) | |
| 97 | data2 = m_port_gear2gear->port_r(); | |
| 98 | } | |
| 99 | else | |
| 100 | { | |
| 101 | data2 = m_port_ctrl2->port_r(); | |
| 102 | } | |
| 82 | data2 = m_port_ctrl2->port_r(); | |
| 103 | 83 | m_port_dc_reg &= ~0xc0 | (data2 << 6); // Up, Down |
| 104 | 84 | m_port_dd_reg &= ~0x03 | (data2 >> 2); // Left, Right |
| 105 | 85 | m_port_dd_reg &= ~0x04 | (data2 >> 3); // TL (Button 1) |
| r242703 | r242704 | |
| 136 | 116 | } |
| 137 | 117 | else |
| 138 | 118 | { |
| 139 | sms_get_inputs(); | |
| 119 | sms_get_inputs(space); | |
| 140 | 120 | return m_port_dc_reg; |
| 141 | 121 | } |
| 142 | 122 | } |
| r242703 | r242704 | |
| 149 | 129 | UINT8 ctrl1_port_data = 0xff; |
| 150 | 130 | UINT8 ctrl2_port_data = 0xff; |
| 151 | 131 | |
| 152 | if (m_is_gamegear && (!m_cartslot->exists() || !m_cartslot->m_cart->get_sms_mode())) | |
| 153 | { | |
| 154 | m_io_ctrl_reg = data; | |
| 155 | return; | |
| 156 | } | |
| 157 | ||
| 158 | 132 | // Controller Port 1: |
| 159 | 133 | |
| 160 | 134 | // check if TR or TH are set to output (0). |
| r242703 | r242704 | |
| 197 | 171 | } |
| 198 | 172 | if (!m_is_gamegear) |
| 199 | 173 | m_port_ctrl2->port_w(ctrl2_port_data); |
| 200 | else | |
| 201 | m_port_gear2gear->port_w(ctrl2_port_data); // not verified | |
| 202 | 174 | } |
| 203 | 175 | // check if TH is set to input (1). |
| 204 | 176 | if (data & 0x08) |
| 205 | 177 | { |
| 206 | 178 | if (!m_is_gamegear) |
| 207 | 179 | ctrl2_port_data &= ~0x40 | m_port_ctrl2->port_r(); |
| 208 | else | |
| 209 | ctrl2_port_data &= ~0x40 | m_port_gear2gear->port_r(); // not verified | |
| 210 | 180 | |
| 211 | 181 | // check if TH input level is high (1) and was output/low (0) |
| 212 | 182 | if ((ctrl2_port_data & 0x40) && !(m_io_ctrl_reg & 0x88)) |
| r242703 | r242704 | |
| 262 | 232 | { |
| 263 | 233 | if (m_is_mark_iii) |
| 264 | 234 | { |
| 265 | sms_get_inputs(); | |
| 235 | sms_get_inputs(space); | |
| 266 | 236 | return m_port_dc_reg; |
| 267 | 237 | } |
| 268 | 238 | |
| 269 | if ( | |
| 239 | if (m_mem_ctrl_reg & IO_CHIP) | |
| 270 | 240 | { |
| 271 | 241 | return 0xff; |
| 272 | 242 | } |
| 273 | 243 | else |
| 274 | 244 | { |
| 275 | sms_get_inputs(); | |
| 245 | sms_get_inputs(space); | |
| 276 | 246 | |
| 277 | 247 | // Check if TR of controller port 1 is set to output (0) |
| 278 | 248 | if (!(m_io_ctrl_reg & 0x01)) |
| r242703 | r242704 | |
| 290 | 260 | { |
| 291 | 261 | if (m_is_mark_iii) |
| 292 | 262 | { |
| 293 | sms_get_inputs(); | |
| 263 | sms_get_inputs(space); | |
| 294 | 264 | return m_port_dd_reg; |
| 295 | 265 | } |
| 296 | 266 | |
| 297 | if ( | |
| 267 | if (m_mem_ctrl_reg & IO_CHIP) | |
| 298 | 268 | return 0xff; |
| 299 | 269 | |
| 300 | sms_get_inputs(); | |
| 270 | sms_get_inputs(space); | |
| 301 | 271 | |
| 302 | 272 | // Check if TR of controller port 2 is set to output (0) |
| 303 | 273 | if (!(m_io_ctrl_reg & 0x04)) |
| r242703 | r242704 | |
| 306 | 276 | m_port_dd_reg &= ~0x08 | ((m_io_ctrl_reg & 0x40) >> 3); |
| 307 | 277 | } |
| 308 | 278 | |
| 309 | if (m_is_smsj | |
| 279 | if (m_is_smsj) | |
| 310 | 280 | { |
| 311 | 281 | // For Japanese Master System, set upper 4 bits with TH/TR |
| 312 | 282 | // direction bits of IO control register, according to Enri's |
| 313 | 283 | // docs (http://www43.tok2.com/home/cmpslv/Sms/EnrSms.htm). |
| 314 | 284 | // This makes the console incapable of using the Light Phaser. |
| 315 | // Assume the same for a Japanese Game Gear. | |
| 316 | 285 | m_port_dd_reg &= ~0x10 | ((m_io_ctrl_reg & 0x01) << 4); |
| 317 | 286 | m_port_dd_reg &= ~0x20 | ((m_io_ctrl_reg & 0x04) << 3); |
| 318 | 287 | m_port_dd_reg &= ~0x40 | ((m_io_ctrl_reg & 0x02) << 5); |
| r242703 | r242704 | |
| 1299 | 1268 | /* Do horizontal scaling */ |
| 1300 | 1269 | for (int plot_x = plot_min_x; plot_x <= plot_max_x;) |
| 1301 | 1270 | { |
| 1302 | for (int j = (plot_x - plot_x_group); j <= MIN(1, plot_max_x - plot_x_group); j++) | |
| 1271 | for (int j = (plot_x - plot_x_group); j <= MIN(1, plot_max_x - plot_x_group); j++) | |
| 1303 | 1272 | { |
| 1304 | 1273 | if (sms_x + j >= vdp_bitmap.cliprect().min_x && sms_x + j + 1 <= vdp_bitmap.cliprect().max_x) |
| 1305 | 1274 | { |
| r242703 | r242704 | |
| 1366 | 1335 | rgb_t c4 = line4[plot_x]; |
| 1367 | 1336 | p_bitmap[plot_x] = |
| 1368 | 1337 | rgb_t( ( c1.r() / 6 + c2.r() / 3 + c3.r() / 3 + c4.r() / 6 ), |
| 1369 | ( c1.g() / 6 + c2.g() / 3 + c3.g() / 3 + c4.g() / 6 ), | |
| 1370 | ( c1.b() / 6 + c2.b() / 3 + c3.b() / 3 + c4.b() / 6 ) ); | |
| 1338 | ( c1.g() / 6 + c2.g() / 3 + c3.g() / 3 + c4.g() / 6 ), | |
| 1339 | ( c1.b() / 6 + c2.b() / 3 + c3.b() / 3 + c4.b() / 6 ) ); | |
| 1371 | 1340 | } |
| 1372 | 1341 | } |
| 1373 | 1342 | } |
| r242703 | r242704 | |
|---|---|---|
| 593 | 593 | d1, d0 Cassette output */ |
| 594 | 594 | |
| 595 | 595 | static const double levels[4] = { 0.0, -1.0, 0.0, 1.0 }; |
| 596 | static int init = 0; | |
| 597 | 596 | |
| 598 | 597 | m_cassette->change_state(( data & 4 ) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR ); |
| 599 | 598 | m_cassette->output(levels[data & 3]); |
| r242703 | r242704 | |
| 601 | 600 | |
| 602 | 601 | m_mode = (m_mode & 0xfe) | ((data & 8) >> 3); |
| 603 | 602 | |
| 604 | if (!init) | |
| 605 | { | |
| 606 | init = 1; | |
| 607 | static INT16 speaker_levels[4] = { 0, -32768, 0, 32767 }; | |
| 608 | m_speaker->static_set_levels(*m_speaker, 4, speaker_levels); | |
| 609 | ||
| 610 | } | |
| 611 | 603 | /* Speaker for System-80 MK II - only sounds if relay is off */ |
| 612 | 604 | if (~data & 4) |
| 613 | 605 | m_speaker->level_w(data & 3); |
| r242703 | r242704 | |
|---|---|---|
| 11 | 11 | |
| 12 | 12 | /* |
| 13 | 13 | |
| 14 | ||
| 14 | value error description | |
| 15 | 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 | |
| 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 | 25 | |
| 26 | 11 Noise on sync | |
| 27 | FF No sync (bad or unformatted disk) | |
| 26 | 11 Noise on sync | |
| 27 | FF No sync (bad or unformatted disk) | |
| 28 | 28 | |
| 29 | 29 | */ |
| 30 | 30 | |
| r242703 | r242704 | |
| 32 | 32 | |
| 33 | 33 | TODO: |
| 34 | 34 | |
| 35 | - communication error with SCP after loading boot sector | |
| 36 | - bp ff1a8 | |
| 37 | - patch ff1ab=c3 | |
| 35 | - communication error with SCP after loading boot sector | |
| 36 | - bp ff1a8 | |
| 37 | - patch ff1ab=c3 | |
| 38 | 38 | - single/double sided jumper |
| 39 | 39 | - header sync length unknown (6 is too short) |
| 40 | 40 | - 8048 spindle speed control |
| r242703 | r242704 | |
| 60 | 60 | |
| 61 | 61 | // this is exactly the same decode/encode as used in the Commodore 4040/8050 series drives |
| 62 | 62 | #define GCR_DECODE(_e, _i) \ |
| 63 | ||
| 63 | ((BIT(_e, 6) << 7) | (BIT(_i, 7) << 6) | (_e & 0x33) | (BIT(_e, 2) << 3) | (_i & 0x04)) | |
| 64 | 64 | |
| 65 | 65 | // E7 E6 I7 E5 E4 E3 E2 I2 E1 E0 |
| 66 | 66 | #define GCR_ENCODE(_e, _i) \ |
| 67 | ||
| 67 | ((_e & 0xc0) << 2 | (_i & 0x80) | (_e & 0x3c) << 1 | (_i & 0x04) | (_e & 0x03)) | |
| 68 | 68 | |
| 69 | 69 | // Tandon TM-100 spindle @ 300RPM, measured TACH 12VAC 256Hz |
| 70 | 70 | // TACH = RPM / 60 * SPINDLE RATIO * MOTOR POLES |
| 71 | 71 | // 256 = 300 / 60 * 6.4 * 8 |
| 72 | #define SPINDLE_RATIO 6.4 | |
| 73 | #define MOTOR_POLES 8 | |
| 72 | #define SPINDLE_RATIO 6.4 | |
| 73 | #define MOTOR_POLES 8 | |
| 74 | 74 | |
| 75 | 75 | // 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 |
| 76 | 76 | const 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 }; |
| r242703 | r242704 | |
|---|---|---|
| 347 | 347 | |
| 348 | 348 | #define I8021_TAG "z3" |
| 349 | 349 | |
| 350 | #define LOG | |
| 350 | #define LOG 0 | |
| 351 | 351 | |
| 352 | 352 | |
| 353 | 353 | |
| r242703 | r242704 | |
| 433 | 433 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') // S36 |
| 434 | 434 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') // S56 |
| 435 | 435 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') // S57 |
| 436 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("UNUSED S75") // unused // S75 | |
| 436 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("UNUSED S75") // unused // S75 | |
| 437 | 437 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') // S76 |
| 438 | 438 | |
| 439 | 439 | PORT_START("Y2") |
| 440 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("3 # >") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR(' | |
| 440 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("3 # >") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('3') PORT_CHAR('3')// S16 | |
| 441 | 441 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("4 $ \xc2\xb7") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') // centered closed dot U+00B7 // S17 |
| 442 | 442 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') // S37 |
| 443 | 443 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') // S38 |
| r242703 | r242704 | |
|---|---|---|
| 214 | 214 | prsarcde // Telegames Personal Arcade |
| 215 | 215 | adam // Coleco Adam |
| 216 | 216 | |
| 217 | amaztron | |
| 218 | ||
| 219 | 217 | // NEC |
| 220 | 218 | pce // PC/Engine NEC 1987-1993 |
| 221 | 219 | tg16 // Turbo Grafix-16 NEC 1989-1993 |
| r242703 | r242704 | |
| 1066 | 1064 | |
| 1067 | 1065 | // TI Speak & Spell |
| 1068 | 1066 | snspell |
| 1067 | snspellp | |
| 1069 | 1068 | snspella |
| 1070 | 1069 | snspelluk |
| 1071 | 1070 | snspelluka |
| 1072 | snspelljp | |
| 1073 | 1071 | ladictee |
| 1074 | 1072 | snmath |
| 1075 | 1073 | snmatha |
| 1074 | snmathp | |
| 1076 | 1075 | |
| 1077 | 1076 | // Texas Instruments Calculators |
| 1078 | 1077 | tisr16 // 1974 SR-16 |
| r242703 | r242704 | |
| 1723 | 1722 | hp48gp // HP 48G+ |
| 1724 | 1723 | hp49g |
| 1725 | 1724 | hp49gp // HP 49G+ |
| 1726 | hp1650b | |
| 1727 | hp1651b | |
| 1728 | hp165ka0 | |
| 1729 | 1725 | hp16500b |
| 1730 | 1726 | hp9816 |
| 1731 | 1727 | hp9845a |
| r242703 | r242704 | |
| 1735 | 1731 | hp9845b |
| 1736 | 1732 | hp9845t |
| 1737 | 1733 | hp9845c |
| 1738 | hp9k310 | |
| 1739 | 1734 | hp9k320 |
| 1740 | 1735 | hp9k330 |
| 1741 | hp9k340 | |
| 1742 | hp9k370 | |
| 1743 | hp9k380 | |
| 1744 | hp9k382 | |
| 1745 | 1736 | |
| 1746 | 1737 | // SpectraVideo |
| 1747 | 1738 | svi318 // SVI-318 (PAL) |
| r242703 | r242704 | |
| 2595 | 2586 | excali64 |
| 2596 | 2587 | bitgrpha |
| 2597 | 2588 | bitgrphb |
| 2598 | unk3403 |
| r242703 | r242704 | |
|---|---|---|
| 313 | 313 | VIDEOS += SNES_PPU |
| 314 | 314 | VIDEOS += STVVDP |
| 315 | 315 | VIDEOS += T6A04 |
| 316 | VIDEOS += TEA1002 | |
| 317 | 316 | #VIDEOS += TLC34076 |
| 318 | 317 | #VIDEOS += TMS34061 |
| 319 | 318 | VIDEOS += TMS3556 |
| r242703 | r242704 | |
| 570 | 569 | BUSES += A2BUS |
| 571 | 570 | BUSES += A7800 |
| 572 | 571 | BUSES += A800 |
| 573 | BUSES += A8SIO | |
| 574 | 572 | BUSES += ABCBUS |
| 575 | 573 | BUSES += ABCKB |
| 576 | 574 | BUSES += ADAM |
| r242703 | r242704 | |
| 597 | 595 | BUSES += EP64 |
| 598 | 596 | BUSES += EPSON_SIO |
| 599 | 597 | BUSES += GAMEBOY |
| 600 | BUSES += GAMEGEAR | |
| 601 | 598 | BUSES += GBA |
| 602 | 599 | BUSES += GENERIC |
| 603 | 600 | BUSES += IEEE488 |
| r242703 | r242704 | |
| 1120 | 1117 | $(MESS_DRIVERS)/adam.o \ |
| 1121 | 1118 | $(MESS_DRIVERS)/coleco.o \ |
| 1122 | 1119 | $(MESS_MACHINE)/coleco.o \ |
| 1123 | $(MESS_DRIVERS)/amaztron.o \ | |
| 1124 | 1120 | |
| 1125 | 1121 | $(MESSOBJ)/cromemco.a: \ |
| 1126 | 1122 | $(MESS_DRIVERS)/c10.o \ |
| r242703 | r242704 | |
| 1303 | 1299 | $(MESS_DRIVERS)/hp49gp.o \ |
| 1304 | 1300 | $(MESS_DRIVERS)/hp9845.o \ |
| 1305 | 1301 | $(MESS_DRIVERS)/hp9k.o \ |
| 1306 | $(MESS_DRIVERS)/hp9k_3xx.o | |
| 1302 | $(MESS_DRIVERS)/hp9k_3xx.o \ | |
| 1307 | 1303 | |
| 1308 | 1304 | |
| 1309 | 1305 | $(MESSOBJ)/hec2hrp.a: \ |
| r242703 | r242704 | |
| 1996 | 1992 | $(MESS_DRIVERS)/ti630.o \ |
| 1997 | 1993 | $(MESS_DRIVERS)/tsispch.o \ |
| 1998 | 1994 | $(MESS_DRIVERS)/unistar.o \ |
| 1999 | $(MESS_DRIVERS)/unk3403.o \ | |
| 2000 | 1995 | $(MESS_DRIVERS)/v6809.o \ |
| 2001 | 1996 | $(MESS_DRIVERS)/vector4.o \ |
| 2002 | 1997 | $(MESS_DRIVERS)/vii.o \ |
| r242703 | r242704 | |
| 2077 | 2072 | $(MESS_DRIVERS)/aim65.o: $(MESS_LAYOUT)/aim65.lh |
| 2078 | 2073 | $(MESS_DRIVERS)/aim65_40.o: $(MESS_LAYOUT)/aim65_40.lh |
| 2079 | 2074 | $(MESS_DRIVERS)/alesis.o: $(MESS_LAYOUT)/sr16.lh |
| 2080 | $(MESS_DRIVERS)/amaztron.o: $(MESS_LAYOUT)/amaztron.lh | |
| 2081 | 2075 | $(MESS_DRIVERS)/amico2k.o: $(MESS_LAYOUT)/amico2k.lh |
| 2082 | 2076 | $(MESS_DRIVERS)/amiga.o: $(MESS_LAYOUT)/amiga.lh |
| 2083 | 2077 | $(MESS_VIDEO)/apollo.o: $(MESS_LAYOUT)/apollo.lh \ |
| r242703 | r242704 | |
|---|---|---|
| 36 | 36 | # TODO: Visual Studio wants $(FLAC_LIB) and $(7Z_LIB) during linking... |
| 37 | 37 | $(CASTOOL): $(CASTOOL_OBJS) $(FORMATS_LIB) $(LIBUTIL) $(EXPAT) $(ZLIB) $(LIBOCORE) $(FLAC_LIB) $(7Z_LIB) |
| 38 | 38 | @echo Linking $@... |
| 39 | $(LD) $(LDFLAGS) $^ $( | |
| 39 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ |
| r242703 | r242704 | |
|---|---|---|
| 36 | 36 | # TODO: Visual Studio wants $(FLAC_LIB) and $(7Z_LIB) during linking... |
| 37 | 37 | $(FLOPTOOL): $(FLOPTOOL_OBJS) $(FORMATS_LIB) $(LIBEMU) $(LIBUTIL) $(EXPAT) $(ZLIB) $(LIBOCORE) $(FLAC_LIB) $(7Z_LIB) |
| 38 | 38 | @echo Linking $@... |
| 39 | $(LD) $(LDFLAGS) $^ $( | |
| 39 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ |
| r242703 | r242704 | |
|---|---|---|
| 76 | 76 | |
| 77 | 77 | $(IMGTOOL): $(IMGTOOL_OBJS) $(LIBIMGTOOL) $(FORMATS_LIB) $(LIBEMU) $(LIBUTIL) $(EXPAT) $(ZLIB) $(FLAC_LIB) $(7Z_LIB) $(LIBOCORE) |
| 78 | 78 | @echo Linking $@... |
| 79 | $(LD) $(LDFLAGS) $^ $( | |
| 79 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ |
| r242703 | r242704 | |
|---|---|---|
| 756 | 756 | m_altcharset = false; |
| 757 | 757 | m_dhires = false; |
| 758 | 758 | m_flash = false; |
| 759 | m_mix = false; | |
| 760 | 759 | m_sysconfig = 0; |
| 761 | 760 | } |
| 762 | 761 | |
| r242703 | r242704 | |
| 1209 | 1208 | } |
| 1210 | 1209 | else |
| 1211 | 1210 | { |
| 1212 | artifact_map_ptr = &m_hires_artifact_map[((vram_row[col + 1] & 0x80) >> 7) * 16]; | |
| 1211 | artifact_map_ptr = &m_hires_artifact_map[((vram_row[col + 1] & 0x80) >> 7) * 16]; | |
| 1213 | 1212 | } |
| 1214 | 1213 | for (b = 0; b < 7; b++) |
| 1215 | 1214 | { |
| r242703 | r242704 | |
|---|---|---|
| 10 | 10 | #include "includes/aquarius.h" |
| 11 | 11 | |
| 12 | 12 | |
| 13 | ||
| 14 | static const rgb_t aquarius_colors[] = | |
| 15 | { | |
| 16 | rgb_t::black, /* Black */ | |
| 17 | rgb_t(0xff, 0x00, 0x00), /* Red */ | |
| 18 | rgb_t(0x00, 0xff, 0x00), /* Green */ | |
| 19 | rgb_t(0xff, 0xff, 0x00), /* Yellow */ | |
| 20 | rgb_t(0x00, 0x00, 0xff), /* Blue */ | |
| 21 | rgb_t(0x7f, 0x00, 0x7f), /* Violet */ | |
| 22 | rgb_t(0x7f, 0xff, 0xff), /* Light Blue-Green */ | |
| 23 | rgb_t::white, /* White */ | |
| 24 | rgb_t(0xc0, 0xc0, 0xc0), /* Light Gray */ | |
| 25 | rgb_t(0x00, 0xff, 0xff), /* Blue-Green */ | |
| 26 | rgb_t(0xff, 0x00, 0xff), /* Magenta */ | |
| 27 | rgb_t(0x00, 0x00, 0x7f), /* Dark Blue */ | |
| 28 | rgb_t(0xff, 0xff, 0x7f), /* Light Yellow */ | |
| 29 | rgb_t(0x7f, 0xff, 0x7f), /* Light Green */ | |
| 30 | rgb_t(0xff, 0x7f, 0x00), /* Orange */ | |
| 31 | rgb_t(0x7f, 0x7f, 0x7f) /* Dark Gray */ | |
| 32 | }; | |
| 33 | ||
| 13 | 34 | static const unsigned short aquarius_palette[] = |
| 14 | 35 | { |
| 15 | 36 | 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0,10, 0,11, 0,12, 0,13, 0,14, 0,15, 0, |
| r242703 | r242704 | |
| 35 | 56 | int i; |
| 36 | 57 | |
| 37 | 58 | for (i = 0; i < 16; i++) |
| 38 | m_palette->set_indirect_color(i, | |
| 59 | m_palette->set_indirect_color(i, aquarius_colors[i]); | |
| 39 | 60 | |
| 40 | 61 | for (i = 0; i < 512; i++) |
| 41 | 62 | m_palette->set_pen_indirect(i, aquarius_palette[i]); |
| r242703 | r242704 | |
|---|---|---|
| 215 | 215 | void gb_lcd_device::common_start() |
| 216 | 216 | { |
| 217 | 217 | m_screen->register_screen_bitmap(m_bitmap); |
| 218 | save_item(NAME(m_bitmap)); | |
| 219 | 218 | m_oam = auto_alloc_array_clear(machine(), UINT8, 0x100); |
| 220 | 219 | |
| 221 | 220 | machine().save().register_postload(save_prepost_delegate(FUNC(gb_lcd_device::videoptr_restore), this)); |
| r242703 | r242704 | |
|---|---|---|
| 4 | 4 | |
| 5 | 5 | |
| 6 | 6 | - some history: |
| 7 | 2014-12-01 Mike Saarna, Robert Tuccitto Implemented "colorburst kill" bit | |
| 8 | of the MARIA CTRL register. | |
| 7 | 2014-12-01 Mike Saarna, Robert Tuccitto Implemented "colorburst kill" bit | |
| 8 | of the MARIA CTRL register. | |
| 9 | 9 | 2014-10-05 Mike Saarna, Robert Tuccitto Last Line DMA value corrected |
| 10 | 10 | to 6. GCC and Atari docs both show a difference between |
| 11 | 11 | Other Line and Last Line as +6 at the lowest part of the |
| r242703 | r242704 | |
|---|---|---|
| 69 | 69 | save_item(NAME(m_timer_hblank_enable)); |
| 70 | 70 | save_item(NAME(m_timer_hblank_mode)); |
| 71 | 71 | save_item(NAME(m_timer_hblank_reload)); |
| 72 | save_item(NAME(m_timer_hblank_count)); | |
| 73 | 72 | save_item(NAME(m_timer_vblank_enable)); |
| 74 | 73 | save_item(NAME(m_timer_vblank_mode)); |
| 75 | 74 | save_item(NAME(m_timer_vblank_reload)); |
| r242703 | r242704 | |
| 1154 | 1153 | else |
| 1155 | 1154 | m_timer_hblank_reload = 0; |
| 1156 | 1155 | |
| 1157 | logerror( "trig | |
| 1156 | logerror( "trigerring hbltmr interrupt\n" ); | |
| 1158 | 1157 | m_set_irq_cb(WSWAN_VIDEO_IFLAG_HBLTMR); |
| 1159 | 1158 | } |
| 1160 | 1159 | } |
| r242703 | r242704 | |
|---|---|---|
| 22 | 22 | // * Scroll views with content narrower than clipping area are flaky under Tiger - nothing I can do about this |
| 23 | 23 | |
| 24 | 24 | |
| 25 | // Workaround for Nil being re=defined in luabridge | |
| 26 | #include "emu.h" | |
| 27 | ||
| 28 | 25 | // standard Cocoa headers |
| 29 | 26 | #include <AvailabilityMacros.h> |
| 30 | 27 | #import <Cocoa/Cocoa.h> |
| 31 | 28 | |
| 32 | 29 | // MAME headers |
| 33 | ||
| 30 | #include "emu.h" | |
| 34 | 31 | #include "debug/debugvw.h" |
| 35 | 32 | #include "debug/debugcon.h" |
| 36 | 33 | #include "debug/debugcpu.h" |
| r242703 | r242704 | |
|---|---|---|
| 14 | 14 | |
| 15 | 15 | QVariant DevicesWindowModel::data(const QModelIndex &index, int role) const |
| 16 | 16 | { |
| 17 | if(!index.isValid() || role != Qt::DisplayRole) | |
| 18 | return QVariant(); | |
| 17 | if(!index.isValid() || role != Qt::DisplayRole) | |
| 18 | return QVariant(); | |
| 19 | 19 | |
| 20 | 20 | device_t *dev = static_cast<device_t *>(index.internalPointer()); |
| 21 | 21 | switch(index.column()) { |
| r242703 | r242704 | |
| 43 | 43 | |
| 44 | 44 | QModelIndex DevicesWindowModel::index(int row, int column, const QModelIndex &parent) const |
| 45 | 45 | { |
| 46 | if(!hasIndex(row, column, parent)) | |
| 47 | return QModelIndex(); | |
| 46 | if(!hasIndex(row, column, parent)) | |
| 47 | return QModelIndex(); | |
| 48 | 48 | |
| 49 | 49 | device_t *target = NULL; |
| 50 | 50 | |
| r242703 | r242704 | |
| 67 | 67 | |
| 68 | 68 | QModelIndex DevicesWindowModel::parent(const QModelIndex &index) const |
| 69 | 69 | { |
| 70 | if(!index.isValid()) | |
| 71 | return QModelIndex(); | |
| 70 | if(!index.isValid()) | |
| 71 | return QModelIndex(); | |
| 72 | 72 | |
| 73 | ||
| 73 | device_t *dchild = static_cast<device_t *>(index.internalPointer()); | |
| 74 | 74 | device_t *dparent = dchild->owner(); |
| 75 | 75 | |
| 76 | 76 | if(!dparent) |
| r242703 | r242704 | |
| 82 | 82 | for(device_t *child = dpp->first_subdevice(); child && child != dparent; child = child->next()) |
| 83 | 83 | row++; |
| 84 | 84 | } |
| 85 | ||
| 85 | return createIndex(row, 0, dparent); | |
| 86 | 86 | } |
| 87 | 87 | |
| 88 | 88 | int DevicesWindowModel::rowCount(const QModelIndex &parent) const |
| 89 | 89 | { |
| 90 | 90 | if(!parent.isValid()) |
| 91 | 91 | return 1; |
| 92 | ||
| 92 | ||
| 93 | 93 | device_t *dparent = static_cast<device_t *>(parent.internalPointer()); |
| 94 | 94 | int count = 0; |
| 95 | 95 | for(device_t *child = dparent->first_subdevice(); child; child = child->next()) |
| r242703 | r242704 | |
| 157 | 157 | void DevicesWindowQtConfig::buildFromQWidget(QWidget* widget) |
| 158 | 158 | { |
| 159 | 159 | WindowQtConfig::buildFromQWidget(widget); |
| 160 | // | |
| 160 | // DevicesWindow* window = dynamic_cast<DevicesWindow*>(widget); | |
| 161 | 161 | } |
| 162 | 162 | |
| 163 | 163 | |
| 164 | 164 | void DevicesWindowQtConfig::applyToQWidget(QWidget* widget) |
| 165 | 165 | { |
| 166 | 166 | WindowQtConfig::applyToQWidget(widget); |
| 167 | // | |
| 167 | // DevicesWindow* window = dynamic_cast<DevicesWindow*>(widget); | |
| 168 | 168 | } |
| 169 | 169 | |
| 170 | 170 |
| r242703 | r242704 | |
|---|---|---|
| 23 | 23 | QVariant headerData(int section, Qt::Orientation orientation, |
| 24 | 24 | int role = Qt::DisplayRole) const; |
| 25 | 25 | QModelIndex index(int row, int column, |
| 26 | | |
| 26 | const QModelIndex &parent = QModelIndex()) const; | |
| 27 | 27 | QModelIndex parent(const QModelIndex &index) const; |
| 28 | 28 | int rowCount(const QModelIndex &parent = QModelIndex()) const; |
| 29 | 29 | int columnCount(const QModelIndex &parent = QModelIndex()) const; |
| 30 | ||
| 30 | ||
| 31 | 31 | private: |
| 32 | 32 | running_machine *m_machine; |
| 33 | 33 | }; |
| r242703 | r242704 | |
| 44 | 44 | virtual ~DevicesWindow(); |
| 45 | 45 | |
| 46 | 46 | public slots: |
| 47 | void currentRowChanged(const QModelIndex ¤t, const QModelIndex &previous); | |
| 48 | void activated(const QModelIndex &index); | |
| 47 | void currentRowChanged(const QModelIndex ¤t, const QModelIndex &previous); | |
| 48 | void activated(const QModelIndex &index); | |
| 49 | 49 | |
| 50 | 50 | private: |
| 51 | 51 | QTreeView *m_devices_view; |
| r242703 | r242704 | |
|---|---|---|
| 53 | 53 | #define OP_RGB32_ARGB32(_src) ((_src) | 0xff000000) |
| 54 | 54 | |
| 55 | 55 | #define OP_RGB32PAL_ARGB32(_src) \ |
| 56 | (palbase[0x200 + (((_src) >> 16) & 0xff) ] | \ | |
| 57 | palbase[0x100 + (((_src) >> 8) & 0xff) ] | \ | |
| 58 | palbase[((_src) & 0xff) ] | 0xff000000) | |
| 56 | (texsource->palette[0x200 + (((_src) >> 16) & 0xff) ] | \ | |
| 57 | texsource->palette[0x100 + (((_src) >> 8) & 0xff) ] | \ | |
| 58 | texsource->palette[((_src) & 0xff) ] | 0xff000000) | |
| 59 | 59 | |
| 60 | #define OP_PAL16_ARGB32(_src) (0xff000000 | pal | |
| 60 | #define OP_PAL16_ARGB32(_src) (0xff000000 | texsource->palette[_src]) | |
| 61 | 61 | |
| 62 | #define OP_PAL16A_ARGB32(_src) (pal | |
| 62 | #define OP_PAL16A_ARGB32(_src) (texsource->palette[_src]) | |
| 63 | 63 | |
| 64 | 64 | #define OP_RGB15_ARGB32(_src) (0xff000000 | ((_src & 0x7c00) << 9) | ((_src & 0x03e0) << 6) | ((_src & 0x001f) << 3) | \ |
| 65 | 65 | ((((_src & 0x7c00) << 9) | ((_src & 0x03e0) << 6) | ((_src & 0x001f) << 3) >> 5) & 0x070707)) |
| 66 | 66 | |
| 67 | #define OP_RGB15PAL_ARGB32(_src) (0xff000000 | palbase[0x40 + ((_src >> 10) & 0x1f)] | \ | |
| 68 | palbase[0x20 + ((_src >> 5) & 0x1f)] | palbase[0x00 + ((_src >> 0) & 0x1f)]) | |
| 67 | #define OP_RGB15PAL_ARGB32(_src) (0xff000000 | texsource->palette[0x40 + ((_src >> 10) & 0x1f)] | \ | |
| 68 | texsource->palette[0x20 + ((_src >> 5) & 0x1f)] | texsource->palette[0x00 + ((_src >> 0) & 0x1f)]) | |
| 69 | 69 | |
| 70 | 70 | #define OP_ARGB32_RGB32(_pixel) premult32(_pixel) |
| 71 | 71 | |
| 72 | #define OP_PAL16A_RGB32(_src) premult32(pal | |
| 72 | #define OP_PAL16A_RGB32(_src) premult32(texsource->palette[_src]) | |
| 73 | 73 | |
| 74 | #define OP_PAL16_ARGB1555(_src) ((palbase[_src]&0xf80000) >> 9 | \ | |
| 75 | (palbase[_src]&0x00f800) >> 6 | \ | |
| 76 | (palbase[_src]&0x0000f8) >> 3 | 0x8000) | |
| 74 | #define OP_PAL16_ARGB1555(_src) ((texsource->palette[_src]&0xf80000) >> 9 | \ | |
| 75 | (texsource->palette[_src]&0x00f800) >> 6 | \ | |
| 76 | (texsource->palette[_src]&0x0000f8) >> 3 | 0x8000) | |
| 77 | 77 | |
| 78 | 78 | #define OP_RGB15_ARGB1555(_src) ((_src) | 0x8000) |
| 79 | 79 | |
| 80 | #define OP_RGB15PAL_ARGB1555(_src) ((palbase[(_src) >> 10] & 0xf8) << 7 | \ | |
| 81 | (palbase[((_src) >> 5) & 0x1f] & 0xf8) << 2 | \ | |
| 82 | (palbase[(_src) & 0x1f] & 0xf8) >> 3 | 0x8000) | |
| 80 | #define OP_RGB15PAL_ARGB1555(_src) ((texsource->palette[(_src) >> 10] & 0xf8) << 7 | \ | |
| 81 | (texsource->palette[((_src) >> 5) & 0x1f] & 0xf8) << 2 | \ | |
| 82 | (texsource->palette[(_src) & 0x1f] & 0xf8) >> 3 | 0x8000) | |
| 83 | 83 | |
| 84 | 84 | #define OP_YUV16_UYVY(_src) (_src) |
| 85 | 85 | |
| 86 | #define OP_YUV16PAL_UYVY(_src) ((pal | |
| 86 | #define OP_YUV16PAL_UYVY(_src) ((texsource->palette[((_src) >> 8) & 0xff] << 8) | ((_src) & 0x00ff)) | |
| 87 | 87 | |
| 88 | #define OP_YUV16PAL_YVYU(_src) ((pal | |
| 88 | #define OP_YUV16PAL_YVYU(_src) ((texsource->palette[((_src) >> 8) & 0xff] & 0xff) | ((_src & 0xff) << 8)) | |
| 89 | 89 | |
| 90 | 90 | #define OP_YUV16_YVYU(_src) ((((_src) >> 8) & 0xff) | ((_src & 0xff) << 8)) |
| 91 | 91 | |
| 92 | 92 | #define OP_YUV16_YUY2(_src) ( ((_src) & 0xff00ff00) | \ |
| 93 | 93 | (((_src)>>16)&0xff) | (((_src)<<16)&0xff0000) ) |
| 94 | 94 | |
| 95 | #define OP_YUV16PAL_YUY2(_src) ( (palbase[((_src)>>8) & 0xff]) | \ | |
| 96 | (palbase[((_src)>>24) & 0xff]<<16) | \ | |
| 95 | #define OP_YUV16PAL_YUY2(_src) ( (texsource->palette[((_src)>>8) & 0xff]) | \ | |
| 96 | (texsource->palette[((_src)>>24) & 0xff]<<16) | \ | |
| 97 | 97 | (((_src)<<8)&0xff00ff00) ) |
| 98 | 98 | |
| 99 | 99 | #define OP_YUV16_ARGB32(_src) \ |
| r242703 | r242704 | |
| 101 | 101 | | ((UINT64)ycc_to_rgb(((_src) >> 24) & 0xff, (_src) & 0xff , ((_src)>>16) & 0xff) << 32) |
| 102 | 102 | |
| 103 | 103 | #define OP_YUV16PAL_ARGB32(_src) \ |
| 104 | (UINT64)ycc_to_rgb(palbase[((_src) >> 8) & 0xff], (_src) & 0xff , ((_src)>>16) & 0xff) \ | |
| 105 | | ((UINT64)ycc_to_rgb(palbase[((_src) >> 24) & 0xff], (_src) & 0xff , ((_src)>>16) & 0xff) << 32) | |
| 104 | (UINT64)ycc_to_rgb(texsource->palette[((_src) >> 8) & 0xff], (_src) & 0xff , ((_src)>>16) & 0xff) \ | |
| 105 | | ((UINT64)ycc_to_rgb(texsource->palette[((_src) >> 24) & 0xff], (_src) & 0xff , ((_src)>>16) & 0xff) << 32) | |
| 106 | 106 | |
| 107 | 107 | #define OP_YUV16_ARGB32ROT(_src) pixel_ycc_to_rgb(&(_src)) |
| 108 | 108 | |
| 109 | #define OP_YUV16PAL_ARGB32ROT(_src) pixel_ycc_to_rgb_pal(&(_src), pal | |
| 109 | #define OP_YUV16PAL_ARGB32ROT(_src) pixel_ycc_to_rgb_pal(&(_src), texsource->palette) | |
| 110 | 110 | |
| 111 | 111 | //============================================================ |
| 112 | 112 | // Copy and rotation |
| 113 | 113 | //============================================================ |
| 114 | 114 | |
| 115 | 115 | #define TEXCOPY_M( _name, _src_type, _dest_type, _op, _len_div) \ |
| 116 | INLINE void texcopy_##_name (const texture_info *texture, const render_texinfo *texsource) { \ | |
| 117 | ATTR_UNUSED const rgb_t *palbase = texsource->palette(); \ | |
| 116 | INLINE void texcopy_##_name (texture_info *texture, const render_texinfo *texsource) { \ | |
| 118 | 117 | int x, y; \ |
| 119 | 118 | /* loop over Y */ \ |
| 120 | 119 | for (y = 0; y < texsource->height; y++) { \ |
| 121 | 120 | _src_type *src = (_src_type *)texsource->base + y * texsource->rowpixels / (_len_div); \ |
| 122 | _dest_type *dst = (_dest_type *)((UINT8 *)texture-> | |
| 121 | _dest_type *dst = (_dest_type *)((UINT8 *)texture->pixels + y * texture->pitch); \ | |
| 123 | 122 | x = texsource->width / (_len_div); \ |
| 124 | 123 | while (x > 0) { \ |
| 125 | 124 | *dst++ = _op(*src); \ |
| r242703 | r242704 | |
| 133 | 132 | TEXCOPY_M( _name, _src_type, _dest_type, _op, 1) |
| 134 | 133 | |
| 135 | 134 | #define TEXROT( _name, _src_type, _dest_type, _op) \ |
| 136 | INLINE void texcopy_rot_##_name (const texture_info *texture, const render_texinfo *texsource) { \ | |
| 137 | ATTR_UNUSED const rgb_t *palbase = texsource->palette(); \ | |
| 135 | INLINE void texcopy_rot_##_name (texture_info *texture, const render_texinfo *texsource) { \ | |
| 138 | 136 | int x, y; \ |
| 139 | | |
| 137 | quad_setup_data *setup = &texture->setup; \ | |
| 140 | 138 | int dudx = setup->dudx; \ |
| 141 | 139 | int dvdx = setup->dvdx; \ |
| 142 | 140 | /* loop over Y */ \ |
| 143 | 141 | for (y = 0; y < setup->rotheight; y++) { \ |
| 144 | 142 | INT32 curu = setup->startu + y * setup->dudy; \ |
| 145 | 143 | INT32 curv = setup->startv + y * setup->dvdy; \ |
| 146 | _dest_type *dst = (_dest_type *)((UINT8 *)texture-> | |
| 144 | _dest_type *dst = (_dest_type *)((UINT8 *)texture->pixels + y * texture->pitch); \ | |
| 147 | 145 | x = setup->rotwidth; \ |
| 148 | 146 | while (x>0) { \ |
| 149 | 147 | _src_type *src = (_src_type *) texsource->base + (curv >> 16) * texsource->rowpixels + (curu >> 16); \ |
| r242703 | r242704 | |
|---|---|---|
| 43 | 43 | |
| 44 | 44 | |
| 45 | 45 | //============================================================ |
| 46 | // | |
| 46 | // MACROS | |
| 47 | 47 | //============================================================ |
| 48 | 48 | |
| 49 | static inline bool is_opaque(const float &a) | |
| 50 | { | |
| 51 | return (a >= 1.0f); | |
| 52 | } | |
| 49 | #define IS_OPAQUE(a) (a >= 1.0f) | |
| 50 | #define IS_TRANSPARENT(a) (a < 0.0001f) | |
| 53 | 51 | |
| 54 | static inline bool is_transparent(const float &a) | |
| 55 | { | |
| 56 | return (a < 0.0001f); | |
| 57 | } | |
| 52 | #define MAX4(a, b, c, d) MAX(a, MAX(b, MAX(c, d))) | |
| 53 | #define MIN4(a, b, c, d) MIN(a, MIN(b, MIN(c, d))) | |
| 58 | 54 | |
| 55 | ||
| 59 | 56 | //============================================================ |
| 60 | 57 | // TYPES |
| 61 | 58 | //============================================================ |
| r242703 | r242704 | |
| 63 | 60 | |
| 64 | 61 | struct quad_setup_data |
| 65 | 62 | { |
| 66 | quad_setup_data() | |
| 67 | : dudx(0), dvdx(0), dudy(0), dvdy(0), startu(0), startv(0), | |
| 68 | rotwidth(0), rotheight(0) | |
| 69 | {} | |
| 70 | void compute(const render_primitive &prim); | |
| 71 | ||
| 72 | 63 | INT32 dudx, dvdx, dudy, dvdy; |
| 73 | 64 | INT32 startu, startv; |
| 74 | 65 | INT32 rotwidth, rotheight; |
| 75 | 66 | }; |
| 76 | 67 | |
| 77 | ||
| 68 | struct texture_info; | |
| 78 | 69 | |
| 79 | typedef void (*texture_copy_func)( | |
| 70 | typedef void (*texture_copy_func)(texture_info *texture, const render_texinfo *texsource); | |
| 80 | 71 | |
| 81 | struct copy_info | |
| 72 | struct copy_info { | |
| 82 | 73 | int src_fmt; |
| 83 | 74 | Uint32 dst_fmt; |
| 84 | 75 | int dst_bpp; |
| r242703 | r242704 | |
| 93 | 84 | int samples; |
| 94 | 85 | int perf; |
| 95 | 86 | /* list */ |
| 96 | copy_info | |
| 87 | copy_info *next; | |
| 97 | 88 | }; |
| 98 | 89 | |
| 99 | //============================================================ | |
| 100 | // Textures | |
| 101 | //============================================================ | |
| 102 | ||
| 103 | struct sdl_info; | |
| 104 | ||
| 105 | 90 | /* texture_info holds information about a texture */ |
| 106 | ||
| 91 | struct texture_info | |
| 107 | 92 | { |
| 108 | friend class simple_list<texture_info>; | |
| 109 | public: | |
| 110 | texture_info(SDL_Renderer *renderer, const render_texinfo &texsource, const quad_setup_data &setup, const UINT32 flags); | |
| 111 | ~texture_info(); | |
| 93 | texture_info * next; // next texture in the list | |
| 112 | 94 | |
| 113 | void set_data(const render_texinfo &texsource, const UINT32 flags); | |
| 114 | void render_quad(const render_primitive *prim, const int x, const int y); | |
| 115 | bool matches(const render_primitive &prim, const quad_setup_data &setup); | |
| 95 | HashT hash; // hash value for the texture (must be >= pointer size) | |
| 96 | UINT32 flags; // rendering flags | |
| 97 | render_texinfo texinfo; // copy of the texture info | |
| 116 | 98 | |
| 117 | | |
| 99 | int rawwidth, rawheight;// raw width/height of the texture | |
| 118 | 100 | |
| 119 | void *m_pixels; // pixels for the texture | |
| 120 | int m_pitch; | |
| 101 | int format; // texture format | |
| 102 | void *pixels; // pixels for the texture | |
| 103 | int pitch; | |
| 104 | int pixels_own; // do we own / allocated it ? | |
| 121 | 105 | |
| 122 | copy_info_t *m_copyinfo; | |
| 123 | quad_setup_data m_setup; | |
| 106 | SDL_Texture *texture_id; | |
| 124 | 107 | |
| 125 | osd_ticks_t m_last_access; | |
| 108 | copy_info *copyinfo; | |
| 109 | Uint32 sdl_access; | |
| 110 | SDL_BlendMode sdl_blendmode; | |
| 111 | quad_setup_data setup; | |
| 112 | int is_rotated; | |
| 126 | 113 | |
| 127 | int raw_width() const { return m_texinfo.width; } | |
| 128 | int raw_height() const { return m_texinfo.height; } | |
| 129 | ||
| 130 | texture_info *next() { return m_next; } | |
| 131 | const render_texinfo &texinfo() const { return m_texinfo; } | |
| 132 | render_texinfo &texinfo() { return m_texinfo; } | |
| 133 | ||
| 134 | const HashT hash() const { return m_hash; } | |
| 135 | const UINT32 flags() const { return m_flags; } | |
| 136 | const bool is_pixels_owned() const { // do we own / allocated it ? | |
| 137 | return m_sdl_access == SDL_TEXTUREACCESS_STATIC | |
| 138 | && m_copyinfo->func != NULL ; | |
| 139 | } | |
| 140 | ||
| 141 | private: | |
| 142 | SDL_Renderer * m_renderer; | |
| 143 | render_texinfo m_texinfo; // copy of the texture info | |
| 144 | HashT m_hash; // hash value for the texture (must be >= pointer size) | |
| 145 | UINT32 m_flags; // rendering flags | |
| 146 | ||
| 147 | SDL_Texture * m_texture_id; | |
| 148 | int m_is_rotated; | |
| 149 | ||
| 150 | int m_format; // texture format | |
| 151 | SDL_BlendMode m_sdl_blendmode; | |
| 152 | Uint32 m_sdl_access; | |
| 153 | ||
| 154 | texture_info * m_next; // next texture in the list | |
| 114 | osd_ticks_t last_access; | |
| 155 | 115 | }; |
| 156 | 116 | |
| 157 | 117 | /* sdl_info is the information about SDL for the current screen */ |
| 158 | 118 | struct sdl_info |
| 159 | 119 | { |
| 160 | sdl_info() | |
| 161 | : m_blittimer(0), m_renderer(NULL), | |
| 162 | m_hofs(0), m_vofs(0), | |
| 163 | m_resize_pending(0), m_resize_width(0), m_resize_height(0), | |
| 164 | m_last_blit_time(0), m_last_blit_pixels(0) | |
| 165 | {} | |
| 120 | INT32 blittimer; | |
| 121 | UINT32 extra_flags; | |
| 166 | 122 | |
| 167 | void render_quad(texture_info *texture, const render_primitive *prim, const int x, const int y); | |
| 123 | SDL_Renderer *sdl_renderer; | |
| 124 | texture_info * texlist; // list of active textures | |
| 125 | INT32 texture_max_width; // texture maximum width | |
| 126 | INT32 texture_max_height; // texture maximum height | |
| 168 | 127 | |
| 169 | texture_info *texture_find(const render_primitive &prim, const quad_setup_data &setup); | |
| 170 | texture_info *texture_update(const render_primitive &prim); | |
| 128 | float last_hofs; | |
| 129 | float last_vofs; | |
| 171 | 130 | |
| 172 | INT32 m_blittimer; | |
| 173 | ||
| 174 | SDL_Renderer * m_renderer; | |
| 175 | simple_list<texture_info> m_texlist; // list of active textures | |
| 176 | ||
| 177 | float m_hofs; | |
| 178 | float m_vofs; | |
| 179 | ||
| 180 | 131 | // resize information |
| 181 | 132 | |
| 182 | UINT8 m_resize_pending; | |
| 183 | UINT32 m_resize_width; | |
| 184 | UINT32 m_resize_height; | |
| 133 | UINT8 resize_pending; | |
| 134 | UINT32 resize_width; | |
| 135 | UINT32 resize_height; | |
| 185 | 136 | |
| 186 | 137 | // Stats |
| 187 | INT64 m_last_blit_time; | |
| 188 | INT64 m_last_blit_pixels; | |
| 138 | INT64 last_blit_time; | |
| 139 | INT64 last_blit_pixels; | |
| 189 | 140 | }; |
| 190 | 141 | |
| 191 | 142 | //============================================================ |
| r242703 | r242704 | |
| 200 | 151 | static void drawsdl2_window_resize(sdl_window_info *window, int width, int height); |
| 201 | 152 | static void drawsdl2_window_destroy(sdl_window_info *window); |
| 202 | 153 | static int drawsdl2_window_draw(sdl_window_info *window, UINT32 dc, int update); |
| 203 | static v | |
| 154 | static render_primitive_list &drawsdl2_window_get_primitives(sdl_window_info *window); | |
| 204 | 155 | static void drawsdl2_destroy_all_textures(sdl_window_info *window); |
| 205 | 156 | static void drawsdl2_window_clear(sdl_window_info *window); |
| 206 | 157 | static int drawsdl2_xy_to_render_target(sdl_window_info *window, int x, int y, int *xt, int *yt); |
| 158 | static void drawsdl2_destroy_texture(sdl_info *sdl, texture_info *texture); | |
| 207 | 159 | |
| 208 | 160 | //============================================================ |
| 161 | // Textures | |
| 162 | //============================================================ | |
| 163 | ||
| 164 | static void texture_set_data(sdl_info *sdl, texture_info *texture, const render_texinfo *texsource, UINT32 flags); | |
| 165 | static texture_info *texture_create(sdl_window_info *window, const render_texinfo *texsource, quad_setup_data *setup, UINT32 flags); | |
| 166 | static texture_info *texture_find(sdl_info *sdl, const render_primitive *prim, quad_setup_data *setup); | |
| 167 | static texture_info * texture_update(sdl_window_info *window, const render_primitive *prim); | |
| 168 | ||
| 169 | ||
| 170 | //============================================================ | |
| 209 | 171 | // TEXCOPY FUNCS |
| 210 | 172 | //============================================================ |
| 211 | 173 | |
| r242703 | r242704 | |
| 224 | 186 | #define ENTRY_BM(a,b,c,d,f,bm) { SDL_TEXFORMAT_ ## a, SDL_PIXELFORMAT_ ## b, c, d, texcopy_ ## f, bm, #a, #b, 0, 0, 0, 0} |
| 225 | 187 | #define ENTRY_LR(a,b,c,d,f) { SDL_TEXFORMAT_ ## a, SDL_PIXELFORMAT_ ## b, c, d, texcopy_ ## f, BM_ALL, #a, #b, 0, 0, 0, -1} |
| 226 | 188 | |
| 227 | static copy_info | |
| 189 | static copy_info blit_info_default[] = | |
| 228 | 190 | { |
| 229 | 191 | /* no rotation */ |
| 230 | 192 | ENTRY(ARGB32, ARGB8888, 4, 0, NULL), |
| 231 | 193 | ENTRY_LR(ARGB32, RGB888, 4, 0, argb32_rgb32), |
| 232 | /* Entry primarily for directfb */ | |
| 194 | /* Entry for primarily for directfb */ | |
| 233 | 195 | ENTRY_BM(ARGB32, RGB888, 4, 0, argb32_rgb32, SDL_BLENDMODE_ADD), |
| 234 | 196 | ENTRY_BM(ARGB32, RGB888, 4, 0, argb32_rgb32, SDL_BLENDMODE_MOD), |
| 235 | 197 | ENTRY_BM(ARGB32, RGB888, 4, 0, argb32_rgb32, SDL_BLENDMODE_NONE), |
| r242703 | r242704 | |
| 269 | 231 | /* rotation */ |
| 270 | 232 | ENTRY(ARGB32, ARGB8888, 4, 1, rot_argb32_argb32), |
| 271 | 233 | ENTRY_LR(ARGB32, RGB888, 4, 1, rot_argb32_rgb32), |
| 272 | /* Entry primarily for directfb */ | |
| 234 | /* Entry for primarily for directfb */ | |
| 273 | 235 | ENTRY_BM(ARGB32, RGB888, 4, 1, rot_argb32_rgb32, SDL_BLENDMODE_ADD), |
| 274 | 236 | ENTRY_BM(ARGB32, RGB888, 4, 1, rot_argb32_rgb32, SDL_BLENDMODE_MOD), |
| 275 | 237 | ENTRY_BM(ARGB32, RGB888, 4, 1, rot_argb32_rgb32, SDL_BLENDMODE_NONE), |
| r242703 | r242704 | |
| 303 | 265 | { -1 }, |
| 304 | 266 | }; |
| 305 | 267 | |
| 306 | static copy_info | |
| 268 | static copy_info *blit_info[SDL_TEXFORMAT_LAST+1]; | |
| 307 | 269 | |
| 308 | 270 | static struct |
| 309 | 271 | { |
| r242703 | r242704 | |
| 322 | 284 | return floor(f + 0.5f); |
| 323 | 285 | } |
| 324 | 286 | |
| 325 | INLINE HashT texture_compute_hash(const render_texinfo | |
| 287 | INLINE HashT texture_compute_hash(const render_texinfo *texture, UINT32 flags) | |
| 326 | 288 | { |
| 327 | return (HashT)texture | |
| 289 | return (HashT)texture->base ^ (flags & (PRIMFLAG_BLENDMODE_MASK | PRIMFLAG_TEXFORMAT_MASK)); | |
| 328 | 290 | } |
| 329 | 291 | |
| 330 | INLINE SDL_BlendMode map_blendmode( | |
| 292 | INLINE SDL_BlendMode map_blendmode(int blendmode) | |
| 331 | 293 | { |
| 332 | 294 | switch (blendmode) |
| 333 | 295 | { |
| r242703 | r242704 | |
| 353 | 315 | UINT32 sa = (UINT32)(255.0f * color->a); |
| 354 | 316 | |
| 355 | 317 | |
| 356 | if (color->r >= 1.0f && color->g >= 1.0f && color->b >= 1.0f && | |
| 318 | if (color->r >= 1.0f && color->g >= 1.0f && color->b >= 1.0f && IS_OPAQUE(color->a)) | |
| 357 | 319 | { |
| 358 | 320 | SDL_SetTextureColorMod(texture_id, 0xFF, 0xFF, 0xFF); |
| 359 | 321 | SDL_SetTextureAlphaMod(texture_id, 0xFF); |
| 360 | 322 | } |
| 361 | 323 | /* coloring-only case */ |
| 362 | else if ( | |
| 324 | else if (IS_OPAQUE(color->a)) | |
| 363 | 325 | { |
| 364 | 326 | SDL_SetTextureColorMod(texture_id, sr, sg, sb); |
| 365 | 327 | SDL_SetTextureAlphaMod(texture_id, 0xFF); |
| 366 | 328 | } |
| 367 | 329 | /* alpha and/or coloring case */ |
| 368 | else if (! | |
| 330 | else if (!IS_TRANSPARENT(color->a)) | |
| 369 | 331 | { |
| 370 | 332 | SDL_SetTextureColorMod(texture_id, sr, sg, sb); |
| 371 | 333 | SDL_SetTextureAlphaMod(texture_id, sa); |
| r242703 | r242704 | |
| 377 | 339 | } |
| 378 | 340 | } |
| 379 | 341 | |
| 380 | void | |
| 342 | INLINE void render_quad(sdl_info *sdl, texture_info *texture, render_primitive *prim, int x, int y) | |
| 381 | 343 | { |
| 344 | SDL_Texture *texture_id; | |
| 382 | 345 | SDL_Rect target_rect; |
| 383 | 346 | |
| 384 | 347 | target_rect.x = x; |
| r242703 | r242704 | |
| 386 | 349 | target_rect.w = round_nearest(prim->bounds.x1 - prim->bounds.x0); |
| 387 | 350 | target_rect.h = round_nearest(prim->bounds.y1 - prim->bounds.y0); |
| 388 | 351 | |
| 352 | if (texture) | |
| 353 | { | |
| 354 | texture_id = texture->texture_id; | |
| 355 | ||
| 356 | texture->copyinfo->time -= osd_ticks(); | |
| 389 | 357 | #if 0 |
| 390 | // no longer supported in SDL2 | |
| 391 | if ((PRIMFLAG_GET_SCREENTEX(prim->m_flags)) && video_config.filter) | |
| 392 | { | |
| 393 | SDL_SetTextureScaleMode(texture->m_texture_id, DRAW2_SCALEMODE_BEST); | |
| 394 | } | |
| 395 | else | |
| 396 | { | |
| 397 | SDL_SetTextureScaleMode(texture->m_texture_id, DRAW2_SCALEMODE_NEAREST); | |
| 398 | } | |
| 358 | if ((PRIMFLAG_GET_SCREENTEX(prim->flags)) && video_config.filter) | |
| 359 | { | |
| 360 | SDL_SetTextureScaleMode(texture->texture_id, DRAW2_SCALEMODE_BEST); | |
| 361 | } | |
| 362 | else | |
| 363 | { | |
| 364 | SDL_SetTextureScaleMode(texture->texture_id, DRAW2_SCALEMODE_NEAREST); | |
| 365 | } | |
| 399 | 366 | #endif |
| 400 | SDL_SetTextureBlendMode(m_texture_id, m_sdl_blendmode); | |
| 401 | set_coloralphamode(m_texture_id, &prim->color); | |
| 402 | SDL_RenderCopy(m_renderer, m_texture_id, NULL, &target_rect); | |
| 367 | SDL_SetTextureBlendMode(texture_id, texture->sdl_blendmode); | |
| 368 | set_coloralphamode(texture_id, &prim->color); | |
| 369 | SDL_RenderCopy(sdl->sdl_renderer, texture_id, NULL, &target_rect); | |
| 370 | texture->copyinfo->time += osd_ticks(); | |
| 371 | ||
| 372 | texture->copyinfo->pixel_count += MAX(STAT_PIXEL_THRESHOLD , (texture->rawwidth * texture->rawheight)); | |
| 373 | if (sdl->last_blit_pixels) | |
| 374 | { | |
| 375 | texture->copyinfo->time += (sdl->last_blit_time * (INT64) (texture->rawwidth * texture->rawheight)) / (INT64) sdl->last_blit_pixels; | |
| 376 | } | |
| 377 | texture->copyinfo->samples++; | |
| 378 | texture->copyinfo->perf = ( texture->copyinfo->pixel_count * (osd_ticks_per_second()/1000)) / texture->copyinfo->time; | |
| 379 | } | |
| 380 | else | |
| 381 | { | |
| 382 | UINT32 sr = (UINT32)(255.0f * prim->color.r); | |
| 383 | UINT32 sg = (UINT32)(255.0f * prim->color.g); | |
| 384 | UINT32 sb = (UINT32)(255.0f * prim->color.b); | |
| 385 | UINT32 sa = (UINT32)(255.0f * prim->color.a); | |
| 386 | ||
| 387 | SDL_SetRenderDrawBlendMode(sdl->sdl_renderer, map_blendmode(PRIMFLAG_GET_BLENDMODE(prim->flags))); | |
| 388 | SDL_SetRenderDrawColor(sdl->sdl_renderer, sr, sg, sb, sa); | |
| 389 | SDL_RenderFillRect(sdl->sdl_renderer, &target_rect); | |
| 390 | } | |
| 403 | 391 | } |
| 404 | 392 | |
| 405 | void sdl_info::render_quad(texture_info *texture, const render_primitive *prim, const int x, const int y) | |
| 393 | #if 0 | |
| 394 | static int RendererSupportsFormat(Uint32 format, Uint32 access, const char *sformat) | |
| 406 | 395 | { |
| 407 | SDL_Rect target_rect; | |
| 396 | struct SDL_RendererInfo render_info; | |
| 397 | int i; | |
| 408 | 398 | |
| 409 | target_rect.x = x; | |
| 410 | target_rect.y = y; | |
| 411 | target_rect.w = round_nearest(prim->bounds.x1 - prim->bounds.x0); | |
| 412 | target_rect.h = round_nearest(prim->bounds.y1 - prim->bounds.y0); | |
| 399 | SDL_GetRendererInfo(&render_info); | |
| 413 | 400 | |
| 414 | if (texture) | |
| 415 | { | |
| 416 | copy_info_t *copyinfo = texture->m_copyinfo; | |
| 417 | copyinfo->time -= osd_ticks(); | |
| 418 | texture->render_quad(prim, x, y); | |
| 419 | copyinfo->time += osd_ticks(); | |
| 420 | ||
| 421 | copyinfo->pixel_count += MAX(STAT_PIXEL_THRESHOLD , (texture->raw_width() * texture->raw_height())); | |
| 422 | if (m_last_blit_pixels) | |
| 423 | { | |
| 424 | copyinfo->time += (m_last_blit_time * (INT64) (texture->raw_width() * texture->raw_height())) / (INT64) m_last_blit_pixels; | |
| 425 | } | |
| 426 | copyinfo->samples++; | |
| 427 | copyinfo->perf = ( texture->m_copyinfo->pixel_count * (osd_ticks_per_second()/1000)) / texture->m_copyinfo->time; | |
| 428 | } | |
| 429 | else | |
| 430 | { | |
| 431 | UINT32 sr = (UINT32)(255.0f * prim->color.r); | |
| 432 | UINT32 sg = (UINT32)(255.0f * prim->color.g); | |
| 433 | UINT32 sb = (UINT32)(255.0f * prim->color.b); | |
| 434 | UINT32 sa = (UINT32)(255.0f * prim->color.a); | |
| 435 | ||
| 436 | SDL_SetRenderDrawBlendMode(m_renderer, map_blendmode(PRIMFLAG_GET_BLENDMODE(prim->flags))); | |
| 437 | SDL_SetRenderDrawColor(m_renderer, sr, sg, sb, sa); | |
| 438 | SDL_RenderFillRect(m_renderer, &target_rect); | |
| 439 | } | |
| 401 | for (i=0; i < render_info.num_texture_formats; i++) | |
| 402 | { | |
| 403 | if (format == render_info.texture_formats[i]) | |
| 404 | return 1; | |
| 405 | } | |
| 406 | osd_printf_verbose("Pixelformat <%s> not supported\n", sformat); | |
| 407 | return 0; | |
| 440 | 408 | } |
| 441 | ||
| 409 | #else | |
| 442 | 410 | static int RendererSupportsFormat(SDL_Renderer *renderer, Uint32 format, Uint32 access, const char *sformat) |
| 443 | 411 | { |
| 444 | 412 | int i; |
| r242703 | r242704 | |
| 465 | 433 | fmt_support[i].status = 0; |
| 466 | 434 | return 0; |
| 467 | 435 | } |
| 436 | #endif | |
| 468 | 437 | |
| 469 | 438 | //============================================================ |
| 470 | 439 | // drawsdl2_init |
| 471 | 440 | //============================================================ |
| 472 | 441 | |
| 473 | static void add_list(copy_info | |
| 442 | static void add_list(copy_info **head, copy_info *element, Uint32 bm) | |
| 474 | 443 | { |
| 475 | copy_info | |
| 444 | copy_info *newci = (copy_info *) osd_malloc(sizeof(copy_info)); | |
| 476 | 445 | *newci = *element; |
| 477 | 446 | |
| 478 | 447 | newci->bm_mask = bm; |
| r242703 | r242704 | |
| 480 | 449 | *head = newci; |
| 481 | 450 | } |
| 482 | 451 | |
| 483 | static void expand_copy_info(copy_info | |
| 452 | static void expand_copy_info(copy_info *list) | |
| 484 | 453 | { |
| 485 | copy_info | |
| 454 | copy_info *bi; | |
| 486 | 455 | |
| 487 | 456 | for (bi = list; bi->src_fmt != -1; bi++) |
| 488 | 457 | { |
| r242703 | r242704 | |
| 521 | 490 | |
| 522 | 491 | // No fatalerror here since not all video drivers support GL ! |
| 523 | 492 | if (SDL_GL_LoadLibrary(stemp) != 0) // Load library (default for e==NULL |
| 524 | osd_printf_ | |
| 493 | osd_printf_verbose("Warning: Unable to load opengl library: %s\n", stemp ? stemp : "<default>"); | |
| 525 | 494 | else |
| 526 | 495 | osd_printf_verbose("Loaded opengl shared library: %s\n", stemp ? stemp : "<default>"); |
| 527 | 496 | |
| r242703 | r242704 | |
| 536 | 505 | static void drawsdl2_exit(void) |
| 537 | 506 | { |
| 538 | 507 | int i; |
| 539 | copy_info | |
| 508 | copy_info *bi, *freeme; | |
| 540 | 509 | for (i = 0; i <= SDL_TEXFORMAT_LAST; i++) |
| 541 | 510 | for (bi = blit_info[i]; bi != NULL; ) |
| 542 | 511 | { |
| r242703 | r242704 | |
| 546 | 515 | (int) bi->perf); |
| 547 | 516 | freeme = bi; |
| 548 | 517 | bi = bi->next; |
| 549 | | |
| 518 | osd_free(freeme); | |
| 550 | 519 | } |
| 551 | 520 | } |
| 552 | 521 | |
| r242703 | r242704 | |
| 559 | 528 | // fill in the callbacks |
| 560 | 529 | window->create = drawsdl2_window_create; |
| 561 | 530 | window->resize = drawsdl2_window_resize; |
| 562 | window-> | |
| 531 | window->get_primitives = drawsdl2_window_get_primitives; | |
| 563 | 532 | window->draw = drawsdl2_window_draw; |
| 564 | 533 | window->destroy = drawsdl2_window_destroy; |
| 565 | 534 | window->destroy_all_textures = drawsdl2_destroy_all_textures; |
| r242703 | r242704 | |
| 574 | 543 | static int drawsdl2_window_create(sdl_window_info *window, int width, int height) |
| 575 | 544 | { |
| 576 | 545 | // allocate memory for our structures |
| 577 | sdl_info *sdl = | |
| 546 | sdl_info *sdl = (sdl_info *) osd_malloc(sizeof(*sdl)); | |
| 578 | 547 | |
| 579 | 548 | osd_printf_verbose("Enter drawsdl2_window_create\n"); |
| 580 | 549 | |
| 550 | memset(sdl, 0, sizeof(*sdl)); | |
| 551 | ||
| 581 | 552 | window->dxdata = sdl; |
| 582 | 553 | |
| 583 | | |
| 554 | sdl->extra_flags = (window->fullscreen ? | |
| 584 | 555 | SDL_WINDOW_BORDERLESS | SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_FULLSCREEN : SDL_WINDOW_RESIZABLE); |
| 585 | 556 | |
| 586 | 557 | // create the SDL window |
| 587 | window->sdl_window = SDL_CreateWindow(window->title, window->monitor()->monitor_x, 0, | |
| 588 | width, height, extra_flags); | |
| 558 | window->sdl_window = SDL_CreateWindow(window->title, window->monitor->monitor_x, 0, | |
| 559 | width, height, sdl->extra_flags); | |
| 589 | 560 | |
| 590 | if (window->fullscreen | |
| 561 | if (window->fullscreen && video_config.switchres) | |
| 591 | 562 | { |
| 592 | 563 | SDL_DisplayMode mode; |
| 593 | SDL_GetCurrentDisplayMode(window->monitor | |
| 564 | SDL_GetCurrentDisplayMode(window->monitor->handle, &mode); | |
| 594 | 565 | mode.w = width; |
| 595 | 566 | mode.h = height; |
| 596 | 567 | if (window->refresh) |
| r242703 | r242704 | |
| 623 | 594 | // create renderer |
| 624 | 595 | |
| 625 | 596 | if (video_config.waitvsync) |
| 626 | sdl-> | |
| 597 | sdl->sdl_renderer = SDL_CreateRenderer(window->sdl_window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED); | |
| 627 | 598 | else |
| 628 | sdl-> | |
| 599 | sdl->sdl_renderer = SDL_CreateRenderer(window->sdl_window, -1, SDL_RENDERER_ACCELERATED); | |
| 629 | 600 | |
| 630 | if (!sdl-> | |
| 601 | if (!sdl->sdl_renderer) | |
| 631 | 602 | { |
| 632 | 603 | fatalerror("Error on creating renderer: %s\n", SDL_GetError()); |
| 633 | 604 | } |
| r242703 | r242704 | |
| 640 | 611 | SDL_GetWindowSize(window->sdl_window, &window->width, &window->height); |
| 641 | 612 | |
| 642 | 613 | |
| 643 | sdl-> | |
| 614 | sdl->blittimer = 3; | |
| 644 | 615 | |
| 645 | SDL_RenderPresent(sdl->m_renderer); | |
| 616 | // in case any textures try to come up before these are validated, | |
| 617 | // OpenGL guarantees all implementations can handle something this size. | |
| 618 | sdl->texture_max_width = 64; | |
| 619 | sdl->texture_max_height = 64; | |
| 620 | ||
| 621 | SDL_RenderPresent(sdl->sdl_renderer); | |
| 646 | 622 | osd_printf_verbose("Leave drawsdl2_window_create\n"); |
| 647 | 623 | return 0; |
| 648 | 624 | } |
| r242703 | r242704 | |
| 655 | 631 | { |
| 656 | 632 | sdl_info *sdl = (sdl_info *) window->dxdata; |
| 657 | 633 | |
| 658 | sdl->m_resize_pending = 1; | |
| 659 | sdl->m_resize_height = height; | |
| 660 | sdl->m_resize_width = width; | |
| 634 | sdl->resize_pending = 1; | |
| 635 | sdl->resize_height = height; | |
| 636 | sdl->resize_width = width; | |
| 661 | 637 | |
| 662 | 638 | window->width = width; |
| 663 | 639 | window->height = height; |
| 664 | 640 | |
| 665 | sdl-> | |
| 641 | sdl->blittimer = 3; | |
| 666 | 642 | |
| 667 | 643 | } |
| 668 | 644 | |
| r242703 | r242704 | |
| 674 | 650 | { |
| 675 | 651 | sdl_info *sdl = (sdl_info *) window->dxdata; |
| 676 | 652 | |
| 677 | *xt = x - sdl->m_hofs; | |
| 678 | *yt = y - sdl->m_vofs; | |
| 653 | *xt = x - sdl->last_hofs; | |
| 654 | *yt = y - sdl->last_vofs; | |
| 679 | 655 | if (*xt<0 || *xt >= window->blitwidth) |
| 680 | 656 | return 0; |
| 681 | 657 | if (*yt<0 || *yt >= window->blitheight) |
| r242703 | r242704 | |
| 687 | 663 | // drawsdl2_window_get_primitives |
| 688 | 664 | //============================================================ |
| 689 | 665 | |
| 690 | static v | |
| 666 | static render_primitive_list &drawsdl2_window_get_primitives(sdl_window_info *window) | |
| 691 | 667 | { |
| 692 | window->target->set_bounds(window->blitwidth, window->blitheight, sdlvideo_monitor_get_aspect(window->monitor())); | |
| 668 | if ((!window->fullscreen) || (video_config.switchres)) | |
| 669 | { | |
| 670 | sdlwindow_blit_surface_size(window, window->width, window->height); | |
| 671 | } | |
| 672 | else | |
| 673 | { | |
| 674 | sdlwindow_blit_surface_size(window, window->monitor->center_width, window->monitor->center_height); | |
| 675 | } | |
| 676 | window->target->set_bounds(window->blitwidth, window->blitheight, sdlvideo_monitor_get_aspect(window->monitor)); | |
| 677 | return window->target->get_primitives(); | |
| 693 | 678 | } |
| 694 | 679 | |
| 695 | 680 | //============================================================ |
| r242703 | r242704 | |
| 709 | 694 | return 0; |
| 710 | 695 | } |
| 711 | 696 | |
| 712 | if (sdl-> | |
| 697 | if (sdl->resize_pending) | |
| 713 | 698 | { |
| 714 | SDL_SetWindowSize(window->sdl_window, sdl-> | |
| 699 | SDL_SetWindowSize(window->sdl_window, sdl->resize_width, sdl->resize_height); | |
| 715 | 700 | SDL_GetWindowSize(window->sdl_window, &window->width, &window->height); |
| 716 | sdl->m_resize_pending = 0; | |
| 717 | SDL_RenderSetViewport(sdl->m_renderer, NULL); | |
| 701 | sdl->resize_pending = 0; | |
| 702 | SDL_RenderSetViewport(sdl->sdl_renderer, NULL); | |
| 718 | 703 | } |
| 719 | 704 | |
| 720 | 705 | //SDL_SelectRenderer(window->sdl_window); |
| 721 | 706 | |
| 722 | if (sdl-> | |
| 707 | if (sdl->blittimer > 0) | |
| 723 | 708 | { |
| 724 | 709 | /* SDL Underlays need alpha = 0 ! */ |
| 725 | SDL_SetRenderDrawBlendMode(sdl-> | |
| 710 | SDL_SetRenderDrawBlendMode(sdl->sdl_renderer, SDL_BLENDMODE_NONE); | |
| 726 | 711 | //SDL_SetRenderDrawColor(0,0,0,255); |
| 727 | SDL_SetRenderDrawColor(sdl->m_renderer, 0,0,0,0); | |
| 728 | SDL_RenderFillRect(sdl->m_renderer, NULL); | |
| 729 | sdl->m_blittimer--; | |
| 712 | SDL_SetRenderDrawColor(sdl->sdl_renderer, 0,0,0,0); | |
| 713 | SDL_RenderFillRect(sdl->sdl_renderer, NULL); | |
| 714 | sdl->blittimer--; | |
| 730 | 715 | } |
| 731 | 716 | |
| 732 | 717 | // compute centering parameters |
| r242703 | r242704 | |
| 736 | 721 | { |
| 737 | 722 | int ch, cw; |
| 738 | 723 | |
| 739 | if ((window->fullscreen | |
| 724 | if ((window->fullscreen) && (!video_config.switchres)) | |
| 740 | 725 | { |
| 741 | ch = window->monitor()->center_height; | |
| 742 | cw = window->monitor()->center_width; | |
| 726 | ch = window->monitor->center_height; | |
| 727 | cw = window->monitor->center_width; | |
| 743 | 728 | } |
| 744 | 729 | else |
| 745 | 730 | { |
| r242703 | r242704 | |
| 757 | 742 | } |
| 758 | 743 | } |
| 759 | 744 | |
| 760 | sdl->m_hofs = hofs; | |
| 761 | sdl->m_vofs = vofs; | |
| 745 | sdl->last_hofs = hofs; | |
| 746 | sdl->last_vofs = vofs; | |
| 762 | 747 | |
| 763 | 748 | window->primlist->acquire_lock(); |
| 764 | 749 | |
| r242703 | r242704 | |
| 775 | 760 | sb = (int)(255.0f * prim->color.b); |
| 776 | 761 | sa = (int)(255.0f * prim->color.a); |
| 777 | 762 | |
| 778 | SDL_SetRenderDrawBlendMode(sdl->m_renderer, map_blendmode(PRIMFLAG_GET_BLENDMODE(prim->flags))); | |
| 779 | SDL_SetRenderDrawColor(sdl->m_renderer, sr, sg, sb, sa); | |
| 780 | SDL_RenderDrawLine(sdl->m_renderer, prim->bounds.x0 + hofs, prim->bounds.y0 + vofs, | |
| 763 | SDL_SetRenderDrawBlendMode(sdl->sdl_renderer, map_blendmode(PRIMFLAG_GET_BLENDMODE(prim->flags))); | |
| 764 | SDL_SetRenderDrawColor(sdl->sdl_renderer, sr, sg, sb, sa); | |
| 765 | SDL_RenderDrawLine(sdl->sdl_renderer, prim->bounds.x0 + hofs, prim->bounds.y0 + vofs, | |
| 781 | 766 | prim->bounds.x1 + hofs, prim->bounds.y1 + vofs); |
| 782 | 767 | break; |
| 783 | 768 | case render_primitive::QUAD: |
| 784 | texture = | |
| 769 | texture = texture_update(window, prim); | |
| 785 | 770 | if (texture) |
| 786 | blit_pixels += (texture->raw_height() * texture->raw_width()); | |
| 787 | sdl->render_quad(texture, prim, | |
| 771 | blit_pixels += (texture->rawheight * texture->rawwidth); | |
| 772 | render_quad(sdl, texture, prim, | |
| 788 | 773 | round_nearest(hofs + prim->bounds.x0), |
| 789 | 774 | round_nearest(vofs + prim->bounds.y0)); |
| 790 | 775 | break; |
| r242703 | r242704 | |
| 795 | 780 | |
| 796 | 781 | window->primlist->release_lock(); |
| 797 | 782 | |
| 798 | sdl->m_last_blit_pixels = blit_pixels; | |
| 799 | sdl->m_last_blit_time = -osd_ticks(); | |
| 800 | SDL_RenderPresent(sdl->m_renderer); | |
| 801 | sdl->m_last_blit_time += osd_ticks(); | |
| 783 | sdl->last_blit_pixels = blit_pixels; | |
| 784 | sdl->last_blit_time = -osd_ticks(); | |
| 785 | SDL_RenderPresent(sdl->sdl_renderer); | |
| 786 | sdl->last_blit_time += osd_ticks(); | |
| 802 | 787 | |
| 803 | 788 | return 0; |
| 804 | 789 | } |
| r242703 | r242704 | |
| 812 | 797 | { |
| 813 | 798 | sdl_info *sdl = (sdl_info *) window->dxdata; |
| 814 | 799 | |
| 815 | sdl-> | |
| 800 | sdl->blittimer = 2; | |
| 816 | 801 | } |
| 817 | 802 | |
| 818 | 803 | |
| r242703 | r242704 | |
| 834 | 819 | |
| 835 | 820 | SDL_DestroyWindow(window->sdl_window); |
| 836 | 821 | |
| 837 | | |
| 822 | osd_free(sdl); | |
| 838 | 823 | window->dxdata = NULL; |
| 839 | 824 | } |
| 840 | 825 | |
| r242703 | r242704 | |
| 846 | 831 | // texture_compute_size and type |
| 847 | 832 | //============================================================ |
| 848 | 833 | |
| 849 | copy_info | |
| 834 | static copy_info *texture_compute_size_type(SDL_Renderer *renderer, const render_texinfo *texsource, texture_info *texture, UINT32 flags) | |
| 850 | 835 | { |
| 851 | copy_info_t *bi; | |
| 852 | copy_info_t *result = NULL; | |
| 836 | copy_info *bi; | |
| 837 | copy_info *result = NULL; | |
| 853 | 838 | int maxperf = 0; |
| 839 | //int bm = PRIMFLAG_GET_BLENDMODE(flags); | |
| 854 | 840 | |
| 855 | for (bi = blit_info[ | |
| 841 | for (bi = blit_info[texture->format]; bi != NULL; bi = bi->next) | |
| 856 | 842 | { |
| 857 | if ((m_is_rotated == bi->rotate) | |
| 858 | && (m_sdl_blendmode == bi->bm_mask)) | |
| 843 | if ((texture->is_rotated == bi->rotate) | |
| 844 | && (texture->sdl_blendmode == bi->bm_mask)) | |
| 859 | 845 | { |
| 860 | if (RendererSupportsFormat( | |
| 846 | if (RendererSupportsFormat(renderer, bi->dst_fmt, texture->sdl_access, bi->dstname)) | |
| 861 | 847 | { |
| 862 | int perf = bi->perf; | |
| 863 | if (perf == 0) | |
| 848 | if (bi->perf == 0) | |
| 864 | 849 | return bi; |
| 865 | else if (perf > (maxperf * 102) / 100) | |
| 850 | else if (bi->perf > (maxperf * 102) / 100) | |
| 866 | 851 | { |
| 867 | 852 | result = bi; |
| 868 | maxperf = perf; | |
| 853 | maxperf = bi->perf; | |
| 869 | 854 | } |
| 870 | 855 | } |
| 871 | 856 | } |
| r242703 | r242704 | |
| 873 | 858 | if (result) |
| 874 | 859 | return result; |
| 875 | 860 | /* try last resort handlers */ |
| 876 | for (bi = blit_info[ | |
| 861 | for (bi = blit_info[texture->format]; bi != NULL; bi = bi->next) | |
| 877 | 862 | { |
| 878 | if ((m_is_rotated == bi->rotate) | |
| 879 | && (m_sdl_blendmode == bi->bm_mask)) | |
| 880 | if (RendererSupportsFormat(m_renderer, bi->dst_fmt, m_sdl_access, bi->dstname)) | |
| 863 | if ((texture->is_rotated == bi->rotate) | |
| 864 | && (texture->sdl_blendmode == bi->bm_mask)) | |
| 865 | if (RendererSupportsFormat(renderer, bi->dst_fmt, texture->sdl_access, bi->dstname)) | |
| 881 | 866 | return bi; |
| 882 | 867 | } |
| 883 | 868 | //FIXME: crash implement a -do nothing handler */ |
| r242703 | r242704 | |
| 885 | 870 | } |
| 886 | 871 | |
| 887 | 872 | //============================================================ |
| 888 | // texture_ | |
| 873 | // texture_create | |
| 889 | 874 | //============================================================ |
| 890 | 875 | |
| 891 | ||
| 876 | static texture_info *texture_create(sdl_window_info *window, const render_texinfo *texsource, quad_setup_data *setup, UINT32 flags) | |
| 892 | 877 | { |
| 893 | return texinfo().base == prim.texture.base && | |
| 894 | texinfo().width == prim.texture.width && | |
| 895 | texinfo().height == prim.texture.height && | |
| 896 | texinfo().rowpixels == prim.texture.rowpixels && | |
| 897 | m_setup.dudx == setup.dudx && | |
| 898 | m_setup.dvdx == setup.dvdx && | |
| 899 | m_setup.dudy == setup.dudy && | |
| 900 | m_setup.dvdy == setup.dvdy && | |
| 901 | ((flags() ^ prim.flags) & (PRIMFLAG_BLENDMODE_MASK | PRIMFLAG_TEXFORMAT_MASK)) == 0; | |
| 902 | } | |
| 878 | sdl_info *sdl = (sdl_info *) window->dxdata; | |
| 879 | texture_info *texture; | |
| 903 | 880 | |
| 904 | //============================================================ | |
| 905 | // texture_create | |
| 906 | //============================================================ | |
| 881 | // allocate a new texture | |
| 882 | texture = (texture_info *) osd_malloc(sizeof(*texture)); | |
| 883 | memset(texture, 0, sizeof(*texture)); | |
| 907 | 884 | |
| 908 | texture_info::texture_info(SDL_Renderer *renderer, const render_texinfo &texsource, const quad_setup_data &setup, UINT32 flags) | |
| 909 | { | |
| 910 | ||
| 911 | 885 | // fill in the core data |
| 912 | m_renderer = renderer; | |
| 913 | m_hash = texture_compute_hash(texsource, flags); | |
| 914 | m_flags = flags; | |
| 915 | m_texinfo = texsource; | |
| 916 | m_texinfo.seqid = -1; // force set data | |
| 917 | m_is_rotated = FALSE; | |
| 918 | m_setup = setup; | |
| 919 | m_sdl_blendmode = map_blendmode(PRIMFLAG_GET_BLENDMODE(flags)); | |
| 920 | m_pitch = 0; | |
| 886 | texture->hash = texture_compute_hash(texsource, flags); | |
| 887 | texture->flags = flags; | |
| 888 | texture->texinfo = *texsource; | |
| 889 | texture->texinfo.seqid = -1; // force set data | |
| 890 | texture->is_rotated = FALSE; | |
| 891 | texture->setup = *setup; | |
| 892 | texture->sdl_blendmode = map_blendmode(PRIMFLAG_GET_BLENDMODE(flags)); | |
| 921 | 893 | |
| 922 | 894 | switch (PRIMFLAG_GET_TEXFORMAT(flags)) |
| 923 | 895 | { |
| 924 | 896 | case TEXFORMAT_ARGB32: |
| 925 | | |
| 897 | texture->format = SDL_TEXFORMAT_ARGB32; | |
| 926 | 898 | break; |
| 927 | 899 | case TEXFORMAT_RGB32: |
| 928 | | |
| 900 | texture->format = texsource->palette ? SDL_TEXFORMAT_RGB32_PALETTED : SDL_TEXFORMAT_RGB32; | |
| 929 | 901 | break; |
| 930 | 902 | case TEXFORMAT_PALETTE16: |
| 931 | | |
| 903 | texture->format = SDL_TEXFORMAT_PALETTE16; | |
| 932 | 904 | break; |
| 933 | 905 | case TEXFORMAT_PALETTEA16: |
| 934 | | |
| 906 | texture->format = SDL_TEXFORMAT_PALETTE16A; | |
| 935 | 907 | break; |
| 936 | 908 | case TEXFORMAT_YUY16: |
| 937 | | |
| 909 | texture->format = texsource->palette ? SDL_TEXFORMAT_YUY16_PALETTED : SDL_TEXFORMAT_YUY16; | |
| 938 | 910 | break; |
| 939 | 911 | |
| 940 | 912 | default: |
| 941 | 913 | osd_printf_error("Unknown textureformat %d\n", PRIMFLAG_GET_TEXFORMAT(flags)); |
| 942 | 914 | } |
| 943 | 915 | |
| 944 | if (setup.rotwidth != m_texinfo.width || setup.rotheight != m_texinfo.height | |
| 945 | || setup.dudx < 0 || setup.dvdy < 0) | |
| 946 | m_is_rotated = TRUE; | |
| 916 | texture->rawwidth = texsource->width; | |
| 917 | texture->rawheight = texsource->height; | |
| 918 | if (setup->rotwidth != texture->rawwidth || setup->rotheight != texture->rawheight | |
| 919 | || setup->dudx < 0 ) | |
| 920 | texture->is_rotated = TRUE; | |
| 947 | 921 | else |
| 948 | | |
| 922 | texture->is_rotated = FALSE; | |
| 949 | 923 | |
| 950 | //m_sdl_access = SDL_TEXTUREACCESS_STATIC; | |
| 951 | m_sdl_access = SDL_TEXTUREACCESS_STREAMING; | |
| 924 | //texture->sdl_access = SDL_TEXTUREACCESS_STATIC; | |
| 925 | texture->sdl_access = SDL_TEXTUREACCESS_STREAMING; | |
| 952 | 926 | |
| 953 | 927 | // Watch out for 0x0 textures ... |
| 954 | if (! | |
| 928 | if (!texture->setup.rotwidth || !texture->setup.rotheight) | |
| 955 | 929 | osd_printf_warning("Trying to create texture with zero dim\n"); |
| 956 | 930 | |
| 957 | // set copy_info | |
| 931 | // compute the size | |
| 932 | texture->copyinfo = texture_compute_size_type(sdl->sdl_renderer, texsource, texture, flags); | |
| 958 | 933 | |
| 959 | m_copyinfo = compute_size_type(); | |
| 934 | texture->texture_id = SDL_CreateTexture(sdl->sdl_renderer, texture->copyinfo->dst_fmt, texture->sdl_access, | |
| 935 | texture->setup.rotwidth, texture->setup.rotheight); | |
| 960 | 936 | |
| 961 | m_texture_id = SDL_CreateTexture(m_renderer, m_copyinfo->dst_fmt, m_sdl_access, | |
| 962 | m_setup.rotwidth, m_setup.rotheight); | |
| 937 | if (!texture->texture_id) | |
| 938 | osd_printf_error("Error creating texture: %d x %d, pixelformat %s error: %s\n", texture->setup.rotwidth, texture->setup.rotheight, | |
| 939 | texture->copyinfo->dstname, SDL_GetError()); | |
| 963 | 940 | |
| 964 | if (!m_texture_id) | |
| 965 | osd_printf_error("Error creating texture: %d x %d, pixelformat %s error: %s\n", m_setup.rotwidth, m_setup.rotheight, | |
| 966 | m_copyinfo->dstname, SDL_GetError()); | |
| 967 | ||
| 968 | if (m_sdl_access == SDL_TEXTUREACCESS_STATIC) | |
| 941 | if ( (texture->copyinfo->func != NULL) && (texture->sdl_access == SDL_TEXTUREACCESS_STATIC)) | |
| 969 | 942 | { |
| 970 | if (m_copyinfo->func != NULL) | |
| 971 | m_pixels = malloc(m_setup.rotwidth * m_setup.rotheight * m_copyinfo->dst_bpp); | |
| 972 | else | |
| 973 | m_pixels = NULL; | |
| 943 | texture->pixels = osd_malloc_array(texture->setup.rotwidth * texture->setup.rotheight * texture->copyinfo->dst_bpp); | |
| 944 | texture->pixels_own=TRUE; | |
| 974 | 945 | } |
| 975 | m_last_access = osd_ticks(); | |
| 946 | /* add us to the texture list */ | |
| 947 | texture->next = sdl->texlist; | |
| 948 | sdl->texlist = texture; | |
| 976 | 949 | |
| 977 | ||
| 950 | texture->last_access = osd_ticks(); | |
| 978 | 951 | |
| 979 | texture_info::~texture_info() | |
| 980 | { | |
| 981 | SDL_DestroyTexture(m_texture_id); | |
| 982 | if ( is_pixels_owned() && m_pixels != NULL ) | |
| 983 | free(m_pixels); | |
| 952 | return texture; | |
| 984 | 953 | } |
| 985 | 954 | |
| 986 | 955 | //============================================================ |
| 987 | 956 | // texture_set_data |
| 988 | 957 | //============================================================ |
| 989 | 958 | |
| 990 | void texture_ | |
| 959 | static void texture_set_data(sdl_info *sdl, texture_info *texture, const render_texinfo *texsource, UINT32 flags) | |
| 991 | 960 | { |
| 992 | m_copyinfo->time -= osd_ticks(); | |
| 993 | if (m_sdl_access == SDL_TEXTUREACCESS_STATIC) | |
| 961 | texture->copyinfo->time -= osd_ticks(); | |
| 962 | if (texture->sdl_access == SDL_TEXTUREACCESS_STATIC) | |
| 994 | 963 | { |
| 995 | if ( | |
| 964 | if ( texture->copyinfo->func ) | |
| 996 | 965 | { |
| 997 | m_pitch = m_setup.rotwidth * m_copyinfo->dst_bpp; | |
| 998 | m_copyinfo->func(this, &texsource); | |
| 966 | texture->pitch = texture->setup.rotwidth * texture->copyinfo->dst_bpp; | |
| 967 | texture->copyinfo->func(texture, texsource); | |
| 999 | 968 | } |
| 1000 | 969 | else |
| 1001 | 970 | { |
| 1002 | m_pixels = texsource.base; | |
| 1003 | m_pitch = m_texinfo.rowpixels * m_copyinfo->dst_bpp; | |
| 971 | texture->pixels = texsource->base; | |
| 972 | texture->pitch = texture->texinfo.rowpixels * texture->copyinfo->dst_bpp; | |
| 1004 | 973 | } |
| 1005 | SDL_UpdateTexture( | |
| 974 | SDL_UpdateTexture(texture->texture_id, NULL, texture->pixels, texture->pitch); | |
| 1006 | 975 | } |
| 1007 | 976 | else |
| 1008 | 977 | { |
| 1009 | SDL_LockTexture(m_texture_id, NULL, (void **) &m_pixels, &m_pitch); | |
| 1010 | if ( m_copyinfo->func ) | |
| 1011 | m_copyinfo->func(this, &texsource); | |
| 978 | SDL_LockTexture(texture->texture_id, NULL, (void **) &texture->pixels, &texture->pitch); | |
| 979 | if ( texture->copyinfo->func ) | |
| 980 | texture->copyinfo->func(texture, texsource); | |
| 1012 | 981 | else |
| 1013 | 982 | { |
| 1014 | UINT8 *src = (UINT8 *) texsource.base; | |
| 1015 | UINT8 *dst = (UINT8 *) m_pixels; | |
| 1016 | int spitch = texsource.rowpixels * m_copyinfo->dst_bpp; | |
| 1017 | int num = texsource.width * m_copyinfo->dst_bpp; | |
| 1018 | int h = texsource.height; | |
| 983 | UINT8 *src = (UINT8 *) texsource->base; | |
| 984 | UINT8 *dst = (UINT8 *) texture->pixels; | |
| 985 | int spitch = texsource->rowpixels * texture->copyinfo->dst_bpp; | |
| 986 | int num = texsource->width * texture->copyinfo->dst_bpp; | |
| 987 | int h = texsource->height; | |
| 1019 | 988 | while (h--) { |
| 1020 | 989 | memcpy(dst, src, num); |
| 1021 | 990 | src += spitch; |
| 1022 | dst += | |
| 991 | dst += texture->pitch; | |
| 1023 | 992 | } |
| 1024 | 993 | } |
| 1025 | SDL_UnlockTexture( | |
| 994 | SDL_UnlockTexture(texture->texture_id); | |
| 1026 | 995 | } |
| 1027 | | |
| 996 | texture->copyinfo->time += osd_ticks(); | |
| 1028 | 997 | } |
| 1029 | 998 | |
| 1030 | 999 | //============================================================ |
| 1031 | 1000 | // compute rotation setup |
| 1032 | 1001 | //============================================================ |
| 1033 | 1002 | |
| 1034 | void | |
| 1003 | static void compute_setup(sdl_info *sdl, const render_primitive *prim, quad_setup_data *setup, int flags) | |
| 1035 | 1004 | { |
| 1036 | const render_quad_texuv *texcoords = &prim.texcoords; | |
| 1037 | int texwidth = prim.texture.width; | |
| 1038 | int texheight = prim.texture.height; | |
| 1005 | const render_quad_texuv *texcoords = &prim->texcoords; | |
| 1006 | int texwidth = prim->texture.width; | |
| 1007 | int texheight = prim->texture.height; | |
| 1039 | 1008 | float fdudx, fdvdx, fdudy, fdvdy; |
| 1040 | 1009 | float width, height; |
| 1041 | 1010 | float fscale; |
| 1042 | 1011 | /* determine U/V deltas */ |
| 1043 | if ((PRIMFLAG_GET_SCREENTEX( | |
| 1012 | if ((PRIMFLAG_GET_SCREENTEX(flags))) | |
| 1044 | 1013 | fscale = (float) video_config.prescale; |
| 1045 | 1014 | else |
| 1046 | 1015 | fscale = 1.0f; |
| r242703 | r242704 | |
| 1050 | 1019 | fdudy = (texcoords->bl.u - texcoords->tl.u) / fscale; // b a12 |
| 1051 | 1020 | fdvdy = (texcoords->bl.v - texcoords->tl.v) / fscale; // d a22 |
| 1052 | 1021 | |
| 1053 | #if 0 | |
| 1054 | printf("tl.u %f tl.v %f\n", texcoords->tl.u, texcoords->tl.v); | |
| 1055 | printf("tr.u %f tr.v %f\n", texcoords->tr.u, texcoords->tr.v); | |
| 1056 | printf("bl.u %f bl.v %f\n", texcoords->bl.u, texcoords->bl.v); | |
| 1057 | printf("br.u %f br.v %f\n", texcoords->br.u, texcoords->br.v); | |
| 1058 | 1022 | /* compute start and delta U,V coordinates now */ |
| 1059 | #endif | |
| 1060 | 1023 | |
| 1061 | dudx = round_nearest(65536.0f * fdudx); | |
| 1062 | dvdx = round_nearest(65536.0f * fdvdx); | |
| 1063 | dudy = round_nearest(65536.0f * fdudy); | |
| 1064 | dvdy = round_nearest(65536.0f * fdvdy); | |
| 1065 | startu = round_nearest(65536.0f * (float) texwidth * texcoords->tl.u); | |
| 1066 | startv = round_nearest(65536.0f * (float) texheight * texcoords->tl.v); | |
| 1024 | setup->dudx = round_nearest(65536.0f * fdudx); | |
| 1025 | setup->dvdx = round_nearest(65536.0f * fdvdx); | |
| 1026 | setup->dudy = round_nearest(65536.0f * fdudy); | |
| 1027 | setup->dvdy = round_nearest(65536.0f * fdvdy); | |
| 1028 | setup->startu = round_nearest(65536.0f * (float) texwidth * texcoords->tl.u); | |
| 1029 | setup->startv = round_nearest(65536.0f * (float) texheight * texcoords->tl.v); | |
| 1067 | 1030 | |
| 1068 | 1031 | /* clamp to integers */ |
| 1069 | 1032 | |
| 1070 | 1033 | width = fabs((fdudx * (float) (texwidth) + fdvdx * (float) (texheight)) * fscale * fscale); |
| 1071 | 1034 | height = fabs((fdudy * (float)(texwidth) + fdvdy * (float) (texheight)) * fscale * fscale); |
| 1072 | 1035 | |
| 1073 | rotwidth = width; | |
| 1074 | rotheight = height; | |
| 1036 | setup->rotwidth = width; | |
| 1037 | setup->rotheight = height; | |
| 1075 | 1038 | |
| 1076 | startu += (dudx + dudy) / 2; | |
| 1077 | startv += (dvdx + dvdy) / 2; | |
| 1039 | setup->startu += (setup->dudx + setup->dudy) / 2; | |
| 1040 | setup->startv += (setup->dvdx + setup->dvdy) / 2; | |
| 1078 | 1041 | |
| 1079 | 1042 | } |
| 1080 | 1043 | |
| r242703 | r242704 | |
| 1082 | 1045 | // texture_find |
| 1083 | 1046 | //============================================================ |
| 1084 | 1047 | |
| 1085 | texture_info * | |
| 1048 | static texture_info *texture_find(sdl_info *sdl, const render_primitive *prim, quad_setup_data *setup) | |
| 1086 | 1049 | { |
| 1087 | HashT texhash = texture_compute_hash(prim | |
| 1050 | HashT texhash = texture_compute_hash(&prim->texture, prim->flags); | |
| 1088 | 1051 | texture_info *texture; |
| 1089 | 1052 | osd_ticks_t now = osd_ticks(); |
| 1090 | 1053 | |
| 1091 | 1054 | // find a match |
| 1092 | for (texture = m_texlist.first(); texture != NULL; ) | |
| 1093 | if (texture->hash() == texhash && | |
| 1094 | texture->matches(prim, setup)) | |
| 1055 | for (texture = sdl->texlist; texture != NULL; ) | |
| 1056 | if (texture->hash == texhash && | |
| 1057 | texture->texinfo.base == prim->texture.base && | |
| 1058 | texture->texinfo.width == prim->texture.width && | |
| 1059 | texture->texinfo.height == prim->texture.height && | |
| 1060 | texture->texinfo.rowpixels == prim->texture.rowpixels && | |
| 1061 | texture->setup.dudx == setup->dudx && | |
| 1062 | texture->setup.dvdx == setup->dvdx && | |
| 1063 | texture->setup.dudy == setup->dudy && | |
| 1064 | texture->setup.dvdy == setup->dvdy && | |
| 1065 | ((texture->flags ^ prim->flags) & (PRIMFLAG_BLENDMODE_MASK | PRIMFLAG_TEXFORMAT_MASK)) == 0) | |
| 1095 | 1066 | { |
| 1096 | /* would we choose another blitter based on performance ? */ | |
| 1097 | if ((texture->m_copyinfo->samples & 0x7f) == 0x7f) | |
| 1067 | /* would we choose another blitter ? */ | |
| 1068 | if ((texture->copyinfo->samples & 0x1f) == 0x1f) | |
| 1098 | 1069 | { |
| 1099 | if (texture-> | |
| 1070 | if (texture->copyinfo != texture_compute_size_type(sdl->sdl_renderer, &texture->texinfo, texture, prim->flags)) | |
| 1100 | 1071 | return NULL; |
| 1072 | #if 0 | |
| 1073 | else | |
| 1074 | { | |
| 1075 | /* reset stats */ | |
| 1076 | texture->copyinfo->samples = 0; | |
| 1077 | texture->copyinfo->time = 0; | |
| 1078 | texture->copyinfo->pixel_count = 0; | |
| 1079 | } | |
| 1080 | #endif | |
| 1101 | 1081 | } |
| 1102 | texture-> | |
| 1082 | texture->last_access = now; | |
| 1103 | 1083 | return texture; |
| 1104 | 1084 | } |
| 1105 | 1085 | else |
| 1106 | 1086 | { |
| 1107 | 1087 | /* free resources not needed any longer? */ |
| 1108 | 1088 | texture_info *expire = texture; |
| 1109 | texture = texture->next(); | |
| 1110 | if (now - expire->m_last_access > osd_ticks_per_second()) | |
| 1111 | m_texlist.remove(*expire); | |
| 1089 | texture = texture->next; | |
| 1090 | if (now - expire->last_access > osd_ticks_per_second()) | |
| 1091 | drawsdl2_destroy_texture(sdl, expire); | |
| 1112 | 1092 | } |
| 1113 | 1093 | |
| 1114 | 1094 | // nothing found |
| r242703 | r242704 | |
| 1119 | 1099 | // texture_update |
| 1120 | 1100 | //============================================================ |
| 1121 | 1101 | |
| 1122 | texture_info * | |
| 1102 | static texture_info * texture_update(sdl_window_info *window, const render_primitive *prim) | |
| 1123 | 1103 | { |
| 1104 | sdl_info *sdl = (sdl_info *) window->dxdata; | |
| 1124 | 1105 | quad_setup_data setup; |
| 1125 | 1106 | texture_info *texture; |
| 1126 | 1107 | |
| 1127 | | |
| 1108 | compute_setup(sdl, prim, &setup, prim->flags); | |
| 1128 | 1109 | |
| 1129 | texture = texture_find(prim, setup); | |
| 1110 | texture = texture_find(sdl, prim, &setup); | |
| 1130 | 1111 | |
| 1131 | 1112 | // if we didn't find one, create a new texture |
| 1132 | if (texture == NULL && prim | |
| 1113 | if (texture == NULL && prim->texture.base != NULL) | |
| 1133 | 1114 | { |
| 1134 | texture = global_alloc(texture_info(m_renderer, prim.texture, setup, prim.flags)); | |
| 1135 | /* add us to the texture list */ | |
| 1136 | m_texlist.prepend(*texture); | |
| 1137 | ||
| 1115 | texture = texture_create(window, &prim->texture, &setup, prim->flags); | |
| 1138 | 1116 | } |
| 1139 | 1117 | |
| 1140 | 1118 | if (texture != NULL) |
| 1141 | 1119 | { |
| 1142 | if (prim | |
| 1120 | if (prim->texture.base != NULL && texture->texinfo.seqid != prim->texture.seqid) | |
| 1143 | 1121 | { |
| 1144 | texture->texinfo | |
| 1122 | texture->texinfo.seqid = prim->texture.seqid; | |
| 1145 | 1123 | // if we found it, but with a different seqid, copy the data |
| 1146 | texture | |
| 1124 | texture_set_data(sdl, texture, &prim->texture, prim->flags); | |
| 1147 | 1125 | } |
| 1148 | 1126 | |
| 1149 | 1127 | } |
| 1150 | 1128 | return texture; |
| 1151 | 1129 | } |
| 1152 | 1130 | |
| 1131 | static void drawsdl2_destroy_texture(sdl_info *sdl, texture_info *texture) | |
| 1132 | { | |
| 1133 | texture_info *p; | |
| 1153 | 1134 | |
| 1135 | SDL_DestroyTexture(texture->texture_id); | |
| 1136 | if ( texture->pixels_own ) | |
| 1137 | { | |
| 1138 | osd_free(texture->pixels); | |
| 1139 | texture->pixels=NULL; | |
| 1140 | texture->pixels_own=FALSE; | |
| 1141 | } | |
| 1142 | ||
| 1143 | for (p=sdl->texlist; p != NULL; p = p->next) | |
| 1144 | if (p->next == texture) | |
| 1145 | break; | |
| 1146 | if (p == NULL) | |
| 1147 | sdl->texlist = NULL; | |
| 1148 | else | |
| 1149 | p->next = texture->next; | |
| 1150 | osd_free(texture); | |
| 1151 | } | |
| 1152 | ||
| 1154 | 1153 | static void drawsdl2_destroy_all_textures(sdl_window_info *window) |
| 1155 | 1154 | { |
| 1156 | 1155 | sdl_info *sdl = (sdl_info *) window->dxdata; |
| 1156 | texture_info *next_texture=NULL, *texture = NULL; | |
| 1157 | int lock=FALSE; | |
| 1157 | 1158 | |
| 1158 | 1159 | if (sdl == NULL) |
| 1159 | 1160 | return; |
| 1160 | 1161 | |
| 1161 | 1162 | if(window->primlist) |
| 1162 | 1163 | { |
| 1164 | lock=TRUE; | |
| 1163 | 1165 | window->primlist->acquire_lock(); |
| 1164 | sdl->m_texlist.reset(); | |
| 1165 | window->primlist->release_lock(); | |
| 1166 | 1166 | } |
| 1167 | else | |
| 1168 | sdl->m_texlist.reset(); | |
| 1167 | ||
| 1168 | texture = sdl->texlist; | |
| 1169 | ||
| 1170 | while (texture) | |
| 1171 | { | |
| 1172 | next_texture = texture->next; | |
| 1173 | drawsdl2_destroy_texture(sdl, texture); | |
| 1174 | texture = next_texture; | |
| 1175 | } | |
| 1176 | ||
| 1177 | if (lock) | |
| 1178 | window->primlist->release_lock(); | |
| 1169 | 1179 | } |
| r242703 | r242704 | |
|---|---|---|
| 161 | 161 | /* texture_info holds information about a texture */ |
| 162 | 162 | struct texture_info |
| 163 | 163 | { |
| 164 | texture_info() | |
| 165 | : hash(0), flags(0), rawwidth(0), rawheight(0), | |
| 166 | rawwidth_create(0), rawheight_create(0), | |
| 167 | type(0), format(0), borderpix(0), xprescale(0), yprescale(0), nocopy(0), | |
| 168 | texture(0), texTarget(0), texpow2(0), mpass_dest_idx(0), pbo(0), data(NULL), | |
| 169 | data_own(0), texCoordBufferName(0) | |
| 170 | { | |
| 171 | for (int i=0; i<2; i++) | |
| 172 | { | |
| 173 | mpass_textureunit[i] = 0; | |
| 174 | mpass_texture_mamebm[i] = 0; | |
| 175 | mpass_fbo_mamebm[i] = 0; | |
| 176 | mpass_texture_scrn[i] = 0; | |
| 177 | mpass_fbo_scrn[i] = 0; | |
| 178 | } | |
| 179 | for (int i=0; i<8; i++) | |
| 180 | texCoord[i] = 0.0f; | |
| 181 | } | |
| 182 | ||
| 183 | 164 | HashT hash; // hash value for the texture (must be >= pointer size) |
| 184 | 165 | UINT32 flags; // rendering flags |
| 185 | 166 | render_texinfo texinfo; // copy of the texture info |
| r242703 | r242704 | |
| 217 | 198 | /* sdl_info is the information about SDL for the current screen */ |
| 218 | 199 | struct sdl_info |
| 219 | 200 | { |
| 220 | sdl_info() | |
| 221 | : blittimer(0), extra_flags(0), | |
| 222 | #if (SDLMAME_SDL2) | |
| 223 | gl_context_id(0), | |
| 224 | #else | |
| 225 | sdlsurf(NULL), | |
| 226 | #endif | |
| 227 | initialized(0), | |
| 228 | last_blendmode(0), | |
| 229 | texture_max_width(0), | |
| 230 | texture_max_height(0), | |
| 231 | texpoweroftwo(0), | |
| 232 | usevbo(0), usepbo(0), usefbo(0), useglsl(0), glsl(NULL), | |
| 233 | glsl_program_num(0), | |
| 234 | glsl_program_mb2sc(0), | |
| 235 | usetexturerect(0), | |
| 236 | init_context(0), | |
| 237 | last_hofs(0.0f), | |
| 238 | last_vofs(0.0f), | |
| 239 | surf_w(0), | |
| 240 | surf_h(0) | |
| 241 | { | |
| 242 | for (int i=0; i < HASH_SIZE + OVERFLOW_SIZE; i++) | |
| 243 | texhash[i] = NULL; | |
| 244 | for (int i=0; i < 2*GLSL_SHADER_MAX; i++) | |
| 245 | glsl_program[i] = 0; | |
| 246 | for (int i=0; i < 8; i++) | |
| 247 | texVerticex[i] = 0.0f; | |
| 248 | } | |
| 249 | ||
| 250 | 201 | INT32 blittimer; |
| 251 | 202 | UINT32 extra_flags; |
| 252 | 203 | |
| r242703 | r242704 | |
| 367 | 318 | static void drawogl_window_resize(sdl_window_info *window, int width, int height); |
| 368 | 319 | static void drawogl_window_destroy(sdl_window_info *window); |
| 369 | 320 | static int drawogl_window_draw(sdl_window_info *window, UINT32 dc, int update); |
| 370 | static v | |
| 321 | static render_primitive_list &drawogl_window_get_primitives(sdl_window_info *window); | |
| 371 | 322 | static void drawogl_destroy_all_textures(sdl_window_info *window); |
| 372 | 323 | static void drawogl_window_clear(sdl_window_info *window); |
| 373 | 324 | static int drawogl_xy_to_render_target(sdl_window_info *window, int x, int y, int *xt, int *yt); |
| r242703 | r242704 | |
| 454 | 405 | // fill in the callbacks |
| 455 | 406 | window->create = drawogl_window_create; |
| 456 | 407 | window->resize = drawogl_window_resize; |
| 457 | window-> | |
| 408 | window->get_primitives = drawogl_window_get_primitives; | |
| 458 | 409 | window->draw = drawogl_window_draw; |
| 459 | 410 | window->destroy = drawogl_window_destroy; |
| 460 | 411 | window->destroy_all_textures = drawogl_destroy_all_textures; |
| r242703 | r242704 | |
| 536 | 487 | int has_and_allow_texturerect = 0; |
| 537 | 488 | |
| 538 | 489 | // allocate memory for our structures |
| 539 | sdl = global_alloc(sdl_info); | |
| 490 | sdl = (sdl_info *) osd_malloc(sizeof(*sdl)); | |
| 491 | memset(sdl, 0, sizeof(*sdl)); | |
| 540 | 492 | |
| 541 | 493 | window->dxdata = sdl; |
| 542 | 494 | |
| 543 | 495 | #if (SDLMAME_SDL2) |
| 544 | sdl->extra_flags = (window->fullscreen | |
| 496 | sdl->extra_flags = (window->fullscreen ? | |
| 545 | 497 | SDL_WINDOW_BORDERLESS | SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_FULLSCREEN : SDL_WINDOW_RESIZABLE); |
| 546 | 498 | sdl->extra_flags |= SDL_WINDOW_OPENGL; |
| 547 | 499 | |
| r242703 | r242704 | |
| 558 | 510 | //load_gl_lib(window->machine()); |
| 559 | 511 | |
| 560 | 512 | // create the SDL window |
| 561 | window->sdl_window = SDL_CreateWindow(window->title, window->monitor | |
| 513 | window->sdl_window = SDL_CreateWindow(window->title, window->monitor->monitor_x, 0, | |
| 562 | 514 | width, height, sdl->extra_flags); |
| 563 | 515 | |
| 564 | 516 | if (!window->sdl_window ) |
| r242703 | r242704 | |
| 567 | 519 | return 1; |
| 568 | 520 | } |
| 569 | 521 | |
| 570 | if (window->fullscreen | |
| 522 | if (window->fullscreen && video_config.switchres) | |
| 571 | 523 | { |
| 572 | 524 | SDL_DisplayMode mode; |
| 573 | SDL_GetCurrentDisplayMode(window->monitor | |
| 525 | SDL_GetCurrentDisplayMode(window->monitor->handle, &mode); | |
| 574 | 526 | mode.w = width; |
| 575 | 527 | mode.h = height; |
| 576 | 528 | if (window->refresh) |
| r242703 | r242704 | |
| 595 | 547 | SDL_GL_SetSwapInterval(video_config.waitvsync ? 2 : 0); |
| 596 | 548 | |
| 597 | 549 | #else |
| 598 | sdl->extra_flags = (window->fullscreen | |
| 550 | sdl->extra_flags = (window->fullscreen ? SDL_FULLSCREEN : SDL_RESIZABLE); | |
| 599 | 551 | sdl->extra_flags |= SDL_OPENGL | SDL_DOUBLEBUF; |
| 600 | 552 | |
| 601 | 553 | SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); |
| r242703 | r242704 | |
| 840 | 792 | // drawogl_window_get_primitives |
| 841 | 793 | //============================================================ |
| 842 | 794 | |
| 843 | static v | |
| 795 | static render_primitive_list &drawogl_window_get_primitives(sdl_window_info *window) | |
| 844 | 796 | { |
| 845 | window->target->set_bounds(window->blitwidth, window->blitheight, sdlvideo_monitor_get_aspect(window->monitor())); | |
| 797 | if ((!window->fullscreen) || (video_config.switchres)) | |
| 798 | { | |
| 799 | sdlwindow_blit_surface_size(window, window->width, window->height); | |
| 800 | } | |
| 801 | else | |
| 802 | { | |
| 803 | sdlwindow_blit_surface_size(window, window->monitor->center_width, window->monitor->center_height); | |
| 804 | } | |
| 805 | window->target->set_bounds(window->blitwidth, window->blitheight, sdlvideo_monitor_get_aspect(window->monitor)); | |
| 806 | return window->target->get_primitives(); | |
| 846 | 807 | } |
| 847 | 808 | |
| 848 | 809 | //============================================================ |
| r242703 | r242704 | |
| 1182 | 1143 | screen_device_iterator myiter(window->machine().root_device()); |
| 1183 | 1144 | for (screen = myiter.first(); screen != NULL; screen = myiter.next()) |
| 1184 | 1145 | { |
| 1185 | if (window->index | |
| 1146 | if (window->index == 0) | |
| 1186 | 1147 | { |
| 1187 | 1148 | if ((screen->width() != window->screen_width) || (screen->height() != window->screen_height)) |
| 1188 | 1149 | { |
| r242703 | r242704 | |
| 1219 | 1180 | screen_device_iterator iter(window->machine().root_device()); |
| 1220 | 1181 | for (screen = iter.first(); screen != NULL; screen = iter.next()) |
| 1221 | 1182 | { |
| 1222 | if (scrnum == window->index | |
| 1183 | if (scrnum == window->index) | |
| 1223 | 1184 | { |
| 1224 | 1185 | is_vector = (screen->screen_type() == SCREEN_TYPE_VECTOR) ? 1 : 0; |
| 1225 | 1186 | break; |
| r242703 | r242704 | |
| 1310 | 1271 | { |
| 1311 | 1272 | int ch, cw; |
| 1312 | 1273 | |
| 1313 | if ((window->fullscreen | |
| 1274 | if ((window->fullscreen) && (!video_config.switchres)) | |
| 1314 | 1275 | { |
| 1315 | ch = window->monitor()->center_height; | |
| 1316 | cw = window->monitor()->center_width; | |
| 1276 | ch = window->monitor->center_height; | |
| 1277 | cw = window->monitor->center_width; | |
| 1317 | 1278 | } |
| 1318 | 1279 | else |
| 1319 | 1280 | { |
| r242703 | r242704 | |
| 1651 | 1612 | } |
| 1652 | 1613 | #endif |
| 1653 | 1614 | |
| 1654 | | |
| 1615 | osd_free(sdl); | |
| 1655 | 1616 | window->dxdata = NULL; |
| 1656 | 1617 | } |
| 1657 | 1618 | |
| r242703 | r242704 | |
| 1693 | 1654 | if ( texture_copy_properties[texture->format][SDL_TEXFORMAT_SRC_EQUALS_DEST] && |
| 1694 | 1655 | !texture_copy_properties[texture->format][SDL_TEXFORMAT_SRC_HAS_PALETTE] && |
| 1695 | 1656 | texture->xprescale == 1 && texture->yprescale == 1 && |
| 1696 | !texture->borderpix && !texsource->palette | |
| 1657 | !texture->borderpix && !texsource->palette && | |
| 1697 | 1658 | texsource->rowpixels <= sdl->texture_max_width ) |
| 1698 | 1659 | { |
| 1699 | 1660 | texture->nocopy = TRUE; |
| r242703 | r242704 | |
| 2107 | 2068 | texture_info *texture; |
| 2108 | 2069 | |
| 2109 | 2070 | // allocate a new texture |
| 2110 | texture = global_alloc(texture_info); | |
| 2071 | texture = (texture_info *) malloc(sizeof(*texture)); | |
| 2072 | memset(texture, 0, sizeof(*texture)); | |
| 2111 | 2073 | |
| 2112 | 2074 | // fill in the core data |
| 2113 | 2075 | texture->hash = texture_compute_hash(texsource, flags); |
| r242703 | r242704 | |
| 2145 | 2107 | texture->format = SDL_TEXFORMAT_ARGB32; |
| 2146 | 2108 | break; |
| 2147 | 2109 | case TEXFORMAT_RGB32: |
| 2148 | if (texsource->palette | |
| 2110 | if (texsource->palette != NULL) | |
| 2149 | 2111 | texture->format = SDL_TEXFORMAT_RGB32_PALETTED; |
| 2150 | 2112 | else |
| 2151 | 2113 | texture->format = SDL_TEXFORMAT_RGB32; |
| r242703 | r242704 | |
| 2157 | 2119 | texture->format = SDL_TEXFORMAT_PALETTE16A; |
| 2158 | 2120 | break; |
| 2159 | 2121 | case TEXFORMAT_YUY16: |
| 2160 | if (texsource->palette | |
| 2122 | if (texsource->palette != NULL) | |
| 2161 | 2123 | texture->format = SDL_TEXFORMAT_YUY16_PALETTED; |
| 2162 | 2124 | else |
| 2163 | 2125 | texture->format = SDL_TEXFORMAT_YUY16; |
| r242703 | r242704 | |
| 2181 | 2143 | { |
| 2182 | 2144 | if ( texture_shader_create(window, texsource, texture, flags) ) |
| 2183 | 2145 | { |
| 2184 | | |
| 2146 | free(texture); | |
| 2185 | 2147 | return NULL; |
| 2186 | 2148 | } |
| 2187 | 2149 | } |
| r242703 | r242704 | |
| 2267 | 2229 | sdl->texhash[i] = texture; |
| 2268 | 2230 | break; |
| 2269 | 2231 | } |
| 2270 | assert | |
| 2232 | assert(i < HASH_SIZE + OVERFLOW_SIZE); | |
| 2271 | 2233 | } |
| 2272 | 2234 | |
| 2273 | 2235 | if(sdl->usevbo) |
| r242703 | r242704 | |
| 2599 | 2561 | switch (PRIMFLAG_GET_TEXFORMAT(flags)) |
| 2600 | 2562 | { |
| 2601 | 2563 | case TEXFORMAT_PALETTE16: |
| 2602 | copyline_palette16((UINT32 *)dst, (UINT16 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette | |
| 2564 | copyline_palette16((UINT32 *)dst, (UINT16 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette, texture->borderpix, texture->xprescale); | |
| 2603 | 2565 | break; |
| 2604 | 2566 | |
| 2605 | 2567 | case TEXFORMAT_PALETTEA16: |
| 2606 | copyline_palettea16((UINT32 *)dst, (UINT16 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette | |
| 2568 | copyline_palettea16((UINT32 *)dst, (UINT16 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette, texture->borderpix, texture->xprescale); | |
| 2607 | 2569 | break; |
| 2608 | 2570 | |
| 2609 | 2571 | case TEXFORMAT_RGB32: |
| 2610 | copyline_rgb32((UINT32 *)dst, (UINT32 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette | |
| 2572 | copyline_rgb32((UINT32 *)dst, (UINT32 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette, texture->borderpix, texture->xprescale); | |
| 2611 | 2573 | break; |
| 2612 | 2574 | |
| 2613 | 2575 | case TEXFORMAT_ARGB32: |
| 2614 | copyline_argb32((UINT32 *)dst, (UINT32 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette | |
| 2576 | copyline_argb32((UINT32 *)dst, (UINT32 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette, texture->borderpix, texture->xprescale); | |
| 2615 | 2577 | break; |
| 2616 | 2578 | |
| 2617 | 2579 | case TEXFORMAT_YUY16: |
| 2618 | copyline_yuy16_to_argb((UINT32 *)dst, (UINT16 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette | |
| 2580 | copyline_yuy16_to_argb((UINT32 *)dst, (UINT16 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette, texture->borderpix, texture->xprescale); | |
| 2619 | 2581 | break; |
| 2620 | 2582 | |
| 2621 | 2583 | default: |
| r242703 | r242704 | |
| 2688 | 2650 | texture->texinfo.width == prim->texture.width && |
| 2689 | 2651 | texture->texinfo.height == prim->texture.height && |
| 2690 | 2652 | texture->texinfo.rowpixels == prim->texture.rowpixels && |
| 2691 | | |
| 2653 | texture->texinfo.palette == prim->texture.palette && | |
| 2692 | 2654 | ((texture->flags ^ prim->flags) & (PRIMFLAG_BLENDMODE_MASK | PRIMFLAG_TEXFORMAT_MASK)) == 0) |
| 2693 | 2655 | return 1; |
| 2694 | 2656 | else |
| r242703 | r242704 | |
| 3079 | 3041 | sdl->texhash[i] = NULL; |
| 3080 | 3042 | if (texture != NULL) |
| 3081 | 3043 | { |
| 3082 | if(sdl->usevbo) | |
| 3083 | { | |
| 3084 | pfn_glDeleteBuffers( 1, &(texture->texCoordBufferName) ); | |
| 3085 | texture->texCoordBufferName=0; | |
| 3086 | } | |
| 3044 | if(sdl->usevbo) | |
| 3045 | { | |
| 3046 | pfn_glDeleteBuffers( 1, &(texture->texCoordBufferName) ); | |
| 3047 | texture->texCoordBufferName=0; | |
| 3048 | } | |
| 3087 | 3049 | |
| 3088 | if(sdl->usepbo && texture->pbo) | |
| 3089 | { | |
| 3090 | pfn_glDeleteBuffers( 1, (GLuint *)&(texture->pbo) ); | |
| 3091 | texture->pbo=0; | |
| 3092 | } | |
| 3050 | if(sdl->usepbo && texture->pbo) | |
| 3051 | { | |
| 3052 | pfn_glDeleteBuffers( 1, (GLuint *)&(texture->pbo) ); | |
| 3053 | texture->pbo=0; | |
| 3054 | } | |
| 3093 | 3055 | |
| 3094 | if( sdl->glsl_program_num > 1 ) | |
| 3095 | { | |
| 3096 | assert(sdl->usefbo); | |
| 3097 | pfn_glDeleteFramebuffers(2, (GLuint *)&texture->mpass_fbo_mamebm[0]); | |
| 3098 | glDeleteTextures(2, (GLuint *)&texture->mpass_texture_mamebm[0]); | |
| 3099 | } | |
| 3056 | if( sdl->glsl_program_num > 1 ) | |
| 3057 | { | |
| 3058 | assert(sdl->usefbo); | |
| 3059 | pfn_glDeleteFramebuffers(2, (GLuint *)&texture->mpass_fbo_mamebm[0]); | |
| 3060 | glDeleteTextures(2, (GLuint *)&texture->mpass_texture_mamebm[0]); | |
| 3061 | } | |
| 3100 | 3062 | |
| 3101 | if ( sdl->glsl_program_mb2sc < sdl->glsl_program_num - 1 ) | |
| 3102 | { | |
| 3103 | assert(sdl->usefbo); | |
| 3104 | pfn_glDeleteFramebuffers(2, (GLuint *)&texture->mpass_fbo_scrn[0]); | |
| 3105 | glDeleteTextures(2, (GLuint *)&texture->mpass_texture_scrn[0]); | |
| 3106 | } | |
| 3063 | if ( sdl->glsl_program_mb2sc < sdl->glsl_program_num - 1 ) | |
| 3064 | { | |
| 3065 | assert(sdl->usefbo); | |
| 3066 | pfn_glDeleteFramebuffers(2, (GLuint *)&texture->mpass_fbo_scrn[0]); | |
| 3067 | glDeleteTextures(2, (GLuint *)&texture->mpass_texture_scrn[0]); | |
| 3068 | } | |
| 3107 | 3069 | |
| 3108 | glDeleteTextures(1, (GLuint *)&texture->texture); | |
| 3109 | if ( texture->data_own ) | |
| 3110 | { | |
| 3111 | free(texture->data); | |
| 3112 | texture->data=NULL; | |
| 3113 | texture->data_own=FALSE; | |
| 3114 | } | |
| 3115 | global_free(texture); | |
| 3070 | glDeleteTextures(1, (GLuint *)&texture->texture); | |
| 3071 | if ( texture->data_own ) | |
| 3072 | { | |
| 3073 | free(texture->data); | |
| 3074 | texture->data=NULL; | |
| 3075 | texture->data_own=FALSE; | |
| 3116 | 3076 | } |
| 3077 | free(texture); | |
| 3078 | } | |
| 3117 | 3079 | i++; |
| 3118 | 3080 | } |
| 3119 | 3081 | if ( sdl->useglsl ) |
| r242703 | r242704 | |
|---|---|---|
| 105 | 105 | static int drawsdl_window_create(sdl_window_info *window, int width, int height); |
| 106 | 106 | static void drawsdl_window_resize(sdl_window_info *window, int width, int height); |
| 107 | 107 | static void drawsdl_window_destroy(sdl_window_info *window); |
| 108 | static v | |
| 108 | static render_primitive_list &drawsdl_window_get_primitives(sdl_window_info *window); | |
| 109 | 109 | static int drawsdl_window_draw(sdl_window_info *window, UINT32 dc, int update); |
| 110 | 110 | static void drawsdl_destroy_all_textures(sdl_window_info *window); |
| 111 | 111 | static void drawsdl_window_clear(sdl_window_info *window); |
| r242703 | r242704 | |
| 221 | 221 | // fill in the callbacks |
| 222 | 222 | window->create = drawsdl_window_create; |
| 223 | 223 | window->resize = drawsdl_window_resize; |
| 224 | window-> | |
| 224 | window->get_primitives = drawsdl_window_get_primitives; | |
| 225 | 225 | window->draw = drawsdl_window_draw; |
| 226 | 226 | window->destroy = drawsdl_window_destroy; |
| 227 | 227 | window->destroy_all_textures = drawsdl_destroy_all_textures; |
| r242703 | r242704 | |
| 251 | 251 | UINT32 fmt; |
| 252 | 252 | |
| 253 | 253 | // Determine preferred pixelformat and set up yuv if necessary |
| 254 | SDL_GetCurrentDisplayMode(window->monitor | |
| 254 | SDL_GetCurrentDisplayMode(window->monitor->handle, &mode); | |
| 255 | 255 | |
| 256 | 256 | if (sdl->yuv_bitmap) |
| 257 | 257 | { |
| r242703 | r242704 | |
| 402 | 402 | |
| 403 | 403 | SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, sm->sdl_scale_mode); |
| 404 | 404 | |
| 405 | sdl->extra_flags = (window->fullscreen | |
| 405 | sdl->extra_flags = (window->fullscreen ? | |
| 406 | 406 | SDL_WINDOW_BORDERLESS | SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_MOUSE_FOCUS |
| 407 | 407 | | SDL_WINDOW_INPUT_GRABBED : SDL_WINDOW_RESIZABLE); |
| 408 | 408 | |
| 409 | 409 | window->sdl_window = SDL_CreateWindow(window->title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, |
| 410 | 410 | width, height, sdl->extra_flags); |
| 411 | 411 | |
| 412 | if (window->fullscreen | |
| 412 | if (window->fullscreen && video_config.switchres) | |
| 413 | 413 | { |
| 414 | 414 | SDL_DisplayMode mode; |
| 415 | SDL_GetCurrentDisplayMode(window->monitor | |
| 415 | SDL_GetCurrentDisplayMode(window->monitor->handle, &mode); | |
| 416 | 416 | mode.w = width; |
| 417 | 417 | mode.h = height; |
| 418 | 418 | if (window->refresh) |
| r242703 | r242704 | |
| 424 | 424 | |
| 425 | 425 | SDL_ShowWindow(window->sdl_window); |
| 426 | 426 | |
| 427 | SDL_SetWindowFullscreen(window->sdl_window, (SDL_bool) window->fullscreen | |
| 427 | SDL_SetWindowFullscreen(window->sdl_window, (SDL_bool) window->fullscreen); | |
| 428 | 428 | SDL_GetWindowSize(window->sdl_window, &window->width, &window->height); |
| 429 | 429 | SDL_RaiseWindow(window->sdl_window); |
| 430 | 430 | |
| 431 | 431 | /* FIXME: Bug in SDL 1.3 */ |
| 432 | if (window->fullscreen | |
| 432 | if (window->fullscreen) | |
| 433 | 433 | SDL_SetWindowGrab(window->sdl_window, SDL_TRUE); |
| 434 | 434 | |
| 435 | 435 | // create a texture |
| r242703 | r242704 | |
| 460 | 460 | |
| 461 | 461 | if (!found) |
| 462 | 462 | { |
| 463 | fatalerror("window: Scale mode %s not supported!", sm->name); | |
| 463 | osd_printf_verbose("window: Scale mode %s not supported!\n", sm->name); | |
| 464 | window->machine().ui().popup_time(3, "Scale mode %s not supported!", sm->name); | |
| 464 | 465 | } |
| 465 | 466 | } |
| 466 | 467 | } |
| 467 | 468 | |
| 468 | 469 | setup_texture(window, width, height); |
| 469 | 470 | #else |
| 470 | sdl->extra_flags = (window->fullscreen | |
| 471 | sdl->extra_flags = (window->fullscreen ? SDL_FULLSCREEN : SDL_RESIZABLE); | |
| 471 | 472 | |
| 472 | 473 | sdl->extra_flags |= sm->extra_flags; |
| 473 | 474 | |
| r242703 | r242704 | |
| 617 | 618 | // drawsdl_window_get_primitives |
| 618 | 619 | //============================================================ |
| 619 | 620 | |
| 620 | static v | |
| 621 | static render_primitive_list &drawsdl_window_get_primitives(sdl_window_info *window) | |
| 621 | 622 | { |
| 622 | 623 | sdl_info *sdl = (sdl_info *) window->dxdata; |
| 623 | 624 | const sdl_scale_mode *sm = &scale_modes[video_config.scale_mode]; |
| 624 | 625 | |
| 626 | if ((!window->fullscreen) || (video_config.switchres)) | |
| 627 | { | |
| 628 | sdlwindow_blit_surface_size(window, window->width, window->height); | |
| 629 | } | |
| 630 | else | |
| 631 | { | |
| 632 | sdlwindow_blit_surface_size(window, window->monitor->center_width, window->monitor->center_height); | |
| 633 | } | |
| 634 | ||
| 625 | 635 | if (!sm->is_scale) |
| 626 | window->target->set_bounds(window->blitwidth, window->blitheight, sdlvideo_monitor_get_aspect(window->monitor | |
| 636 | window->target->set_bounds(window->blitwidth, window->blitheight, sdlvideo_monitor_get_aspect(window->monitor)); | |
| 627 | 637 | else |
| 628 | 638 | window->target->set_bounds(sdl->hw_scale_width, sdl->hw_scale_height); |
| 639 | ||
| 640 | return window->target->get_primitives(); | |
| 629 | 641 | } |
| 630 | 642 | |
| 631 | 643 | //============================================================ |
| r242703 | r242704 | |
| 735 | 747 | // figure out what coordinate system to use for centering - in window mode it's always the |
| 736 | 748 | // SDL surface size. in fullscreen the surface covers all monitors, so center according to |
| 737 | 749 | // the first one only |
| 738 | if ((window->fullscreen | |
| 750 | if ((window->fullscreen) && (!video_config.switchres)) | |
| 739 | 751 | { |
| 740 | ch = window->monitor()->center_height; | |
| 741 | cw = window->monitor()->center_width; | |
| 752 | ch = window->monitor->center_height; | |
| 753 | cw = window->monitor->center_width; | |
| 742 | 754 | } |
| 743 | 755 | else |
| 744 | 756 | { |
| r242703 | r242704 | |
|---|---|---|
| 1566 | 1566 | { |
| 1567 | 1567 | if (w->resize_width && w->resize_height && ((now - w->last_resize) > osd_ticks_per_second() / 10)) |
| 1568 | 1568 | { |
| 1569 | w | |
| 1569 | sdlwindow_resize(w, w->resize_width, w->resize_height); | |
| 1570 | 1570 | w->resize_width = 0; |
| 1571 | 1571 | w->resize_height = 0; |
| 1572 | 1572 | } |
| r242703 | r242704 | |
| 1941 | 1941 | machine.schedule_exit(); |
| 1942 | 1942 | break; |
| 1943 | 1943 | case SDL_VIDEORESIZE: |
| 1944 | sdl | |
| 1944 | sdlwindow_resize(sdl_window_list, event.resize.w, event.resize.h); | |
| 1945 | 1945 | break; |
| 1946 | 1946 | #else |
| 1947 | 1947 | case SDL_TEXTINPUT: |
| r242703 | r242704 | |
| 1973 | 1973 | app_has_mouse_focus = 0; |
| 1974 | 1974 | break; |
| 1975 | 1975 | case SDL_WINDOWEVENT_MOVED: |
| 1976 | | |
| 1976 | sdlwindow_clear(window); | |
| 1977 | 1977 | focus_window = window; |
| 1978 | 1978 | break; |
| 1979 | 1979 | case SDL_WINDOWEVENT_RESIZED: |
| r242703 | r242704 | |
| 1986 | 1986 | else |
| 1987 | 1987 | { |
| 1988 | 1988 | if (event.window.data1 != window->width || event.window.data2 != window->height) |
| 1989 | | |
| 1989 | sdlwindow_resize(window, event.window.data1, event.window.data2); | |
| 1990 | 1990 | } |
| 1991 | 1991 | focus_window = window; |
| 1992 | 1992 | break; |
| r242703 | r242704 | |
|---|---|---|
| 77 | 77 | # change for custom OS X installations |
| 78 | 78 | SDL_FRAMEWORK_PATH = /Library/Frameworks/ |
| 79 | 79 | |
| 80 | # uncomment to use SDL1.2 (depracated) | |
| 81 | # SDL_LIBVER = sdl | |
| 82 | ||
| 83 | 80 | ########################################################################### |
| 84 | 81 | ################## END USER-CONFIGURABLE OPTIONS ###################### |
| 85 | 82 | ########################################################################### |
| r242703 | r242704 | |
| 341 | 338 | ifndef NO_USE_QTDEBUG |
| 342 | 339 | QT_INSTALL_HEADERS = $(shell qmake -query QT_INSTALL_HEADERS) |
| 343 | 340 | INCPATH += -I$(QT_INSTALL_HEADERS)/QtCore -I$(QT_INSTALL_HEADERS)/QtGui -I$(QT_INSTALL_HEADERS) |
| 344 | BASELIBS += -lcomdlg32 -loleaut32 -limm32 -lwinspool -lmsimg32 -lole32 -luuid -lws2_32 -lshell32 -lkernel32 | |
| 345 | 341 | LIBS += -L$(shell qmake -query QT_INSTALL_LIBS) -lqtmain -lQtGui4 -lQtCore4 -lcomdlg32 -loleaut32 -limm32 -lwinspool -lmsimg32 -lole32 -luuid -lws2_32 -lshell32 -lkernel32 |
| 346 | 342 | endif |
| 347 | 343 | endif |
| r242703 | r242704 | |
| 500 | 496 | # Compile using framework (compile using libSDL is the exception) |
| 501 | 497 | ifeq ($(SDL_LIBVER),sdl2) |
| 502 | 498 | LIBS += -F$(SDL_FRAMEWORK_PATH) -framework SDL2 -framework Cocoa -framework OpenGL -lpthread |
| 503 | BASELIBS += -F$(SDL_FRAMEWORK_PATH) -framework SDL2 -framework Cocoa -framework OpenGL -lpthread | |
| 504 | 499 | else |
| 505 | 500 | LIBS += -F$(SDL_FRAMEWORK_PATH) -framework SDL -framework Cocoa -framework OpenGL -lpthread |
| 506 | BASELIBS += -F$(SDL_FRAMEWORK_PATH) -framework SDL -framework Cocoa -framework OpenGL -lpthread | |
| 507 | 501 | endif |
| 508 | 502 | INCPATH += -F$(SDL_FRAMEWORK_PATH) |
| 509 | 503 | else |
| r242703 | r242704 | |
| 561 | 555 | endif |
| 562 | 556 | CCOMFLAGS += `$(SDL_CONFIG) --cflags | sed -e 's:/SDL[2]*::' -e 's:\(-I[^ ]*\)::g'` |
| 563 | 557 | |
| 564 | BASELIBS += `$(SDL_CONFIG) --libs` | |
| 565 | 558 | LIBS += `$(SDL_CONFIG) --libs` |
| 566 | 559 | |
| 567 | 560 | ifeq ($(SDL_LIBVER),sdl2) |
| r242703 | r242704 | |
| 584 | 577 | |
| 585 | 578 | # libs that Haiku doesn't want but are mandatory on *IX |
| 586 | 579 | ifneq ($(TARGETOS),haiku) |
| 587 | BASELIBS += -lm -lutil -lpthread | |
| 588 | 580 | LIBS += -lm -lutil -lpthread |
| 589 | 581 | endif |
| 590 | 582 | |
| r242703 | r242704 | |
| 653 | 645 | |
| 654 | 646 | ifeq ($(SDL_LIBVER),sdl2) |
| 655 | 647 | LIBS += -lSDL2 -lImm32 -lversion -lole32 -loleaut32 -static |
| 656 | BASELIBS += -lImm32 -lversion -lole32 -loleaut32 -static | |
| 657 | 648 | else |
| 658 | 649 | LIBS += -lSDL -static |
| 659 | 650 | endif |
| 660 | 651 | LIBS += -luser32 -lgdi32 -lddraw -ldsound -ldxguid -lwinmm -ladvapi32 -lcomctl32 -lshlwapi |
| 661 | ||
| 652 | ||
| 662 | 653 | endif # Win32 |
| 663 | 654 | |
| 664 | 655 | #------------------------------------------------- |
| r242703 | r242704 | |
| 742 | 733 | # Default libs |
| 743 | 734 | DEFS += -DSDLMAME_X11 |
| 744 | 735 | LIBS += -lX11 -lXinerama |
| 745 | ifneq ($(SDL_LIBVER),sdl2) | |
| 746 | BASELIBS += -lX11 | |
| 747 | endif | |
| 748 | 736 | |
| 749 | 737 | # The newer debugger uses QT |
| 750 | 738 | ifndef NO_USE_QTDEBUG |
| r242703 | r242704 | |
| 778 | 766 | # Network (TAP/TUN) |
| 779 | 767 | #------------------------------------------------- |
| 780 | 768 | |
| 781 | OSDOBJS += $(SDLOBJ)/netdev.o | |
| 782 | ||
| 783 | 769 | ifndef DONT_USE_NETWORK |
| 784 | ||
| 785 | 770 | ifeq ($(SDL_NETWORK),taptun) |
| 786 | OSDOBJS += $(SDLOBJ)/netdev_tap.o | |
| 771 | OSDOBJS += \ | |
| 772 | $(SDLOBJ)/netdev.o \ | |
| 773 | $(SDLOBJ)/netdev_tap.o | |
| 787 | 774 | |
| 788 | 775 | DEFS += -DSDLMAME_NETWORK -DSDLMAME_NET_TAPTUN |
| 789 | 776 | endif |
| 790 | 777 | |
| 791 | 778 | ifeq ($(SDL_NETWORK),pcap) |
| 779 | OSDOBJS += $(SDLOBJ)/netdev.o | |
| 792 | 780 | |
| 793 | 781 | ifeq ($(TARGETOS),macosx) |
| 794 | 782 | OSDOBJS += $(SDLOBJ)/netdev_pcap_osx.o |
| r242703 | r242704 | |
| 797 | 785 | endif |
| 798 | 786 | |
| 799 | 787 | DEFS += -DSDLMAME_NETWORK -DSDLMAME_NET_PCAP |
| 800 | ||
| 801 | 788 | ifneq ($(TARGETOS),win32) |
| 802 | 789 | LIBS += -lpcap |
| 803 | 790 | endif |
| 791 | endif | |
| 792 | else | |
| 793 | OSDOBJS += $(SDLOBJ)/netdev.o | |
| 794 | endif | |
| 804 | 795 | |
| 805 | endif # ifeq ($(SDL_NETWORK),pcap) | |
| 806 | ||
| 807 | endif # ifndef DONT_USE_NETWORK | |
| 808 | ||
| 809 | 796 | #------------------------------------------------- |
| 810 | 797 | # Dependencies |
| 811 | 798 | #------------------------------------------------- |
| r242703 | r242704 | |
| 855 | 842 | |
| 856 | 843 | testkeys$(EXE): $(TESTKEYSOBJS) $(LIBUTIL) $(LIBOCORE) $(SDLUTILMAIN) |
| 857 | 844 | @echo Linking $@... |
| 858 | $(LD) $(LDFLAGS) $^ $( | |
| 845 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | |
| 859 | 846 | |
| 860 | 847 | #------------------------------------------------- |
| 861 | 848 | # clean up |
| r242703 | r242704 | |
|---|---|---|
| 167 | 167 | { |
| 168 | 168 | hidden_mutex_t *mutex = (hidden_mutex_t *) lock; |
| 169 | 169 | |
| 170 | | |
| 170 | pthread_mutex_unlock(&mutex->id); | |
| 171 | 171 | pthread_mutex_destroy(&mutex->id); |
| 172 | 172 | free(mutex); |
| 173 | 173 | } |
| r242703 | r242704 | |
|---|---|---|
| 97 | 97 | volatile INT32 items; // items in the queue |
| 98 | 98 | volatile INT32 livethreads; // number of live threads |
| 99 | 99 | volatile INT32 waiting; // is someone waiting on the queue to complete? |
| 100 | volatile INT | |
| 100 | volatile UINT8 exiting; // should the threads exit on their next opportunity? | |
| 101 | 101 | UINT32 threads; // number of threads in this queue |
| 102 | 102 | UINT32 flags; // creation flags |
| 103 | 103 | work_thread_info * thread; // array of thread information |
| r242703 | r242704 | |
| 139 | 139 | static int effective_num_processors(void); |
| 140 | 140 | static void * worker_thread_entry(void *param); |
| 141 | 141 | static void worker_thread_process(osd_work_queue *queue, work_thread_info *thread); |
| 142 | static bool queue_has_list_items(osd_work_queue *queue); | |
| 143 | 142 | |
| 144 | 143 | |
| 145 | 144 | //============================================================ |
| r242703 | r242704 | |
| 314 | 313 | end_timing(queue->thread[queue->threads].waittime); |
| 315 | 314 | |
| 316 | 315 | // signal all the threads to exit |
| 317 | | |
| 316 | queue->exiting = TRUE; | |
| 318 | 317 | for (threadnum = 0; threadnum < queue->threads; threadnum++) |
| 319 | 318 | { |
| 320 | 319 | work_thread_info *thread = &queue->thread[threadnum]; |
| r242703 | r242704 | |
| 413 | 412 | osd_work_item *item; |
| 414 | 413 | |
| 415 | 414 | // first allocate a new work item; try the free list first |
| 416 | INT32 lockslot = osd_scalable_lock_acquire(queue->lock); | |
| 417 | 415 | do |
| 418 | 416 | { |
| 419 | 417 | item = (osd_work_item *)queue->free; |
| 420 | 418 | } while (item != NULL && compare_exchange_ptr((PVOID volatile *)&queue->free, item, item->next) != item); |
| 421 | osd_scalable_lock_release(queue->lock, lockslot); | |
| 422 | 419 | |
| 423 | 420 | // if nothing, allocate something new |
| 424 | 421 | if (item == NULL) |
| r242703 | r242704 | |
| 429 | 426 | return NULL; |
| 430 | 427 | item->event = NULL; |
| 431 | 428 | item->queue = queue; |
| 432 | item->done = FALSE; | |
| 433 | 429 | } |
| 434 | else | |
| 435 | { | |
| 436 | atomic_exchange32(&item->done, FALSE); // needs to be set this way to prevent data race/usage of uninitialized memory on Linux | |
| 437 | } | |
| 438 | 430 | |
| 439 | 431 | // fill in the basics |
| 440 | 432 | item->next = NULL; |
| r242703 | r242704 | |
| 442 | 434 | item->param = parambase; |
| 443 | 435 | item->result = NULL; |
| 444 | 436 | item->flags = flags; |
| 437 | item->done = FALSE; | |
| 445 | 438 | |
| 446 | 439 | // advance to the next |
| 447 | 440 | lastitem = item; |
| r242703 | r242704 | |
| 507 | 500 | |
| 508 | 501 | // if we don't have an event, create one |
| 509 | 502 | if (item->event == NULL) |
| 510 | { | |
| 511 | INT32 lockslot = osd_scalable_lock_acquire(item->queue->lock); | |
| 512 | 503 | item->event = osd_event_alloc(TRUE, FALSE); // manual reset, not signalled |
| 513 | osd_scalable_lock_release(item->queue->lock, lockslot); | |
| 514 | } | |
| 515 | 504 | else |
| 516 | osd_event_reset(item->event); | |
| 505 | osd_event_reset(item->event); | |
| 517 | 506 | |
| 518 | 507 | // if we don't have an event, we need to spin (shouldn't ever really happen) |
| 519 | 508 | if (item->event == NULL) |
| r242703 | r242704 | |
| 557 | 546 | osd_work_item_wait(item, 100 * osd_ticks_per_second()); |
| 558 | 547 | |
| 559 | 548 | // add us to the free list on our queue |
| 560 | INT32 lockslot = osd_scalable_lock_acquire(item->queue->lock); | |
| 561 | 549 | do |
| 562 | 550 | { |
| 563 | 551 | next = (osd_work_item *)item->queue->free; |
| 564 | 552 | item->next = next; |
| 565 | 553 | } while (compare_exchange_ptr((PVOID volatile *)&item->queue->free, next, item) != next); |
| 566 | osd_scalable_lock_release(item->queue->lock, lockslot); | |
| 567 | 554 | } |
| 568 | 555 | |
| 569 | 556 | |
| r242703 | r242704 | |
| 615 | 602 | { |
| 616 | 603 | // block waiting for work or exit |
| 617 | 604 | // bail on exit, and only wait if there are no pending items in queue |
| 618 | if (queue->exiting) | |
| 619 | break; | |
| 620 | ||
| 621 | if (!queue_has_list_items(queue)) | |
| 605 | if (!queue->exiting && queue->list == NULL) | |
| 622 | 606 | { |
| 623 | 607 | begin_timing(thread->waittime); |
| 624 | 608 | osd_event_wait(thread->wakeevent, INFINITE); |
| 625 | 609 | end_timing(thread->waittime); |
| 626 | 610 | } |
| 627 | ||
| 628 | 611 | if (queue->exiting) |
| 629 | 612 | break; |
| 630 | 613 | |
| r242703 | r242704 | |
| 656 | 639 | } |
| 657 | 640 | |
| 658 | 641 | // if nothing more, release the processor |
| 659 | if ( | |
| 642 | if (queue->list == NULL) | |
| 660 | 643 | break; |
| 661 | 644 | add_to_stat(&queue->spinloops, 1); |
| 662 | 645 | } |
| r242703 | r242704 | |
| 685 | 668 | begin_timing(thread->runtime); |
| 686 | 669 | |
| 687 | 670 | // loop until everything is processed |
| 688 | while ( | |
| 671 | while (queue->list != NULL) | |
| 689 | 672 | { |
| 690 | osd_work_item *item = NULL; | |
| 673 | osd_work_item *item; | |
| 674 | INT32 lockslot; | |
| 691 | 675 | |
| 692 | bool end_loop = false; | |
| 693 | ||
| 694 | 676 | // use a critical section to synchronize the removal of items |
| 677 | lockslot = osd_scalable_lock_acquire(queue->lock); | |
| 695 | 678 | { |
| 696 | INT32 lockslot = osd_scalable_lock_acquire(queue->lock); | |
| 697 | if (queue->list == NULL) | |
| 679 | // pull the item from the queue | |
| 680 | item = (osd_work_item *)queue->list; | |
| 681 | if (item != NULL) | |
| 698 | 682 | { |
| 699 | end_loop = true; | |
| 683 | queue->list = item->next; | |
| 684 | if (queue->list == NULL) | |
| 685 | queue->tailptr = (osd_work_item **)&queue->list; | |
| 700 | 686 | } |
| 701 | else | |
| 702 | { | |
| 703 | // pull the item from the queue | |
| 704 | item = (osd_work_item *)queue->list; | |
| 705 | if (item != NULL) | |
| 706 | { | |
| 707 | queue->list = item->next; | |
| 708 | if (queue->list == NULL) | |
| 709 | queue->tailptr = (osd_work_item **)&queue->list; | |
| 710 | } | |
| 711 | } | |
| 712 | osd_scalable_lock_release(queue->lock, lockslot); | |
| 713 | 687 | } |
| 688 | osd_scalable_lock_release(queue->lock, lockslot); | |
| 714 | 689 | |
| 715 | if (end_loop) | |
| 716 | break; | |
| 717 | ||
| 718 | 690 | // process non-NULL items |
| 719 | 691 | if (item != NULL) |
| 720 | 692 | { |
| r242703 | r242704 | |
| 733 | 705 | osd_work_item_release(item); |
| 734 | 706 | |
| 735 | 707 | // set the result and signal the event |
| 736 | else | |
| 708 | else if (item->event != NULL) | |
| 737 | 709 | { |
| 738 | INT32 lockslot = osd_scalable_lock_acquire(item->queue->lock); | |
| 739 | if (item->event != NULL) | |
| 740 | { | |
| 741 | osd_event_set(item->event); | |
| 742 | add_to_stat(&item->queue->setevents, 1); | |
| 743 | } | |
| 744 | osd_scalable_lock_release(item->queue->lock, lockslot); | |
| 710 | osd_event_set(item->event); | |
| 711 | add_to_stat(&item->queue->setevents, 1); | |
| 745 | 712 | } |
| 746 | 713 | |
| 747 | 714 | // if we removed an item and there's still work to do, bump the stats |
| 748 | if (queue | |
| 715 | if (queue->list != NULL) | |
| 749 | 716 | add_to_stat(&queue->extraitems, 1); |
| 750 | 717 | } |
| 751 | 718 | } |
| r242703 | r242704 | |
| 760 | 727 | end_timing(thread->runtime); |
| 761 | 728 | } |
| 762 | 729 | |
| 763 | bool queue_has_list_items(osd_work_queue *queue) | |
| 764 | { | |
| 765 | INT32 lockslot = osd_scalable_lock_acquire(queue->lock); | |
| 766 | bool has_list_items = (queue->list != NULL); | |
| 767 | osd_scalable_lock_release(queue->lock, lockslot); | |
| 768 | return has_list_items; | |
| 769 | } | |
| 770 | 730 | #endif // SDLMAME_NOASM |
| r242703 | r242704 | |
|---|---|---|
| 326 | 326 | { |
| 327 | 327 | // profiler_mark(PROFILER_BLIT); |
| 328 | 328 | for (window = sdl_window_list; window != NULL; window = window->next) |
| 329 | window | |
| 329 | sdlwindow_video_window_update(machine(), window); | |
| 330 | 330 | // profiler_mark(PROFILER_END); |
| 331 | 331 | } |
| 332 | 332 | |
| r242703 | r242704 | |
| 568 | 568 | |
| 569 | 569 | while (curwin != (sdl_window_info *)NULL) |
| 570 | 570 | { |
| 571 | | |
| 571 | sdlwindow_toggle_full_screen(machine, curwin); | |
| 572 | 572 | curwin = curwin->next; |
| 573 | 573 | } |
| 574 | 574 | } |
| r242703 | r242704 | |
| 597 | 597 | #endif |
| 598 | 598 | |
| 599 | 599 | if (ui_input_pressed(machine, IPT_OSD_6)) |
| 600 | window | |
| 600 | sdlwindow_modify_prescale(machine, window, -1); | |
| 601 | 601 | |
| 602 | 602 | if (ui_input_pressed(machine, IPT_OSD_7)) |
| 603 | window | |
| 603 | sdlwindow_modify_prescale(machine, window, 1); | |
| 604 | 604 | } |
| 605 | 605 | |
| 606 | 606 | //============================================================ |
| r242703 | r242704 | |
|---|---|---|
| 70 | 70 | float aspect; // computed/configured aspect ratio of the physical device |
| 71 | 71 | int center_width; // width of first physical screen for centering |
| 72 | 72 | int center_height; // height of first physical screen for centering |
| 73 | int | |
| 73 | int monitor_x; // X position of this monitor in virtual desktop space (SDL virtual space has them all horizontally stacked, not real geometry) | |
| 74 | 74 | }; |
| 75 | 75 | |
| 76 | 76 |
| r242703 | r242704 | |
|---|---|---|
| 101 | 101 | static sdl_draw_info draw; |
| 102 | 102 | |
| 103 | 103 | struct worker_param { |
| 104 | worker_param() | |
| 105 | : m_window(NULL), m_list(NULL), m_machine(NULL), m_resize_new_width(0), m_resize_new_height(0) | |
| 106 | { | |
| 107 | } | |
| 108 | worker_param(running_machine &amachine, sdl_window_info *awindow) | |
| 109 | : m_window(awindow), m_list(NULL), m_machine(&amachine), m_resize_new_width(0), m_resize_new_height(0) | |
| 110 | { | |
| 111 | } | |
| 112 | worker_param(running_machine &amachine, sdl_window_info *awindow, render_primitive_list &alist) | |
| 113 | : m_window(awindow), m_list(&alist), m_machine(&amachine), m_resize_new_width(0), m_resize_new_height(0) | |
| 114 | { | |
| 115 | } | |
| 116 | worker_param(sdl_window_info *awindow, int anew_width, int anew_height) | |
| 117 | : m_window(awindow), m_list(NULL), m_machine(NULL), m_resize_new_width(anew_width), m_resize_new_height(anew_height) | |
| 118 | { | |
| 119 | } | |
| 120 | worker_param(sdl_window_info *awindow) | |
| 121 | : m_window(awindow), m_list(NULL), m_machine(NULL), m_resize_new_width(0), m_resize_new_height(0) | |
| 122 | { | |
| 123 | } | |
| 124 | 104 | running_machine &machine() const { assert(m_machine != NULL); return *m_machine; } |
| 125 | sdl_window_info *window() const { assert(m_window != NULL); return m_window; } | |
| 126 | render_primitive_list *list() const { return m_list; } | |
| 127 | int new_width() const { return m_resize_new_width; } | |
| 128 | int new_height() const { return m_resize_new_height; } | |
| 129 | // FIXME: only needed for window set-up which returns an error. | |
| 130 | void set_window(sdl_window_info *window) { m_window = window; } | |
| 131 | private: | |
| 132 | sdl_window_info *m_window; | |
| 133 | render_primitive_list *m_list; | |
| 105 | sdl_window_info *window; | |
| 106 | render_primitive_list *list; | |
| 134 | 107 | running_machine *m_machine; |
| 135 | int m_resize_new_width; | |
| 136 | int m_resize_new_height; | |
| 108 | int resize_new_width; | |
| 109 | int resize_new_height; | |
| 137 | 110 | }; |
| 138 | 111 | |
| 139 | 112 | |
| r242703 | r242704 | |
| 141 | 114 | // PROTOTYPES |
| 142 | 115 | //============================================================ |
| 143 | 116 | |
| 117 | static void sdlwindow_video_window_destroy(running_machine &machine, sdl_window_info *window); | |
| 144 | 118 | static OSDWORK_CALLBACK( draw_video_contents_wt ); |
| 145 | 119 | static OSDWORK_CALLBACK( sdlwindow_video_window_destroy_wt ); |
| 146 | 120 | static OSDWORK_CALLBACK( sdlwindow_resize_wt ); |
| r242703 | r242704 | |
| 148 | 122 | static void sdlwindow_update_cursor_state(running_machine &machine, sdl_window_info *window); |
| 149 | 123 | static void sdlwindow_sync(void); |
| 150 | 124 | |
| 125 | static void get_min_bounds(sdl_window_info *window, int *window_width, int *window_height, int constrain); | |
| 126 | static void get_max_bounds(sdl_window_info *window, int *window_width, int *window_height, int constrain); | |
| 127 | ||
| 151 | 128 | static void *complete_create_wt(void *param, int threadid); |
| 152 | 129 | static void set_starting_view(running_machine &machine, int index, sdl_window_info *window, const char *defview, const char *view); |
| 153 | 130 | |
| 154 | 131 | //============================================================ |
| 132 | // clear the worker_param structure, inline - faster than memset | |
| 133 | //============================================================ | |
| 134 | ||
| 135 | INLINE void clear_worker_param(worker_param *wp) | |
| 136 | { | |
| 137 | wp->window=NULL; | |
| 138 | wp->list=NULL; | |
| 139 | wp->m_machine=NULL; | |
| 140 | wp->resize_new_width=0; | |
| 141 | wp->resize_new_height=0; | |
| 142 | } | |
| 143 | ||
| 144 | ||
| 145 | //============================================================ | |
| 155 | 146 | // execute_async |
| 156 | 147 | //============================================================ |
| 157 | 148 | |
| 158 | 149 | |
| 159 | INLINE void execute_async(osd_work_callback callback, | |
| 150 | INLINE void execute_async(osd_work_callback callback, worker_param *wp) | |
| 160 | 151 | { |
| 161 | worker_param *wp_temp = (worker_param *) osd_malloc(sizeof(worker_param)); | |
| 162 | *wp_temp = wp; | |
| 152 | worker_param *wp_temp = NULL; | |
| 163 | 153 | |
| 154 | if (wp) | |
| 155 | { | |
| 156 | wp_temp = (worker_param *) osd_malloc(sizeof(worker_param)); | |
| 157 | *wp_temp = *wp; | |
| 158 | } | |
| 164 | 159 | if (multithreading_enabled) |
| 165 | 160 | { |
| 166 | 161 | osd_work_item_queue(work_queue, callback, (void *) wp_temp, WORK_ITEM_FLAG_AUTO_RELEASE); |
| r242703 | r242704 | |
| 168 | 163 | callback((void *) wp_temp, 0); |
| 169 | 164 | } |
| 170 | 165 | |
| 171 | INLINE void execute_sync(osd_work_callback callback, const worker_param &wp) | |
| 172 | { | |
| 173 | worker_param *wp_temp = (worker_param *) osd_malloc(sizeof(worker_param)); | |
| 174 | *wp_temp = wp; | |
| 175 | 166 | |
| 176 | callback((void *) wp_temp, 0); | |
| 177 | } | |
| 178 | ||
| 179 | ||
| 180 | 167 | //============================================================ |
| 181 | 168 | // execute_async_wait |
| 182 | 169 | //============================================================ |
| 183 | 170 | |
| 184 | INLINE void execute_async_wait(osd_work_callback callback, | |
| 171 | INLINE void execute_async_wait(osd_work_callback callback, worker_param *wp) | |
| 185 | 172 | { |
| 186 | 173 | execute_async(callback, wp); |
| 187 | 174 | sdlwindow_sync(); |
| r242703 | r242704 | |
| 307 | 294 | |
| 308 | 295 | void sdl_osd_interface::window_exit() |
| 309 | 296 | { |
| 310 | worker_param wp_dummy; | |
| 311 | ||
| 312 | 297 | ASSERT_MAIN_THREAD(); |
| 313 | 298 | |
| 314 | 299 | osd_printf_verbose("Enter sdlwindow_exit\n"); |
| r242703 | r242704 | |
| 318 | 303 | { |
| 319 | 304 | sdl_window_info *temp = sdl_window_list; |
| 320 | 305 | sdl_window_list = temp->next; |
| 321 | temp->video_window_destroy(machine()); | |
| 322 | // free the window itself | |
| 323 | global_free(temp); | |
| 306 | sdlwindow_video_window_destroy(machine(), temp); | |
| 324 | 307 | } |
| 325 | 308 | |
| 326 | 309 | // if we're multithreaded, clean up the window thread |
| r242703 | r242704 | |
| 332 | 315 | // kill the drawers |
| 333 | 316 | (*draw.exit)(); |
| 334 | 317 | |
| 335 | execute_async_wait(&sdlwindow_exit_wt, | |
| 318 | execute_async_wait(&sdlwindow_exit_wt, NULL); | |
| 336 | 319 | |
| 337 | 320 | if (multithreading_enabled) |
| 338 | 321 | { |
| r242703 | r242704 | |
| 355 | 338 | return (fabs(desired_aspect - aspect0) < fabs(desired_aspect - aspect1)) ? 0 : 1; |
| 356 | 339 | } |
| 357 | 340 | |
| 358 | void sdl | |
| 341 | void sdlwindow_blit_surface_size(sdl_window_info *window, int window_width, int window_height) | |
| 359 | 342 | { |
| 360 | 343 | INT32 newwidth, newheight; |
| 361 | 344 | int xscale = 1, yscale = 1; |
| r242703 | r242704 | |
| 364 | 347 | INT32 target_height = window_height; |
| 365 | 348 | |
| 366 | 349 | // start with the minimum size |
| 367 | target->compute_minimum_size(newwidth, newheight); | |
| 350 | window->target->compute_minimum_size(newwidth, newheight); | |
| 368 | 351 | |
| 369 | 352 | // compute the appropriate visible area if we're trying to keepaspect |
| 370 | 353 | if (video_config.keepaspect) |
| 371 | 354 | { |
| 372 | 355 | // make sure the monitor is up-to-date |
| 373 | sdlvideo_monitor_refresh(m_monitor); | |
| 374 | target->compute_visible_area(target_width, target_height, sdlvideo_monitor_get_aspect(m_monitor), target->orientation(), target_width, target_height); | |
| 356 | sdlvideo_monitor_refresh(window->monitor); | |
| 357 | window->target->compute_visible_area(target_width, target_height, sdlvideo_monitor_get_aspect(window->monitor), window->target->orientation(), target_width, target_height); | |
| 375 | 358 | desired_aspect = (float)target_width / (float)target_height; |
| 376 | 359 | } |
| 377 | 360 | |
| r242703 | r242704 | |
| 423 | 406 | } |
| 424 | 407 | |
| 425 | 408 | //FIXME: really necessary to distinguish for yuv_modes ? |
| 426 | if (target->zoom_to_screen() | |
| 409 | if (window->target->zoom_to_screen() | |
| 427 | 410 | && (video_config.scale_mode == VIDEO_SCALE_MODE_NONE )) |
| 428 | 411 | newwidth = window_width; |
| 429 | 412 | |
| 430 | if ((blitwidth != newwidth) || (blitheight != newheight)) | |
| 431 | window_clear(); | |
| 413 | if ((window->blitwidth != newwidth) || (window->blitheight != newheight)) | |
| 414 | sdlwindow_clear(window); | |
| 432 | 415 | |
| 433 | blitwidth = newwidth; | |
| 434 | blitheight = newheight; | |
| 416 | window->blitwidth = newwidth; | |
| 417 | window->blitheight = newheight; | |
| 435 | 418 | } |
| 436 | 419 | |
| 437 | 420 | |
| r242703 | r242704 | |
| 443 | 426 | static OSDWORK_CALLBACK( sdlwindow_resize_wt ) |
| 444 | 427 | { |
| 445 | 428 | worker_param * wp = (worker_param *) param; |
| 446 | sdl_window_info * window = wp->window | |
| 429 | sdl_window_info * window = wp->window; | |
| 447 | 430 | |
| 448 | 431 | ASSERT_WINDOW_THREAD(); |
| 449 | 432 | |
| 450 | 433 | window->destroy_all_textures(window); |
| 451 | window->resize(window, wp->new_width | |
| 434 | window->resize(window, wp->resize_new_width, wp->resize_new_height); | |
| 452 | 435 | |
| 453 | window | |
| 436 | sdlwindow_blit_surface_size(window, wp->resize_new_width, wp->resize_new_height); | |
| 454 | 437 | |
| 455 | | |
| 438 | sdlwindow_clear(window); | |
| 456 | 439 | |
| 457 | 440 | osd_free(wp); |
| 458 | 441 | return NULL; |
| 459 | 442 | } |
| 460 | 443 | |
| 461 | void sdl_window_info | |
| 444 | void sdlwindow_resize(sdl_window_info *window, INT32 width, INT32 height) | |
| 462 | 445 | { |
| 446 | worker_param wp; | |
| 447 | ||
| 463 | 448 | ASSERT_MAIN_THREAD(); |
| 464 | 449 | |
| 465 | if (width == | |
| 450 | if (width == window->width && height == window->height) | |
| 466 | 451 | return; |
| 467 | 452 | |
| 468 | execute_async_wait(&sdlwindow_resize_wt, worker_param(this, width, height)); | |
| 453 | clear_worker_param(&wp); | |
| 454 | wp.resize_new_width = width; | |
| 455 | wp.resize_new_height = height; | |
| 456 | wp.window = window; | |
| 457 | ||
| 458 | execute_async_wait(&sdlwindow_resize_wt, &wp); | |
| 469 | 459 | } |
| 470 | 460 | |
| 471 | 461 | |
| r242703 | r242704 | |
| 477 | 467 | static OSDWORK_CALLBACK( sdlwindow_clear_surface_wt ) |
| 478 | 468 | { |
| 479 | 469 | worker_param *wp = (worker_param *) param; |
| 480 | sdl_window_info *window = wp->window | |
| 470 | sdl_window_info *window = wp->window; | |
| 481 | 471 | |
| 482 | 472 | ASSERT_WINDOW_THREAD(); |
| 483 | 473 | |
| r242703 | r242704 | |
| 486 | 476 | return NULL; |
| 487 | 477 | } |
| 488 | 478 | |
| 489 | void sdl_window_info | |
| 479 | void sdlwindow_clear(sdl_window_info *window) | |
| 490 | 480 | { |
| 491 | worker_param wp; | |
| 481 | worker_param *wp = (worker_param *) osd_malloc(sizeof(worker_param)); | |
| 492 | 482 | |
| 483 | clear_worker_param(wp); | |
| 484 | wp->window = window; | |
| 485 | ||
| 493 | 486 | if (SDL_ThreadID() == main_threadid) |
| 494 | 487 | { |
| 495 | execute_async_wait(&sdlwindow_clear_surface_wt, worker_param(this)); | |
| 488 | execute_async_wait(&sdlwindow_clear_surface_wt, wp); | |
| 489 | osd_free(wp); | |
| 496 | 490 | } |
| 497 | 491 | else |
| 498 | | |
| 492 | sdlwindow_clear_surface_wt( (void *) wp, 0); | |
| 499 | 493 | } |
| 500 | 494 | |
| 501 | 495 | |
| r242703 | r242704 | |
| 507 | 501 | static OSDWORK_CALLBACK( sdlwindow_toggle_full_screen_wt ) |
| 508 | 502 | { |
| 509 | 503 | worker_param *wp = (worker_param *) param; |
| 510 | sdl_window_info *window = wp->window | |
| 504 | sdl_window_info *window = wp->window; | |
| 511 | 505 | |
| 512 | 506 | ASSERT_WINDOW_THREAD(); |
| 513 | 507 | |
| r242703 | r242704 | |
| 516 | 510 | return NULL; |
| 517 | 511 | |
| 518 | 512 | // If we are going fullscreen (leaving windowed) remember our windowed size |
| 519 | if (!window->fullscreen | |
| 513 | if (!window->fullscreen) | |
| 520 | 514 | { |
| 521 | 515 | window->windowed_width = window->width; |
| 522 | 516 | window->windowed_height = window->height; |
| r242703 | r242704 | |
| 526 | 520 | sdlinput_release_keys(wp->machine()); |
| 527 | 521 | |
| 528 | 522 | // toggle the window mode |
| 529 | window-> | |
| 523 | window->fullscreen = !window->fullscreen; | |
| 530 | 524 | |
| 531 | 525 | complete_create_wt(param, 0); |
| 532 | 526 | |
| 533 | 527 | return NULL; |
| 534 | 528 | } |
| 535 | 529 | |
| 536 | void sdl | |
| 530 | void sdlwindow_toggle_full_screen(running_machine &machine, sdl_window_info *window) | |
| 537 | 531 | { |
| 532 | worker_param wp; | |
| 533 | ||
| 538 | 534 | ASSERT_MAIN_THREAD(); |
| 539 | 535 | |
| 540 | execute_async_wait(&sdlwindow_toggle_full_screen_wt, worker_param(machine, this)); | |
| 536 | clear_worker_param(&wp); | |
| 537 | wp.window = window; | |
| 538 | wp.m_machine = &machine; | |
| 539 | ||
| 540 | execute_async_wait(&sdlwindow_toggle_full_screen_wt, &wp); | |
| 541 | 541 | } |
| 542 | 542 | |
| 543 | 543 | static OSDWORK_CALLBACK( destroy_all_textures_wt ) |
| 544 | 544 | { |
| 545 | 545 | worker_param *wp = (worker_param *) param; |
| 546 | 546 | |
| 547 | sdl_window_info *window = wp->window | |
| 547 | sdl_window_info *window = wp->window; | |
| 548 | 548 | |
| 549 | 549 | window->destroy_all_textures(window); |
| 550 | 550 | |
| r242703 | r242704 | |
| 552 | 552 | return NULL; |
| 553 | 553 | } |
| 554 | 554 | |
| 555 | void sdl | |
| 555 | void sdlwindow_modify_prescale(running_machine &machine, sdl_window_info *window, int dir) | |
| 556 | 556 | { |
| 557 | worker_param wp = worker_param(machine, this); | |
| 558 | int new_prescale = prescale; | |
| 557 | worker_param wp; | |
| 558 | int new_prescale = window->prescale; | |
| 559 | 559 | |
| 560 | if (dir > 0 && prescale < 3) | |
| 561 | new_prescale = prescale + 1; | |
| 562 | if (dir < 0 && prescale > 1) | |
| 563 | new_prescale = prescale - 1; | |
| 560 | clear_worker_param(&wp); | |
| 564 | 561 | |
| 565 | if (new_prescale != prescale) | |
| 562 | wp.window = window; | |
| 563 | wp.m_machine = &machine; | |
| 564 | ||
| 565 | if (dir > 0 && window->prescale < 3) | |
| 566 | new_prescale = window->prescale + 1; | |
| 567 | if (dir < 0 && window->prescale > 1) | |
| 568 | new_prescale = window->prescale - 1; | |
| 569 | ||
| 570 | if (new_prescale != window->prescale) | |
| 566 | 571 | { |
| 567 | if ( | |
| 572 | if (window->fullscreen && video_config.switchres) | |
| 568 | 573 | { |
| 569 | execute_async_wait(&sdlwindow_video_window_destroy_wt, wp); | |
| 574 | execute_async_wait(&sdlwindow_video_window_destroy_wt, &wp); | |
| 570 | 575 | |
| 571 | prescale = new_prescale; | |
| 576 | window->prescale = new_prescale; | |
| 572 | 577 | |
| 573 | execute_async_wait(&complete_create_wt, wp); | |
| 578 | execute_async_wait(&complete_create_wt, &wp); | |
| 574 | 579 | |
| 575 | 580 | } |
| 576 | 581 | else |
| 577 | 582 | { |
| 578 | execute_async_wait(destroy_all_textures_wt, wp); | |
| 579 | prescale = new_prescale; | |
| 583 | execute_async_wait(destroy_all_textures_wt, &wp); | |
| 584 | window->prescale = new_prescale; | |
| 580 | 585 | } |
| 581 | machine.ui().popup_time(1, "Prescale %d", prescale); | |
| 586 | machine.ui().popup_time(1, "Prescale %d", window->prescale); | |
| 582 | 587 | } |
| 583 | 588 | } |
| 584 | 589 | |
| r242703 | r242704 | |
| 606 | 611 | { |
| 607 | 612 | //FIXME: SDL1.3: really broken: the whole SDL code |
| 608 | 613 | // will only work correct with relative mouse movements ... |
| 609 | if (!window->fullscreen | |
| 614 | if (!window->fullscreen && !sdlinput_should_hide_mouse(machine)) | |
| 610 | 615 | { |
| 611 | 616 | SDL_ShowCursor(SDL_ENABLE); |
| 612 | 617 | if (SDL_GetWindowGrab(window->sdl_window )) |
| r242703 | r242704 | |
| 628 | 633 | // the possibility of losing control |
| 629 | 634 | if (!(machine.debug_flags & DEBUG_FLAG_OSD_ENABLED)) |
| 630 | 635 | { |
| 631 | if ( window->fullscreen | |
| 636 | if ( window->fullscreen || sdlinput_should_hide_mouse(machine) ) | |
| 632 | 637 | { |
| 633 | 638 | SDL_ShowCursor(SDL_DISABLE); |
| 634 | 639 | if (!SDL_WM_GrabInput(SDL_GRAB_QUERY)) |
| r242703 | r242704 | |
| 649 | 654 | #endif |
| 650 | 655 | } |
| 651 | 656 | |
| 652 | static OSDWORK_CALLBACK( sdlwindow_update_cursor_state_wt ) | |
| 653 | { | |
| 654 | worker_param * wp = (worker_param *) param; | |
| 655 | //sdl_window_info * window = wp->window; | |
| 656 | 657 | |
| 657 | sdlwindow_update_cursor_state(wp->machine(), wp->window()); | |
| 658 | ||
| 659 | osd_free(wp); | |
| 660 | return NULL; | |
| 661 | } | |
| 662 | ||
| 663 | ||
| 664 | 658 | //============================================================ |
| 665 | 659 | // sdlwindow_video_window_create |
| 666 | 660 | // (main thread) |
| r242703 | r242704 | |
| 674 | 668 | |
| 675 | 669 | ASSERT_MAIN_THREAD(); |
| 676 | 670 | |
| 671 | clear_worker_param(wp); | |
| 672 | ||
| 677 | 673 | // allocate a new window object |
| 678 | window = global_alloc(sdl_window_info(&machine, monitor, index, config)); | |
| 674 | window = global_alloc_clear(sdl_window_info); | |
| 675 | window->maxwidth = config->width; | |
| 676 | window->maxheight = config->height; | |
| 677 | window->depth = config->depth; | |
| 678 | window->refresh = config->refresh; | |
| 679 | window->monitor = monitor; | |
| 680 | window->m_machine = &machine; | |
| 681 | window->index = index; | |
| 679 | 682 | |
| 683 | //FIXME: these should be per_window in config-> or even better a bit set | |
| 684 | window->fullscreen = !video_config.windowed; | |
| 685 | window->prescale = video_config.prescale; | |
| 686 | ||
| 680 | 687 | // set the initial maximized state |
| 681 | 688 | // FIXME: Does not belong here |
| 682 | 689 | sdl_options &options = downcast<sdl_options &>(machine.options()); |
| 683 | 690 | window->startmaximized = options.maximize(); |
| 684 | 691 | |
| 692 | if (!window->fullscreen) | |
| 693 | { | |
| 694 | window->windowed_width = config->width; | |
| 695 | window->windowed_height = config->height; | |
| 696 | } | |
| 697 | ||
| 685 | 698 | // add us to the list |
| 686 | 699 | *last_window_ptr = window; |
| 687 | 700 | last_window_ptr = &window->next; |
| r242703 | r242704 | |
| 703 | 716 | else |
| 704 | 717 | sprintf(window->title, "%s: %s [%s] - Screen %d", emulator_info::get_appname(), machine.system().description, machine.system().name, index); |
| 705 | 718 | |
| 706 | wp-> | |
| 719 | wp->window = window; | |
| 707 | 720 | |
| 708 | // FIXME: pass error back in a different way | |
| 709 | 721 | if (multithreading_enabled) |
| 710 | 722 | { |
| 711 | 723 | osd_work_item *wi; |
| r242703 | r242704 | |
| 725 | 737 | return 0; |
| 726 | 738 | |
| 727 | 739 | error: |
| 728 | window->video_window_destroy(machine); | |
| 729 | // free the window itself | |
| 730 | global_free(window); | |
| 740 | sdlwindow_video_window_destroy(machine, window); | |
| 731 | 741 | return 1; |
| 732 | 742 | } |
| 733 | 743 | |
| r242703 | r242704 | |
| 740 | 750 | static OSDWORK_CALLBACK( sdlwindow_video_window_destroy_wt ) |
| 741 | 751 | { |
| 742 | 752 | worker_param * wp = (worker_param *) param; |
| 743 | sdl_window_info * window = wp->window | |
| 753 | sdl_window_info * window = wp->window; | |
| 744 | 754 | |
| 745 | 755 | ASSERT_WINDOW_THREAD(); |
| 746 | 756 | |
| r242703 | r242704 | |
| 755 | 765 | return NULL; |
| 756 | 766 | } |
| 757 | 767 | |
| 758 | void sdl | |
| 768 | static void sdlwindow_video_window_destroy(running_machine &machine, sdl_window_info *window) | |
| 759 | 769 | { |
| 760 | 770 | sdl_window_info **prevptr; |
| 771 | worker_param wp; | |
| 761 | 772 | |
| 762 | 773 | ASSERT_MAIN_THREAD(); |
| 763 | 774 | if (multithreading_enabled) |
| r242703 | r242704 | |
| 769 | 780 | |
| 770 | 781 | // remove us from the list |
| 771 | 782 | for (prevptr = &sdl_window_list; *prevptr != NULL; prevptr = &(*prevptr)->next) |
| 772 | if (*prevptr == | |
| 783 | if (*prevptr == window) | |
| 773 | 784 | { |
| 774 | *prevptr = | |
| 785 | *prevptr = window->next; | |
| 775 | 786 | break; |
| 776 | 787 | } |
| 777 | 788 | |
| 778 | 789 | // free the textures etc |
| 779 | execute_async_wait(&sdlwindow_video_window_destroy_wt, worker_param(machine, this)); | |
| 790 | clear_worker_param(&wp); | |
| 791 | wp.window = window; | |
| 792 | wp.m_machine = &machine; | |
| 793 | execute_async_wait(&sdlwindow_video_window_destroy_wt, &wp); | |
| 780 | 794 | |
| 781 | 795 | // free the render target, after the textures! |
| 782 | | |
| 796 | window->machine().render().target_free(window->target); | |
| 783 | 797 | |
| 784 | 798 | // free the event |
| 785 | osd_event_free(rendered_event); | |
| 799 | osd_event_free(window->rendered_event); | |
| 786 | 800 | |
| 801 | // free the window itself | |
| 802 | global_free(window); | |
| 787 | 803 | } |
| 788 | 804 | |
| 789 | 805 | |
| r242703 | r242704 | |
| 792 | 808 | //============================================================ |
| 793 | 809 | |
| 794 | 810 | #if SDLMAME_SDL2 |
| 795 | void sdl_window_info | |
| 811 | static void pick_best_mode(sdl_window_info *window, int *fswidth, int *fsheight) | |
| 796 | 812 | { |
| 797 | 813 | int minimum_width, minimum_height, target_width, target_height; |
| 798 | 814 | int i; |
| r242703 | r242704 | |
| 800 | 816 | float size_score, best_score = 0.0f; |
| 801 | 817 | |
| 802 | 818 | // determine the minimum width/height for the selected target |
| 803 | target->compute_minimum_size(minimum_width, minimum_height); | |
| 819 | window->target->compute_minimum_size(minimum_width, minimum_height); | |
| 804 | 820 | |
| 805 | 821 | // use those as the target for now |
| 806 | target_width = minimum_width * MAX(1, prescale); | |
| 807 | target_height = minimum_height * MAX(1, prescale); | |
| 822 | target_width = minimum_width * MAX(1, window->prescale); | |
| 823 | target_height = minimum_height * MAX(1, window->prescale); | |
| 808 | 824 | |
| 809 | 825 | // if we're not stretching, allow some slop on the minimum since we can handle it |
| 810 | 826 | { |
| r242703 | r242704 | |
| 812 | 828 | minimum_height -= 4; |
| 813 | 829 | } |
| 814 | 830 | |
| 815 | num = SDL_GetNumDisplayModes( | |
| 831 | num = SDL_GetNumDisplayModes(window->monitor->handle); | |
| 816 | 832 | |
| 817 | 833 | if (num == 0) |
| 818 | 834 | { |
| r242703 | r242704 | |
| 824 | 840 | for (i = 0; i < num; ++i) |
| 825 | 841 | { |
| 826 | 842 | SDL_DisplayMode mode; |
| 827 | SDL_GetDisplayMode( | |
| 843 | SDL_GetDisplayMode(window->monitor->handle, i, &mode); | |
| 828 | 844 | |
| 829 | 845 | // compute initial score based on difference between target and current |
| 830 | 846 | size_score = 1.0f / (1.0f + fabsf((INT32)mode.w - target_width) + fabsf((INT32)mode.h - target_height)); |
| r242703 | r242704 | |
| 838 | 854 | size_score *= 0.1f; |
| 839 | 855 | |
| 840 | 856 | // if we're looking for a particular mode, that's a winner |
| 841 | if (mode.w == m | |
| 857 | if (mode.w == window->maxwidth && mode.h == window->maxheight) | |
| 842 | 858 | size_score = 2.0f; |
| 843 | 859 | |
| 844 | 860 | // refresh adds some points |
| 845 | if (refresh) | |
| 846 | size_score *= 1.0f / (1.0f + fabsf(refresh - mode.refresh_rate) / 10.0f); | |
| 861 | if (window->refresh) | |
| 862 | size_score *= 1.0f / (1.0f + fabsf(window->refresh - mode.refresh_rate) / 10.0f); | |
| 847 | 863 | |
| 848 | 864 | osd_printf_verbose("%4dx%4d@%2d -> %f\n", (int)mode.w, (int)mode.h, (int) mode.refresh_rate, size_score); |
| 849 | 865 | |
| r242703 | r242704 | |
| 859 | 875 | } |
| 860 | 876 | } |
| 861 | 877 | #else |
| 862 | void sdl_window_info | |
| 878 | static void pick_best_mode(sdl_window_info *window, int *fswidth, int *fsheight) | |
| 863 | 879 | { |
| 864 | 880 | int minimum_width, minimum_height, target_width, target_height; |
| 865 | 881 | int i; |
| r242703 | r242704 | |
| 867 | 883 | SDL_Rect **modes; |
| 868 | 884 | |
| 869 | 885 | // determine the minimum width/height for the selected target |
| 870 | target->compute_minimum_size(minimum_width, minimum_height); | |
| 886 | window->target->compute_minimum_size(minimum_width, minimum_height); | |
| 871 | 887 | |
| 872 | 888 | // use those as the target for now |
| 873 | target_width = minimum_width * MAX(1, prescale); | |
| 874 | target_height = minimum_height * MAX(1, prescale); | |
| 889 | target_width = minimum_width * MAX(1, window->prescale); | |
| 890 | target_height = minimum_height * MAX(1, window->prescale); | |
| 875 | 891 | |
| 876 | 892 | // if we're not stretching, allow some slop on the minimum since we can handle it |
| 877 | 893 | { |
| r242703 | r242704 | |
| 887 | 903 | */ |
| 888 | 904 | modes = SDL_ListModes(NULL, SDL_FULLSCREEN | SDL_DOUBLEBUF); |
| 889 | 905 | #else |
| 890 | modes = window->m | |
| 906 | modes = window->monitor->modes; | |
| 891 | 907 | #endif |
| 892 | 908 | |
| 893 | 909 | if (modes == (SDL_Rect **)0) |
| r242703 | r242704 | |
| 897 | 913 | } |
| 898 | 914 | else if (modes == (SDL_Rect **)-1) // all modes are possible |
| 899 | 915 | { |
| 900 | *fswidth = m_maxwidth; | |
| 901 | *fsheight = m_maxheight; | |
| 916 | *fswidth = window->maxwidth; | |
| 917 | *fsheight = window->maxheight; | |
| 902 | 918 | } |
| 903 | 919 | else |
| 904 | 920 | { |
| r242703 | r242704 | |
| 916 | 932 | size_score *= 0.1f; |
| 917 | 933 | |
| 918 | 934 | // if we're looking for a particular mode, that's a winner |
| 919 | if (modes[i]->w == m | |
| 935 | if (modes[i]->w == window->maxwidth && modes[i]->h == window->maxheight) | |
| 920 | 936 | size_score = 2.0f; |
| 921 | 937 | |
| 922 | 938 | osd_printf_verbose("%4dx%4d -> %f\n", (int)modes[i]->w, (int)modes[i]->h, size_score); |
| r242703 | r242704 | |
| 939 | 955 | // (main thread) |
| 940 | 956 | //============================================================ |
| 941 | 957 | |
| 942 | void sdl | |
| 958 | void sdlwindow_video_window_update(running_machine &machine, sdl_window_info *window) | |
| 943 | 959 | { |
| 944 | 960 | osd_ticks_t event_wait_ticks; |
| 945 | 961 | ASSERT_MAIN_THREAD(); |
| 946 | 962 | |
| 947 | 963 | // adjust the cursor state |
| 948 | | |
| 964 | sdlwindow_update_cursor_state(machine, window); | |
| 949 | 965 | |
| 950 | execute_async(&sdlwindow_update_cursor_state_wt, worker_param(machine, this)); | |
| 951 | ||
| 952 | 966 | // if we're visible and running and not in the middle of a resize, draw |
| 953 | if (target != NULL) | |
| 967 | if (window->target != NULL) | |
| 954 | 968 | { |
| 955 | 969 | int tempwidth, tempheight; |
| 956 | 970 | |
| 957 | 971 | // see if the games video mode has changed |
| 958 | target->compute_minimum_size(tempwidth, tempheight); | |
| 959 | if (tempwidth != m_minwidth || tempheight != m_minheight) | |
| 972 | window->target->compute_minimum_size(tempwidth, tempheight); | |
| 973 | if (tempwidth != window->minwidth || tempheight != window->minheight) | |
| 960 | 974 | { |
| 961 | m_minwidth = tempwidth; | |
| 962 | m_minheight = tempheight; | |
| 975 | window->minwidth = tempwidth; | |
| 976 | window->minheight = tempheight; | |
| 963 | 977 | |
| 964 | if (! | |
| 978 | if (!window->fullscreen) | |
| 965 | 979 | { |
| 966 | blit_surface_size(width, height); | |
| 967 | window_resize(blitwidth, blitheight); | |
| 980 | sdlwindow_blit_surface_size(window, window->width, window->height); | |
| 981 | sdlwindow_resize(window, window->blitwidth, window->blitheight); | |
| 968 | 982 | } |
| 969 | 983 | else if (video_config.switchres) |
| 970 | 984 | { |
| 971 | this->pick_best_mode(&tempwidth, &tempheight); | |
| 972 | window_resize(tempwidth, tempheight); | |
| 985 | pick_best_mode(window, &tempwidth, &tempheight); | |
| 986 | sdlwindow_resize(window, tempwidth, tempheight); | |
| 973 | 987 | } |
| 974 | 988 | } |
| 975 | 989 | |
| r242703 | r242704 | |
| 978 | 992 | else |
| 979 | 993 | event_wait_ticks = 0; |
| 980 | 994 | |
| 981 | if (osd_event_wait(rendered_event, event_wait_ticks)) | |
| 995 | if (osd_event_wait(window->rendered_event, event_wait_ticks)) | |
| 982 | 996 | { |
| 983 | if ((!fullscreen()) || (video_config.switchres)) | |
| 984 | { | |
| 985 | blit_surface_size(width, height); | |
| 986 | } | |
| 987 | else | |
| 988 | { | |
| 989 | blit_surface_size(monitor()->center_width, monitor()->center_height); | |
| 990 | } | |
| 997 | worker_param wp; | |
| 998 | render_primitive_list *primlist; | |
| 991 | 999 | |
| 1000 | clear_worker_param(&wp); | |
| 1001 | ||
| 992 | 1002 | // ensure the target bounds are up-to-date, and then get the primitives |
| 993 | | |
| 1003 | primlist = &window->get_primitives(window); | |
| 994 | 1004 | |
| 995 | render_primitive_list &primlist = target->get_primitives(); | |
| 996 | ||
| 997 | 1005 | // and redraw now |
| 998 | 1006 | |
| 999 | execute_async(&draw_video_contents_wt, worker_param(machine, this, primlist)); | |
| 1007 | wp.list = primlist; | |
| 1008 | wp.window = window; | |
| 1009 | wp.m_machine = &machine; | |
| 1010 | ||
| 1011 | execute_async(&draw_video_contents_wt, &wp); | |
| 1000 | 1012 | } |
| 1001 | 1013 | } |
| 1002 | 1014 | } |
| r242703 | r242704 | |
| 1034 | 1046 | static OSDWORK_CALLBACK( complete_create_wt ) |
| 1035 | 1047 | { |
| 1036 | 1048 | worker_param * wp = (worker_param *) param; |
| 1037 | sdl_window_info * window = wp->window | |
| 1049 | sdl_window_info * window = wp->window; | |
| 1038 | 1050 | |
| 1039 | 1051 | int tempwidth, tempheight; |
| 1040 | 1052 | static int result[2] = {0,1}; |
| r242703 | r242704 | |
| 1042 | 1054 | ASSERT_WINDOW_THREAD(); |
| 1043 | 1055 | osd_free(wp); |
| 1044 | 1056 | |
| 1045 | if (window->fullscreen | |
| 1057 | if (window->fullscreen) | |
| 1046 | 1058 | { |
| 1047 | 1059 | // default to the current mode exactly |
| 1048 | tempwidth = window->monitor()->monitor_width; | |
| 1049 | tempheight = window->monitor()->monitor_height; | |
| 1060 | tempwidth = window->monitor->monitor_width; | |
| 1061 | tempheight = window->monitor->monitor_height; | |
| 1050 | 1062 | |
| 1051 | 1063 | // if we're allowed to switch resolutions, override with something better |
| 1052 | 1064 | if (video_config.switchres) |
| 1053 | | |
| 1065 | pick_best_mode(window, &tempwidth, &tempheight); | |
| 1054 | 1066 | } |
| 1055 | 1067 | else if (window->windowed_width) |
| 1056 | 1068 | { |
| r242703 | r242704 | |
| 1063 | 1075 | if (window->startmaximized) |
| 1064 | 1076 | { |
| 1065 | 1077 | tempwidth = tempheight = 0; |
| 1066 | | |
| 1078 | get_max_bounds(window, &tempwidth, &tempheight, video_config.keepaspect ); | |
| 1067 | 1079 | } |
| 1068 | 1080 | else |
| 1069 | 1081 | { |
| r242703 | r242704 | |
| 1071 | 1083 | instead of letting sdlwindow_blit_surface_size() resize it |
| 1072 | 1084 | this stops the window from "flashing" from the wrong aspect |
| 1073 | 1085 | size to the right one at startup. */ |
| 1074 | tempwidth = (window->m_maxwidth != 0) ? window->m_maxwidth : 640; | |
| 1075 | tempheight = (window->m_maxheight != 0) ? window->m_maxheight : 480; | |
| 1086 | tempwidth = (window->maxwidth != 0) ? window->maxwidth : 640; | |
| 1087 | tempheight = (window->maxheight != 0) ? window->maxheight : 480; | |
| 1076 | 1088 | |
| 1077 | | |
| 1089 | get_min_bounds(window, &tempwidth, &tempheight, video_config.keepaspect ); | |
| 1078 | 1090 | } |
| 1079 | 1091 | } |
| 1080 | 1092 | |
| r242703 | r242704 | |
| 1142 | 1154 | UINT32 dc = 0; |
| 1143 | 1155 | int update = 1; |
| 1144 | 1156 | worker_param *wp = (worker_param *) param; |
| 1145 | sdl_window_info *window = wp->window | |
| 1157 | sdl_window_info *window = wp->window; | |
| 1146 | 1158 | |
| 1147 | 1159 | ASSERT_REDRAW_THREAD(); |
| 1148 | 1160 | |
| 1149 | 1161 | // Some configurations require events to be polled in the worker thread |
| 1150 | 1162 | sdlinput_process_events_buf(wp->machine()); |
| 1151 | 1163 | |
| 1152 | window->primlist = wp->list | |
| 1164 | window->primlist = wp->list; | |
| 1153 | 1165 | |
| 1154 | 1166 | // if no bitmap, just fill |
| 1155 | 1167 | if (window->primlist == NULL) |
| r242703 | r242704 | |
| 1177 | 1189 | // (window thread) |
| 1178 | 1190 | //============================================================ |
| 1179 | 1191 | |
| 1180 | void | |
| 1192 | static void constrain_to_aspect_ratio(sdl_window_info *window, int *window_width, int *window_height, int adjustment) | |
| 1181 | 1193 | { |
| 1182 | 1194 | INT32 extrawidth = 0; |
| 1183 | 1195 | INT32 extraheight = 0; |
| r242703 | r242704 | |
| 1188 | 1200 | float pixel_aspect; |
| 1189 | 1201 | |
| 1190 | 1202 | // make sure the monitor is up-to-date |
| 1191 | sdlvideo_monitor_refresh( | |
| 1203 | sdlvideo_monitor_refresh(window->monitor); | |
| 1192 | 1204 | |
| 1193 | 1205 | // get the pixel aspect ratio for the target monitor |
| 1194 | pixel_aspect = sdlvideo_monitor_get_aspect( | |
| 1206 | pixel_aspect = sdlvideo_monitor_get_aspect(window->monitor); | |
| 1195 | 1207 | |
| 1196 | 1208 | // determine the proposed width/height |
| 1197 | 1209 | propwidth = *window_width - extrawidth; |
| r242703 | r242704 | |
| 1203 | 1215 | { |
| 1204 | 1216 | case WMSZ_BOTTOM: |
| 1205 | 1217 | case WMSZ_TOP: |
| 1206 | target->compute_visible_area(10000, propheight, pixel_aspect, target->orientation(), propwidth, propheight); | |
| 1218 | window->target->compute_visible_area(10000, propheight, pixel_aspect, window->target->orientation(), propwidth, propheight); | |
| 1207 | 1219 | break; |
| 1208 | 1220 | |
| 1209 | 1221 | case WMSZ_LEFT: |
| 1210 | 1222 | case WMSZ_RIGHT: |
| 1211 | target->compute_visible_area(propwidth, 10000, pixel_aspect, target->orientation(), propwidth, propheight); | |
| 1223 | window->target->compute_visible_area(propwidth, 10000, pixel_aspect, window->target->orientation(), propwidth, propheight); | |
| 1212 | 1224 | break; |
| 1213 | 1225 | |
| 1214 | 1226 | default: |
| 1215 | target->compute_visible_area(propwidth, propheight, pixel_aspect, target->orientation(), propwidth, propheight); | |
| 1227 | window->target->compute_visible_area(propwidth, propheight, pixel_aspect, window->target->orientation(), propwidth, propheight); | |
| 1216 | 1228 | break; |
| 1217 | 1229 | } |
| 1218 | 1230 | |
| 1219 | 1231 | // get the minimum width/height for the current layout |
| 1220 | target->compute_minimum_size(minwidth, minheight); | |
| 1232 | window->target->compute_minimum_size(minwidth, minheight); | |
| 1221 | 1233 | |
| 1222 | 1234 | // clamp against the absolute minimum |
| 1223 | 1235 | propwidth = MAX(propwidth, MIN_WINDOW_DIM); |
| r242703 | r242704 | |
| 1228 | 1240 | propheight = MAX(propheight, minheight); |
| 1229 | 1241 | |
| 1230 | 1242 | // clamp against the maximum (fit on one screen for full screen mode) |
| 1231 | if ( | |
| 1243 | if (window->fullscreen) | |
| 1232 | 1244 | { |
| 1233 | maxwidth = m_monitor->center_width - extrawidth; | |
| 1234 | maxheight = m_monitor->center_height - extraheight; | |
| 1245 | maxwidth = window->monitor->center_width - extrawidth; | |
| 1246 | maxheight = window->monitor->center_height - extraheight; | |
| 1235 | 1247 | } |
| 1236 | 1248 | else |
| 1237 | 1249 | { |
| 1238 | maxwidth = m_monitor->center_width - extrawidth; | |
| 1239 | maxheight = m_monitor->center_height - extraheight; | |
| 1250 | maxwidth = window->monitor->center_width - extrawidth; | |
| 1251 | maxheight = window->monitor->center_height - extraheight; | |
| 1240 | 1252 | |
| 1241 | 1253 | // further clamp to the maximum width/height in the window |
| 1242 | if (this->m_maxwidth != 0) | |
| 1243 | maxwidth = MIN(maxwidth, this->m_maxwidth + extrawidth); | |
| 1244 | if (this->m_maxheight != 0) | |
| 1245 | maxheight = MIN(maxheight, this->m_maxheight + extraheight); | |
| 1254 | if (window->maxwidth != 0) | |
| 1255 | maxwidth = MIN(maxwidth, window->maxwidth + extrawidth); | |
| 1256 | if (window->maxheight != 0) | |
| 1257 | maxheight = MIN(maxheight, window->maxheight + extraheight); | |
| 1246 | 1258 | } |
| 1247 | 1259 | |
| 1248 | 1260 | // clamp to the maximum |
| r242703 | r242704 | |
| 1250 | 1262 | propheight = MIN(propheight, maxheight); |
| 1251 | 1263 | |
| 1252 | 1264 | // compute the visible area based on the proposed rectangle |
| 1253 | target->compute_visible_area(propwidth, propheight, pixel_aspect, target->orientation(), viswidth, visheight); | |
| 1265 | window->target->compute_visible_area(propwidth, propheight, pixel_aspect, window->target->orientation(), viswidth, visheight); | |
| 1254 | 1266 | |
| 1255 | 1267 | *window_width = viswidth; |
| 1256 | 1268 | *window_height = visheight; |
| r242703 | r242704 | |
| 1262 | 1274 | // (window thread) |
| 1263 | 1275 | //============================================================ |
| 1264 | 1276 | |
| 1265 | void sdl_window_info | |
| 1277 | static void get_min_bounds(sdl_window_info *window, int *window_width, int *window_height, int constrain) | |
| 1266 | 1278 | { |
| 1267 | 1279 | INT32 minwidth, minheight; |
| 1268 | 1280 | |
| 1269 | 1281 | // get the minimum target size |
| 1270 | | |
| 1282 | window->target->compute_minimum_size(minwidth, minheight); | |
| 1271 | 1283 | |
| 1272 | 1284 | // expand to our minimum dimensions |
| 1273 | 1285 | if (minwidth < MIN_WINDOW_DIM) |
| r242703 | r242704 | |
| 1283 | 1295 | |
| 1284 | 1296 | // first constrain with no height limit |
| 1285 | 1297 | test1w = minwidth; test1h = 10000; |
| 1286 | | |
| 1298 | constrain_to_aspect_ratio(window, &test1w, &test1h, WMSZ_BOTTOMRIGHT); | |
| 1287 | 1299 | |
| 1288 | 1300 | // then constrain with no width limit |
| 1289 | 1301 | test2w = 10000; test2h = minheight; |
| 1290 | | |
| 1302 | constrain_to_aspect_ratio(window, &test2w, &test2h, WMSZ_BOTTOMRIGHT); | |
| 1291 | 1303 | |
| 1292 | 1304 | // pick the larger |
| 1293 | 1305 | if ( test1w > test2w ) |
| r242703 | r242704 | |
| 1312 | 1324 | // (window thread) |
| 1313 | 1325 | //============================================================ |
| 1314 | 1326 | |
| 1315 | void sdl_window_info | |
| 1327 | static void get_max_bounds(sdl_window_info *window, int *window_width, int *window_height, int constrain) | |
| 1316 | 1328 | { |
| 1317 | 1329 | INT32 maxwidth, maxheight; |
| 1318 | 1330 | |
| 1319 | 1331 | // compute the maximum client area |
| 1320 | maxwidth = m_monitor->center_width; | |
| 1321 | maxheight = m_monitor->center_height; | |
| 1332 | maxwidth = window->monitor->center_width; | |
| 1333 | maxheight = window->monitor->center_height; | |
| 1322 | 1334 | |
| 1323 | 1335 | // clamp to the window's max |
| 1324 | if ( | |
| 1336 | if (window->maxwidth != 0) | |
| 1325 | 1337 | { |
| 1326 | int temp = | |
| 1338 | int temp = window->maxwidth + WINDOW_DECORATION_WIDTH; | |
| 1327 | 1339 | if (temp < maxwidth) |
| 1328 | 1340 | maxwidth = temp; |
| 1329 | 1341 | } |
| 1330 | if ( | |
| 1342 | if (window->maxheight != 0) | |
| 1331 | 1343 | { |
| 1332 | int temp = | |
| 1344 | int temp = window->maxheight + WINDOW_DECORATION_HEIGHT; | |
| 1333 | 1345 | if (temp < maxheight) |
| 1334 | 1346 | maxheight = temp; |
| 1335 | 1347 | } |
| 1336 | 1348 | |
| 1337 | 1349 | // constrain to fit |
| 1338 | 1350 | if (constrain) |
| 1339 | | |
| 1351 | constrain_to_aspect_ratio(window, &maxwidth, &maxheight, WMSZ_BOTTOMRIGHT); | |
| 1340 | 1352 | //else |
| 1341 | 1353 | { |
| 1342 | 1354 | maxwidth -= WINDOW_DECORATION_WIDTH; |
| r242703 | r242704 | |
|---|---|---|
| 34 | 34 | |
| 35 | 35 | struct sdl_window_info |
| 36 | 36 | { |
| 37 | sdl_window_info(running_machine *a_machine, sdl_monitor_info *a_monitor, | |
| 38 | int index, const sdl_window_config *config) | |
| 39 | : next(NULL), m_minwidth(0), m_minheight(0), | |
| 40 | startmaximized(0), | |
| 41 | rendered_event(0), target(0), primlist(NULL), dxdata(NULL), | |
| 42 | width(0), height(0), blitwidth(0), blitheight(0), | |
| 43 | start_viewscreen(0), | |
| 44 | #if (SDLMAME_SDL2) | |
| 45 | sdl_window(NULL), | |
| 46 | resize_width(0), | |
| 47 | resize_height(0), | |
| 48 | last_resize(0), | |
| 49 | #else | |
| 50 | screen_width(0), screen_height(0), | |
| 51 | #endif | |
| 52 | m_machine(a_machine), m_monitor(a_monitor), m_fullscreen(0), m_index(0) | |
| 53 | { | |
| 54 | m_maxwidth = config->width; | |
| 55 | m_maxheight = config->height; | |
| 56 | depth = config->depth; | |
| 57 | refresh = config->refresh; | |
| 58 | m_index = index; | |
| 59 | ||
| 60 | //FIXME: these should be per_window in config-> or even better a bit set | |
| 61 | m_fullscreen = !video_config.windowed; | |
| 62 | prescale = video_config.prescale; | |
| 63 | ||
| 64 | if (!m_fullscreen) | |
| 65 | { | |
| 66 | windowed_width = config->width; | |
| 67 | windowed_height = config->height; | |
| 68 | } | |
| 69 | } | |
| 70 | ||
| 71 | void video_window_update(running_machine &machine); | |
| 72 | void blit_surface_size(int window_width, int window_height); | |
| 73 | void toggle_full_screen(running_machine &machine); | |
| 74 | void modify_prescale(running_machine &machine, int dir); | |
| 75 | void window_resize(INT32 width, INT32 height); | |
| 76 | void window_clear(); | |
| 77 | ||
| 78 | void video_window_destroy(running_machine &machine); | |
| 79 | void pick_best_mode(int *fswidth, int *fsheight); | |
| 80 | void get_min_bounds(int *window_width, int *window_height, int constrain); | |
| 81 | void get_max_bounds(int *window_width, int *window_height, int constrain); | |
| 82 | ||
| 83 | 37 | // Pointer to next window |
| 84 | 38 | sdl_window_info * next; |
| 85 | 39 | |
| 40 | // Pointer to machine | |
| 86 | 41 | running_machine &machine() const { assert(m_machine != NULL); return *m_machine; } |
| 87 | sdl_monitor_info *monitor() const { return m_monitor; } | |
| 88 | int fullscreen() const { return m_fullscreen; } | |
| 89 | int index() const { return m_index; } | |
| 42 | running_machine * m_machine; | |
| 90 | 43 | |
| 91 | void set_fullscreen(int afullscreen) { m_fullscreen = afullscreen; } | |
| 92 | ||
| 93 | 44 | // Draw Callbacks |
| 94 | 45 | int (*create)(sdl_window_info *window, int width, int height); |
| 95 | 46 | void (*resize)(sdl_window_info *window, int width, int height); |
| 96 | 47 | int (*draw)(sdl_window_info *window, UINT32 dc, int update); |
| 97 | v | |
| 48 | render_primitive_list &(*get_primitives)(sdl_window_info *window); | |
| 98 | 49 | int (*xy_to_render_target)(sdl_window_info *window, int x, int y, int *xt, int *yt); |
| 99 | 50 | void (*destroy_all_textures)(sdl_window_info *window); |
| 100 | 51 | void (*destroy)(sdl_window_info *window); |
| r242703 | r242704 | |
| 103 | 54 | // window handle and info |
| 104 | 55 | char title[256]; |
| 105 | 56 | |
| 57 | // monitor info | |
| 58 | sdl_monitor_info * monitor; | |
| 59 | int fullscreen; | |
| 60 | int index; | |
| 61 | ||
| 106 | 62 | // diverse flags |
| 107 | int m_minwidth, m_minheight; | |
| 108 | int m_maxwidth, m_maxheight; | |
| 63 | int minwidth, minheight; | |
| 64 | int maxwidth, maxheight; | |
| 109 | 65 | int depth; |
| 110 | 66 | int refresh; |
| 111 | 67 | int windowed_width; |
| r242703 | r242704 | |
| 144 | 100 | int screen_width; |
| 145 | 101 | int screen_height; |
| 146 | 102 | #endif |
| 147 | ||
| 148 | private: | |
| 149 | void constrain_to_aspect_ratio(int *window_width, int *window_height, int adjustment); | |
| 150 | ||
| 151 | // Pointer to machine | |
| 152 | running_machine * m_machine; | |
| 153 | // monitor info | |
| 154 | sdl_monitor_info * m_monitor; | |
| 155 | int m_fullscreen; | |
| 156 | int m_index; | |
| 157 | ||
| 158 | 103 | }; |
| 159 | 104 | |
| 160 | 105 | struct sdl_draw_info |
| r242703 | r242704 | |
| 176 | 121 | |
| 177 | 122 | // creation/deletion of windows |
| 178 | 123 | int sdlwindow_video_window_create(running_machine &machine, int index, sdl_monitor_info *monitor, const sdl_window_config *config); |
| 124 | void sdlwindow_video_window_update(running_machine &machine, sdl_window_info *window); | |
| 125 | void sdlwindow_blit_surface_size(sdl_window_info *window, int window_width, int window_height); | |
| 126 | void sdlwindow_toggle_full_screen(running_machine &machine, sdl_window_info *window); | |
| 127 | void sdlwindow_modify_prescale(running_machine &machine, sdl_window_info *window, int dir); | |
| 128 | void sdlwindow_resize(sdl_window_info *window, INT32 width, INT32 height); | |
| 129 | void sdlwindow_clear(sdl_window_info *window); | |
| 179 | 130 | |
| 131 | ||
| 180 | 132 | //============================================================ |
| 181 | 133 | // PROTOTYPES - drawsdl.c |
| 182 | 134 | //============================================================ |
| r242703 | r242704 | |
|---|---|---|
| 940 | 940 | texture.rowpixels = shadow_bitmap.rowpixels(); |
| 941 | 941 | texture.width = shadow_bitmap.width(); |
| 942 | 942 | texture.height = shadow_bitmap.height(); |
| 943 | texture. | |
| 943 | texture.palette = NULL; | |
| 944 | 944 | texture.seqid = 0; |
| 945 | 945 | |
| 946 | 946 | // now create it |
| r242703 | r242704 | |
|---|---|---|
| 528 | 528 | texture.rowpixels = m_default_bitmap.rowpixels(); |
| 529 | 529 | texture.width = m_default_bitmap.width(); |
| 530 | 530 | texture.height = m_default_bitmap.height(); |
| 531 | texture. | |
| 531 | texture.palette = NULL; | |
| 532 | 532 | texture.seqid = 0; |
| 533 | 533 | |
| 534 | 534 | // now create it |
| r242703 | r242704 | |
| 545 | 545 | texture.rowpixels = m_vector_bitmap.rowpixels(); |
| 546 | 546 | texture.width = m_vector_bitmap.width(); |
| 547 | 547 | texture.height = m_vector_bitmap.height(); |
| 548 | texture. | |
| 548 | texture.palette = NULL; | |
| 549 | 549 | texture.seqid = 0; |
| 550 | 550 | |
| 551 | 551 | // now create it |
| r242703 | r242704 | |
| 2580 | 2580 | switch (PRIMFLAG_GET_TEXFORMAT(flags)) |
| 2581 | 2581 | { |
| 2582 | 2582 | case TEXFORMAT_PALETTE16: |
| 2583 | copyline_palette16((UINT32 *)dst, (UINT16 *)texsource->base + srcy * texsource->rowpixels, texsource->width, texsource->palette | |
| 2583 | copyline_palette16((UINT32 *)dst, (UINT16 *)texsource->base + srcy * texsource->rowpixels, texsource->width, texsource->palette, m_xborderpix); | |
| 2584 | 2584 | break; |
| 2585 | 2585 | |
| 2586 | 2586 | case TEXFORMAT_PALETTEA16: |
| 2587 | copyline_palettea16((UINT32 *)dst, (UINT16 *)texsource->base + srcy * texsource->rowpixels, texsource->width, texsource->palette | |
| 2587 | copyline_palettea16((UINT32 *)dst, (UINT16 *)texsource->base + srcy * texsource->rowpixels, texsource->width, texsource->palette, m_xborderpix); | |
| 2588 | 2588 | break; |
| 2589 | 2589 | |
| 2590 | 2590 | case TEXFORMAT_RGB32: |
| 2591 | copyline_rgb32((UINT32 *)dst, (UINT32 *)texsource->base + srcy * texsource->rowpixels, texsource->width, texsource->palette | |
| 2591 | copyline_rgb32((UINT32 *)dst, (UINT32 *)texsource->base + srcy * texsource->rowpixels, texsource->width, texsource->palette, m_xborderpix); | |
| 2592 | 2592 | break; |
| 2593 | 2593 | |
| 2594 | 2594 | case TEXFORMAT_ARGB32: |
| 2595 | copyline_argb32((UINT32 *)dst, (UINT32 *)texsource->base + srcy * texsource->rowpixels, texsource->width, texsource->palette | |
| 2595 | copyline_argb32((UINT32 *)dst, (UINT32 *)texsource->base + srcy * texsource->rowpixels, texsource->width, texsource->palette, m_xborderpix); | |
| 2596 | 2596 | break; |
| 2597 | 2597 | |
| 2598 | 2598 | case TEXFORMAT_YUY16: |
| 2599 | 2599 | if (m_texture_manager->get_yuv_format() == D3DFMT_YUY2) |
| 2600 | copyline_yuy16_to_yuy2((UINT16 *)dst, (UINT16 *)texsource->base + srcy * texsource->rowpixels, texsource->width, texsource->palette | |
| 2600 | copyline_yuy16_to_yuy2((UINT16 *)dst, (UINT16 *)texsource->base + srcy * texsource->rowpixels, texsource->width, texsource->palette, m_xborderpix); | |
| 2601 | 2601 | else if (m_texture_manager->get_yuv_format() == D3DFMT_UYVY) |
| 2602 | copyline_yuy16_to_uyvy((UINT16 *)dst, (UINT16 *)texsource->base + srcy * texsource->rowpixels, texsource->width, texsource->palette | |
| 2602 | copyline_yuy16_to_uyvy((UINT16 *)dst, (UINT16 *)texsource->base + srcy * texsource->rowpixels, texsource->width, texsource->palette, m_xborderpix); | |
| 2603 | 2603 | else |
| 2604 | copyline_yuy16_to_argb((UINT32 *)dst, (UINT16 *)texsource->base + srcy * texsource->rowpixels, texsource->width, texsource->palette | |
| 2604 | copyline_yuy16_to_argb((UINT32 *)dst, (UINT16 *)texsource->base + srcy * texsource->rowpixels, texsource->width, texsource->palette, m_xborderpix); | |
| 2605 | 2605 | break; |
| 2606 | 2606 | |
| 2607 | 2607 | default: |
| r242703 | r242704 | |
|---|---|---|
| 205 | 205 | // retrieve the version info |
| 206 | 206 | if (!GetFileVersionInfo(path, 0, version_info_size, version_info)) |
| 207 | 207 | { |
| 208 | GlobalFree(version_info); | |
| 209 | 208 | fprintf(stderr, "GetFileVersionInfo() failed\n"); |
| 210 | 209 | exit(-100); |
| 211 | 210 | } |
| r242703 | r242704 | |
| 213 | 212 | // extract the VS_FIXEDFILEINFO from the version info |
| 214 | 213 | if (!VerQueryValue(version_info, sub_block, &sub_buffer, &sub_buffer_size)) |
| 215 | 214 | { |
| 216 | GlobalFree(version_info); | |
| 217 | 215 | fprintf(stderr, "VerQueryValue() failed\n"); |
| 218 | 216 | exit(-100); |
| 219 | 217 | } |
| r242703 | r242704 | |
|---|---|---|
| 302 | 302 | include $(SRC)/build/cc_detection.mak |
| 303 | 303 | |
| 304 | 304 | # ensure we statically link the gcc runtime lib |
| 305 | LDFLAGS += -static-libgcc | |
| 305 | LDFLAGS += -static-libgcc | |
| 306 | 306 | |
| 307 | 307 | # TODO: needs to use $(CC) |
| 308 | 308 | TEST_GCC := $(shell gcc --version) |
| r242703 | r242704 | |
| 312 | 312 | endif |
| 313 | 313 | |
| 314 | 314 | # add the windows libraries |
| 315 | BASELIBS += -luser32 -lgdi32 -ldsound -ldxguid -lwinmm -ladvapi32 -lcomctl32 -lshlwapi -lwsock32 | |
| 316 | 315 | LIBS += -luser32 -lgdi32 -ldsound -ldxguid -lwinmm -ladvapi32 -lcomctl32 -lshlwapi -lwsock32 |
| 317 | 316 | |
| 318 | 317 | ifdef USE_SDL |
| r242703 | r242704 | |
|---|---|---|
| 38 | 38 | #define min(x,y) fmin(x,y) |
| 39 | 39 | #define max(x,y) fmax(x,y) |
| 40 | 40 | #endif |
| 41 | #ifdef _MSC_VER | |
| 42 | #if _MSC_VER < 1800 | |
| 43 | #define _USE_MATH_DEFINES | |
| 44 | #include <math.h> | |
| 45 | static __inline double fmin(double x, double y){ return (x < y) ? x : y; } | |
| 46 | static __inline double fmax(double x, double y){ return (x > y) ? x : y; } | |
| 47 | static __inline double log2(double x) { return log(x) * M_LOG2E; } | |
| 48 | #endif | |
| 49 | #endif | |
| 50 | 41 | |
| 51 | 42 | #define PATH_SEPARATOR "\\" |
| r242703 | r242704 | |
|---|---|---|
| 109 | 109 | volatile INT32 items; // items in the queue |
| 110 | 110 | volatile INT32 livethreads; // number of live threads |
| 111 | 111 | volatile INT32 waiting; // is someone waiting on the queue to complete? |
| 112 | volatile INT | |
| 112 | volatile UINT8 exiting; // should the threads exit on their next opportunity? | |
| 113 | 113 | UINT32 threads; // number of threads in this queue |
| 114 | 114 | UINT32 flags; // creation flags |
| 115 | 115 | work_thread_info * thread; // array of thread information |
| r242703 | r242704 | |
| 149 | 149 | static int effective_num_processors(void); |
| 150 | 150 | static void * worker_thread_entry(void *param); |
| 151 | 151 | static void worker_thread_process(osd_work_queue *queue, work_thread_info *thread); |
| 152 | static bool queue_has_list_items(osd_work_queue *queue); | |
| 153 | 152 | |
| 154 | 153 | |
| 155 | 154 | //============================================================ |
| r242703 | r242704 | |
| 324 | 323 | end_timing(queue->thread[queue->threads].waittime); |
| 325 | 324 | |
| 326 | 325 | // signal all the threads to exit |
| 327 | | |
| 326 | queue->exiting = TRUE; | |
| 328 | 327 | for (threadnum = 0; threadnum < queue->threads; threadnum++) |
| 329 | 328 | { |
| 330 | 329 | work_thread_info *thread = &queue->thread[threadnum]; |
| r242703 | r242704 | |
| 423 | 422 | osd_work_item *item; |
| 424 | 423 | |
| 425 | 424 | // first allocate a new work item; try the free list first |
| 426 | INT32 lockslot = osd_scalable_lock_acquire(queue->lock); | |
| 427 | 425 | do |
| 428 | 426 | { |
| 429 | 427 | item = (osd_work_item *)queue->free; |
| 430 | 428 | } while (item != NULL && compare_exchange_ptr((PVOID volatile *)&queue->free, item, item->next) != item); |
| 431 | osd_scalable_lock_release(queue->lock, lockslot); | |
| 432 | 429 | |
| 433 | 430 | // if nothing, allocate something new |
| 434 | 431 | if (item == NULL) |
| r242703 | r242704 | |
| 439 | 436 | return NULL; |
| 440 | 437 | item->event = NULL; |
| 441 | 438 | item->queue = queue; |
| 442 | item->done = FALSE; | |
| 443 | 439 | } |
| 444 | else | |
| 445 | { | |
| 446 | atomic_exchange32(&item->done, FALSE); // needs to be set this way to prevent data race/usage of uninitialized memory on Linux | |
| 447 | } | |
| 448 | 440 | |
| 449 | 441 | // fill in the basics |
| 450 | 442 | item->next = NULL; |
| r242703 | r242704 | |
| 452 | 444 | item->param = parambase; |
| 453 | 445 | item->result = NULL; |
| 454 | 446 | item->flags = flags; |
| 447 | item->done = FALSE; | |
| 455 | 448 | |
| 456 | 449 | // advance to the next |
| 457 | 450 | lastitem = item; |
| r242703 | r242704 | |
| 514 | 507 | |
| 515 | 508 | // if we don't have an event, create one |
| 516 | 509 | if (item->event == NULL) |
| 517 | { | |
| 518 | INT32 lockslot = osd_scalable_lock_acquire(item->queue->lock); | |
| 519 | 510 | item->event = osd_event_alloc(TRUE, FALSE); // manual reset, not signalled |
| 520 | osd_scalable_lock_release(item->queue->lock, lockslot); | |
| 521 | } | |
| 522 | 511 | else |
| 523 | osd_event_reset(item->event); | |
| 512 | osd_event_reset(item->event); | |
| 524 | 513 | |
| 525 | 514 | // if we don't have an event, we need to spin (shouldn't ever really happen) |
| 526 | 515 | if (item->event == NULL) |
| r242703 | r242704 | |
| 561 | 550 | osd_work_item_wait(item, 100 * osd_ticks_per_second()); |
| 562 | 551 | |
| 563 | 552 | // add us to the free list on our queue |
| 564 | INT32 lockslot = osd_scalable_lock_acquire(item->queue->lock); | |
| 565 | 553 | do |
| 566 | 554 | { |
| 567 | 555 | next = (osd_work_item *)item->queue->free; |
| 568 | 556 | item->next = next; |
| 569 | 557 | } while (compare_exchange_ptr((PVOID volatile *)&item->queue->free, next, item) != next); |
| 570 | osd_scalable_lock_release(item->queue->lock, lockslot); | |
| 571 | 558 | } |
| 572 | 559 | |
| 573 | 560 | |
| r242703 | r242704 | |
| 615 | 602 | { |
| 616 | 603 | // block waiting for work or exit |
| 617 | 604 | // bail on exit, and only wait if there are no pending items in queue |
| 618 | if (queue->exiting) | |
| 619 | break; | |
| 620 | ||
| 621 | if (!queue_has_list_items(queue)) | |
| 605 | if (!queue->exiting && queue->list == NULL) | |
| 622 | 606 | { |
| 623 | 607 | begin_timing(thread->waittime); |
| 624 | 608 | osd_event_wait(thread->wakeevent, INFINITE); |
| 625 | 609 | end_timing(thread->waittime); |
| 626 | 610 | } |
| 627 | ||
| 628 | 611 | if (queue->exiting) |
| 629 | 612 | break; |
| 630 | 613 | |
| r242703 | r242704 | |
| 652 | 635 | } |
| 653 | 636 | |
| 654 | 637 | // if nothing more, release the processor |
| 655 | if ( | |
| 638 | if (queue->list == NULL) | |
| 656 | 639 | break; |
| 657 | 640 | add_to_stat(&queue->spinloops, 1); |
| 658 | 641 | } |
| r242703 | r242704 | |
| 676 | 659 | begin_timing(thread->runtime); |
| 677 | 660 | |
| 678 | 661 | // loop until everything is processed |
| 679 | while ( | |
| 662 | while (queue->list != NULL) | |
| 680 | 663 | { |
| 681 | osd_work_item *item = NULL; | |
| 664 | osd_work_item *item; | |
| 665 | INT32 lockslot; | |
| 682 | 666 | |
| 683 | bool end_loop = false; | |
| 684 | ||
| 685 | 667 | // use a critical section to synchronize the removal of items |
| 668 | lockslot = osd_scalable_lock_acquire(queue->lock); | |
| 686 | 669 | { |
| 687 | INT32 lockslot = osd_scalable_lock_acquire(queue->lock); | |
| 688 | if (queue->list == NULL) | |
| 670 | // pull the item from the queue | |
| 671 | item = (osd_work_item *)queue->list; | |
| 672 | if (item != NULL) | |
| 689 | 673 | { |
| 690 | end_loop = true; | |
| 674 | queue->list = item->next; | |
| 675 | if (queue->list == NULL) | |
| 676 | queue->tailptr = (osd_work_item **)&queue->list; | |
| 691 | 677 | } |
| 692 | else | |
| 693 | { | |
| 694 | // pull the item from the queue | |
| 695 | item = (osd_work_item *)queue->list; | |
| 696 | if (item != NULL) | |
| 697 | { | |
| 698 | queue->list = item->next; | |
| 699 | if (queue->list == NULL) | |
| 700 | queue->tailptr = (osd_work_item **)&queue->list; | |
| 701 | } | |
| 702 | } | |
| 703 | osd_scalable_lock_release(queue->lock, lockslot); | |
| 704 | 678 | } |
| 679 | osd_scalable_lock_release(queue->lock, lockslot); | |
| 705 | 680 | |
| 706 | if (end_loop) | |
| 707 | break; | |
| 708 | ||
| 709 | 681 | // process non-NULL items |
| 710 | 682 | if (item != NULL) |
| 711 | 683 | { |
| r242703 | r242704 | |
| 724 | 696 | osd_work_item_release(item); |
| 725 | 697 | |
| 726 | 698 | // set the result and signal the event |
| 727 | else | |
| 699 | else if (item->event != NULL) | |
| 728 | 700 | { |
| 729 | INT32 lockslot = osd_scalable_lock_acquire(item->queue->lock); | |
| 730 | if (item->event != NULL) | |
| 731 | { | |
| 732 | osd_event_set(item->event); | |
| 733 | add_to_stat(&item->queue->setevents, 1); | |
| 734 | } | |
| 735 | osd_scalable_lock_release(item->queue->lock, lockslot); | |
| 701 | osd_event_set(item->event); | |
| 702 | add_to_stat(&item->queue->setevents, 1); | |
| 736 | 703 | } |
| 737 | 704 | |
| 738 | 705 | // if we removed an item and there's still work to do, bump the stats |
| 739 | if (queue | |
| 706 | if (queue->list != NULL) | |
| 740 | 707 | add_to_stat(&queue->extraitems, 1); |
| 741 | 708 | } |
| 742 | 709 | } |
| r242703 | r242704 | |
| 750 | 717 | |
| 751 | 718 | end_timing(thread->runtime); |
| 752 | 719 | } |
| 753 | ||
| 754 | bool queue_has_list_items(osd_work_queue *queue) | |
| 755 | { | |
| 756 | INT32 lockslot = osd_scalable_lock_acquire(queue->lock); | |
| 757 | bool has_list_items = (queue->list != NULL); | |
| 758 | osd_scalable_lock_release(queue->lock, lockslot); | |
| 759 | return has_list_items; | |
| 760 | } |
| r242703 | r242704 | |
|---|---|---|
| 10 | 10 | #include <stdlib.h> |
| 11 | 11 | #include <string.h> |
| 12 | 12 | #include <ctype.h> |
| 13 | #include <sstream> | |
| 14 | 13 | #include "astring.h" |
| 15 | 14 | #include "corefile.h" |
| 16 | 15 | #include "corestr.h" |
| r242703 | r242704 | |
|---|---|---|
| 74 | 74 | |
| 75 | 75 | romcmp$(EXE): $(ROMCMPOBJS) $(LIBUTIL) $(ZLIB) $(EXPAT) $(LIBOCORE) |
| 76 | 76 | @echo Linking $@... |
| 77 | $(LD) $(LDFLAGS) $^ $( | |
| 77 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | |
| 78 | 78 | |
| 79 | 79 | |
| 80 | 80 | |
| r242703 | r242704 | |
| 88 | 88 | chdman$(EXE): $(CHDMANOBJS) $(LIBUTIL) $(ZLIB) $(EXPAT) $(FLAC_LIB) $(7Z_LIB) $(LIBOCORE) |
| 89 | 89 | $(CC) $(CDEFS) $(CFLAGS) -c $(SRC)/version.c -o $(VERSIONOBJ) |
| 90 | 90 | @echo Linking $@... |
| 91 | $(LD) $(LDFLAGS) $(VERSIONOBJ) $^ $( | |
| 91 | $(LD) $(LDFLAGS) $(VERSIONOBJ) $^ $(LIBS) $(FLAC_LIB) -o $@ | |
| 92 | 92 | |
| 93 | 93 | |
| 94 | 94 | |
| r242703 | r242704 | |
| 101 | 101 | |
| 102 | 102 | jedutil$(EXE): $(JEDUTILOBJS) $(LIBUTIL) $(LIBOCORE) $(ZLIB) $(EXPAT) |
| 103 | 103 | @echo Linking $@... |
| 104 | $(LD) $(LDFLAGS) $^ $( | |
| 104 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | |
| 105 | 105 | |
| 106 | 106 | |
| 107 | 107 | |
| r242703 | r242704 | |
| 115 | 115 | # TODO: Visual Studio wants $(FLAC_LIB) and $(7Z_LIB) during linking... |
| 116 | 116 | unidasm$(EXE): $(UNIDASMOBJS) $(LIBDASM) $(LIBEMU) $(LIBUTIL) $(LIBOCORE) $(ZLIB) $(EXPAT) $(FLAC_LIB) $(7Z_LIB) |
| 117 | 117 | @echo Linking $@... |
| 118 | $(LD) $(LDFLAGS) $^ $( | |
| 118 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | |
| 119 | 119 | |
| 120 | 120 | |
| 121 | 121 | |
| r242703 | r242704 | |
| 128 | 128 | |
| 129 | 129 | ldresample$(EXE): $(LDRESAMPLEOBJS) $(LIBUTIL) $(LIBOCORE) $(ZLIB) $(FLAC_LIB) $(7Z_LIB) $(EXPAT) |
| 130 | 130 | @echo Linking $@... |
| 131 | $(LD) $(LDFLAGS) $^ $( | |
| 131 | $(LD) $(LDFLAGS) $^ $(LIBS) $(FLAC_LIB) -o $@ | |
| 132 | 132 | |
| 133 | 133 | |
| 134 | 134 | |
| r242703 | r242704 | |
| 141 | 141 | |
| 142 | 142 | ldverify$(EXE): $(LDVERIFYOBJS) $(LIBUTIL) $(LIBOCORE) $(ZLIB) $(FLAC_LIB) $(7Z_LIB) $(EXPAT) |
| 143 | 143 | @echo Linking $@... |
| 144 | $(LD) $(LDFLAGS) $^ $( | |
| 144 | $(LD) $(LDFLAGS) $^ $(LIBS) $(FLAC_LIB) -o $@ | |
| 145 | 145 | |
| 146 | 146 | |
| 147 | 147 | |
| r242703 | r242704 | |
| 154 | 154 | |
| 155 | 155 | regrep$(EXE): $(REGREPOBJS) $(LIBUTIL) $(FLAC_LIB) $(LIBOCORE) $(ZLIB) $(EXPAT) |
| 156 | 156 | @echo Linking $@... |
| 157 | $(LD) $(LDFLAGS) $^ $( | |
| 157 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | |
| 158 | 158 | |
| 159 | 159 | |
| 160 | 160 | |
| r242703 | r242704 | |
| 167 | 167 | |
| 168 | 168 | srcclean$(EXE): $(SRCCLEANOBJS) $(LIBUTIL) $(LIBOCORE) $(ZLIB) $(EXPAT) |
| 169 | 169 | @echo Linking $@... |
| 170 | $(LD) $(LDFLAGS) $^ $( | |
| 170 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | |
| 171 | 171 | |
| 172 | 172 | |
| 173 | 173 | |
| r242703 | r242704 | |
| 180 | 180 | |
| 181 | 181 | src2html$(EXE): $(SRC2HTMLOBJS) $(LIBUTIL) $(LIBOCORE) $(ZLIB) $(EXPAT) |
| 182 | 182 | @echo Linking $@... |
| 183 | $(LD) $(LDFLAGS) $^ $( | |
| 183 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | |
| 184 | 184 | |
| 185 | 185 | |
| 186 | 186 | |
| r242703 | r242704 | |
| 194 | 194 | # TODO: Visual Studio wants $(FLAC_LIB) and $(7Z_LIB) during linking... |
| 195 | 195 | split$(EXE): $(SPLITOBJS) $(LIBUTIL) $(LIBOCORE) $(ZLIB) $(EXPAT) $(FLAC_LIB) $(7Z_LIB) |
| 196 | 196 | @echo Linking $@... |
| 197 | $(LD) $(LDFLAGS) $^ $( | |
| 197 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | |
| 198 | 198 | |
| 199 | 199 | |
| 200 | 200 | |
| r242703 | r242704 | |
| 207 | 207 | |
| 208 | 208 | pngcmp$(EXE): $(PNGCMPOBJS) $(LIBUTIL) $(FLAC_LIB) $(LIBOCORE) $(ZLIB) |
| 209 | 209 | @echo Linking $@... |
| 210 | $(LD) $(LDFLAGS) $^ $( | |
| 210 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | |
| 211 | 211 | |
| 212 | 212 | #------------------------------------------------- |
| 213 | 213 | # nltool |
| r242703 | r242704 | |
| 219 | 219 | |
| 220 | 220 | nltool$(EXE): $(NLTOOLOBJS) $(LIBUTIL) $(LIBOCORE) $(ZLIB) $(EXPAT) |
| 221 | 221 | @echo Linking $@... |
| 222 | $(LD) $(LDFLAGS) $^ $( | |
| 222 | $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ | |
| 223 | 223 |
| r242703 | r242704 | |
|---|---|---|
| 8 | 8 | |
| 9 | 9 | ***************************************************************************/ |
| 10 | 10 | |
| 11 | #define BARE_BUILD_VERSION "0.15 | |
| 11 | #define BARE_BUILD_VERSION "0.156" | |
| 12 | 12 | |
| 13 | 13 | extern const char bare_build_version[]; |
| 14 | 14 | extern const char build_version[]; |
| https://github.com/mamedev/mame/commit/017f4e485a5c0acfd72f522d4909f19616ff879d |
| Previous | 199869 Revisions | Next |