Previous | 199869 Revisions | Next |
r40678 Friday 11th September, 2015 at 06:48:57 UTC by David Haywood |
---|
Merge pull request #317 from felipesanches/gunsmokeb_rom_naming Fixing ROM names in the bootleg version of CAPCOM GunSmoke 1985 to re… |
[hash] | a7800.xml bbcb_cass.xml bbcb_de_cass.xml* bbcb_us_flop.xml* bbcmc_flop.xml* gameking.xml gameking3.xml gbcolor.xml jaguar.xml msx1_flop.xml msx2_cass.xml msx2_flop.xml msx2p_flop.xml msxr_flop.xml nes.xml pico.xml pro128_cart.xml* tutor.xml vc4000.xml |
[scripts/src] | bus.lua sound.lua |
[scripts/target/mame] | mess.lua |
[src/emu/bus/cpc] | cpcexp.h magicsound.c* magicsound.h* |
[src/emu/bus/isa] | isa_cards.c isa_cards.h pgc.c* pgc.h* |
[src/emu/cpu/mips] | mips3.c mips3dsm.c |
[src/emu/sound] | 315-5641.c* 315-5641.h* tms5110.c tms5220.c upd7759.c upd7759.h |
[src/emu/video] | scn2674.c scn2674.h |
[src/lib/formats] | bbc_dsk.c bbc_dsk.h |
[src/mame] | arcade.lst mess.lst |
[src/mame/drivers] | cclimber.c chihiro.c cninja.c hng64.c igs_m027.c macrossp.c nmk16.c pgm.c segaxbd.c wc90.c |
[src/mame/includes] | chihiro.h hng64.h n64.h pgm.h |
[src/mame/machine] | n64.c nmk004.c pgmcrypt.c pgmcrypt.h pgmprot_orlegend.c xbox.c |
[src/mame/video] | chihiro.c hng64.c hng64_3d.c tecmo_spr.c tecmo_spr.h |
[src/mess/drivers] | amstrad.c apple2.c bbc.c n64.c pcd.c segapico.c xbox.c |
[src/mess/includes] | amstrad.h bbc.h |
[src/mess/machine] | amstrad.c bbc.c pcd_kbd.c |
[src/mess/video] | bbc.c pcd.c* pcd.h* |
[src/osd/modules/netdev] | pcap.c |
r249189 | r249190 | |
---|---|---|
2380 | 2380 | <info name="programmer" value="TEP392" /> |
2381 | 2381 | <sharedfeat name="compatibility" value="PAL"/> |
2382 | 2382 | <part name="cart" interface="a7800_cart"> |
2383 | <feature name="slot" value="a78_sg9" /> | |
2384 | <dataarea name="rom" size="147456"> | |
2385 | <rom name="dkxm_demo_v12_pal.bin" size="147456" crc="9f6c0600" sha1="18409eace880dda3646792f9ec050a87a3b1b382" offset="0" /> | |
2386 | </dataarea> | |
2383 | <feature name="slot" value="a78_sg9" /> | |
2384 | <dataarea name="rom" size="147456"> | |
2385 | <rom name="dkxm_demo_v12_pal.bin" size="147456" crc="9f6c0600" sha1="18409eace880dda3646792f9ec050a87a3b1b382" offset="0" /> | |
2386 | </dataarea> | |
2387 | 2387 | </part> |
2388 | 2388 | </software> |
2389 | 2389 | |
r249189 | r249190 | |
2394 | 2394 | <info name="programmer" value="TEP392" /> |
2395 | 2395 | <sharedfeat name="compatibility" value="NTSC"/> |
2396 | 2396 | <part name="cart" interface="a7800_cart"> |
2397 | <feature name="slot" value="a78_sg9" /> | |
2398 | <dataarea name="rom" size="147456"> | |
2399 | <rom name="dkxm_demo_v12_ntsc.bin" size="147456" crc="8b06bb4b" sha1="3129cbc91dc8f223f00db5c3273a4a330320be99" offset="0" /> | |
2400 | </dataarea> | |
2397 | <feature name="slot" value="a78_sg9" /> | |
2398 | <dataarea name="rom" size="147456"> | |
2399 | <rom name="dkxm_demo_v12_ntsc.bin" size="147456" crc="8b06bb4b" sha1="3129cbc91dc8f223f00db5c3273a4a330320be99" offset="0" /> | |
2400 | </dataarea> | |
2401 | 2401 | </part> |
2402 | 2402 | </software> |
2403 | 2403 | |
r249189 | r249190 | |
2411 | 2411 | <info name="programmer" value="TEP392" /> |
2412 | 2412 | <sharedfeat name="compatibility" value="PAL"/> |
2413 | 2413 | <part name="cart" interface="a7800_cart"> |
2414 | <feature name="slot" value="a78_sg9" /> | |
2415 | <dataarea name="rom" size="147456"> | |
2416 | <rom name="dkxm_final_demo_pal_hsc.bin" size="147456" crc="6510b674" sha1="65b723b470d287af51e9888813149c43fb11ac26" offset="0" /> | |
2417 | </dataarea> | |
2414 | <feature name="slot" value="a78_sg9" /> | |
2415 | <dataarea name="rom" size="147456"> | |
2416 | <rom name="dkxm_final_demo_pal_hsc.bin" size="147456" crc="6510b674" sha1="65b723b470d287af51e9888813149c43fb11ac26" offset="0" /> | |
2417 | </dataarea> | |
2418 | 2418 | </part> |
2419 | 2419 | </software> |
2420 | 2420 | |
r249189 | r249190 | |
2425 | 2425 | <info name="programmer" value="TEP392" /> |
2426 | 2426 | <sharedfeat name="compatibility" value="NTSC"/> |
2427 | 2427 | <part name="cart" interface="a7800_cart"> |
2428 | <feature name="slot" value="a78_sg9" /> | |
2429 | <dataarea name="rom" size="147456"> | |
2430 | <rom name="dkxm_final_demo_ntsc_hsc.bin" size="147456" crc="2c67fea7" sha1="7825c1946e3c7492fa9bbfae33029cd68c0d1135" offset="0" /> | |
2431 | </dataarea> | |
2428 | <feature name="slot" value="a78_sg9" /> | |
2429 | <dataarea name="rom" size="147456"> | |
2430 | <rom name="dkxm_final_demo_ntsc_hsc.bin" size="147456" crc="2c67fea7" sha1="7825c1946e3c7492fa9bbfae33029cd68c0d1135" offset="0" /> | |
2431 | </dataarea> | |
2432 | 2432 | </part> |
2433 | 2433 | </software> |
2434 | 2434 | |
r249189 | r249190 | |
2470 | 2470 | <publisher><homebrew></publisher> |
2471 | 2471 | <info name="programmer" value="TEP392" /> |
2472 | 2472 | <part name="cart" interface="a7800_cart"> |
2473 | <feature name="slot" value="a78_sg9" /> | |
2474 | <dataarea name="rom" size="147456"> | |
2475 | <rom name="dkxm_final_demo.bin" size="0x20000" crc="fd503bd4" sha1="454d754a0c4603323e476d9418f343a6a1a0d017" offset="0x4000" /> | |
2476 | <rom size="0x4000" offset="0x0000" loadflag="continue" /> | |
2477 | </dataarea> | |
2473 | <feature name="slot" value="a78_sg9" /> | |
2474 | <dataarea name="rom" size="147456"> | |
2475 | <rom name="dkxm_final_demo.bin" size="0x20000" crc="fd503bd4" sha1="454d754a0c4603323e476d9418f343a6a1a0d017" offset="0x4000" /> | |
2476 | <rom size="0x4000" offset="0x0000" loadflag="continue" /> | |
2477 | </dataarea> | |
2478 | 2478 | </part> |
2479 | 2479 | </software> |
2480 | 2480 |
r249189 | r249190 | |
---|---|---|
3324 | 3324 | <publisher>Visions</publisher> |
3325 | 3325 | <info name="usage" value="Load with *RUN" /> |
3326 | 3326 | <part name="cass1" interface="bbc_cass"> |
3327 | <dataarea name="cass" size="9339"> | |
3328 | <rom name="demolator_infinitelives_run(visions).uef" size="9339" crc="8c638151" sha1="85aced0345aec14e7750c5daa290f1cb642b1961" offset="0" /> | |
3327 | <dataarea name="cass" size="9319"> | |
3328 | <rom name="demolator_run(visions).uef" size="9319" crc="5dc43e5b" sha1="d7d88ca1b651926104c0833e257e967e0d47dfc2" offset="0" /> | |
3329 | 3329 | </dataarea> |
3330 | 3330 | </part> |
3331 | 3331 | <part name="cass2" interface="bbc_cass"> |
3332 | <dataarea name="cass" size="9319"> | |
3333 | <rom name="demolator_run(visions).uef" size="9319" crc="5dc43e5b" sha1="d7d88ca1b651926104c0833e257e967e0d47dfc2" offset="0" /> | |
3332 | <dataarea name="cass" size="9339"> | |
3333 | <rom name="demolator_infinitelives_run(visions).uef" size="9339" crc="8c638151" sha1="85aced0345aec14e7750c5daa290f1cb642b1961" offset="0" /> | |
3334 | 3334 | </dataarea> |
3335 | 3335 | </part> |
3336 | 3336 | </software> |
r249189 | r249190 | |
5710 | 5710 | </part> |
5711 | 5711 | </software> |
5712 | 5712 | |
5713 | <software name="hopperg" cloneof="hopper"> | |
5714 | <description>Hopper (Ger)</description> | |
5715 | <year>1983</year> | |
5716 | <publisher>Acornsoft</publisher> | |
5717 | <part name="cass" interface="bbc_cass"> | |
5718 | <dataarea name="cass" size="8112"> | |
5719 | <rom name="hopper-german(1983)(acornsoft)(g23).uef" size="8112" crc="3972b897" sha1="b5f7897dcad92b758d0473ac840f2b41e8049ef4" offset="0" /> | |
5720 | </dataarea> | |
5721 | </part> | |
5722 | </software> | |
5723 | ||
5724 | 5713 | <software name="hopper21" cloneof="hopper"> |
5725 | 5714 | <description>Hopper v2.1</description> |
5726 | 5715 | <year>1983</year> |
r249189 | r249190 | |
7430 | 7419 | </part> |
7431 | 7420 | </software> |
7432 | 7421 | |
7433 | <software name="meteorsg" cloneof="meteors"> | |
7434 | <description>Meteors (Ger)</description> | |
7435 | <year>1982</year> | |
7436 | <publisher>Acornsoft</publisher> | |
7437 | <part name="cass" interface="bbc_cass"> | |
7438 | <dataarea name="cass" size="6610"> | |
7439 | <rom name="meteors-german(1982)(acornsoft)(g13).uef" size="6610" crc="0bb65e55" sha1="238ba733b0094942dd477ca49754249284741c40" offset="0" /> | |
7440 | </dataarea> | |
7441 | </part> | |
7442 | </software> | |
7443 | ||
7444 | 7422 | <software name="meteorssc" cloneof="meteors"> |
7445 | 7423 | <description>Meteors (The Acornsoft Hits Vol.2)</description> |
7446 | 7424 | <year>1987</year> |
r249189 | r249190 | |
7745 | 7723 | </part> |
7746 | 7724 | </software> |
7747 | 7725 | |
7748 | <software name="monstersg" cloneof="monsters"> | |
7749 | <description>Monsters (Ger)</description> | |
7750 | <year>1982</year> | |
7751 | <publisher>Acornsoft</publisher> | |
7752 | <part name="cass" interface="bbc_cass"> | |
7753 | <dataarea name="cass" size="7890"> | |
7754 | <rom name="monsters-german(1982)(acornsoft)(g03).uef" size="7890" crc="37838358" sha1="c3c698a8174d0b67d6ee563bcecb9a42354ae3fc" offset="0" /> | |
7755 | </dataarea> | |
7756 | </part> | |
7757 | </software> | |
7758 | ||
7759 | 7726 | <software name="monsterspias" cloneof="monsters"> |
7760 | 7727 | <description>Monsters (Play It Again Sam 11)</description> |
7761 | 7728 | <year>1989</year> |
r249189 | r249190 | |
8889 | 8856 | </part> |
8890 | 8857 | </software> |
8891 | 8858 | |
8892 | <software name="planetoidg" cloneof="plantoid"> | |
8893 | <description>Planetoid (Ger)</description> | |
8894 | <year>1982</year> | |
8895 | <publisher>Acornsoft</publisher> | |
8896 | <part name="cass" interface="bbc_cass"> | |
8897 | <dataarea name="cass" size="8515"> | |
8898 | <rom name="planetoid-german(1982)(acornsoft)(g15).uef" size="8515" crc="bfaa94f8" sha1="fc8cb246c19cd717f7684074979ea5cb6d98e4fb" offset="0" /> | |
8899 | </dataarea> | |
8900 | </part> | |
8901 | </software> | |
8902 | ||
8903 | 8859 | <software name="plantoidsc" cloneof="plantoid"> |
8904 | 8860 | <description>Planetoid (The Acornsoft Hits Vol.1)</description> |
8905 | 8861 | <year>1987</year> |
r249189 | r249190 | |
9828 | 9784 | </part> |
9829 | 9785 | </software> |
9830 | 9786 | |
9831 | <software name="rocketrag" cloneof="rocketra"> | |
9832 | <description>Rocket Raid (Ger)</description> | |
9833 | <year>1982</year> | |
9834 | <publisher>Acornsoft</publisher> | |
9835 | <part name="cass" interface="bbc_cass"> | |
9836 | <dataarea name="cass" size="7747"> | |
9837 | <rom name="rocketraid-german(1982)(acornsoft)(g05).uef" size="7747" crc="3a6ccbd0" sha1="afd7318589bb419606b25b575c7488369acf2c9b" offset="0" /> | |
9838 | </dataarea> | |
9839 | </part> | |
9840 | </software> | |
9841 | ||
9842 | 9787 | <software name="rocketrasc" cloneof="rocketra"> |
9843 | 9788 | <description>Rocket Raid (The Acornsoft Hits Vol.1)</description> |
9844 | 9789 | <year>1987</year> |
r249189 | r249190 | |
10721 | 10666 | </part> |
10722 | 10667 | </software> |
10723 | 10668 | |
10724 | <software name="snapperg" cloneof="snapper"> | |
10725 | <description>Snapper (Ger)</description> | |
10726 | <year>1982</year> | |
10727 | <publisher>Acornsoft</publisher> | |
10728 | <part name="cass" interface="bbc_cass"> | |
10729 | <dataarea name="cass" size="7174"> | |
10730 | <rom name="snapper-german(1982)(acornsoft)(g04).uef" size="7174" crc="6ffbe578" sha1="0cc295dba1b771475ae8e71340b6ce4f885040e9" offset="0" /> | |
10731 | </dataarea> | |
10732 | </part> | |
10733 | </software> | |
10734 | ||
10735 | 10669 | <software name="snapperpias" cloneof="snapper"> |
10736 | 10670 | <description>Snapper (Play It Again Sam 7)</description> |
10737 | 10671 | <year>1988</year> |
r249189 | r249190 | |
11902 | 11836 | </part> |
11903 | 11837 | </software> |
11904 | 11838 | |
11905 | <software name="superinvg" cloneof="superinv"> | |
11906 | <description>Super Invaders (Ger)</description> | |
11907 | <year>1982</year> | |
11908 | <publisher>Acornsoft</publisher> | |
11909 | <part name="cass" interface="bbc_cass"> | |
11910 | <dataarea name="cass" size="7812"> | |
11911 | <rom name="superinvaders-german(1982)(acornsoft)(g16).uef" size="7812" crc="382b3412" sha1="4361fba1203b07fb05f62273ac02db403a3f38ce" offset="0" /> | |
11912 | </dataarea> | |
11913 | </part> | |
11914 | </software> | |
11915 | ||
11916 | 11839 | <software name="superinv"> |
11917 | 11840 | <description>Super Invaders</description> |
11918 | 11841 | <year>1982</year> |
r249189 | r249190 | |
13494 | 13417 | </part> |
13495 | 13418 | </software> |
13496 | 13419 | |
13497 | <software name="welcomeg" cloneof="welcome"> | |
13498 | <description>Welcome (Ger)</description> | |
13499 | <year>1981</year> | |
13500 | <publisher>BBC Soft</publisher> | |
13501 | <part name="cass" interface="bbc_cass"> | |
13502 | <dataarea name="cass" size="48009"> | |
13503 | <rom name="welcome-german(1981)(bbc).uef" size="48009" crc="a2d78451" sha1="b0ff9fd8a51412dee878e763fe0aa54deef2c962" offset="0" /> | |
13504 | </dataarea> | |
13505 | </part> | |
13506 | </software> | |
13507 | ||
13508 | 13420 | <software name="welcome"> |
13509 | 13421 | <description>Welcome</description> |
13510 | 13422 | <year>1981</year> |
r249189 | r249190 | |
14099 | 14011 | </part> |
14100 | 14012 | </software> |
14101 | 14013 | |
14102 | <software name="dskdiaryg" cloneof="dskdiary"> | |
14103 | <description>Desk Diary (Ger)</description> | |
14104 | <year>198?</year> | |
14105 | <publisher>Acornsoft</publisher> | |
14106 | <part name="cass" interface="bbc_cass"> | |
14107 | <dataarea name="cass" size="9739"> | |
14108 | <rom name="deskdiary-german(198x)(acornsoft)(b01).uef" size="9739" crc="7ef32892" sha1="ec3910be9c7b5c1729586ba88a88173d08dcf34b" offset="0" /> | |
14109 | </dataarea> | |
14110 | </part> | |
14111 | </software> | |
14112 | ||
14113 | 14014 | <software name="dskdiary"> |
14114 | 14015 | <description>Desk Diary</description> |
14115 | 14016 | <year>198?</year> |
r249189 | r249190 | |
14753 | 14654 | </part> |
14754 | 14655 | </software> |
14755 | 14656 | |
14756 | <software name="numberbag" cloneof="numberba"> | |
14757 | <description>Number Balance (Ger)</description> | |
14758 | <year>198?</year> | |
14759 | <publisher>Acornsoft/ESM</publisher> | |
14760 | <part name="cass" interface="bbc_cass"> | |
14761 | <dataarea name="cass" size="7727"> | |
14762 | <rom name="numberbalance-german(acornsoftesm).uef" size="7727" crc="2461e7a8" sha1="7b2ce801a3213fcac582b173d65aaa347555a2c4" offset="0" /> | |
14763 | </dataarea> | |
14764 | </part> | |
14765 | </software> | |
14766 | ||
14767 | 14657 | <software name="numberba"> |
14768 | 14658 | <description>Number Balance</description> |
14769 | 14659 | <year>198?</year> |
r249189 | r249190 | |
14852 | 14742 | </part> |
14853 | 14743 | </software> |
14854 | 14744 | |
14855 | <software name="sentseqg" cloneof="sentseq"> | |
14856 | <description>Sentence Sequencing (Ger)</description> | |
14857 | <year>198?</year> | |
14858 | <publisher>Acornsoft</publisher> | |
14859 | <part name="cass" interface="bbc_cass"> | |
14860 | <dataarea name="cass" size="10769"> | |
14861 | <rom name="sentencesequencing-german(198x)(acornsoft)(e07).uef" size="10769" crc="28955bf7" sha1="f6422764589cbe5d1acefca2d90f288b95e84280" offset="0" /> | |
14862 | </dataarea> | |
14863 | </part> | |
14864 | </software> | |
14865 | ||
14866 | 14745 | <software name="sentseq"> |
14867 | 14746 | <description>Sentence Sequencing</description> |
14868 | 14747 | <year>198?</year> |
r249189 | r249190 | |
14967 | 14846 | </part> |
14968 | 14847 | </software> |
14969 | 14848 | |
14970 | <software name="treeknowg" cloneof="treeknow"> | |
14971 | <description>Tree Of Knowledge (Ger)</description> | |
14972 | <year>198?</year> | |
14973 | <publisher>Acornsoft</publisher> | |
14974 | <part name="cass" interface="bbc_cass"> | |
14975 | <dataarea name="cass" size="11319"> | |
14976 | <rom name="treeofknowledge-german(198x)(acornsoft)(e04).uef" size="11319" crc="c1b66b33" sha1="53bd97ccc48c5b00a1e57728800e786b6a9d30d9" offset="0" /> | |
14977 | </dataarea> | |
14978 | </part> | |
14979 | </software> | |
14980 | ||
14981 | 14849 | <software name="treeknow"> |
14982 | 14850 | <description>Tree Of Knowledge</description> |
14983 | 14851 | <year>198?</year> |
r249189 | r249190 | |
15077 | 14945 | </part> |
15078 | 14946 | </software> |
15079 | 14947 | |
15080 | <software name="jars"> | |
15081 | <description>Jars (Ger)</description> | |
15082 | <year>198?</year> | |
15083 | <publisher>Acornsoft</publisher> | |
15084 | <part name="cass" interface="bbc_cass"> | |
15085 | <dataarea name="cass" size="8325"> | |
15086 | <rom name="jars-german(198x)(acornsoft)(e15).uef" size="8325" crc="943ba245" sha1="5a911796040eb708926d5c9e1aecb3d0e7ea546b" offset="0" /> | |
15087 | </dataarea> | |
15088 | </part> | |
15089 | </software> | |
15090 | ||
15091 | 14948 | <software name="spooky"> |
15092 | 14949 | <description>Spooky Manor</description> |
15093 | 14950 | <year>198?</year> |
r0 | r249190 | |
---|---|---|
1 | <?xml version="1.0"?> | |
2 | <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> | |
3 | ||
4 | <!-- BBC Micro Model B (German) Tapes --> | |
5 | ||
6 | <!-- I believe all the Cassette images here are original, so some require the manuals for additional copy protection --> | |
7 | ||
8 | <!-- Loading Instructions: | |
9 | ||
10 | If the system has a disk drive (which the BBC Model B does by default in MESS) you must type *TAPE, then use the relevant command to load the software, usually CHAIN"" or *RUN, though some earlier titles from Micro Power require *LOAD. | |
11 | ||
12 | To start/stop the tape you must use the MESS menus, so you'll have to turn full keyboard mode off with Scroll Lock, then navigate the menus, turning Scroll Lock back on when you're finished. | |
13 | --> | |
14 | ||
15 | <softwarelist name="bbcb_de_cass" description="BBC Micro Model B (German) cassettes"> | |
16 | ||
17 | <!-- Games --> | |
18 | ||
19 | <software name="hopperg"> | |
20 | <description>Hopper (Ger)</description> | |
21 | <year>1983</year> | |
22 | <publisher>Acornsoft</publisher> | |
23 | <part name="cass" interface="bbc_cass"> | |
24 | <dataarea name="cass" size="8112"> | |
25 | <rom name="hopper-german(1983)(acornsoft)(g23).uef" size="8112" crc="3972b897" sha1="b5f7897dcad92b758d0473ac840f2b41e8049ef4" offset="0" /> | |
26 | </dataarea> | |
27 | </part> | |
28 | </software> | |
29 | ||
30 | <software name="meteorsg"> | |
31 | <description>Meteors (Ger)</description> | |
32 | <year>1982</year> | |
33 | <publisher>Acornsoft</publisher> | |
34 | <part name="cass" interface="bbc_cass"> | |
35 | <dataarea name="cass" size="6610"> | |
36 | <rom name="meteors-german(1982)(acornsoft)(g13).uef" size="6610" crc="0bb65e55" sha1="238ba733b0094942dd477ca49754249284741c40" offset="0" /> | |
37 | </dataarea> | |
38 | </part> | |
39 | </software> | |
40 | ||
41 | <software name="monsterg"> | |
42 | <description>Monsters (Ger)</description> | |
43 | <year>1982</year> | |
44 | <publisher>Acornsoft</publisher> | |
45 | <part name="cass" interface="bbc_cass"> | |
46 | <dataarea name="cass" size="7890"> | |
47 | <rom name="monsters-german(1982)(acornsoft)(g03).uef" size="7890" crc="37838358" sha1="c3c698a8174d0b67d6ee563bcecb9a42354ae3fc" offset="0" /> | |
48 | </dataarea> | |
49 | </part> | |
50 | </software> | |
51 | ||
52 | <software name="planetog"> | |
53 | <description>Planetoid (Ger)</description> | |
54 | <year>1982</year> | |
55 | <publisher>Acornsoft</publisher> | |
56 | <part name="cass" interface="bbc_cass"> | |
57 | <dataarea name="cass" size="8515"> | |
58 | <rom name="planetoid-german(1982)(acornsoft)(g15).uef" size="8515" crc="bfaa94f8" sha1="fc8cb246c19cd717f7684074979ea5cb6d98e4fb" offset="0" /> | |
59 | </dataarea> | |
60 | </part> | |
61 | </software> | |
62 | ||
63 | <software name="rocketrg"> | |
64 | <description>Rocket Raid (Ger)</description> | |
65 | <year>1982</year> | |
66 | <publisher>Acornsoft</publisher> | |
67 | <part name="cass" interface="bbc_cass"> | |
68 | <dataarea name="cass" size="7747"> | |
69 | <rom name="rocketraid-german(1982)(acornsoft)(g05).uef" size="7747" crc="3a6ccbd0" sha1="afd7318589bb419606b25b575c7488369acf2c9b" offset="0" /> | |
70 | </dataarea> | |
71 | </part> | |
72 | </software> | |
73 | ||
74 | <software name="snapperg"> | |
75 | <description>Snapper (Ger)</description> | |
76 | <year>1982</year> | |
77 | <publisher>Acornsoft</publisher> | |
78 | <part name="cass" interface="bbc_cass"> | |
79 | <dataarea name="cass" size="7174"> | |
80 | <rom name="snapper-german(1982)(acornsoft)(g04).uef" size="7174" crc="6ffbe578" sha1="0cc295dba1b771475ae8e71340b6ce4f885040e9" offset="0" /> | |
81 | </dataarea> | |
82 | </part> | |
83 | </software> | |
84 | ||
85 | <software name="supering"> | |
86 | <description>Super Invaders (Ger)</description> | |
87 | <year>1982</year> | |
88 | <publisher>Acornsoft</publisher> | |
89 | <part name="cass" interface="bbc_cass"> | |
90 | <dataarea name="cass" size="7812"> | |
91 | <rom name="superinvaders-german(1982)(acornsoft)(g16).uef" size="7812" crc="382b3412" sha1="4361fba1203b07fb05f62273ac02db403a3f38ce" offset="0" /> | |
92 | </dataarea> | |
93 | </part> | |
94 | </software> | |
95 | ||
96 | <software name="welcomeg"> | |
97 | <description>Welcome (Ger)</description> | |
98 | <year>1981</year> | |
99 | <publisher>BBC Soft</publisher> | |
100 | <part name="cass" interface="bbc_cass"> | |
101 | <dataarea name="cass" size="48009"> | |
102 | <rom name="welcome-german(1981)(bbc).uef" size="48009" crc="a2d78451" sha1="b0ff9fd8a51412dee878e763fe0aa54deef2c962" offset="0" /> | |
103 | </dataarea> | |
104 | </part> | |
105 | </software> | |
106 | ||
107 | <!-- Business --> | |
108 | ||
109 | <software name="dskdiarg"> | |
110 | <description>Desk Diary (Ger)</description> | |
111 | <year>198?</year> | |
112 | <publisher>Acornsoft</publisher> | |
113 | <part name="cass" interface="bbc_cass"> | |
114 | <dataarea name="cass" size="9739"> | |
115 | <rom name="deskdiary-german(198x)(acornsoft)(b01).uef" size="9739" crc="7ef32892" sha1="ec3910be9c7b5c1729586ba88a88173d08dcf34b" offset="0" /> | |
116 | </dataarea> | |
117 | </part> | |
118 | </software> | |
119 | ||
120 | <!-- Educational --> | |
121 | ||
122 | <software name="numberbg"> | |
123 | <description>Number Balance (Ger)</description> | |
124 | <year>198?</year> | |
125 | <publisher>Acornsoft/ESM</publisher> | |
126 | <part name="cass" interface="bbc_cass"> | |
127 | <dataarea name="cass" size="7727"> | |
128 | <rom name="numberbalance-german(acornsoftesm).uef" size="7727" crc="2461e7a8" sha1="7b2ce801a3213fcac582b173d65aaa347555a2c4" offset="0" /> | |
129 | </dataarea> | |
130 | </part> | |
131 | </software> | |
132 | ||
133 | <software name="sentseqg"> | |
134 | <description>Sentence Sequencing (Ger)</description> | |
135 | <year>198?</year> | |
136 | <publisher>Acornsoft</publisher> | |
137 | <part name="cass" interface="bbc_cass"> | |
138 | <dataarea name="cass" size="10769"> | |
139 | <rom name="sentencesequencing-german(198x)(acornsoft)(e07).uef" size="10769" crc="28955bf7" sha1="f6422764589cbe5d1acefca2d90f288b95e84280" offset="0" /> | |
140 | </dataarea> | |
141 | </part> | |
142 | </software> | |
143 | ||
144 | <software name="treeknog"> | |
145 | <description>Tree Of Knowledge (Ger)</description> | |
146 | <year>198?</year> | |
147 | <publisher>Acornsoft</publisher> | |
148 | <part name="cass" interface="bbc_cass"> | |
149 | <dataarea name="cass" size="11319"> | |
150 | <rom name="treeofknowledge-german(198x)(acornsoft)(e04).uef" size="11319" crc="c1b66b33" sha1="53bd97ccc48c5b00a1e57728800e786b6a9d30d9" offset="0" /> | |
151 | </dataarea> | |
152 | </part> | |
153 | </software> | |
154 | ||
155 | <software name="jars"> | |
156 | <description>Jars (Ger)</description> | |
157 | <year>198?</year> | |
158 | <publisher>Acornsoft</publisher> | |
159 | <part name="cass" interface="bbc_cass"> | |
160 | <dataarea name="cass" size="8325"> | |
161 | <rom name="jars-german(198x)(acornsoft)(e15).uef" size="8325" crc="943ba245" sha1="5a911796040eb708926d5c9e1aecb3d0e7ea546b" offset="0" /> | |
162 | </dataarea> | |
163 | </part> | |
164 | </software> | |
165 | ||
166 | </softwarelist> |
r0 | r249190 | |
---|---|---|
1 | <?xml version="1.0" encoding="UTF-8"?> | |
2 | <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> | |
3 | ||
4 | <!-- BBC Micro Model B (US) Disks --> | |
5 | ||
6 | <!-- Loading Instructions: | |
7 | ||
8 | Hold down the SHIFT key and press and release the BREAK key. | |
9 | --> | |
10 | ||
11 | <softwarelist name="bbcb_us_flop" description="BBC Micro Model B (US) disks"> | |
12 | ||
13 | <software name="intrutil"> | |
14 | <description>Introductory and Utilities Disk</description> | |
15 | <year>1983</year> | |
16 | <publisher>Acorn</publisher> | |
17 | <info name="protection" value="none" /> | |
18 | <part name="flop1" interface="floppy_5_25"> | |
19 | <dataarea name="flop" size="204800"> | |
20 | <rom name="introductory_utils(1983)(acorn).ssd" size="204800" crc="60612fc2" sha1="037f7c3499547d5ac5f88e812d7765ccaf27d6e1" offset="0" /> | |
21 | </dataarea> | |
22 | </part> | |
23 | </software> | |
24 | ||
25 | </softwarelist> |
r0 | r249190 | |
---|---|---|
1 | <?xml version="1.0" encoding="UTF-8"?> | |
2 | <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> | |
3 | ||
4 | <!-- BBC Master Compact Disks --> | |
5 | ||
6 | <!-- Loading Instructions: | |
7 | ||
8 | Hold down the SHIFT key and press and release the BREAK key. | |
9 | --> | |
10 | ||
11 | <softwarelist name="bbcmc_flop" description="BBC Master Compact disks"> | |
12 | ||
13 | <software name="welcome"> | |
14 | <description>BBC Master Compact Welcome Disc</description> | |
15 | <year>1986</year> | |
16 | <publisher>Acorn</publisher> | |
17 | <info name="protection" value="none" /> | |
18 | <part name="flop1" interface="floppy_3_5"> | |
19 | <dataarea name="flop" size="655360"> | |
20 | <rom name="welcome_compact.adl" size="655360" crc="9d747205" sha1="04cfd6d1e08e8f695befb2948e27d63fd7842b8f" offset="0" /> | |
21 | </dataarea> | |
22 | </part> | |
23 | </software> | |
24 | ||
25 | </softwarelist> |
r249189 | r249190 | |
---|---|---|
6 | 6 | |
7 | 7 | <softwarelist name="gameking" description="TimeTop GameKing cartridges"> |
8 | 8 | |
9 | <software name="4in1" supported="no"> | |
10 | <description>4 in 1 No. 10</description> | |
9 | <software name="4in1_01" supported="no"> | |
10 | <description>4in1 - AirWar, DeadShot, Challenge, Speedboat</description> | |
11 | 11 | <year>200?</year> |
12 | 12 | <publisher>TimeTop</publisher> |
13 | 13 | <part name="cart" interface="gameking_cart"> |
14 | 14 | <dataarea name="rom" size="524288"> |
15 | <rom name="gk_airwar_deadshot_challenge_speedboat.gk" size="524288" crc="b366be5d" sha1="66e565640eb86a50c5a0fc8b8c62deea3e99b3a7" offset="0x00000" /> | |
16 | </dataarea> | |
17 | </part> | |
18 | </software> | |
19 | ||
20 | <software name="4in1_02" supported="no"> | |
21 | <description>4in1 - Chaser, Blaster, StarWars, Nagual</description> | |
22 | <year>200?</year> | |
23 | <publisher>TimeTop</publisher> | |
24 | <part name="cart" interface="gameking_cart"> | |
25 | <dataarea name="rom" size="524288"> | |
26 | <rom name="gk_4in1_chaser_blaster_starwars_nagual.gk" size="524288" crc="8a49e7ca" sha1="5c40c158564932184b14a5f481f7053aa00811e0" offset="0x00000" /> | |
27 | </dataarea> | |
28 | </part> | |
29 | </software> | |
30 | ||
31 | <software name="4in1_03" supported="no"> | |
32 | <description>4in1 - DraculaZone, Hero, PocketTank, StarChazi</description> | |
33 | <year>200?</year> | |
34 | <publisher>TimeTop</publisher> | |
35 | <part name="cart" interface="gameking_cart"> | |
36 | <dataarea name="rom" size="524288"> | |
37 | <rom name="gk_4in1_draculazone_hero_pockettank_starchazi.gk" size="524288" crc="5e0dac04" sha1="87fc1a06f00a313e8a49e06170d741e57df991f4" offset="0x00000" /> | |
38 | </dataarea> | |
39 | </part> | |
40 | </software> | |
41 | ||
42 | <software name="4in1_04" supported="no"> | |
43 | <description>4in1 - Farer, Sortie, PhantomFighter, Seabedwar</description> | |
44 | <year>200?</year> | |
45 | <publisher>TimeTop</publisher> | |
46 | <part name="cart" interface="gameking_cart"> | |
47 | <dataarea name="rom" size="524288"> | |
48 | <rom name="gk_4in1_farer_sortie_phantomfighter_seabedwar.gk" size="524288" crc="bcbfb7d3" sha1="2f37e0e9cca23bb9e06f339030eaa6e357ed17eb" offset="0x00000" /> | |
49 | </dataarea> | |
50 | </part> | |
51 | </software> | |
52 | ||
53 | <software name="4in1_05" supported="no"> | |
54 | <description>4in1 - SeaGuard, Whirlybird, Spectask, Captain</description> | |
55 | <year>200?</year> | |
56 | <publisher>TimeTop</publisher> | |
57 | <part name="cart" interface="gameking_cart"> | |
58 | <dataarea name="rom" size="524288"> | |
59 | <rom name="gk_4in1_seaguard_whirlybird_spectask_captain.gk" size="524288" crc="465ad7c1" sha1="fde6bf47e1b88c8a73755ef98eee74b964e7fed5" offset="0x00000" /> | |
60 | </dataarea> | |
61 | </part> | |
62 | </software> | |
63 | ||
64 | <software name="4in1_06" supported="no"> | |
65 | <description>4in1 - ThreeBattles, Lightswort, MetalDefor IV</description> | |
66 | <year>200?</year> | |
67 | <publisher>TimeTop</publisher> | |
68 | <part name="cart" interface="gameking_cart"> | |
69 | <dataarea name="rom" size="524288"> | |
70 | <rom name="gk_4in1_threebattles_lightswort_metaldefor iv.gk" size="524288" crc="eb9399df" sha1="2f698fc716b3006f968d2b89a28424ca75ad2741" offset="0x00000" /> | |
71 | </dataarea> | |
72 | </part> | |
73 | </software> | |
74 | ||
75 | <software name="4in1_07" supported="no"> | |
76 | <description>4in1 - TrojanLegend, HappyBall, Supermotor, Lanneret</description> | |
77 | <year>200?</year> | |
78 | <publisher>TimeTop</publisher> | |
79 | <part name="cart" interface="gameking_cart"> | |
80 | <dataarea name="rom" size="524288"> | |
81 | <rom name="gk_4in1_trojanlegend_happyball_supermotor_lanneret.gk" size="524288" crc="cbd8df6a" sha1="63fbda84375a748721c41492610ae5e2f8910f08" offset="0x00000" /> | |
82 | </dataarea> | |
83 | </part> | |
84 | </software> | |
85 | ||
86 | <software name="4in1no08" supported="no"> | |
87 | <description>4 in 1 Vol. 8</description> | |
88 | <year>200?</year> | |
89 | <publisher>TimeTop</publisher> | |
90 | <part name="cart" interface="gameking_cart"> | |
91 | <dataarea name="rom" size="524288"> | |
92 | <rom name="4in1_vol8.bin" size="524288" crc="6741847e" sha1="b561ca1b52e3492f86e7558722c8c8956e845bc5" offset="0x00000" /> | |
93 | </dataarea> | |
94 | </part> | |
95 | </software> | |
96 | ||
97 | <software name="4in1no09" supported="no"> | |
98 | <description>4 in 1 Vol. 9</description> | |
99 | <year>200?</year> | |
100 | <publisher>TimeTop</publisher> | |
101 | <part name="cart" interface="gameking_cart"> | |
102 | <dataarea name="rom" size="524288"> | |
103 | <rom name="gk_4in1_vol9.gk" size="524288" crc="02fbc6ef" sha1="84bea568b4c9a50184f15709066e73f3ce09e184" offset="0x00000" /> | |
104 | </dataarea> | |
105 | </part> | |
106 | </software> | |
107 | ||
108 | <software name="4in1no10" supported="no"> | |
109 | <description>4 in 1 Vol. 10</description> | |
110 | <year>200?</year> | |
111 | <publisher>TimeTop</publisher> | |
112 | <part name="cart" interface="gameking_cart"> | |
113 | <dataarea name="rom" size="524288"> | |
15 | 114 | <rom name="4in1no10.bin" size="524288" crc="b25b1080" sha1="24bc65a9e49ba6f0ffc19b3b858d6c576a3196f7" offset="0x00000" /> |
16 | 115 | </dataarea> |
17 | 116 | </part> |
18 | 117 | </software> |
19 | 118 | |
20 | <software name="4in1a" supported="no"> | |
21 | <description>4 in 1 Vol. 8</description> | |
22 | <year>200?</year> | |
23 | <publisher>TimeTop</publisher> | |
24 | <part name="cart" interface="gameking_cart"> | |
25 | <dataarea name="rom" size="524288"> | |
26 | <rom name="4in1_vol8.bin" size="524288" crc="6741847e" sha1="b561ca1b52e3492f86e7558722c8c8956e845bc5" offset="0x00000" /> | |
27 | </dataarea> | |
28 | </part> | |
119 | <software name="4in1no11" supported="no"> | |
120 | <description>4 in 1 Vol. 11</description> | |
121 | <year>200?</year> | |
122 | <publisher>TimeTop</publisher> | |
123 | <part name="cart" interface="gameking_cart"> | |
124 | <dataarea name="rom" size="524288"> | |
125 | <rom name="gk_4in1_vol11.gk" size="524288" crc="1bd50766" sha1="628b3b9b4f37f881f0aa19f30debb1bca06e0879" offset="0x00000" /> | |
126 | </dataarea> | |
127 | </part> | |
29 | 128 | </software> |
30 | 129 | |
130 | <software name="4in1no12" supported="no"> | |
131 | <description>4 in 1 Vol. 12</description> | |
132 | <year>200?</year> | |
133 | <publisher>TimeTop</publisher> | |
134 | <part name="cart" interface="gameking_cart"> | |
135 | <dataarea name="rom" size="524288"> | |
136 | <rom name="gk_4in1_vol12.gk" size="524288" crc="504eea37" sha1="06a45e4aaf8b225d9863a112c910a864c4edf116" offset="0x00000" /> | |
137 | </dataarea> | |
138 | </part> | |
139 | ||
140 | </software> | |
141 | <software name="4in1no13" supported="no"> | |
142 | <description>4 in 1 Vol. 13</description> | |
143 | <year>200?</year> | |
144 | <publisher>TimeTop</publisher> | |
145 | <part name="cart" interface="gameking_cart"> | |
146 | <dataarea name="rom" size="524288"> | |
147 | <rom name="gk_4in1_vol13.gk" size="524288" crc="1dfb2741" sha1="334a54ebc22f70bacfc87b2f5228f0649970d599" offset="0x00000" /> | |
148 | </dataarea> | |
149 | </part> | |
150 | </software> | |
151 | ||
31 | 152 | <software name="2004" supported="no"> |
32 | 153 | <description>2004</description> |
33 | 154 | <year>200?</year> |
r249189 | r249190 | |
---|---|---|
6 | 6 | <softwarelist name="gameking3" description="TimeTop GameKing 3 cartridges"> |
7 | 7 | |
8 | 8 | <software name="urgent" supported="no"> |
9 | <description>Urgent Action</description> | |
10 | <year>200?</year> | |
11 | <publisher>TimeTop</publisher> | |
12 | <part name="cart" interface="gameking_cart"> | |
13 | <dataarea name="rom" size="524288"> | |
14 | <rom name="urgenaction.gk3" size="524288" crc="dcf935f8" sha1="9c1375c622caab9e328ee66434087a18a16ea036" offset="0x00000" /> | |
15 | </dataarea> | |
16 | </part> | |
9 | <description>Urgent Action</description> | |
10 | <year>200?</year> | |
11 | <publisher>TimeTop</publisher> | |
12 | <part name="cart" interface="gameking_cart"> | |
13 | <dataarea name="rom" size="524288"> | |
14 | <rom name="urgenaction.gk3" size="524288" crc="dcf935f8" sha1="9c1375c622caab9e328ee66434087a18a16ea036" offset="0x00000" /> | |
15 | </dataarea> | |
16 | </part> | |
17 | 17 | </software> |
18 | 18 | |
19 | 19 | <software name="adventr" supported="no"> |
20 | <description>Adventure</description> | |
21 | <year>200?</year> | |
22 | <publisher>TimeTop</publisher> | |
23 | <part name="cart" interface="gameking_cart"> | |
24 | <dataarea name="rom" size="524288"> | |
25 | <rom name="adventure.gk3" size="524288" crc="70082274" sha1="83b164719b2c2d5c133ca05c9fac0102b0d88e4c" offset="0x00000" /> | |
26 | </dataarea> | |
27 | </part> | |
20 | <description>Adventure</description> | |
21 | <year>200?</year> | |
22 | <publisher>TimeTop</publisher> | |
23 | <part name="cart" interface="gameking_cart"> | |
24 | <dataarea name="rom" size="524288"> | |
25 | <rom name="adventure.gk3" size="524288" crc="70082274" sha1="83b164719b2c2d5c133ca05c9fac0102b0d88e4c" offset="0x00000" /> | |
26 | </dataarea> | |
27 | </part> | |
28 | 28 | </software> |
29 | 29 | |
30 | <software name="flycab" supported="no"> | |
31 | <description>Fly Cab</description> | |
32 | <year>200?</year> | |
33 | <publisher>TimeTop</publisher> | |
34 | <part name="cart" interface="gameking_cart"> | |
35 | <dataarea name="rom" size="524288"> | |
36 | <rom name="fly_cab.gk3" size="524288" crc="da314211" sha1="ea901fe7a7aea203afe6fe0d33e374163cec0262" offset="0x00000" /> | |
37 | </dataarea> | |
38 | </part> | |
39 | </software> | |
40 | ||
30 | 41 | </softwarelist> |
r249189 | r249190 | |
---|---|---|
23711 | 23711 | </part> |
23712 | 23712 | </software> |
23713 | 23713 | |
23714 | <!-- Li Cheng games --> | |
23714 | <software name="magiclmp" supported="no"> | |
23715 | <description>Magic Lamp (Tw)</description> | |
23716 | <year>2000</year> | |
23717 | <publisher>GOWIN</publisher> | |
23718 | <info name="serial" value="GS-??"/> | |
23719 | <part name="cart" interface="gameboy_cart"> | |
23720 | <feature name="slot" value="rom_mbc5" /> | |
23721 | <dataarea name="rom" size="1048576"> | |
23722 | <rom name="magic lamp.bin" size="524288" crc="15256d76" sha1="6286135ce3ad3fc5c6daaecff3d735fc8fb3ff2f" offset="000000" /> | |
23723 | </dataarea> | |
23724 | </part> | |
23725 | </software> | |
23715 | 23726 | |
23727 | <software name="binmnst2" supported="no"> | |
23728 | <description>Binary Monster 2 - Adventure of Hell(TW)</description> | |
23729 | <year>2000</year> | |
23730 | <publisher>GOWIN</publisher> | |
23731 | <info name="serial" value="GS-??"/> | |
23732 | <part name="cart" interface="gameboy_cart"> | |
23733 | <feature name="slot" value="rom_mbc5" /> | |
23734 | <dataarea name="rom" size="1048576"> | |
23735 | <rom name="binary monster 2.bin" size="262144" crc="9bb8d5a8" sha1="9f2268a1ea438b8b739b22f7b3d2470b99716dfd" offset="000000" /> | |
23736 | </dataarea> | |
23737 | </part> | |
23738 | </software> | |
23739 | ||
23740 | <!-- Li Cheng games --> | |
23741 | ||
23716 | 23742 | <!-- |
23717 | 23743 | |
23718 | 23744 | * CBA010 Shui Hu Shen Shou 水浒神兽 |
r249189 | r249190 | |
---|---|---|
124 | 124 | </part> |
125 | 125 | </software> |
126 | 126 | |
127 | <software name="aircars94" cloneof="aircars" supported="no"> | |
128 | <description>Air Cars (1994 version)</description> | |
129 | <year>1994</year> | |
130 | <publisher>Midnite Entertainment Group</publisher> | |
131 | <part name="cart" interface="jaguar_cart"> | |
132 | <dataarea name="rom" size="0x200000" width="32" endianness="big" > | |
133 | <rom name="aircars94.u1" size="0x100000" crc="bbd4c4bd" sha1="4f9c914b43208eb100fb25b8be87dec370fd205d" offset="0x000000" loadflag="load32_word"/> | |
134 | <rom name="aircars94.u2" size="0x100000" crc="d9958c79" sha1="d7aa26e084b68023076ac025eff819f0e568e2a0" offset="0x000002" loadflag="load32_word"/> | |
135 | </dataarea> | |
136 | </part> | |
137 | </software> | |
138 | ||
139 | ||
127 | 140 | <software name="avsp" supported="no"> |
128 | 141 | <description>Alien vs Predator</description> |
129 | 142 | <year>1994</year> |
r249189 | r249190 | |
---|---|---|
216 | 216 | <year>1988</year> |
217 | 217 | <publisher>Eurosoft</publisher> |
218 | 218 | <part name="flop1" interface="floppy_3_5"> |
219 | <feature name="part_id" value="Disk 1"/> | |
219 | <feature name="part_id" value="Disk 1"/> | |
220 | 220 | <dataarea name="flop" size="737280"> |
221 | 221 | <rom name="astro blaster (1988)(eurosoft)(nl).dsk" size="737280" crc="b0fa7831" sha1="789ca057a3a9f2c4dd9db874fc2de33e936c3ad3" offset="0" /> |
222 | 222 | </dataarea> |
r249189 | r249190 | |
723 | 723 | <year>1988</year> |
724 | 724 | <publisher>Konami</publisher> |
725 | 725 | <part name="flop1" interface="floppy_3_5"> |
726 | <feature name="part_id" value="Disk 1"/> | |
726 | <feature name="part_id" value="Disk 1"/> | |
727 | 727 | <dataarea name="flop" size="737280"> |
728 | 728 | <rom name="konami_game_collection_vol.1_(1988)_(konami)_(j)_(disk_1_of_2).dsk" size="737280" crc="bfab140f" sha1="37cfed5a5886637ca1dd866ea4e2e1ac23ab4841" offset="0" /> |
729 | 729 | </dataarea> |
730 | 730 | </part> |
731 | 731 | <part name="flop2" interface="floppy_3_5"> |
732 | <feature name="part_id" value="Disk 2"/> | |
732 | <feature name="part_id" value="Disk 2"/> | |
733 | 733 | <dataarea name="flop" size="737280"> |
734 | 734 | <rom name="konami_game_collection_vol.1_(1988)_(konami)_(j)_(disk_2_of_2).dsk" size="737280" crc="5f947098" sha1="d7ff2ec76ab2d198fdfe9bcbd9743c1e78939605" offset="0" /> |
735 | 735 | </dataarea> |
r249189 | r249190 | |
5232 | 5232 | <year>19??</year> |
5233 | 5233 | <publisher><cart2disk hack></publisher> |
5234 | 5234 | <part name="flop1" interface="floppy_3_5"> |
5235 | <feature name="part_id" value="Disk 1"/> | |
5235 | <feature name="part_id" value="Disk 1"/> | |
5236 | 5236 | <dataarea name="flop" size="737280"> |
5237 | 5237 | <rom name="black onyx, the (1985)(ascii)(jp)(jp).dsk" size="737280" crc="3438f8b6" sha1="e1758f98d1a89e36bee6654bd8c1774a123ef391" offset="0" /> |
5238 | 5238 | </dataarea> |
5239 | 5239 | </part> |
5240 | 5240 | <part name="flop2" interface="floppy_3_5"> |
5241 | <feature name="part_id" value="Disk 1, Alt"/> | |
5241 | <feature name="part_id" value="Disk 1, Alt"/> | |
5242 | 5242 | <dataarea name="flop" size="737280"> |
5243 | 5243 | <rom name="black onyx, the (1985)(ascii)(jp)[a].dsk" size="737280" crc="ac1495b3" sha1="5508fc5c758567f5ccf427ab7327137f2faec4ad" offset="0" /> |
5244 | 5244 | </dataarea> |
r249189 | r249190 | |
---|---|---|
59 | 59 | <info name="usage" value="Load with RUN"CAS:""/> |
60 | 60 | |
61 | 61 | <part name="cass1" interface="msx_cass"> |
62 | <feature name="part_id" value="Side A"/> | |
62 | <feature name="part_id" value="Side A"/> | |
63 | 63 | <dataarea name="cass" size="52193"> |
64 | 64 | <rom name="red lights of amsterdam (1986)(eaglesoft)(nl)(side a)[run'cas-'].cas" size="52193" crc="fced9743" sha1="eeb226eab09670fd11f3d797ce667a11133cfd7c" offset="0" /> |
65 | 65 | </dataarea> |
66 | 66 | </part> |
67 | 67 | <part name="cass2" interface="msx_cass"> |
68 | <feature name="part_id" value="Side B"/> | |
68 | <feature name="part_id" value="Side B"/> | |
69 | 69 | <dataarea name="cass" size="120071"> |
70 | 70 | <rom name="red lights of amsterdam (1986)(eaglesoft)(nl)(side b)[run'cas-'].cas" size="120071" crc="e3bd39b3" sha1="bb8b304ff3f8a527648fb765da2ff9284f5c9f4c" offset="0" /> |
71 | 71 | </dataarea> |
r249189 | r249190 | |
---|---|---|
5195 | 5195 | <year>1989</year> |
5196 | 5196 | <publisher>Xain Soft</publisher> |
5197 | 5197 | <part name="flop1" interface="floppy_3_5"> |
5198 | <feature name="part_id" value="Disk 1"/> | |
5198 | <feature name="part_id" value="Disk 1"/> | |
5199 | 5199 | <dataarea name="flop" size="737280"> |
5200 | 5200 | <rom name="gulf stream. galf streem (1989)(xain)(jp)(disk 1 of 4)[b].dsk" size="737280" crc="ebe9ca53" sha1="d917fb14fd8dc35033baaab3e33a332d792f542d" offset="0" status="baddump" /> |
5201 | 5201 | </dataarea> |
5202 | 5202 | </part> |
5203 | 5203 | <part name="flop2" interface="floppy_3_5"> |
5204 | <feature name="part_id" value="Disk 2"/> | |
5204 | <feature name="part_id" value="Disk 2"/> | |
5205 | 5205 | <dataarea name="flop" size="737280"> |
5206 | 5206 | <rom name="gulf stream. galf streem (1989)(xain)(jp)(disk 2 of 4)[b].dsk" size="737280" crc="ed78946f" sha1="f5a7dcf962e929d5aee2e29241dfbaa09bfaceb1" offset="0" status="baddump" /> |
5207 | 5207 | </dataarea> |
5208 | 5208 | </part> |
5209 | 5209 | <part name="flop3" interface="floppy_3_5"> |
5210 | <feature name="part_id" value="Disk 3"/> | |
5210 | <feature name="part_id" value="Disk 3"/> | |
5211 | 5211 | <dataarea name="flop" size="737280"> |
5212 | 5212 | <rom name="gulf stream. galf streem (1989)(xain)(jp)(disk 3 of 4)[b].dsk" size="737280" crc="7a243e71" sha1="6240760c3c9a332d8cdd8b4c373949cbfe2a919c" offset="0" status="baddump" /> |
5213 | 5213 | </dataarea> |
5214 | 5214 | </part> |
5215 | 5215 | <part name="flop4" interface="floppy_3_5"> |
5216 | <feature name="part_id" value="User Disk"/> | |
5216 | <feature name="part_id" value="User Disk"/> | |
5217 | 5217 | <dataarea name="flop" size="741376"> |
5218 | 5218 | <rom name="gulf stream. galf streem (1989)(xain)(jp)(disk 4 of 4)(user disk)[o].dsk" size="741376" crc="41122643" sha1="d1f488c4c626efc17ff14dcefb0718a73fd00c7e" offset="0" status="baddump" /> |
5219 | 5219 | </dataarea> |
r249189 | r249190 | |
---|---|---|
43 | 43 | <info name="alt_title" value="F1スピリット3Dスペシャル" /> |
44 | 44 | |
45 | 45 | <part name="flop1" interface="floppy_3_5"> |
46 | <feature name="part_id" value="Opening Disk"/> | |
46 | <feature name="part_id" value="Opening Disk"/> | |
47 | 47 | <dataarea name="flop" size="737280"> |
48 | 48 | <rom name="f-1 spirit 3d special (1988)(konami)(disk 1 of 3)(opening disk).dsk" size="737280" crc="69058209" sha1="155702d3d41b8f8b3d4659d42aa474ce12f4d3c9" offset="0" /> |
49 | 49 | </dataarea> |
50 | 50 | </part> |
51 | 51 | <part name="flop2" interface="floppy_3_5"> |
52 | <feature name="part_id" value="Game Disk A"/> | |
52 | <feature name="part_id" value="Game Disk A"/> | |
53 | 53 | <dataarea name="flop" size="737280"> |
54 | 54 | <rom name="f-1 spirit 3d special (1988)(konami)(disk 2 of 3)(game disk a).dsk" size="737280" crc="96811cc3" sha1="9877150e691d41b615683684cf0b78fc84649d37" offset="0" /> |
55 | 55 | </dataarea> |
56 | 56 | </part> |
57 | 57 | <part name="flop3" interface="floppy_3_5"> |
58 | <feature name="part_id" value="Game Disk B"/> | |
58 | <feature name="part_id" value="Game Disk B"/> | |
59 | 59 | <dataarea name="flop" size="737280"> |
60 | 60 | <rom name="f-1 spirit 3d special (1988)(konami)(disk 3 of 3)(game disk b).dsk" size="737280" crc="72039928" sha1="9ab94b449cb3b2c7ea7f87c2f03eebfacddc4019" offset="0" /> |
61 | 61 | </dataarea> |
r249189 | r249190 | |
69 | 69 | <info name="alt_title" value="F1スピリット3Dスペシャル" /> |
70 | 70 | |
71 | 71 | <part name="flop1" interface="floppy_3_5"> |
72 | <feature name="part_id" value="Opening Disk"/> | |
72 | <feature name="part_id" value="Opening Disk"/> | |
73 | 73 | <dataarea name="flop" size="737280"> |
74 | 74 | <rom name="f-1 spirit 3d special (1988)(konami)(disk 1 of 3)(opening disk).dsk" size="737280" crc="69058209" sha1="155702d3d41b8f8b3d4659d42aa474ce12f4d3c9" offset="0" /> |
75 | 75 | </dataarea> |
76 | 76 | </part> |
77 | 77 | <part name="flop2" interface="floppy_3_5"> |
78 | <feature name="part_id" value="Game Disk A"/> | |
78 | <feature name="part_id" value="Game Disk A"/> | |
79 | 79 | <dataarea name="flop" size="737280"> |
80 | 80 | <rom name="f-1 spirit 3d special (1988)(konami)(disk 2 of 3)(game disk a)[a].dsk" size="737280" crc="b05f67a2" sha1="3fd1c3dacd8fc3b4fc4902ac35296ce30991ac9b" offset="0" /> |
81 | 81 | </dataarea> |
82 | 82 | </part> |
83 | 83 | <part name="flop3" interface="floppy_3_5"> |
84 | <feature name="part_id" value="Game Disk B"/> | |
84 | <feature name="part_id" value="Game Disk B"/> | |
85 | 85 | <dataarea name="flop" size="737280"> |
86 | 86 | <rom name="f-1 spirit 3d special (1988)(konami)(disk 3 of 3)(game disk b)[a].dsk" size="737280" crc="94fc3831" sha1="a645c37119c59eab0d42f0a2cfbc47dc9678bc3c" offset="0" /> |
87 | 87 | </dataarea> |
r249189 | r249190 | |
95 | 95 | <info name="alt_title" value="F1スピリット3Dスペシャル" /> |
96 | 96 | |
97 | 97 | <part name="flop1" interface="floppy_3_5"> |
98 | <feature name="part_id" value="Opening Disk"/> | |
98 | <feature name="part_id" value="Opening Disk"/> | |
99 | 99 | <dataarea name="flop" size="737280"> |
100 | 100 | <rom name="f-1 spirit 3d special (1988)(konami)(disk 1 of 3)(opening disk).dsk" size="737280" crc="69058209" sha1="155702d3d41b8f8b3d4659d42aa474ce12f4d3c9" offset="0" /> |
101 | 101 | </dataarea> |
102 | 102 | </part> |
103 | 103 | <part name="flop2" interface="floppy_3_5"> |
104 | <feature name="part_id" value="Game Disk A"/> | |
104 | <feature name="part_id" value="Game Disk A"/> | |
105 | 105 | <dataarea name="flop" size="737280"> |
106 | 106 | <rom name="f-1 spirit 3d special (1988)(konami)(disk 2 of 3)(game disk a)[a2].dsk" size="737280" crc="eb1d19a3" sha1="f3b1dafa72bdc5affaf49bac3481ad5276a51375" offset="0" /> |
107 | 107 | </dataarea> |
108 | 108 | </part> |
109 | 109 | <part name="flop3" interface="floppy_3_5"> |
110 | <feature name="part_id" value="Game Disk B"/> | |
110 | <feature name="part_id" value="Game Disk B"/> | |
111 | 111 | <dataarea name="flop" size="737280"> |
112 | 112 | <rom name="f-1 spirit 3d special (1988)(konami)(disk 3 of 3)(game disk b).dsk" size="737280" crc="72039928" sha1="9ab94b449cb3b2c7ea7f87c2f03eebfacddc4019" offset="0" /> |
113 | 113 | </dataarea> |
r249189 | r249190 | |
147 | 147 | <info name="alt_title" value="JBハロルド3~D.C.コネクション" /> |
148 | 148 | |
149 | 149 | <part name="flop1" interface="floppy_3_5"> |
150 | <feature name="part_id" value="Disk 1"/> | |
150 | <feature name="part_id" value="Disk 1"/> | |
151 | 151 | <dataarea name="flop" size="737280"> |
152 | 152 | <rom name="j.b. harold 3 - d.c. connection (1989)(riverhill soft)(jp)(disk 1 of 3)[mouse].dsk" size="737280" crc="79543c5d" sha1="9b2919c1c7725458305f8120975d94c2f6524d19" offset="0" /> |
153 | 153 | </dataarea> |
154 | 154 | </part> |
155 | 155 | <part name="flop2" interface="floppy_3_5"> |
156 | <feature name="part_id" value="Disk 2"/> | |
156 | <feature name="part_id" value="Disk 2"/> | |
157 | 157 | <dataarea name="flop" size="737280"> |
158 | 158 | <rom name="j.b. harold 3 - d.c. connection (1989)(riverhill soft)(jp)(disk 2 of 3)[mouse].dsk" size="737280" crc="b3454990" sha1="6a6e5caaf72d3f9285bf5adc11e90ab7242f22c7" offset="0" /> |
159 | 159 | </dataarea> |
160 | 160 | </part> |
161 | 161 | <part name="flop3" interface="floppy_3_5"> |
162 | <feature name="part_id" value="Disk 3"/> | |
162 | <feature name="part_id" value="Disk 3"/> | |
163 | 163 | <dataarea name="flop" size="737280"> |
164 | 164 | <rom name="j.b. harold 3 - d.c. connection (1989)(riverhill soft)(jp)(disk 3 of 3)[mouse].dsk" size="737280" crc="1eb4c4d6" sha1="c2bf5d6aff3b5b676fccdd010eedd67a4a2523ff" offset="0" /> |
165 | 165 | </dataarea> |
r249189 | r249190 | |
173 | 173 | <info name="alt_title" value="JBハロルド3~D.C.コネクション" /> |
174 | 174 | |
175 | 175 | <part name="flop1" interface="floppy_3_5"> |
176 | <feature name="part_id" value="Disk 1"/> | |
176 | <feature name="part_id" value="Disk 1"/> | |
177 | 177 | <dataarea name="flop" size="737280"> |
178 | 178 | <rom name="j.b. harold 3 - d.c. connection (1989)(riverhill soft)(jp)(disk 1 of 3)[mouse].dsk" size="737280" crc="79543c5d" sha1="9b2919c1c7725458305f8120975d94c2f6524d19" offset="0" /> |
179 | 179 | </dataarea> |
180 | 180 | </part> |
181 | 181 | <part name="flop2" interface="floppy_3_5"> |
182 | <feature name="part_id" value="Disk 2"/> | |
182 | <feature name="part_id" value="Disk 2"/> | |
183 | 183 | <dataarea name="flop" size="737280"> |
184 | 184 | <rom name="j.b. harold 3 - d.c. connection (1989)(riverhill soft)(jp)(disk 2 of 3)[a][mouse].dsk" size="737280" crc="952b3db8" sha1="319333dc9f37342802199fe576da759fef66501d" offset="0" /> |
185 | 185 | </dataarea> |
186 | 186 | </part> |
187 | 187 | <part name="flop3" interface="floppy_3_5"> |
188 | <feature name="part_id" value="Disk 3"/> | |
188 | <feature name="part_id" value="Disk 3"/> | |
189 | 189 | <dataarea name="flop" size="737280"> |
190 | 190 | <rom name="j.b. harold 3 - d.c. connection (1989)(riverhill soft)(jp)(disk 3 of 3)[a][mouse].dsk" size="737280" crc="4915e99b" sha1="c4f00d065f61f893a075e26b879dde68d2a493d5" offset="0" /> |
191 | 191 | </dataarea> |
r249189 | r249190 | |
248 | 248 | <info name="alt_title" value="レイドック2ラストアタック" /> |
249 | 249 | |
250 | 250 | <part name="flop1" interface="floppy_3_5"> |
251 | <feature name="part_id" value="Disk 1"/> | |
251 | <feature name="part_id" value="Disk 1"/> | |
252 | 252 | <dataarea name="flop" size="737280"> |
253 | 253 | <rom name="laydock 2 - last attack (1988)(t&e soft)(jp)(disk 1 of 2).dsk" size="737280" crc="02c2949e" sha1="c4217c7f0371e9c6f830d8a76f731123548c9719" offset="0" /> |
254 | 254 | </dataarea> |
255 | 255 | </part> |
256 | 256 | <part name="flop2" interface="floppy_3_5"> |
257 | <feature name="part_id" value="Disk 2"/> | |
257 | <feature name="part_id" value="Disk 2"/> | |
258 | 258 | <dataarea name="flop" size="737280"> |
259 | 259 | <rom name="laydock 2 - last attack (1988)(t&e soft)(jp)(disk 2 of 2).dsk" size="737280" crc="cd89e9d3" sha1="63daaadce6ef18938788f3d1e4b08deff15fe5da" offset="0" /> |
260 | 260 | </dataarea> |
r249189 | r249190 | |
268 | 268 | <info name="alt_title" value="レイドック2ラストアタック" /> |
269 | 269 | |
270 | 270 | <part name="flop1" interface="floppy_3_5"> |
271 | <feature name="part_id" value="Disk 1"/> | |
271 | <feature name="part_id" value="Disk 1"/> | |
272 | 272 | <dataarea name="flop" size="737280"> |
273 | 273 | <rom name="laydock 2 - last attack (1988)(t&e soft)(jp)(disk 1 of 2)[a].dsk" size="737280" crc="1b68b1a9" sha1="db7cf4672f46017b69b02eb175b4a446a948c601" offset="0" /> |
274 | 274 | </dataarea> |
275 | 275 | </part> |
276 | 276 | <part name="flop2" interface="floppy_3_5"> |
277 | <feature name="part_id" value="Disk 2"/> | |
277 | <feature name="part_id" value="Disk 2"/> | |
278 | 278 | <dataarea name="flop" size="737280"> |
279 | 279 | <rom name="laydock 2 - last attack (1988)(t&e soft)(jp)(disk 2 of 2)[a].dsk" size="737280" crc="25777c4e" sha1="bbbc09ed823847b567caa1f321f578cbaf3a356f" offset="0" /> |
280 | 280 | </dataarea> |
r249189 | r249190 | |
288 | 288 | <info name="alt_title" value="ミッドガルツ" /> |
289 | 289 | |
290 | 290 | <part name="flop1" interface="floppy_3_5"> |
291 | <feature name="part_id" value="Disk 1"/> | |
291 | <feature name="part_id" value="Disk 1"/> | |
292 | 292 | <dataarea name="flop" size="737280"> |
293 | 293 | <rom name="middogarutsu. mid-garts dual side (1989)(wolfteam)(jp)(disk 1 of 6).dsk" size="737280" crc="90559e83" sha1="c78e099022ae77c47b95a45fca869324fecb4cb5" offset="0" /> |
294 | 294 | </dataarea> |
295 | 295 | </part> |
296 | 296 | <part name="flop2" interface="floppy_3_5"> |
297 | <feature name="part_id" value="Disk 2"/> | |
297 | <feature name="part_id" value="Disk 2"/> | |
298 | 298 | <dataarea name="flop" size="737280"> |
299 | 299 | <rom name="middogarutsu. mid-garts dual side (1989)(wolfteam)(jp)(disk 2 of 6).dsk" size="737280" crc="24183de3" sha1="53d6aa633a841878a3c67a3024f7c3ed3e1b4508" offset="0" /> |
300 | 300 | </dataarea> |
301 | 301 | </part> |
302 | 302 | <part name="flop3" interface="floppy_3_5"> |
303 | <feature name="part_id" value="Disk 3"/> | |
303 | <feature name="part_id" value="Disk 3"/> | |
304 | 304 | <dataarea name="flop" size="737280"> |
305 | 305 | <rom name="middogarutsu. mid-garts dual side (1989)(wolfteam)(jp)(disk 3 of 6).dsk" size="737280" crc="5611fda7" sha1="b30746e7fe256ddef2d2f1cad8a57aea86a4c478" offset="0" /> |
306 | 306 | </dataarea> |
307 | 307 | </part> |
308 | 308 | <part name="flop4" interface="floppy_3_5"> |
309 | <feature name="part_id" value="Disk 4"/> | |
309 | <feature name="part_id" value="Disk 4"/> | |
310 | 310 | <dataarea name="flop" size="737280"> |
311 | 311 | <rom name="middogarutsu. mid-garts dual side (1989)(wolfteam)(jp)(disk 4 of 6).dsk" size="737280" crc="7a28644e" sha1="33e94dac0f9cb73f4a15265bb0166e48183bdb35" offset="0" /> |
312 | 312 | </dataarea> |
313 | 313 | </part> |
314 | 314 | <part name="flop5" interface="floppy_3_5"> |
315 | <feature name="part_id" value="Disk 5"/> | |
315 | <feature name="part_id" value="Disk 5"/> | |
316 | 316 | <dataarea name="flop" size="737280"> |
317 | 317 | <rom name="middogarutsu. mid-garts dual side (1989)(wolfteam)(jp)(disk 5 of 6).dsk" size="737280" crc="64acdb49" sha1="47b9228b014d9e953dad956bb04aabedfa4db8a9" offset="0" /> |
318 | 318 | </dataarea> |
319 | 319 | </part> |
320 | 320 | <part name="flop6" interface="floppy_3_5"> |
321 | <feature name="part_id" value="Disk 6"/> | |
321 | <feature name="part_id" value="Disk 6"/> | |
322 | 322 | <dataarea name="flop" size="737280"> |
323 | 323 | <rom name="middogarutsu. mid-garts dual side (1989)(wolfteam)(jp)(disk 6 of 6).dsk" size="737280" crc="b920cf5b" sha1="2863537cbf930701a81540948f7e037359ba8ec3" offset="0" /> |
324 | 324 | </dataarea> |
r249189 | r249190 | |
331 | 331 | <publisher>Panasoft</publisher> |
332 | 332 | |
333 | 333 | <part name="flop1" interface="floppy_3_5"> |
334 | <feature name="part_id" value="Disk 1"/> | |
334 | <feature name="part_id" value="Disk 1"/> | |
335 | 335 | <dataarea name="flop" size="737280"> |
336 | 336 | <rom name="pana amusement collection 1 (1988)(panasoft)(jp).dsk" size="737280" crc="4dee2cff" sha1="e4bc138daedac129c39923cbe4a07bf79a880f8b" offset="0" /> |
337 | 337 | </dataarea> |
338 | 338 | </part> |
339 | 339 | <part name="flop2" interface="floppy_3_5"> |
340 | <feature name="part_id" value="Disk 2"/> | |
340 | <feature name="part_id" value="Disk 2"/> | |
341 | 341 | <dataarea name="flop" size="737280"> |
342 | 342 | <rom name="pana amusement collection 2 (1988)(panasoft)(jp).dsk" size="737280" crc="83f786e1" sha1="94c2cde50db86b91ad7d73cf6354a240c97ab3ea" offset="0" /> |
343 | 343 | </dataarea> |
r249189 | r249190 | |
350 | 350 | <publisher>Panasoft</publisher> |
351 | 351 | |
352 | 352 | <part name="flop1" interface="floppy_3_5"> |
353 | <feature name="part_id" value="Disk 1"/> | |
353 | <feature name="part_id" value="Disk 1"/> | |
354 | 354 | <dataarea name="flop" size="737280"> |
355 | 355 | <rom name="pana amusement collection 1 (1988)(panasoft)(jp)[a].dsk" size="737280" crc="340292e7" sha1="f86f628e6cef41b777796c4797b9153b5c722710" offset="0" /> |
356 | 356 | </dataarea> |
357 | 357 | </part> |
358 | 358 | <part name="flop2" interface="floppy_3_5"> |
359 | <feature name="part_id" value="Disk 2"/> | |
359 | <feature name="part_id" value="Disk 2"/> | |
360 | 360 | <dataarea name="flop" size="737280"> |
361 | 361 | <rom name="pana amusement collection 2 (1988)(panasoft)(jp)[a].dsk" size="737280" crc="3ecc097d" sha1="552da3bf49e85911acc8f7a5c744ca86105bd081" offset="0" /> |
362 | 362 | </dataarea> |
r249189 | r249190 | |
369 | 369 | <publisher>Panasoft</publisher> |
370 | 370 | |
371 | 371 | <part name="flop1" interface="floppy_3_5"> |
372 | <feature name="part_id" value="Disk 1"/> | |
372 | <feature name="part_id" value="Disk 1"/> | |
373 | 373 | <dataarea name="flop" size="737280"> |
374 | 374 | <rom name="pana amusement collection 1 (1988)(panasoft)(jp)[a2].dsk" size="737280" crc="441d35a8" sha1="fe949aa959949e478a22c93b67b2247a1cf3d7f9" offset="0" /> |
375 | 375 | </dataarea> |
376 | 376 | </part> |
377 | 377 | <part name="flop2" interface="floppy_3_5"> |
378 | <feature name="part_id" value="Disk 2"/> | |
378 | <feature name="part_id" value="Disk 2"/> | |
379 | 379 | <dataarea name="flop" size="737280"> |
380 | 380 | <rom name="pana amusement collection 2 (1988)(panasoft)(jp)[a2].dsk" size="737280" crc="4bf555e3" sha1="5eeb6b2b85a19664ef9b21c130fe9b995c4b4784" offset="0" /> |
381 | 381 | </dataarea> |
r249189 | r249190 | |
636 | 636 | <info name="developer" value="First Class Software" /> |
637 | 637 | |
638 | 638 | <part name="flop1" interface="floppy_3_5"> |
639 | <feature name="part_id" value="Opening Disk"/> | |
639 | <feature name="part_id" value="Opening Disk"/> | |
640 | 640 | <dataarea name="flop" size="737280"> |
641 | 641 | <rom name="megadoom (1992)(first class software)(nl)(disk 1 of 2)(opening disk).dsk" size="737280" crc="70a3494d" sha1="fa83f00dd2feb4a30d71616578ce553466d4d14e" offset="0" /> |
642 | 642 | </dataarea> |
643 | 643 | </part> |
644 | 644 | <part name="flop2" interface="floppy_3_5"> |
645 | <feature name="part_id" value="Game Disk"/> | |
645 | <feature name="part_id" value="Game Disk"/> | |
646 | 646 | <dataarea name="flop" size="737280"> |
647 | 647 | <rom name="megadoom (1992)(first class software)(nl)(disk 2 of 2)(game disk).dsk" size="737280" crc="1d7716de" sha1="6c48f8dedd8494c3aabeea3af997363ed861ac0f" offset="0" /> |
648 | 648 | </dataarea> |
r249189 | r249190 | |
656 | 656 | <info name="developer" value="First Class Software" /> |
657 | 657 | |
658 | 658 | <part name="flop1" interface="floppy_3_5"> |
659 | <feature name="part_id" value="Disk 1"/> | |
659 | <feature name="part_id" value="Disk 1"/> | |
660 | 660 | <dataarea name="flop" size="737280"> |
661 | 661 | <rom name="megadoom (demo) (1992)(first class software)(nl).dsk" size="737280" crc="72aa680e" sha1="196f0e8d263d69215cfc634e0518e7206136468d" offset="0" /> |
662 | 662 | </dataarea> |
663 | 663 | </part> |
664 | 664 | <part name="flop2" interface="floppy_3_5"> |
665 | <feature name="part_id" value="Disk 2?"/> | |
665 | <feature name="part_id" value="Disk 2?"/> | |
666 | 666 | <dataarea name="flop" size="737280"> |
667 | 667 | <rom name="megadoom (demo) (1992)(first class software)(nl)[2 disks].dsk" size="737280" crc="f8554ee4" sha1="70d62bfb6505ae91b1afde000d7b5fb771a8b38d" offset="0" /> |
668 | 668 | </dataarea> |
r249189 | r249190 | |
---|---|---|
73 | 73 | <info name="alt_title" value="フレイサーク外伝" /> |
74 | 74 | |
75 | 75 | <part name="flop1" interface="floppy_3_5"> |
76 | <feature name="part_id" value="Opening Disk 0"/> | |
76 | <feature name="part_id" value="Opening Disk 0"/> | |
77 | 77 | <dataarea name="flop" size="737280"> |
78 | 78 | <rom name="fray - in magical adventure (1990)(micro cabin)(jp)(disk 1 of 5)(opening disk 0).dsk" size="737280" crc="f26fdaeb" sha1="fd3c5f8793bfbec1851c89cfc32366618c6f482d" offset="0" /> |
79 | 79 | </dataarea> |
80 | 80 | </part> |
81 | 81 | <part name="flop2" interface="floppy_3_5"> |
82 | <feature name="part_id" value="Opening Disk 1"/> | |
82 | <feature name="part_id" value="Opening Disk 1"/> | |
83 | 83 | <dataarea name="flop" size="737280"> |
84 | 84 | <rom name="fray - in magical adventure (1990)(micro cabin)(jp)(disk 2 of 5)(opening disk 1).dsk" size="737280" crc="c33d5ac3" sha1="0b145459326c62254522bf77f063b069d086aa29" offset="0" /> |
85 | 85 | </dataarea> |
86 | 86 | </part> |
87 | 87 | <part name="flop3" interface="floppy_3_5"> |
88 | <feature name="part_id" value="Opening Disk 2"/> | |
88 | <feature name="part_id" value="Opening Disk 2"/> | |
89 | 89 | <dataarea name="flop" size="737280"> |
90 | 90 | <rom name="fray - in magical adventure (1990)(micro cabin)(jp)(disk 3 of 5)(opening disk 2).dsk" size="737280" crc="b770ee14" sha1="80701f4a86a151778c4fc81f56e9088d7b880651" offset="0" /> |
91 | 91 | </dataarea> |
92 | 92 | </part> |
93 | 93 | <part name="flop4" interface="floppy_3_5"> |
94 | <feature name="part_id" value="Game Disk 0"/> | |
94 | <feature name="part_id" value="Game Disk 0"/> | |
95 | 95 | <dataarea name="flop" size="737280"> |
96 | 96 | <rom name="fray - in magical adventure (1990)(micro cabin)(jp)(disk 4 of 5)(game disk 0).dsk" size="737280" crc="8c6d9bed" sha1="0bddc86900b934cb381ce3aac8d9f8614ca49ede" offset="0" /> |
97 | 97 | </dataarea> |
98 | 98 | </part> |
99 | 99 | <part name="flop5" interface="floppy_3_5"> |
100 | <feature name="part_id" value="Game Disk 1"/> | |
100 | <feature name="part_id" value="Game Disk 1"/> | |
101 | 101 | <dataarea name="flop" size="737280"> |
102 | 102 | <rom name="fray - in magical adventure (1990)(micro cabin)(jp)(disk 5 of 5)(game disk 1).dsk" size="737280" crc="d631a475" sha1="c1c35bedb620181846a407d6900db741f751e50f" offset="0" /> |
103 | 103 | </dataarea> |
r249189 | r249190 | |
111 | 111 | <info name="alt_title" value="フレイサーク外伝" /> |
112 | 112 | |
113 | 113 | <part name="flop1" interface="floppy_3_5"> |
114 | <feature name="part_id" value="Opening Disk 0"/> | |
114 | <feature name="part_id" value="Opening Disk 0"/> | |
115 | 115 | <dataarea name="flop" size="737280"> |
116 | 116 | <rom name="fray - in magical adventure (1990)(micro cabin)(jp)(disk 1 of 5)(opening disk 0)[a].dsk" size="737280" crc="ee1ddd5d" sha1="858f9861f5015fd2e04f5a9fa4de971bfe7b5ec4" offset="0" /> |
117 | 117 | </dataarea> |
118 | 118 | </part> |
119 | 119 | <part name="flop2" interface="floppy_3_5"> |
120 | <feature name="part_id" value="Opening Disk 1"/> | |
120 | <feature name="part_id" value="Opening Disk 1"/> | |
121 | 121 | <dataarea name="flop" size="737280"> |
122 | 122 | <rom name="fray - in magical adventure (1990)(micro cabin)(jp)(disk 2 of 5)(opening disk 1)[a].dsk" size="737280" crc="df4f5d75" sha1="4508096f7a4d5bf1c9e94df62def933ef1f6630f" offset="0" /> |
123 | 123 | </dataarea> |
124 | 124 | </part> |
125 | 125 | <part name="flop3" interface="floppy_3_5"> |
126 | <feature name="part_id" value="Opening Disk 2"/> | |
126 | <feature name="part_id" value="Opening Disk 2"/> | |
127 | 127 | <dataarea name="flop" size="737280"> |
128 | 128 | <rom name="fray - in magical adventure (1990)(micro cabin)(jp)(disk 3 of 5)(opening disk 2)[a].dsk" size="737280" crc="f2d4c059" sha1="ad26d223992b9c7713d2df7bd44b8a1cb09b9209" offset="0" /> |
129 | 129 | </dataarea> |
130 | 130 | </part> |
131 | 131 | <part name="flop4" interface="floppy_3_5"> |
132 | <feature name="part_id" value="Game Disk 0"/> | |
132 | <feature name="part_id" value="Game Disk 0"/> | |
133 | 133 | <dataarea name="flop" size="737280"> |
134 | 134 | <rom name="fray - in magical adventure (1990)(micro cabin)(jp)(disk 4 of 5)(game disk 0)[a].dsk" size="737280" crc="99dcaab5" sha1="bf2f9b963c8045dca79921c3c08cea9a4a31f129" offset="0" /> |
135 | 135 | </dataarea> |
136 | 136 | </part> |
137 | 137 | <part name="flop5" interface="floppy_3_5"> |
138 | <feature name="part_id" value="Game Disk 1"/> | |
138 | <feature name="part_id" value="Game Disk 1"/> | |
139 | 139 | <dataarea name="flop" size="737280"> |
140 | 140 | <rom name="fray - in magical adventure (1990)(micro cabin)(jp)(disk 5 of 5)(game disk 1)[a].dsk" size="737280" crc="db96855a" sha1="9fce9c2fb9f684ed2478deacf02a1388975230e5" offset="0" /> |
141 | 141 | </dataarea> |
r249189 | r249190 | |
149 | 149 | <info name="alt_title" value="フレイサーク外伝" /> |
150 | 150 | |
151 | 151 | <part name="flop1" interface="floppy_3_5"> |
152 | <feature name="part_id" value="Opening Disk 0"/> | |
152 | <feature name="part_id" value="Opening Disk 0"/> | |
153 | 153 | <dataarea name="flop" size="737280"> |
154 | 154 | <rom name="fray - in magical adventure (1990)(micro cabin)(jp)(disk 1 of 5)(opening disk 0)[a2].dsk" size="737280" crc="fe161465" sha1="9abd04cfb508567ab4d19e4a0a82fa00f6348286" offset="0" /> |
155 | 155 | </dataarea> |
156 | 156 | </part> |
157 | 157 | <part name="flop2" interface="floppy_3_5"> |
158 | <feature name="part_id" value="Opening Disk 1"/> | |
158 | <feature name="part_id" value="Opening Disk 1"/> | |
159 | 159 | <dataarea name="flop" size="737280"> |
160 | 160 | <rom name="fray - in magical adventure (1990)(micro cabin)(jp)(disk 2 of 5)(opening disk 1).dsk" size="737280" crc="c33d5ac3" sha1="0b145459326c62254522bf77f063b069d086aa29" offset="0" /> |
161 | 161 | </dataarea> |
162 | 162 | </part> |
163 | 163 | <part name="flop3" interface="floppy_3_5"> |
164 | <feature name="part_id" value="Opening Disk 2"/> | |
164 | <feature name="part_id" value="Opening Disk 2"/> | |
165 | 165 | <dataarea name="flop" size="737280"> |
166 | 166 | <rom name="fray - in magical adventure (1990)(micro cabin)(jp)(disk 3 of 5)(opening disk 2).dsk" size="737280" crc="b770ee14" sha1="80701f4a86a151778c4fc81f56e9088d7b880651" offset="0" /> |
167 | 167 | </dataarea> |
168 | 168 | </part> |
169 | 169 | <part name="flop4" interface="floppy_3_5"> |
170 | <feature name="part_id" value="Game Disk 0"/> | |
170 | <feature name="part_id" value="Game Disk 0"/> | |
171 | 171 | <dataarea name="flop" size="737280"> |
172 | 172 | <rom name="fray - in magical adventure (1990)(micro cabin)(jp)(disk 4 of 5)(game disk 0)[a2].dsk" size="737280" crc="4a96b160" sha1="f28e35348dceb9bef0d6e21674bf01d67fd9501b" offset="0" /> |
173 | 173 | </dataarea> |
174 | 174 | </part> |
175 | 175 | <part name="flop5" interface="floppy_3_5"> |
176 | <feature name="part_id" value="Game Disk 1"/> | |
176 | <feature name="part_id" value="Game Disk 1"/> | |
177 | 177 | <dataarea name="flop" size="737280"> |
178 | 178 | <rom name="fray - in magical adventure (1990)(micro cabin)(jp)(disk 5 of 5)(game disk 1).dsk" size="737280" crc="d631a475" sha1="c1c35bedb620181846a407d6900db741f751e50f" offset="0" /> |
179 | 179 | </dataarea> |
r249189 | r249190 | |
187 | 187 | <info name="alt_title" value="げんえいとし" /> |
188 | 188 | |
189 | 189 | <part name="flop1" interface="floppy_3_5"> |
190 | <feature name="part_id" value="Game Disk 1"/> | |
190 | <feature name="part_id" value="Game Disk 1"/> | |
191 | 191 | <dataarea name="flop" size="737280"> |
192 | 192 | <rom name="illusion city (1991)(micro cabin)(jp)(disk 01 of 13)(game disk 1).dsk" size="737280" crc="6c09d054" sha1="94258658039f76d22bc79ec02b7b78e9b4a7ac13" offset="0" /> |
193 | 193 | </dataarea> |
194 | 194 | </part> |
195 | 195 | <part name="flop2" interface="floppy_3_5"> |
196 | <feature name="part_id" value="Game Disk 2"/> | |
196 | <feature name="part_id" value="Game Disk 2"/> | |
197 | 197 | <dataarea name="flop" size="737280"> |
198 | 198 | <rom name="illusion city (1991)(micro cabin)(jp)(disk 02 of 13)(game disk 2).dsk" size="737280" crc="69872539" sha1="4535b5a13a86537e363566bd2a864cbf17bcd2e7" offset="0" /> |
199 | 199 | </dataarea> |
200 | 200 | </part> |
201 | 201 | <part name="flop3" interface="floppy_3_5"> |
202 | <feature name="part_id" value="Game Disk 3"/> | |
202 | <feature name="part_id" value="Game Disk 3"/> | |
203 | 203 | <dataarea name="flop" size="737280"> |
204 | 204 | <rom name="illusion city (1991)(micro cabin)(jp)(disk 03 of 13)(game disk 3).dsk" size="737280" crc="494a0db3" sha1="ac94c9f5e735c935a5ed4ff47c9689e5e07ac266" offset="0" /> |
205 | 205 | </dataarea> |
206 | 206 | </part> |
207 | 207 | <part name="flop4" interface="floppy_3_5"> |
208 | <feature name="part_id" value="Game Disk 4"/> | |
208 | <feature name="part_id" value="Game Disk 4"/> | |
209 | 209 | <dataarea name="flop" size="737280"> |
210 | 210 | <rom name="illusion city (1991)(micro cabin)(jp)(disk 04 of 13)(game disk 4).dsk" size="737280" crc="9d31fe9f" sha1="da08fd8c79ebb28a01232734bf607f576f7987cf" offset="0" /> |
211 | 211 | </dataarea> |
212 | 212 | </part> |
213 | 213 | <part name="flop5" interface="floppy_3_5"> |
214 | <feature name="part_id" value="Game Disk 5"/> | |
214 | <feature name="part_id" value="Game Disk 5"/> | |
215 | 215 | <dataarea name="flop" size="737280"> |
216 | 216 | <rom name="illusion city (1991)(micro cabin)(jp)(disk 05 of 13)(game disk 5).dsk" size="737280" crc="d8a0e0c8" sha1="5472f519f06212562d72f5be229b74a4599f13c2" offset="0" /> |
217 | 217 | </dataarea> |
218 | 218 | </part> |
219 | 219 | <part name="flop6" interface="floppy_3_5"> |
220 | <feature name="part_id" value="Game Disk 6"/> | |
220 | <feature name="part_id" value="Game Disk 6"/> | |
221 | 221 | <dataarea name="flop" size="737280"> |
222 | 222 | <rom name="illusion city (1991)(micro cabin)(jp)(disk 06 of 13)(game disk 6).dsk" size="737280" crc="5b89b23d" sha1="1141f0b05250ffde6cbd02a29041c4c520008267" offset="0" /> |
223 | 223 | </dataarea> |
224 | 224 | </part> |
225 | 225 | <part name="flop7" interface="floppy_3_5"> |
226 | <feature name="part_id" value="Game Disk 7"/> | |
226 | <feature name="part_id" value="Game Disk 7"/> | |
227 | 227 | <dataarea name="flop" size="737280"> |
228 | 228 | <rom name="illusion city (1991)(micro cabin)(jp)(disk 07 of 13)(game disk 7).dsk" size="737280" crc="98a4a1ac" sha1="fdad8341a81d1310f00e07057b61ea4ef31cdf06" offset="0" /> |
229 | 229 | </dataarea> |
230 | 230 | </part> |
231 | 231 | <part name="flop8" interface="floppy_3_5"> |
232 | <feature name="part_id" value="Game Disk 8"/> | |
232 | <feature name="part_id" value="Game Disk 8"/> | |
233 | 233 | <dataarea name="flop" size="737280"> |
234 | 234 | <rom name="illusion city (1991)(micro cabin)(jp)(disk 08 of 13)(game disk 8).dsk" size="737280" crc="11998da3" sha1="efa7b70351f0302e112cb9b0ef49dc033c967e3d" offset="0" /> |
235 | 235 | </dataarea> |
r249189 | r249190 | |
242 | 242 | <publisher>Bit²</publisher> |
243 | 243 | |
244 | 244 | <part name="flop1" interface="floppy_3_5"> |
245 | <feature name="part_id" value="Disk 1"/> | |
245 | <feature name="part_id" value="Disk 1"/> | |
246 | 246 | <dataarea name="flop" size="737280"> |
247 | 247 | <rom name="myu note (1992)(bit2)(jp)(disk 1 of 2).dsk" size="737280" crc="e2d5772b" sha1="420fdd3980c4f18f46055ec457cf236348625a18" offset="0" /> |
248 | 248 | </dataarea> |
249 | 249 | </part> |
250 | 250 | <part name="flop2" interface="floppy_3_5"> |
251 | <feature name="part_id" value="Disk 2"/> | |
251 | <feature name="part_id" value="Disk 2"/> | |
252 | 252 | <dataarea name="flop" size="737280"> |
253 | 253 | <rom name="myu note (1992)(bit2)(jp)(disk 2 of 2).dsk" size="737280" crc="e3eda999" sha1="cf41b87c1390684fc31c2d6634756592d616073b" offset="0" /> |
254 | 254 | </dataarea> |
r249189 | r249190 | |
261 | 261 | <publisher>Bit²</publisher> |
262 | 262 | |
263 | 263 | <part name="flop1" interface="floppy_3_5"> |
264 | <feature name="part_id" value="Disk 1"/> | |
264 | <feature name="part_id" value="Disk 1"/> | |
265 | 265 | <dataarea name="flop" size="737280"> |
266 | 266 | <rom name="myu sios (1991)(bit2)(jp)(disk 1 of 3).dsk" size="737280" crc="2cf78feb" sha1="f80b22f2f1f8263cceb782738558767286dd89a1" offset="0" /> |
267 | 267 | </dataarea> |
268 | 268 | </part> |
269 | 269 | <part name="flop2" interface="floppy_3_5"> |
270 | <feature name="part_id" value="Disk 2"/> | |
270 | <feature name="part_id" value="Disk 2"/> | |
271 | 271 | <dataarea name="flop" size="737280"> |
272 | 272 | <rom name="myu sios (1991)(bit2)(jp)(disk 2 of 3).dsk" size="737280" crc="0ffa249d" sha1="b7107c665a502c815e0d55e4165a17bd98420385" offset="0" /> |
273 | 273 | </dataarea> |
274 | 274 | </part> |
275 | 275 | <part name="flop3" interface="floppy_3_5"> |
276 | <feature name="part_id" value="Disk 3"/> | |
276 | <feature name="part_id" value="Disk 3"/> | |
277 | 277 | <dataarea name="flop" size="737280"> |
278 | 278 | <rom name="myu sios (1991)(bit2)(jp)(disk 3 of 3).dsk" size="737280" crc="74010ac2" sha1="2e1b83373aadd455f093907b0700623b462cbe68" offset="0" /> |
279 | 279 | </dataarea> |
r249189 | r249190 | |
287 | 287 | <info name="alt_title" value="らんま1/2飛龍伝説" /> |
288 | 288 | |
289 | 289 | <part name="flop1" interface="floppy_3_5"> |
290 | <feature name="part_id" value="Disk 1"/> | |
290 | <feature name="part_id" value="Disk 1"/> | |
291 | 291 | <dataarea name="flop" size="737280"> |
292 | 292 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 1 of 8).dsk" size="737280" crc="6074f52f" sha1="13ef524c86124a628e6169edcf81e2ede3140bc0" offset="0" /> |
293 | 293 | </dataarea> |
294 | 294 | </part> |
295 | 295 | <part name="flop2" interface="floppy_3_5"> |
296 | <feature name="part_id" value="Disk 2"/> | |
296 | <feature name="part_id" value="Disk 2"/> | |
297 | 297 | <dataarea name="flop" size="737280"> |
298 | 298 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 8 of 8).dsk" size="737280" crc="ea153962" sha1="6ea5f0a2b89f223220ee8003b83a2f537fd63ee3" offset="0" /> |
299 | 299 | </dataarea> |
300 | 300 | </part> |
301 | 301 | <part name="flop3" interface="floppy_3_5"> |
302 | <feature name="part_id" value="Disk 3"/> | |
302 | <feature name="part_id" value="Disk 3"/> | |
303 | 303 | <dataarea name="flop" size="737280"> |
304 | 304 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 2 of 8).dsk" size="737280" crc="fbb7805b" sha1="a9e6bfd80298626086e3a81d054b37142db08b52" offset="0" /> |
305 | 305 | </dataarea> |
306 | 306 | </part> |
307 | 307 | <part name="flop4" interface="floppy_3_5"> |
308 | <feature name="part_id" value="Disk 4"/> | |
308 | <feature name="part_id" value="Disk 4"/> | |
309 | 309 | <dataarea name="flop" size="737280"> |
310 | 310 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 3 of 8).dsk" size="737280" crc="26295e10" sha1="7dcfedaafde8cf0b286d80b0f2a930dba15a362c" offset="0" /> |
311 | 311 | </dataarea> |
312 | 312 | </part> |
313 | 313 | <part name="flop5" interface="floppy_3_5"> |
314 | <feature name="part_id" value="Disk 5"/> | |
314 | <feature name="part_id" value="Disk 5"/> | |
315 | 315 | <dataarea name="flop" size="737280"> |
316 | 316 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 4 of 8).dsk" size="737280" crc="4cb5d6f4" sha1="c0750209ce9b36dd76091ed353d762a9f5380adb" offset="0" /> |
317 | 317 | </dataarea> |
318 | 318 | </part> |
319 | 319 | <part name="flop6" interface="floppy_3_5"> |
320 | <feature name="part_id" value="Disk 6"/> | |
320 | <feature name="part_id" value="Disk 6"/> | |
321 | 321 | <dataarea name="flop" size="737280"> |
322 | 322 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 5 of 8).dsk" size="737280" crc="9d9fd03d" sha1="7f92d37b3cb31689a3fa54c374c84366e302afb3" offset="0" /> |
323 | 323 | </dataarea> |
324 | 324 | </part> |
325 | 325 | <part name="flop7" interface="floppy_3_5"> |
326 | <feature name="part_id" value="Disk 7"/> | |
326 | <feature name="part_id" value="Disk 7"/> | |
327 | 327 | <dataarea name="flop" size="737280"> |
328 | 328 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 6 of 8).dsk" size="737280" crc="c90a316e" sha1="27dfae858e543a443521dc3b9a8f70028e0cd033" offset="0" /> |
329 | 329 | </dataarea> |
330 | 330 | </part> |
331 | 331 | <part name="flop8" interface="floppy_3_5"> |
332 | <feature name="part_id" value="Disk 8"/> | |
332 | <feature name="part_id" value="Disk 8"/> | |
333 | 333 | <dataarea name="flop" size="737280"> |
334 | 334 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 7 of 8).dsk" size="737280" crc="77b007ec" sha1="0f64b6b2a1eefb0597793ccb82a247945a19b5ca" offset="0" /> |
335 | 335 | </dataarea> |
r249189 | r249190 | |
343 | 343 | <info name="alt_title" value="らんま1/2飛龍伝説" /> |
344 | 344 | |
345 | 345 | <part name="flop1" interface="floppy_3_5"> |
346 | <feature name="part_id" value="Disk 1"/> | |
346 | <feature name="part_id" value="Disk 1"/> | |
347 | 347 | <dataarea name="flop" size="737280"> |
348 | 348 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 1 of 8)[a].dsk" size="737280" crc="9068b80b" sha1="846d114dfdcf6d33997937e03aefb5cfb782e75b" offset="0" /> |
349 | 349 | </dataarea> |
350 | 350 | </part> |
351 | 351 | <part name="flop2" interface="floppy_3_5"> |
352 | <feature name="part_id" value="Disk 2"/> | |
352 | <feature name="part_id" value="Disk 2"/> | |
353 | 353 | <dataarea name="flop" size="737280"> |
354 | 354 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 8 of 8)[a].dsk" size="737280" crc="825b91a9" sha1="9dd478f437147726ba585c1a6446c0150f2de9a2" offset="0" /> |
355 | 355 | </dataarea> |
356 | 356 | </part> |
357 | 357 | <part name="flop3" interface="floppy_3_5"> |
358 | <feature name="part_id" value="Disk 3"/> | |
358 | <feature name="part_id" value="Disk 3"/> | |
359 | 359 | <dataarea name="flop" size="737280"> |
360 | 360 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 2 of 8).dsk" size="737280" crc="fbb7805b" sha1="a9e6bfd80298626086e3a81d054b37142db08b52" offset="0" /> |
361 | 361 | </dataarea> |
362 | 362 | </part> |
363 | 363 | <part name="flop4" interface="floppy_3_5"> |
364 | <feature name="part_id" value="Disk 4"/> | |
364 | <feature name="part_id" value="Disk 4"/> | |
365 | 365 | <dataarea name="flop" size="737280"> |
366 | 366 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 3 of 8).dsk" size="737280" crc="26295e10" sha1="7dcfedaafde8cf0b286d80b0f2a930dba15a362c" offset="0" /> |
367 | 367 | </dataarea> |
368 | 368 | </part> |
369 | 369 | <part name="flop5" interface="floppy_3_5"> |
370 | <feature name="part_id" value="Disk 5"/> | |
370 | <feature name="part_id" value="Disk 5"/> | |
371 | 371 | <dataarea name="flop" size="737280"> |
372 | 372 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 4 of 8).dsk" size="737280" crc="4cb5d6f4" sha1="c0750209ce9b36dd76091ed353d762a9f5380adb" offset="0" /> |
373 | 373 | </dataarea> |
374 | 374 | </part> |
375 | 375 | <part name="flop6" interface="floppy_3_5"> |
376 | <feature name="part_id" value="Disk 6"/> | |
376 | <feature name="part_id" value="Disk 6"/> | |
377 | 377 | <dataarea name="flop" size="737280"> |
378 | 378 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 6 of 8)[a].dsk" size="737280" crc="b313ebd6" sha1="99d9e9580372e9eccdc69a20e6b349a90e1c1005" offset="0" /> |
379 | 379 | </dataarea> |
380 | 380 | </part> |
381 | 381 | <part name="flop7" interface="floppy_3_5"> |
382 | <feature name="part_id" value="Disk 7"/> | |
382 | <feature name="part_id" value="Disk 7"/> | |
383 | 383 | <dataarea name="flop" size="737280"> |
384 | 384 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 6 of 8).dsk" size="737280" crc="c90a316e" sha1="27dfae858e543a443521dc3b9a8f70028e0cd033" offset="0" /> |
385 | 385 | </dataarea> |
386 | 386 | </part> |
387 | 387 | <part name="flop8" interface="floppy_3_5"> |
388 | <feature name="part_id" value="Disk 8"/> | |
388 | <feature name="part_id" value="Disk 8"/> | |
389 | 389 | <dataarea name="flop" size="737280"> |
390 | 390 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 7 of 8).dsk" size="737280" crc="77b007ec" sha1="0f64b6b2a1eefb0597793ccb82a247945a19b5ca" offset="0" /> |
391 | 391 | </dataarea> |
r249189 | r249190 | |
399 | 399 | <info name="alt_title" value="らんま1/2飛龍伝説" /> |
400 | 400 | |
401 | 401 | <part name="flop1" interface="floppy_3_5"> |
402 | <feature name="part_id" value="Disk 1"/> | |
402 | <feature name="part_id" value="Disk 1"/> | |
403 | 403 | <dataarea name="flop" size="737280"> |
404 | 404 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 1 of 8)[a2].dsk" size="737280" crc="bbd17c43" sha1="50f5d422b5eb45f5e8b340e1030bf65cb91e1a8e" offset="0" /> |
405 | 405 | </dataarea> |
406 | 406 | </part> |
407 | 407 | <part name="flop2" interface="floppy_3_5"> |
408 | <feature name="part_id" value="Disk 2"/> | |
408 | <feature name="part_id" value="Disk 2"/> | |
409 | 409 | <dataarea name="flop" size="737280"> |
410 | 410 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 8 of 8)[a2].dsk" size="737280" crc="742f421d" sha1="34acc7e52b700557071447345f3f7419a972ddae" offset="0" /> |
411 | 411 | </dataarea> |
412 | 412 | </part> |
413 | 413 | <part name="flop3" interface="floppy_3_5"> |
414 | <feature name="part_id" value="Disk 3"/> | |
414 | <feature name="part_id" value="Disk 3"/> | |
415 | 415 | <dataarea name="flop" size="737280"> |
416 | 416 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 2 of 8).dsk" size="737280" crc="fbb7805b" sha1="a9e6bfd80298626086e3a81d054b37142db08b52" offset="0" /> |
417 | 417 | </dataarea> |
418 | 418 | </part> |
419 | 419 | <part name="flop4" interface="floppy_3_5"> |
420 | <feature name="part_id" value="Disk 4"/> | |
420 | <feature name="part_id" value="Disk 4"/> | |
421 | 421 | <dataarea name="flop" size="737280"> |
422 | 422 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 3 of 8).dsk" size="737280" crc="26295e10" sha1="7dcfedaafde8cf0b286d80b0f2a930dba15a362c" offset="0" /> |
423 | 423 | </dataarea> |
424 | 424 | </part> |
425 | 425 | <part name="flop5" interface="floppy_3_5"> |
426 | <feature name="part_id" value="Disk 5"/> | |
426 | <feature name="part_id" value="Disk 5"/> | |
427 | 427 | <dataarea name="flop" size="737280"> |
428 | 428 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 4 of 8).dsk" size="737280" crc="4cb5d6f4" sha1="c0750209ce9b36dd76091ed353d762a9f5380adb" offset="0" /> |
429 | 429 | </dataarea> |
430 | 430 | </part> |
431 | 431 | <part name="flop6" interface="floppy_3_5"> |
432 | <feature name="part_id" value="Disk 6"/> | |
432 | <feature name="part_id" value="Disk 6"/> | |
433 | 433 | <dataarea name="flop" size="737280"> |
434 | 434 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 5 of 8).dsk" size="737280" crc="9d9fd03d" sha1="7f92d37b3cb31689a3fa54c374c84366e302afb3" offset="0" /> |
435 | 435 | </dataarea> |
436 | 436 | </part> |
437 | 437 | <part name="flop7" interface="floppy_3_5"> |
438 | <feature name="part_id" value="Disk 7"/> | |
438 | <feature name="part_id" value="Disk 7"/> | |
439 | 439 | <dataarea name="flop" size="737280"> |
440 | 440 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 6 of 8).dsk" size="737280" crc="c90a316e" sha1="27dfae858e543a443521dc3b9a8f70028e0cd033" offset="0" /> |
441 | 441 | </dataarea> |
442 | 442 | </part> |
443 | 443 | <part name="flop8" interface="floppy_3_5"> |
444 | <feature name="part_id" value="Disk 8"/> | |
444 | <feature name="part_id" value="Disk 8"/> | |
445 | 445 | <dataarea name="flop" size="737280"> |
446 | 446 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 7 of 8).dsk" size="737280" crc="77b007ec" sha1="0f64b6b2a1eefb0597793ccb82a247945a19b5ca" offset="0" /> |
447 | 447 | </dataarea> |
r249189 | r249190 | |
455 | 455 | <info name="alt_title" value="らんま1/2飛龍伝説" /> |
456 | 456 | |
457 | 457 | <part name="flop1" interface="floppy_3_5"> |
458 | <feature name="part_id" value="Disk 1"/> | |
458 | <feature name="part_id" value="Disk 1"/> | |
459 | 459 | <dataarea name="flop" size="737280"> |
460 | 460 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 1 of 8)[a3].dsk" size="737280" crc="39cf454c" sha1="c627a49182ccf80e231525cb1a3a53e460fc024b" offset="0" /> |
461 | 461 | </dataarea> |
462 | 462 | </part> |
463 | 463 | <part name="flop2" interface="floppy_3_5"> |
464 | <feature name="part_id" value="Disk 2"/> | |
464 | <feature name="part_id" value="Disk 2"/> | |
465 | 465 | <dataarea name="flop" size="737280"> |
466 | 466 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 8 of 8).dsk" size="737280" crc="ea153962" sha1="6ea5f0a2b89f223220ee8003b83a2f537fd63ee3" offset="0" /> |
467 | 467 | </dataarea> |
468 | 468 | </part> |
469 | 469 | <part name="flop3" interface="floppy_3_5"> |
470 | <feature name="part_id" value="Disk 3"/> | |
470 | <feature name="part_id" value="Disk 3"/> | |
471 | 471 | <dataarea name="flop" size="737280"> |
472 | 472 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 2 of 8).dsk" size="737280" crc="fbb7805b" sha1="a9e6bfd80298626086e3a81d054b37142db08b52" offset="0" /> |
473 | 473 | </dataarea> |
474 | 474 | </part> |
475 | 475 | <part name="flop4" interface="floppy_3_5"> |
476 | <feature name="part_id" value="Disk 4"/> | |
476 | <feature name="part_id" value="Disk 4"/> | |
477 | 477 | <dataarea name="flop" size="737280"> |
478 | 478 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 3 of 8).dsk" size="737280" crc="26295e10" sha1="7dcfedaafde8cf0b286d80b0f2a930dba15a362c" offset="0" /> |
479 | 479 | </dataarea> |
480 | 480 | </part> |
481 | 481 | <part name="flop5" interface="floppy_3_5"> |
482 | <feature name="part_id" value="Disk 5"/> | |
482 | <feature name="part_id" value="Disk 5"/> | |
483 | 483 | <dataarea name="flop" size="737280"> |
484 | 484 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 4 of 8).dsk" size="737280" crc="4cb5d6f4" sha1="c0750209ce9b36dd76091ed353d762a9f5380adb" offset="0" /> |
485 | 485 | </dataarea> |
486 | 486 | </part> |
487 | 487 | <part name="flop6" interface="floppy_3_5"> |
488 | <feature name="part_id" value="Disk 6"/> | |
488 | <feature name="part_id" value="Disk 6"/> | |
489 | 489 | <dataarea name="flop" size="737280"> |
490 | 490 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 5 of 8).dsk" size="737280" crc="9d9fd03d" sha1="7f92d37b3cb31689a3fa54c374c84366e302afb3" offset="0" /> |
491 | 491 | </dataarea> |
492 | 492 | </part> |
493 | 493 | <part name="flop7" interface="floppy_3_5"> |
494 | <feature name="part_id" value="Disk 7"/> | |
494 | <feature name="part_id" value="Disk 7"/> | |
495 | 495 | <dataarea name="flop" size="737280"> |
496 | 496 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 6 of 8).dsk" size="737280" crc="c90a316e" sha1="27dfae858e543a443521dc3b9a8f70028e0cd033" offset="0" /> |
497 | 497 | </dataarea> |
498 | 498 | </part> |
499 | 499 | <part name="flop8" interface="floppy_3_5"> |
500 | <feature name="part_id" value="Disk 8"/> | |
500 | <feature name="part_id" value="Disk 8"/> | |
501 | 501 | <dataarea name="flop" size="737280"> |
502 | 502 | <rom name="ranma nibunnoichi 1-2 (1992)(bothtec)(jp)(disk 7 of 8).dsk" size="737280" crc="77b007ec" sha1="0f64b6b2a1eefb0597793ccb82a247945a19b5ca" offset="0" /> |
503 | 503 | </dataarea> |
r249189 | r249190 | |
511 | 511 | <info name="alt_title" value="シードオブドラゴン" /> |
512 | 512 | |
513 | 513 | <part name="flop1" interface="floppy_3_5"> |
514 | <feature name="part_id" value="Game Disk 1"/> | |
514 | <feature name="part_id" value="Game Disk 1"/> | |
515 | 515 | <dataarea name="flop" size="737280"> |
516 | 516 | <rom name="seed of dragon (1990)(riverhill soft)(jp)(disk 1 of 3)(game disk 1).dsk" size="737280" crc="6375eeb9" sha1="7a329629bc7667761751f092e8d2dc350f9eba76" offset="0" /> |
517 | 517 | </dataarea> |
518 | 518 | </part> |
519 | 519 | <part name="flop2" interface="floppy_3_5"> |
520 | <feature name="part_id" value="Game Disk 2"/> | |
520 | <feature name="part_id" value="Game Disk 2"/> | |
521 | 521 | <dataarea name="flop" size="737280"> |
522 | 522 | <rom name="seed of dragon (1990)(riverhill soft)(jp)(disk 2 of 3)(game disk 2).dsk" size="737280" crc="dd1fd600" sha1="16bece552fd1af10c2cf467d1c89e7d2869ded35" offset="0" /> |
523 | 523 | </dataarea> |
524 | 524 | </part> |
525 | 525 | <part name="flop3" interface="floppy_3_5"> |
526 | <feature name="part_id" value="Game Disk 3"/> | |
526 | <feature name="part_id" value="Game Disk 3"/> | |
527 | 527 | <dataarea name="flop" size="737280"> |
528 | 528 | <rom name="seed of dragon (1990)(riverhill soft)(jp)(disk 3 of 3)(game disk 3).dsk" size="737280" crc="3ac7bc91" sha1="f376d8875548a7910317ab7a34cd2be823101385" offset="0" /> |
529 | 529 | </dataarea> |
r249189 | r249190 | |
537 | 537 | <info name="alt_title" value="シードオブドラゴン" /> |
538 | 538 | |
539 | 539 | <part name="flop1" interface="floppy_3_5"> |
540 | <feature name="part_id" value="Game Disk 1"/> | |
540 | <feature name="part_id" value="Game Disk 1"/> | |
541 | 541 | <dataarea name="flop" size="737280"> |
542 | 542 | <rom name="seed of dragon (1990)(riverhill soft)(jp)(disk 1 of 3)(game disk 1)[a].dsk" size="737280" crc="a5f1a706" sha1="0df21b3debfc5bc83eed276ddeed0acf7f62ab30" offset="0" /> |
543 | 543 | </dataarea> |
544 | 544 | </part> |
545 | 545 | <part name="flop2" interface="floppy_3_5"> |
546 | <feature name="part_id" value="Game Disk 2"/> | |
546 | <feature name="part_id" value="Game Disk 2"/> | |
547 | 547 | <dataarea name="flop" size="737280"> |
548 | 548 | <rom name="seed of dragon (1990)(riverhill soft)(jp)(disk 2 of 3)(game disk 2)[a].dsk" size="737280" crc="86ea43d0" sha1="cf11190db1c36aa9b79c534b131f7258729e0e99" offset="0" /> |
549 | 549 | </dataarea> |
550 | 550 | </part> |
551 | 551 | <part name="flop3" interface="floppy_3_5"> |
552 | <feature name="part_id" value="Game Disk 3"/> | |
552 | <feature name="part_id" value="Game Disk 3"/> | |
553 | 553 | <dataarea name="flop" size="737280"> |
554 | 554 | <rom name="seed of dragon (1990)(riverhill soft)(jp)(disk 3 of 3)(game disk 3)[a].dsk" size="737280" crc="d0ef7a8e" sha1="a41729e7ae2e5223374603cadc08f551ae8e40e6" offset="0" /> |
555 | 555 | </dataarea> |
r249189 | r249190 | |
563 | 563 | <info name="alt_title" value="シードオブドラゴン" /> |
564 | 564 | |
565 | 565 | <part name="flop1" interface="floppy_3_5"> |
566 | <feature name="part_id" value="Game Disk 1"/> | |
566 | <feature name="part_id" value="Game Disk 1"/> | |
567 | 567 | <dataarea name="flop" size="737280"> |
568 | 568 | <rom name="seed of dragon (1990)(riverhill soft)(jp)(disk 1 of 3)(game disk 1)[a2].dsk" size="737280" crc="08fd8f1b" sha1="5803057e6c75a5841dc4f273e7d26b73f83a74f9" offset="0" /> |
569 | 569 | </dataarea> |
570 | 570 | </part> |
571 | 571 | <part name="flop2" interface="floppy_3_5"> |
572 | <feature name="part_id" value="Game Disk 2"/> | |
572 | <feature name="part_id" value="Game Disk 2"/> | |
573 | 573 | <dataarea name="flop" size="737280"> |
574 | 574 | <rom name="seed of dragon (1990)(riverhill soft)(jp)(disk 2 of 3)(game disk 2).dsk" size="737280" crc="dd1fd600" sha1="16bece552fd1af10c2cf467d1c89e7d2869ded35" offset="0" /> |
575 | 575 | </dataarea> |
576 | 576 | </part> |
577 | 577 | <part name="flop3" interface="floppy_3_5"> |
578 | <feature name="part_id" value="Game Disk 3"/> | |
578 | <feature name="part_id" value="Game Disk 3"/> | |
579 | 579 | <dataarea name="flop" size="737280"> |
580 | 580 | <rom name="seed of dragon (1990)(riverhill soft)(jp)(disk 3 of 3)(game disk 3).dsk" size="737280" crc="3ac7bc91" sha1="f376d8875548a7910317ab7a34cd2be823101385" offset="0" /> |
581 | 581 | </dataarea> |
r249189 | r249190 | |
777 | 777 | <info name="developer" value="MIWA" /> |
778 | 778 | |
779 | 779 | <part name="flop1" interface="floppy_3_5"> |
780 | <feature name="part_id" value="Disk 1, Alt"/> | |
780 | <feature name="part_id" value="Disk 1, Alt"/> | |
781 | 781 | <dataarea name="flop" size="737280"> |
782 | 782 | <rom name="multi-plex (1993)(miwa)(jp)[a].dsk" size="737280" crc="d116b2f7" sha1="8cd400d46b8af6a0f557eda0903ad916898b91cc" offset="0" /> |
783 | 783 | </dataarea> |
r249189 | r249190 | |
---|---|---|
52433 | 52433 | </part> |
52434 | 52434 | </software> |
52435 | 52435 | |
52436 | <!--software name="bookyman"> | |
52437 | <description>Booky Man (Spa)</description> | |
52438 | <year>1992</year> | |
52439 | <publisher>Gluk Video</publisher> | |
52440 | <info name="serial" value="CN-08"/> | |
52441 | <info name="release" value="19920101"/> | |
52442 | <part name="cart" interface="nes_cart"> | |
52443 | <feature name="pcb" value="NTDEC-N715062" /> | |
52444 | <feature name="mirroring" value="vertical" /> | |
52445 | <dataarea name="prg" size="32768"> | |
52446 | <rom name="0.prg" size="16384" crc="0d7ea169" sha1="f78f6589e4b209cc0e5a61c7dea45f73fdcadc5e" offset="00000" /> | |
52447 | <rom size="16384" offset="0x4000" loadflag="reload" /> | |
52448 | </dataarea> | |
52449 | <dataarea name="chr" size="8192"> | |
52450 | <rom name="0.chr" size="8192" crc="e838b839" sha1="09e2bc2fa043675d5300a065fbc0e29d321a6ba3" offset="00000" /> | |
52451 | </dataarea> | |
52452 | </part> | |
52453 | </software--> | |
52436 | <software name="bookyman"> | |
52437 | <description>Booky Man (Spa)</description> | |
52438 | <year>1991</year> | |
52439 | <publisher>Gluk Video</publisher> | |
52440 | <info name="serial" value="CN-08"/> | |
52441 | <info name="release" value="19920101"/> | |
52442 | <part name="cart" interface="nes_cart"> | |
52443 | <feature name="pcb" value="NTDEC-N715062" /> | |
52444 | <feature name="mirroring" value="vertical" /> | |
52445 | <!-- dumped as booky man.bin with .nes header - manually split matched hashes previously known. --> | |
52446 | <!-- <rom name="booky man.bin" size="40976" crc="dc5e106c" sha1="7777da877f2704101e73c0075c4a2a914b8430e3" offset="00000" /--> | |
52447 | <dataarea name="prg" size="32768"> | |
52448 | <rom name="0.prg" size="16384" crc="0d7ea169" sha1="f78f6589e4b209cc0e5a61c7dea45f73fdcadc5e" offset="00000" /> | |
52449 | <rom size="16384" offset="0x4000" loadflag="reload" /> | |
52450 | </dataarea> | |
52451 | <dataarea name="chr" size="8192"> | |
52452 | <rom name="0.chr" size="8192" crc="e838b839" sha1="09e2bc2fa043675d5300a065fbc0e29d321a6ba3" offset="00000" /> | |
52453 | </dataarea> | |
52454 | </part> | |
52455 | </software> | |
52454 | 52456 | |
52455 | 52457 | <!--software name="cosmocops" cloneof="cosmocop"> |
52456 | 52458 | <description>Cosmos Cop (Spa)</description> |
r249189 | r249190 | |
79881 | 79883 | </software> |
79882 | 79884 | |
79883 | 79885 | <software name="mc_cb280" supported="no"> |
79884 | <description>Coolboy RS-18 (280-in-1)</description> | |
79885 | <year>19??</year> | |
79886 | <publisher><unknown></publisher> | |
79887 | <part name="cart" interface="nes_cart"> | |
79888 | <!--<feature name="slot" value="coolboy" /> | |
79889 | <feature name="pcb" value="UNL-COOLBOY" /> --> | |
79890 | <dataarea name="prg" size="4194304"> | |
79891 | <rom name="w25q32.u5" size="4194304" crc="c9541bdf" sha1="f0ce46f18658ca5dbed881e5a80460e59820bbd0" offset="00000" /> | |
79892 | </dataarea> | |
79886 | <description>Coolboy RS-18 (280-in-1)</description> | |
79887 | <year>19??</year> | |
79888 | <publisher><unknown></publisher> | |
79889 | <part name="cart" interface="nes_cart"> | |
79890 | <!--<feature name="slot" value="coolboy" /> <feature name="pcb" value="UNL-COOLBOY" /> --> | |
79891 | <dataarea name="prg" size="4194304"> | |
79892 | <rom name="w25q32.u5" size="4194304" crc="c9541bdf" sha1="f0ce46f18658ca5dbed881e5a80460e59820bbd0" offset="00000" /> | |
79893 | </dataarea> | |
79893 | 79894 | <!-- ?? --> |
79894 | <dataarea name="vram" size="131072"> | |
79895 | </dataarea> | |
79896 | </part> | |
79895 | <dataarea name="vram" size="131072"> | |
79896 | </dataarea> | |
79897 | </part> | |
79897 | 79898 | </software> |
79898 | 79899 | |
79900 | <software name="mc_cb203" supported="no"> | |
79901 | <description>Coolboy RS-17 (203-in-1)</description> | |
79902 | <year>19??</year> | |
79903 | <publisher><unknown></publisher> | |
79904 | <part name="cart" interface="nes_cart"> | |
79905 | <!--<feature name="slot" value="coolboy" /> <feature name="pcb" value="UNL-COOLBOY" /> --> | |
79906 | <dataarea name="prg" size="4194304"> | |
79907 | <rom name="s25fl032.bin" size="4194304" crc="33c4e67b" sha1="5787db4c8ce4c2569a5f9e9054cbb1944c1b3092" offset="00000" /> | |
79908 | </dataarea> | |
79909 | <!-- ?? --> | |
79910 | <dataarea name="vram" size="131072"> | |
79911 | </dataarea> | |
79912 | </part> | |
79913 | </software> | |
79914 | ||
79899 | 79915 | <software name="mc_samur" supported="no"> |
79900 | 79916 | <!-- a VT03 OneBus based system --> |
79901 | <description>Samurai (60-in-1)</description> | |
79902 | <year>2006</year> | |
79903 | <publisher>Team Hummer</publisher> | |
79904 | <part name="cart" interface="nes_cart"> | |
79905 | <dataarea name="prg" size="2097152"> | |
79906 | <rom name="29lv160b.bin" size="2097152" crc="7dac8efe" sha1="ffb27ebb4299d5b9a4b976c418fcc7695200060c" offset="00000" /> | |
79907 | </dataarea> | |
79917 | <description>Samurai (60-in-1)</description> | |
79918 | <year>2006</year> | |
79919 | <publisher>Team Hummer</publisher> | |
79920 | <part name="cart" interface="nes_cart"> | |
79921 | <dataarea name="prg" size="2097152"> | |
79922 | <rom name="29lv160b.bin" size="2097152" crc="7dac8efe" sha1="ffb27ebb4299d5b9a4b976c418fcc7695200060c" offset="00000" /> | |
79923 | </dataarea> | |
79908 | 79924 | <!-- ?? --> |
79909 | <dataarea name="vram" size="131072"> | |
79910 | </dataarea> | |
79911 | </part> | |
79925 | <dataarea name="vram" size="131072"> | |
79926 | </dataarea> | |
79927 | </part> | |
79912 | 79928 | </software> |
79913 | 79929 | |
79914 | 79930 | <software name="mc_sg360" supported="no"> |
r249189 | r249190 | |
---|---|---|
20 | 20 | * おえかきピコ <タブレットのみ> - Oekaki Pico ~Tablet no Mi~ (Sega - ???? - HPC-????) |
21 | 21 | * いっしょにうたおう! ドラえもん わくわくカラオケ - Issho ni Utaou! Doraemon Wakuwaku Karaoke (Sega Toys - 1999xxxx - HPC-6073) |
22 | 22 | * クッキングピコ セット - Cooking Pico Set (Sega Toys - 1999xxxx - HPC-6076) |
23 | * スージーちゃんとマービー おてつだい だ~いすき! - Susie-chan to Mabi - Otetsudai Daisuki! (Sega Toys - 200010xx - HPC-6089) | |
24 | 23 | * パソコン接続キット ピコタウンにでかけよう! - Pasokon Setsuzoku Kit PicoTown ni Dekakeyou! (Sega Toys - 20010601 - HPC-6097) |
25 | 24 | * トミカ・ピコ レスキューパーキング きんきゅうしゅつどう! はたらくのりもの <初回・トミカ付属> - Tomica Pico Rescue Parking Kinkyuushutsudou! Hataraku Norimono ~Shokai-Tomica Fuzoku~ (Sega Toys - 200207xx - HPC-6114) |
26 | 25 | * 学研 ピコで学習 1年生 - Gakken Pico de Gakushuu 1-nensei (Sega Toys - ???? - HPC-????) |
27 | * ピーターパン ネバーランドへ いこう!<10th> - Peter Pan - Neverland e Ikou! ~10th Anniversary Edition~ (Sega Toys - 200306xx - HPC-6124) [reprint HPC-6047] | |
28 | 26 | * McDonald's マクドナルドであそぼ!<10th> - McDonald's - McDonald de Asobo! ~10th Anniversary Edition~ (Sega Toys - 200306xx - HPC-6125) [reprint HPC-6079] |
29 | 27 | * ドラえもん のびたの まちなか ドキドキ たんけん!<10th> - Doraemon - Nobita no Machinaka Dokidoki Tanken! ~10th Anniversary Edition~ (Sega Toys - 200308xx - HPC-6126) [reprint HPC-6009] |
30 | 28 | * トイストーリー2 ウッディ そうさく だいさくせん!!<10th> - Toy Story 2 - Woody Sousaku Daisakusen!! ~10th Anniversary Edition~ (Sega Toys - 20030714 - HPC-6127) [reprint HPC-6090] |
r249189 | r249190 | |
50 | 48 | * いっしょにはしろうきかんしゃトーマス <Best Selection> - Issho ni Hashirou Kikansha Thomas Best Selection (Bandai - 20040713 - T-133490) [reprint T-133140] |
51 | 49 | * 学研のおべんきょうソフト たしざん ひきざん - Gakken no Obenkyou Soft - Tashizan Hikizan (Gakken - 1995xxxx - T-169030) |
52 | 50 | * はじめまシリーズ4 学研のおべんきょうソフト たしざん ひきざん - Hajimema Series 4 - Gakken no Obenkyou Soft - Tashizan Hikizan (Gakken - 1998xxxx - T-169070) |
53 | * ドラえもん えんそく・いもほり・うんどうかい <10th Anniversary> - Doraemon Ensoku-Imohori-Undoukai ~10th Anniversary Edition~ (Shogakukan - 200309xx - T-226090) | |
54 | 51 | * くもんの すくすくれっすん はじめてのひらがな - Kumon no Sukusuku Ressun Hajimete no Hiragana (Kumon - 20020124 - T-300020) |
55 | 52 | * 左脳開発シリーズ2 数量・計算 - Sanou Kaihatsu Series 2 Suuryou - Keisan (Imagineer - 19951002 - T-150230) |
56 | * 左脳開発シリーズ5 迷路・記憶 (CD付き) - Sanou Kaihatsu Series 5 Meiro - Kioku (CD Tsuki) (Imagineer - 19951208 - T-150240) | |
57 | 53 | * 平成教育委員会Jr. めざせ優等生 - Heisei Kyouikuiinkai Jr. Mezase Yuutousei (Imagineer - 19951201 - T-150270) |
58 | 54 | * 左脳開発シリーズ 探索・感性・記憶 - Sanou Kaihatsu Series Tansaku-Kansei-Kioku (Imagineer - Existence unconfirmed!) |
59 | 55 | |
r249189 | r249190 | |
1005 | 1001 | </part> |
1006 | 1002 | </software> |
1007 | 1003 | |
1004 | <software name="doraeiu10th" cloneof="doraeiu"> | |
1005 | <description>Doraemon Ensoku-Imohori-Undoukai ~10th Anniversary Edition~ (Jpn)</description> | |
1006 | <year>2003</year> | |
1007 | <publisher>Shogakukan</publisher> | |
1008 | <info name="serial" value="T-226090"/> | |
1009 | <!-- * ドラえもん えんそく・いもほり・うんどうかい <10th Anniversary> - Doraemon Ensoku-Imohori-Undoukai ~10th Anniversary Edition~ (Shogakukan - 200309xx - T-226090) --> | |
1010 | <info name="alt_title" value="ドラえもん えんそく・いもほり・うんどうかい"/> | |
1011 | <part name="cart" interface="pico_cart"> | |
1012 | <feature name="pcb" value="171-7090A" /> | |
1013 | <feature name="ic1" value="unknown" /> | |
1014 | <dataarea name="rom" size="2097152"> | |
1015 | <rom name="Doraemon Ensoku-Imohori-Undoukai (10th Anniversary) (Japan).ic1" size="2097152" crc="5adcb456" sha1="9609c98dd34e6d5e5d0389d019c3017b9f244aff" offset="000000" loadflag="load16_word_swap" /> | |
1016 | </dataarea> | |
1017 | </part> | |
1018 | </software> | |
1019 | ||
1008 | 1020 | <software name="dorakkkt"> |
1009 | 1021 | <description>Doraemon Kazoete-Kanzan Kazu Tokei (Jpn)</description> |
1010 | 1022 | <year>199?</year> |
r249189 | r249190 | |
3401 | 3413 | </part> |
3402 | 3414 | </software> |
3403 | 3415 | |
3416 | <software name="peterpan10th" cloneof="peterpan"> | |
3417 | <description>Peter Pan - Neverland e Ikou! ~10th Anniversary Edition~ (Jpn)</description> | |
3418 | <year>2002</year> | |
3419 | <publisher>Sega Toys</publisher> | |
3420 | <info name="serial" value="HPC-6214"/> | |
3421 | <info name="release" value="200306xx"/> | |
3422 | <!-- * ピーターパン ネバーランドへ いこう!<10th> - Peter Pan - Neverland e Ikou! ~10th Anniversary Edition~ (Sega Toys - 200306xx - HPC-6124) [reprint HPC-6047] | |
3423 | malformed token? Used normal Peter Pan alt_title for now --> | |
3424 | <info name="alt_title" value="ピーターパン ネバーランドへ いこう!"/> | |
3425 | <part name="cart" interface="pico_cart"> | |
3426 | <feature name="pcb" value="171-7090A" /> | |
3427 | <feature name="ic1" value="unknown" /> | |
3428 | <dataarea name="rom" size="2097152"> | |
3429 | <rom name="Peter Pan - Neverland e Ikou! (10th Anniversary) (Japan).bin.ic1" size="2097152" crc="e0ea39c0" sha1="ae35761b41632dfbe4f1a6f3065a5db2514d5558" offset="000000" loadflag="load16_word_swap" /> | |
3430 | </dataarea> | |
3431 | </part> | |
3432 | </software> | |
3433 | ||
3404 | 3434 | <software name="psoccer"> |
3405 | 3435 | <description>Pico Soccer - Mezase Soccer Senshu (Jpn)</description> |
3406 | 3436 | <year>1995</year> |
r249189 | r249190 | |
3751 | 3781 | </part> |
3752 | 3782 | </software> |
3753 | 3783 | |
3784 | <software name="sanouk5"> | |
3785 | <description>Sanou Kaihatsu Series 5 Meiro - Kioku (CD Tsuki) (Jpn)</description> | |
3786 | <year>1995</year> | |
3787 | <publisher>Imagineer</publisher> | |
3788 | <info name="serial" value="T-150240"/> | |
3789 | <!---This also contains a complement CD which will be dumped --> | |
3790 | <!-- * 左脳開発シリーズ5 迷路・記憶 (CD付き) (malformed token? - using sanouk4 above to fill field for now) --> | |
3791 | <info name="release" value="19951208"/> | |
3792 | <info name="alt_title" value="左脳開発シリーズ4 推理・構成"/> | |
3793 | <part name="cart" interface="pico_cart"> | |
3794 | <feature name="pcb" value="171-6882A" /> | |
3795 | <feature name="ic1" value="MPR-18458-T" /> | |
3796 | <dataarea name="rom" size="524288"> | |
3797 | <rom name="mpr-18458-t.ic1" size="524288" crc="6340c18a" sha1="101d5652ffd704788f1f44b671be843e3430e58a" offset="000000" loadflag="load16_word_swap" /> | |
3798 | </dataarea> | |
3799 | </part> | |
3800 | </software> | |
3801 | ||
3754 | 3802 | <software name="sanouk6"> |
3755 | 3803 | <description>Sanou Kaihatsu Series 6 Ouyoumondai (Jpn)</description> |
3756 | 3804 | <year>1995</year> |
r249189 | r249190 | |
4295 | 4343 | </part> |
4296 | 4344 | </software> |
4297 | 4345 | |
4346 | <software name="susiechn"> | |
4347 | <description>Susie-chan to Marvy o-Tetsudai Da~isuki! (Jpn)</description> | |
4348 | <year>2000</year> | |
4349 | <publisher>Sega Toys</publisher> | |
4350 | <info name="serial" value="HPC-6089"/> | |
4351 | <info name="release" value="200010xx"/> | |
4352 | <info name="alt_title" value="スージーちゃんとマービー おてつだい だ~いすき!"/> | |
4353 | <part name="cart" interface="pico_cart"> | |
4354 | <feature name="pcb" value="171-7090A" /> | |
4355 | <feature name="ic1" value="9KO-0027-MX" /> | |
4356 | <dataarea name="rom" size="2097152"> | |
4357 | <rom name="9ko-0027-mx.ic1" size="2097152" crc="178fd129" sha1="87c129ae9c253df476a4b588fdaa8afc0e4ecf67" offset="000000" loadflag="load16_word_swap" /> | |
4358 | </dataarea> | |
4359 | </part> | |
4360 | </software> | |
4361 | ||
4298 | 4362 | <software name="sylvan"> |
4299 | 4363 | <description>Silvanian Families - Mori no Nakama to Tanoshii Otanjoubikai (Jpn)</description> |
4300 | 4364 | <year>2001</year> |
r0 | r249190 | |
---|---|---|
1 | <?xml version="1.0"?> | |
2 | <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> | |
3 | <softwarelist name="pro128_cart" description="Prodest PC 128 cartridges"> | |
4 | ||
5 | ||
6 | <software name="agenda"> | |
7 | <description>Agenda</description> | |
8 | <year>1984</year> | |
9 | <publisher>Answare</publisher> | |
10 | ||
11 | <part name="cart" interface="mo5_cart"> | |
12 | <dataarea name="rom" size="16384"> | |
13 | <rom name="agenda (1984)(answare)(fr).m5" size="16384" crc="a4460761" sha1="5a77e3709b90f430c0b4c2c282916095e60ee22b" offset="0x0000" /> | |
14 | </dataarea> | |
15 | </part> | |
16 | </software> | |
17 | ||
18 | <software name="clrpaint"> | |
19 | <description>Colorpaint</description> | |
20 | <year>1985</year> | |
21 | <publisher>Thomson</publisher> | |
22 | ||
23 | <part name="cart" interface="mo5_cart"> | |
24 | <dataarea name="rom" size="32768"> | |
25 | <rom name="colorpaint (1985)(thomson)(it).m5" size="32768" crc="8fa1493b" sha1="d27c6db21adb29dc76df33d7a3855f8532d8cc57" offset="0x0000" /> | |
26 | </dataarea> | |
27 | </part> | |
28 | </software> | |
29 | ||
30 | <software name="logo"> | |
31 | <description>LOGO v1.0</description> | |
32 | <year>1984</year> | |
33 | <publisher>Soli</publisher> | |
34 | ||
35 | <part name="cart" interface="mo5_cart"> | |
36 | <dataarea name="rom" size="16384"> | |
37 | <rom name="logo v1.0 (1984)(soli)(fr).m5" size="16384" crc="6e997494" sha1="039f460f00973da9e192691061b37b493028bc35" offset="0x0000" /> | |
38 | </dataarea> | |
39 | </part> | |
40 | </software> | |
41 | ||
42 | <software name="scriptor"> | |
43 | <description>Scriptor</description> | |
44 | <year>1986</year> | |
45 | <publisher>To Tek</publisher> | |
46 | ||
47 | <part name="cart" interface="mo5_cart"> | |
48 | <dataarea name="rom" size="16384"> | |
49 | <rom name="scriptor (1986)(to tek)(it).m5" size="16384" crc="3bb553c9" sha1="b8b4b7618684e0c9331e8759fe13b07d22340fbe" offset="0x0000" /> | |
50 | </dataarea> | |
51 | </part> | |
52 | </software> | |
53 | ||
54 | ||
55 | </softwarelist> |
r249189 | r249190 | |
---|---|---|
291 | 291 | <info name="alt_title" value="Mr.DO!"/> |
292 | 292 | <info name="serial" value="019E"/> |
293 | 293 | <part name="cart" interface="tutor_cart"> |
294 | <dataarea name="rom" size="8192"> | |
295 | <rom name="tomy 3l1.ic1.bin" size="8192" crc="1dfa3f4b" sha1="93d1c17c5edd44f27c28cde88a68f609b77feb0c" offset="0" /> | |
294 | <dataarea name="rom" size="16384"> | |
295 | <rom name="tomy 3l1.ic1.bin" size="16384" crc="1dfa3f4b" sha1="93d1c17c5edd44f27c28cde88a68f609b77feb0c" offset="0" /> | |
296 | 296 | </dataarea> |
297 | 297 | </part> |
298 | 298 | </software> |
r249189 | r249190 | |
---|---|---|
447 | 447 | </part> |
448 | 448 | </software> |
449 | 449 | |
450 | <!-- Cassette 34 (unreleased) --> | |
451 | <!-- Cassette 35 (unreleased) --> | |
450 | <!-- Cassette 34 - Space Laser (unreleased) --> | |
451 | <!-- Cassette 35 - Rodeo (unreleased) --> | |
452 | 452 | |
453 | 453 | <software name="backgamm"> |
454 | 454 | <description>Backgammon / Jacquet</description> |
r249189 | r249190 | |
491 | 491 | </part> |
492 | 492 | </software> |
493 | 493 | |
494 | <!-- Cassette 39 (unreleased) --> | |
494 | <!-- Cassette 39 - Basketball (unreleased) --> | |
495 | 495 | |
496 | 496 | <software name="suprspac"> |
497 | 497 | <description>Super-Space</description> |
r249189 | r249190 | |
508 | 508 | </part> |
509 | 509 | </software> |
510 | 510 | |
511 | <!-- Unknown number - cart label shows "CASSETTE PARA SISTEMA DE VIDEO H-21" --> | |
512 | <software name="comefrut" supported="no"> | |
513 | <description>Come Frutas</description> | |
514 | <year>19??</year> | |
515 | <publisher>Interton</publisher> | |
516 | <info name="serial" value="??"/> | |
517 | <part name="cart" interface="vc4000_cart"> | |
518 | <feature name="slot" value="rom4k" /> | |
519 | <dataarea name="rom" size="4096"> | |
520 | <rom name="comefrutas.bin" size="4096" crc="f66c8e3a" sha1="c695bd36b572dff2c8f6c49edfcfda6dda3675c1" offset="0" /> | |
521 | </dataarea> | |
522 | </part> | |
523 | </software> | |
524 | ||
511 | 525 | </softwarelist> |
r249189 | r249190 | |
---|---|---|
779 | 779 | MAME_DIR .. "src/emu/bus/isa/svga_cirrus.h", |
780 | 780 | MAME_DIR .. "src/emu/bus/isa/ega.c", |
781 | 781 | MAME_DIR .. "src/emu/bus/isa/ega.h", |
782 | MAME_DIR .. "src/emu/bus/isa/pgc.c", | |
783 | MAME_DIR .. "src/emu/bus/isa/pgc.h", | |
782 | 784 | MAME_DIR .. "src/emu/bus/isa/vga.c", |
783 | 785 | MAME_DIR .. "src/emu/bus/isa/vga.h", |
784 | 786 | MAME_DIR .. "src/emu/bus/isa/vga_ati.c", |
r249189 | r249190 | |
2185 | 2187 | MAME_DIR .. "src/emu/bus/cpc/hd20.h", |
2186 | 2188 | MAME_DIR .. "src/emu/bus/cpc/ddi1.c", |
2187 | 2189 | MAME_DIR .. "src/emu/bus/cpc/ddi1.h", |
2190 | MAME_DIR .. "src/emu/bus/cpc/magicsound.c", | |
2191 | MAME_DIR .. "src/emu/bus/cpc/magicsound.h", | |
2188 | 2192 | } |
2189 | 2193 | end |
2190 | 2194 |
r249189 | r249190 | |
---|---|---|
627 | 627 | files { |
628 | 628 | MAME_DIR .. "src/emu/sound/upd7759.c", |
629 | 629 | MAME_DIR .. "src/emu/sound/upd7759.h", |
630 | MAME_DIR .. "src/emu/sound/315-5641.c", | |
631 | MAME_DIR .. "src/emu/sound/315-5641.h", | |
630 | 632 | } |
631 | 633 | end |
632 | 634 |
r249189 | r249190 | |
---|---|---|
2212 | 2212 | files { |
2213 | 2213 | MAME_DIR .. "src/mess/drivers/pcd.c", |
2214 | 2214 | MAME_DIR .. "src/mess/machine/pcd_kbd.c", |
2215 | MAME_DIR .. "src/mess/video/pcd.c", | |
2215 | 2216 | } |
2216 | 2217 | |
2217 | 2218 | createMESSProjects(_target, _subtarget, "slicer") |
r249189 | r249190 | |
---|---|---|
31 | 31 | * RAMDIS 45 46 CURSOR |
32 | 32 | * L.PEN 47 48 _EXP |
33 | 33 | * GND 49 50 CLOCK |
34 | * | |
35 | * Aleste 520EX expansion port is 62-pin. Same as the CPC above, except that pin 40 is not connected, plus the following: | |
36 | * | |
37 | * MAP14 A26 B26 MAP15 | |
38 | * MAP16 A27 B27 MAP17 | |
39 | * MAP18 A28 B28 MAPBLK | |
40 | * _INTA A29 B29 _DISP | |
41 | * Agnd A30 B30 _CPU | |
42 | * Aucc A31 B31 HIGH | |
43 | * | |
34 | 44 | */ |
35 | 45 | |
36 | 46 | #pragma once |
r0 | r249190 | |
---|---|---|
1 | // license:BSD-3-Clause | |
2 | // copyright-holders:Barry Rodewald | |
3 | /* | |
4 | * magicsound.c | |
5 | * | |
6 | * Magic Sound Board for the Aleste 520EX | |
7 | * | |
8 | */ | |
9 | ||
10 | #include "emu.h" | |
11 | #include "magicsound.h" | |
12 | #include "includes/amstrad.h" | |
13 | ||
14 | ||
15 | //************************************************************************** | |
16 | // DEVICE DEFINITIONS | |
17 | //************************************************************************** | |
18 | ||
19 | const device_type AL_MAGICSOUND = &device_creator<al_magicsound_device>; | |
20 | ||
21 | ||
22 | static MACHINE_CONFIG_FRAGMENT( al_magicsound ) | |
23 | MCFG_DEVICE_ADD( "dmac", AM9517A, XTAL_4MHz ) // CLK from expansion port | |
24 | // According to the schematics, the TC pin (EOP on western chips) is connected to NMI on the expansion port. | |
25 | // NMIs seem to occur too quickly when this is active, so either EOP is not triggered at the correct time, or | |
26 | // the K1810WT37 is different to the i8237/AM9517A | |
27 | //MCFG_I8237_OUT_EOP_CB(DEVWRITELINE("^", cpc_expansion_slot_device, nmi_w)) // MCFG_DEVCB_INVERT | |
28 | MCFG_I8237_OUT_HREQ_CB(DEVWRITELINE("dmac", am9517a_device, hack_w)) | |
29 | MCFG_I8237_IN_MEMR_CB(READ8(al_magicsound_device,dma_read_byte)) | |
30 | MCFG_I8237_OUT_IOW_0_CB(WRITE8(al_magicsound_device,dma_write_byte)) | |
31 | MCFG_I8237_OUT_IOW_1_CB(WRITE8(al_magicsound_device,dma_write_byte)) | |
32 | MCFG_I8237_OUT_IOW_2_CB(WRITE8(al_magicsound_device,dma_write_byte)) | |
33 | MCFG_I8237_OUT_IOW_3_CB(WRITE8(al_magicsound_device,dma_write_byte)) | |
34 | MCFG_I8237_OUT_DACK_0_CB(WRITELINE(al_magicsound_device, dack0_w)) | |
35 | MCFG_I8237_OUT_DACK_1_CB(WRITELINE(al_magicsound_device, dack1_w)) | |
36 | MCFG_I8237_OUT_DACK_2_CB(WRITELINE(al_magicsound_device, dack2_w)) | |
37 | MCFG_I8237_OUT_DACK_3_CB(WRITELINE(al_magicsound_device, dack3_w)) | |
38 | ||
39 | // Timing does not seem to be correct. | |
40 | // According to the schematics, the clock is from the clock pin on the expansion port (4MHz), and | |
41 | // passes through an inverter to each CLK pin on both timers. This seems to be too fast. | |
42 | // Timer outputs to SAM0/1/2/3 are sample clocks for each sound channel, D/A0 is the low bit of the channel select. | |
43 | MCFG_DEVICE_ADD("timer1", PIT8254, 0) | |
44 | MCFG_PIT8253_CLK0(XTAL_4MHz) | |
45 | MCFG_PIT8253_OUT0_HANDLER(WRITELINE(al_magicsound_device,sam0_w)) | |
46 | MCFG_PIT8253_CLK1(XTAL_4MHz) | |
47 | MCFG_PIT8253_OUT1_HANDLER(WRITELINE(al_magicsound_device,sam1_w)) | |
48 | MCFG_PIT8253_CLK2(XTAL_4MHz) | |
49 | MCFG_PIT8253_OUT2_HANDLER(WRITELINE(al_magicsound_device,sam2_w)) | |
50 | ||
51 | MCFG_DEVICE_ADD("timer2", PIT8254, 0) | |
52 | MCFG_PIT8253_CLK0(XTAL_4MHz) | |
53 | MCFG_PIT8253_OUT0_HANDLER(WRITELINE(al_magicsound_device,sam3_w)) | |
54 | MCFG_PIT8253_CLK1(XTAL_4MHz) | |
55 | MCFG_PIT8253_OUT1_HANDLER(WRITELINE(al_magicsound_device,da0_w)) | |
56 | MCFG_PIT8253_CLK2(XTAL_4MHz) | |
57 | ||
58 | MCFG_SPEAKER_STANDARD_MONO("mono") | |
59 | MCFG_DAC_ADD("dac1") | |
60 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) | |
61 | // no pass-through(?) | |
62 | MACHINE_CONFIG_END | |
63 | ||
64 | machine_config_constructor al_magicsound_device::device_mconfig_additions() const | |
65 | { | |
66 | return MACHINE_CONFIG_NAME( al_magicsound ); | |
67 | } | |
68 | ||
69 | //************************************************************************** | |
70 | // LIVE DEVICE | |
71 | //************************************************************************** | |
72 | ||
73 | al_magicsound_device::al_magicsound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : | |
74 | device_t(mconfig, AL_MAGICSOUND, "Magic Sound Board", tag, owner, clock, "al_magicsound", __FILE__), | |
75 | device_cpc_expansion_card_interface(mconfig, *this), | |
76 | m_dac1(*this,"dac1"), | |
77 | m_dmac(*this,"dmac"), | |
78 | m_timer1(*this,"timer1"), | |
79 | m_timer2(*this,"timer2") | |
80 | { | |
81 | } | |
82 | ||
83 | //------------------------------------------------- | |
84 | // device_start - device-specific startup | |
85 | //------------------------------------------------- | |
86 | ||
87 | void al_magicsound_device::device_start() | |
88 | { | |
89 | device_t* cpu = machine().device("maincpu"); | |
90 | address_space& space = cpu->memory().space(AS_IO); | |
91 | m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); | |
92 | ||
93 | space.install_readwrite_handler(0xf8d0,0xf8df,0,0,read8_delegate(FUNC(al_magicsound_device::dmac_r),this),write8_delegate(FUNC(al_magicsound_device::dmac_w),this)); | |
94 | space.install_write_handler(0xf9d0,0xf9df,0,0,write8_delegate(FUNC(al_magicsound_device::timer_w),this)); | |
95 | space.install_write_handler(0xfad0,0xfadf,0,0,write8_delegate(FUNC(al_magicsound_device::volume_w),this)); | |
96 | space.install_write_handler(0xfbd0,0xfbdf,0,0,write8_delegate(FUNC(al_magicsound_device::mapper_w),this)); | |
97 | ||
98 | m_ramptr = machine().device<ram_device>(":" RAM_TAG); | |
99 | ||
100 | for(int x=0;x<4;x++) | |
101 | { | |
102 | save_item(NAME(m_output[x]),x); | |
103 | } | |
104 | } | |
105 | ||
106 | //------------------------------------------------- | |
107 | // device_reset - device-specific reset | |
108 | //------------------------------------------------- | |
109 | ||
110 | void al_magicsound_device::device_reset() | |
111 | { | |
112 | m_current_channel = -1; | |
113 | m_current_output = 0; | |
114 | set_timer_gate(false); | |
115 | } | |
116 | ||
117 | READ8_MEMBER(al_magicsound_device::dmac_r) | |
118 | { | |
119 | return m_dmac->read(space,offset); | |
120 | } | |
121 | ||
122 | WRITE8_MEMBER(al_magicsound_device::dmac_w) | |
123 | { | |
124 | m_dmac->write(space,offset,data); | |
125 | } | |
126 | ||
127 | WRITE8_MEMBER(al_magicsound_device::timer_w) | |
128 | { | |
129 | // can both PITs be selected at the same time? | |
130 | if(offset & 0x08) | |
131 | m_timer1->write(space,offset & 0x03,data); | |
132 | if(offset & 0x04) | |
133 | m_timer2->write(space,offset & 0x03,data); | |
134 | } | |
135 | ||
136 | WRITE8_MEMBER(al_magicsound_device::volume_w) | |
137 | { | |
138 | m_volume[offset & 0x03] = data & 0x3f; | |
139 | } | |
140 | ||
141 | WRITE8_MEMBER(al_magicsound_device::mapper_w) | |
142 | { | |
143 | UINT8 channel = (offset & 0x0c) >> 2; | |
144 | UINT8 page = offset & 0x03; | |
145 | m_page[channel][page] = (~(data) & 0x3f) * 0x4000; | |
146 | set_timer_gate(true); | |
147 | } | |
148 | ||
149 | WRITE_LINE_MEMBER(al_magicsound_device::da0_w) | |
150 | { | |
151 | m_dac1->write_unsigned8(m_output[m_current_output++]); | |
152 | if(m_current_output > 3) | |
153 | m_current_output = 0; | |
154 | } | |
155 | ||
156 | WRITE_LINE_MEMBER(al_magicsound_device::dack0_w) { m_dack[0] = state; } | |
157 | WRITE_LINE_MEMBER(al_magicsound_device::dack1_w) { m_dack[1] = state; } | |
158 | WRITE_LINE_MEMBER(al_magicsound_device::dack2_w) { m_dack[2] = state; } | |
159 | WRITE_LINE_MEMBER(al_magicsound_device::dack3_w) { m_dack[3] = state; } | |
160 | ||
161 | WRITE_LINE_MEMBER(al_magicsound_device::sam0_w) { m_current_channel = 0; if(m_dack[0] && state) m_dmac->dreq0_w(1); } | |
162 | WRITE_LINE_MEMBER(al_magicsound_device::sam1_w) { m_current_channel = 1; if(m_dack[1] && state) m_dmac->dreq1_w(1); } | |
163 | WRITE_LINE_MEMBER(al_magicsound_device::sam2_w) { m_current_channel = 2; if(m_dack[2] && state) m_dmac->dreq2_w(1); } | |
164 | WRITE_LINE_MEMBER(al_magicsound_device::sam3_w) { m_current_channel = 3; if(m_dack[3] && state) m_dmac->dreq3_w(1); } | |
165 | ||
166 | READ8_MEMBER(al_magicsound_device::dma_read_byte) | |
167 | { | |
168 | UINT8 ret = 0xff; | |
169 | UINT8 page = (offset & 0xc000) >> 14; | |
170 | ||
171 | if(m_current_channel != -1) | |
172 | ret = m_ramptr->read(m_page[m_current_channel][page] + (offset & 0x3fff)); | |
173 | return ret; | |
174 | } | |
175 | ||
176 | WRITE8_MEMBER(al_magicsound_device::dma_write_byte) | |
177 | { | |
178 | m_output[m_current_channel] = data; | |
179 | } | |
180 | ||
181 | void al_magicsound_device::set_timer_gate(bool state) | |
182 | { | |
183 | m_timer1->write_gate0(state); | |
184 | m_timer1->write_gate1(state); | |
185 | m_timer1->write_gate2(state); | |
186 | m_timer2->write_gate0(state); | |
187 | m_timer2->write_gate1(state); | |
188 | m_timer2->write_gate2(state); | |
189 | } | |
190 |
r0 | r249190 | |
---|---|---|
1 | // license:BSD-3-Clause | |
2 | // copyright-holders:Barry Rodewald | |
3 | /* | |
4 | * magicsound.h | |
5 | * | |
6 | * Magic Sound Board for the Aleste 520EX | |
7 | * | |
8 | * DMA-based 4-channel sound board | |
9 | * | |
10 | * 1x K1810WT37 DMA controller (i8237/AM9517A) | |
11 | * 2x K1810WT54 programmable timers (i8254) | |
12 | * 1x K1118PA1 DAC (MC10318) | |
13 | * | |
14 | * I/O Ports: | |
15 | * FxDx: selects the board | |
16 | * F8Dx: DMA controller (R/w) | |
17 | * F9Dx: PIT timers (A2 active for channels 0-2, A3 active for channels 3-5) (W/O) | |
18 | * FADx: Volume control (A1-A0 = channel) (W/O, 6-bit) | |
19 | * FBDx: Mapper (A1-A0 = mapper page number, A3-A2 = channel, D5-D0 = inverted page number) (W/O) | |
20 | * | |
21 | * Further info available here: http://cpcwiki.eu/index.php/Magic_Sound_Board | |
22 | * | |
23 | */ | |
24 | ||
25 | #ifndef MAGICSOUND_H_ | |
26 | #define MAGICSOUND_H_ | |
27 | ||
28 | #include "emu.h" | |
29 | #include "cpcexp.h" | |
30 | #include "sound/dmadac.h" | |
31 | #include "sound/dac.h" | |
32 | #include "machine/am9517a.h" | |
33 | #include "machine/pit8253.h" | |
34 | #include "machine/ram.h" | |
35 | ||
36 | class al_magicsound_device : public device_t, | |
37 | public device_cpc_expansion_card_interface | |
38 | { | |
39 | public: | |
40 | // construction/destruction | |
41 | al_magicsound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
42 | ||
43 | // optional information overrides | |
44 | virtual machine_config_constructor device_mconfig_additions() const; | |
45 | ||
46 | DECLARE_READ8_MEMBER(dmac_r); | |
47 | DECLARE_WRITE8_MEMBER(dmac_w); | |
48 | DECLARE_WRITE8_MEMBER(timer_w); | |
49 | DECLARE_WRITE8_MEMBER(volume_w); | |
50 | DECLARE_WRITE8_MEMBER(mapper_w); | |
51 | DECLARE_WRITE_LINE_MEMBER(da0_w); | |
52 | DECLARE_READ8_MEMBER(dma_read_byte); | |
53 | DECLARE_WRITE8_MEMBER(dma_write_byte); | |
54 | DECLARE_WRITE_LINE_MEMBER(dack0_w); | |
55 | DECLARE_WRITE_LINE_MEMBER(dack1_w); | |
56 | DECLARE_WRITE_LINE_MEMBER(dack2_w); | |
57 | DECLARE_WRITE_LINE_MEMBER(dack3_w); | |
58 | DECLARE_WRITE_LINE_MEMBER(sam0_w); | |
59 | DECLARE_WRITE_LINE_MEMBER(sam1_w); | |
60 | DECLARE_WRITE_LINE_MEMBER(sam2_w); | |
61 | DECLARE_WRITE_LINE_MEMBER(sam3_w); | |
62 | ||
63 | protected: | |
64 | // device-level overrides | |
65 | virtual void device_start(); | |
66 | virtual void device_reset(); | |
67 | ||
68 | private: | |
69 | cpc_expansion_slot_device *m_slot; | |
70 | ||
71 | required_device<dac_device> m_dac1; | |
72 | required_device<am9517a_device> m_dmac; | |
73 | required_device<pit8254_device> m_timer1; | |
74 | required_device<pit8254_device> m_timer2; | |
75 | ||
76 | void set_timer_gate(bool state); | |
77 | ||
78 | UINT8 m_volume[4]; | |
79 | UINT32 m_page[4][4]; | |
80 | UINT8 m_output[4]; | |
81 | bool m_dack[4]; | |
82 | INT8 m_current_channel; | |
83 | ram_device* m_ramptr; | |
84 | UINT8 m_current_output; | |
85 | }; | |
86 | ||
87 | // device type definition | |
88 | extern const device_type AL_MAGICSOUND; | |
89 | ||
90 | ||
91 | #endif /* MAGICSOUND_H_ */ |
r249189 | r249190 | |
---|---|---|
18 | 18 | SLOT_INTERFACE("aga", ISA8_AGA) |
19 | 19 | SLOT_INTERFACE("aga_pc200", ISA8_AGA_PC200) |
20 | 20 | SLOT_INTERFACE("ega", ISA8_EGA) |
21 | SLOT_INTERFACE("pgc", ISA8_PGC) | |
21 | 22 | SLOT_INTERFACE("svga_et4k", ISA8_SVGA_ET4K) |
22 | 23 | SLOT_INTERFACE("num9rev",ISA8_NUM_9_REV) |
23 | 24 | SLOT_INTERFACE("com", ISA8_COM) |
r249189 | r249190 | |
55 | 56 | SLOT_INTERFACE("cga", ISA8_CGA) |
56 | 57 | SLOT_INTERFACE("wyse700", ISA8_WYSE700) |
57 | 58 | SLOT_INTERFACE("ega", ISA8_EGA) |
59 | SLOT_INTERFACE("pgc", ISA8_PGC) | |
58 | 60 | SLOT_INTERFACE("vga", ISA8_VGA) |
59 | 61 | SLOT_INTERFACE("svga_et4k", ISA8_SVGA_ET4K) |
60 | 62 | SLOT_INTERFACE("num9rev",ISA8_NUM_9_REV) |
r249189 | r249190 | |
---|---|---|
18 | 18 | #include "cga.h" |
19 | 19 | #include "aga.h" |
20 | 20 | #include "ega.h" |
21 | #include "pgc.h" | |
21 | 22 | #include "vga.h" |
22 | 23 | #include "vga_ati.h" |
23 | 24 | #include "svga_cirrus.h" |
r0 | r249190 | |
---|---|---|
1 | // license:BSD-3-Clause | |
2 | // copyright-holders:Sergey Svishchev | |
3 | ||
4 | /*************************************************************************** | |
5 | ||
6 | IBM Professional Graphics Controller (PGC), skeleton driver. | |
7 | ||
8 | Designed for IBM by Vermont Microsystems. References: | |
9 | ||
10 | IBM Options and Adapters manual | |
11 | http://www.minuszerodegrees.net/oa/OA%20-%20IBM%20Professional%20Graphics%20Controller.pdf | |
12 | http://bitsavers.org/pdf/ibm/pc/cards/Technical_Reference_Options_and_Adapters_Volume_3.pdf | |
13 | IBM Systems Journal white paper | |
14 | http://wayback.archive.org/web/20061015235146/http://www.research.ibm.com/journal/sj/241/ibmsj2401D.pdf | |
15 | John Elliott's page | |
16 | http://www.seasip.info/VintagePC/pgc.html | |
17 | ||
18 | To do: | |
19 | - memory map (restore ROM mapping on reset, ...) | |
20 | - various VRAM write modes | |
21 | - what's up with irq 3 (= vblank irq)? | |
22 | - "test pin of the microprocessor samples the hsync pulse" | |
23 | - CGA emulator | |
24 | - bus state handling? | |
25 | - VRAM address translator ROM? | |
26 | ||
27 | ***************************************************************************/ | |
28 | ||
29 | #include "emu.h" | |
30 | ||
31 | //nclude "machine/ram.h" | |
32 | ||
33 | #include "pgc.h" | |
34 | ||
35 | #define VERBOSE_PGC 1 | |
36 | ||
37 | #define DBG_LOG(N,M,A) \ | |
38 | do { \ | |
39 | if(VERBOSE_PGC>=N) \ | |
40 | { \ | |
41 | if( M ) \ | |
42 | logerror("%11.6f at %s: %-24s",machine().time().as_double(),machine().describe_context(),(char*)M ); \ | |
43 | logerror A; \ | |
44 | } \ | |
45 | } while (0) | |
46 | ||
47 | #define PGC_SCREEN_NAME "pgc_screen" | |
48 | ||
49 | #define PGC_TOTAL_HORZ 820 | |
50 | #define PGC_DISP_HORZ 640 | |
51 | #define PGC_HORZ_START 80 | |
52 | ||
53 | #define PGC_TOTAL_VERT 508 | |
54 | #define PGC_DISP_VERT 480 | |
55 | #define PGC_VERT_START 10 | |
56 | ||
57 | /* | |
58 | Prototypes | |
59 | */ | |
60 | ||
61 | ROM_START( pgc ) | |
62 | ROM_REGION(0x100000, "maincpu", 0) | |
63 | ROM_DEFAULT_BIOS("1985") | |
64 | ||
65 | ROM_SYSTEM_BIOS(0, "1984", "1984 firmware, P/N 6137322/3") | |
66 | ROMX_LOAD("ibm_6137323_pgc_card_27256.bin", 0x00000, 0x8000, CRC(f564f342) SHA1(c5ef17fd1569043cb59f61faf828ea8b0ee95526), ROM_BIOS(1)) | |
67 | ROMX_LOAD("ibm_6137322_pgc_card_27256.bin", 0x08000, 0x8000, CRC(5e6cc82f) SHA1(45b3ffb5a9c51986862f8d47b3e03dcaaf4073d5), ROM_BIOS(1)) | |
68 | ||
69 | ROM_SYSTEM_BIOS(1, "1985", "1985 firmware, P/N 59X7354/5") | |
70 | ROMX_LOAD("pgc_u44.bin", 0x00000, 0x8000, CRC(71280241) SHA1(7042ccd4ebd03f576a256a433b8aa38d1b4fefa8), ROM_BIOS(2)) | |
71 | ROMX_LOAD("pgc_u43.bin", 0x08000, 0x8000, CRC(923f5ea3) SHA1(2b2a55d64b20d3a613b00c51443105aa03eca5d6), ROM_BIOS(2)) | |
72 | ||
73 | ROM_REGION(0x800, "commarea", ROMREGION_ERASE00) | |
74 | ||
75 | ROM_REGION(0x1000, "chargen", 0) | |
76 | ROM_LOAD("pgc_u27.bin", 0x0000, 0x1000, CRC(6be256cc) SHA1(deb1195886268dcddce10459911e020f7a9f74f7)) | |
77 | ROM_END | |
78 | ||
79 | static INPUT_PORTS_START( pgc ) | |
80 | PORT_START("DSW") | |
81 | /* | |
82 | PORT_DIPNAME( 0x01, 0x00, "CGA emulator") | |
83 | PORT_DIPSETTING( 0x00, DEF_STR(No) ) | |
84 | PORT_DIPSETTING( 0x01, DEF_STR(Yes) ) | |
85 | */ | |
86 | PORT_DIPNAME( 0x02, 0x00, "Communication area") | |
87 | PORT_DIPSETTING( 0x00, "C6000" ) | |
88 | PORT_DIPSETTING( 0x02, "C6400" ) | |
89 | INPUT_PORTS_END | |
90 | ||
91 | /* | |
92 | write only | |
93 | 30000 LUT WR O L | |
94 | 30001 LUT WR I L | |
95 | 32000 MODE WT L | |
96 | 32001 NIBBLE WT L | |
97 | 3200A ?? | |
98 | 34000 FUNCTION WT L | |
99 | 34001 STARTADD WT L | |
100 | 36001 CURSOR WT L | |
101 | ||
102 | read only | |
103 | 38000 LUT RD O L | |
104 | 38001 LUT RD I L | |
105 | 3C001 INIT L/INIT H | |
106 | */ | |
107 | ||
108 | static ADDRESS_MAP_START( pgc_map, AS_PROGRAM, 8, isa8_pgc_device ) | |
109 | ADDRESS_MAP_UNMAP_HIGH | |
110 | AM_RANGE(0x00000, 0x07fff) AM_ROM | |
111 | AM_RANGE(0x08000, 0x0ffff) AM_ROM AM_REGION("maincpu", 0x8000) | |
112 | AM_RANGE(0x10000, 0x1001f) AM_READWRITE(stateparam_r, stateparam_w) | |
113 | // AM_RANGE(0x18000, 0x18fff) AM_RAM // ?? | |
114 | AM_RANGE(0x28000, 0x287ff) AM_RAM AM_REGION("commarea", 0) AM_MIRROR(0x800) | |
115 | AM_RANGE(0x3c000, 0x3c001) AM_READ(init_r) | |
116 | // AM_RANGE(0x3e000, 0x3efff) AM_RAM // ?? | |
117 | AM_RANGE(0xf8000, 0xfffff) AM_ROM AM_REGION("maincpu", 0x8000) | |
118 | ADDRESS_MAP_END | |
119 | ||
120 | static ADDRESS_MAP_START( pgc_io, AS_IO, 8, isa8_pgc_device ) | |
121 | ADDRESS_MAP_UNMAP_HIGH | |
122 | ADDRESS_MAP_END | |
123 | ||
124 | static const gfx_layout pgc_charlayout = | |
125 | { | |
126 | 8, 16, /* 8x16 pixels */ | |
127 | 256, /* 256 characters */ | |
128 | 1, /* 1 bits per pixel */ | |
129 | { 0 }, /* no bitplanes */ | |
130 | /* x offsets */ | |
131 | { 0, 1, 2, 3, 4, 5, 6, 7 }, | |
132 | /* y offsets */ | |
133 | { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 }, | |
134 | 8*16 /* every char takes 10 bytes */ | |
135 | }; | |
136 | ||
137 | static GFXDECODE_START( pgc ) | |
138 | GFXDECODE_REVERSEBITS("chargen", 0, pgc_charlayout, 0, 1) | |
139 | GFXDECODE_END | |
140 | ||
141 | MACHINE_CONFIG_FRAGMENT( pcvideo_pgc ) | |
142 | MCFG_CPU_ADD("maincpu", I8088, XTAL_24MHz/3) | |
143 | MCFG_CPU_PROGRAM_MAP(pgc_map) | |
144 | MCFG_CPU_IO_MAP(pgc_io) | |
145 | #if 0 | |
146 | MCFG_CPU_VBLANK_INT_DRIVER(PGC_SCREEN_NAME, isa8_pgc_device, vblank_irq) | |
147 | MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(isa8_pgc_device, irq_callback) | |
148 | #endif | |
149 | ||
150 | MCFG_TIMER_DRIVER_ADD_PERIODIC("scantimer", isa8_pgc_device, scanline_callback, | |
151 | attotime::from_hz(60*PGC_TOTAL_VERT)) | |
152 | MCFG_TIMER_START_DELAY(attotime::from_hz(XTAL_50MHz/(2*PGC_HORZ_START))) | |
153 | ||
154 | MCFG_SCREEN_ADD(PGC_SCREEN_NAME, RASTER) | |
155 | MCFG_SCREEN_RAW_PARAMS(XTAL_50MHz/2, | |
156 | PGC_TOTAL_HORZ, PGC_HORZ_START, PGC_HORZ_START+PGC_DISP_HORZ, | |
157 | PGC_TOTAL_VERT, PGC_VERT_START, PGC_VERT_START+PGC_DISP_VERT) | |
158 | MCFG_SCREEN_UPDATE_DRIVER(isa8_pgc_device, screen_update) | |
159 | MCFG_SCREEN_PALETTE("palette") | |
160 | ||
161 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", pgc) | |
162 | MCFG_PALETTE_ADD( "palette", 256 ) | |
163 | MACHINE_CONFIG_END | |
164 | ||
165 | //************************************************************************** | |
166 | // GLOBAL VARIABLES | |
167 | //************************************************************************** | |
168 | ||
169 | const device_type ISA8_PGC = &device_creator<isa8_pgc_device>; | |
170 | ||
171 | ||
172 | //------------------------------------------------- | |
173 | // machine_config_additions - device-specific | |
174 | // machine configurations | |
175 | //------------------------------------------------- | |
176 | ||
177 | machine_config_constructor isa8_pgc_device::device_mconfig_additions() const | |
178 | { | |
179 | return MACHINE_CONFIG_NAME( pcvideo_pgc ); | |
180 | } | |
181 | ||
182 | //------------------------------------------------- | |
183 | // rom_region - device-specific ROM region | |
184 | //------------------------------------------------- | |
185 | ||
186 | const rom_entry *isa8_pgc_device::device_rom_region() const | |
187 | { | |
188 | return ROM_NAME( pgc ); | |
189 | } | |
190 | ||
191 | //------------------------------------------------- | |
192 | // input_ports - device-specific input ports | |
193 | //------------------------------------------------- | |
194 | ||
195 | ioport_constructor isa8_pgc_device::device_input_ports() const | |
196 | { | |
197 | return INPUT_PORTS_NAME( pgc ); | |
198 | } | |
199 | ||
200 | //************************************************************************** | |
201 | // LIVE DEVICE | |
202 | //************************************************************************** | |
203 | ||
204 | //------------------------------------------------- | |
205 | // isa8_pgc_device - constructor | |
206 | //------------------------------------------------- | |
207 | ||
208 | isa8_pgc_device::isa8_pgc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : | |
209 | device_t(mconfig, ISA8_PGC, "IBM Professional Graphics Controller", tag, owner, clock, "isa_ibm_pgc", __FILE__), | |
210 | device_isa8_card_interface(mconfig, *this), | |
211 | m_cpu(*this, "maincpu"), | |
212 | m_screen(*this, PGC_SCREEN_NAME), | |
213 | m_palette(*this, "palette") | |
214 | { | |
215 | } | |
216 | ||
217 | isa8_pgc_device::isa8_pgc_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : | |
218 | device_t(mconfig, type, name, tag, owner, clock, shortname, source), | |
219 | device_isa8_card_interface(mconfig, *this), | |
220 | m_cpu(*this, "maincpu"), | |
221 | m_screen(*this, PGC_SCREEN_NAME), | |
222 | m_palette(*this, "palette") | |
223 | { | |
224 | } | |
225 | ||
226 | //------------------------------------------------- | |
227 | // device_start - device-specific startup | |
228 | //------------------------------------------------- | |
229 | ||
230 | void isa8_pgc_device::device_start() | |
231 | { | |
232 | address_space &space = m_cpu->space( AS_PROGRAM ); | |
233 | int width = PGC_DISP_HORZ; | |
234 | int height = PGC_DISP_VERT; | |
235 | ||
236 | if (m_palette != NULL && !m_palette->started()) | |
237 | throw device_missing_dependencies(); | |
238 | ||
239 | set_isa_device(); | |
240 | ||
241 | for (int i = 0; i < 256; i++ ) | |
242 | { | |
243 | m_palette->set_pen_color( i, 0, 0, 0 ); | |
244 | } | |
245 | ||
246 | m_bitmap = auto_bitmap_ind16_alloc(machine(), width, height); | |
247 | m_bitmap->fill(0); | |
248 | ||
249 | m_vram = auto_alloc_array(machine(), UINT8, 0x78000); | |
250 | space.install_readwrite_bank(0x80000, 0xf7fff, "vram"); | |
251 | membank("vram")->set_base(m_vram); | |
252 | ||
253 | m_eram = auto_alloc_array(machine(), UINT8, 0x8000); | |
254 | } | |
255 | ||
256 | //------------------------------------------------- | |
257 | // device_reset - device-specific reset | |
258 | //------------------------------------------------- | |
259 | ||
260 | void isa8_pgc_device::device_reset() | |
261 | { | |
262 | memset(m_stateparam, 0, sizeof(m_stateparam)); | |
263 | memset(m_lut, 0, sizeof(m_lut)); | |
264 | ||
265 | m_commarea = memregion("commarea")->base(); | |
266 | if (BIT(ioport("DSW")->read(), 1)) | |
267 | m_isa->install_bank(0xc6400, 0xc67ff, 0, 0, "commarea", m_commarea); | |
268 | else | |
269 | m_isa->install_bank(0xc6000, 0xc63ff, 0, 0, "commarea", m_commarea); | |
270 | #if 0 | |
271 | address_space &space = m_cpu->space( AS_PROGRAM ); | |
272 | ||
273 | space.unmap_readwrite(0xf8000, 0xfffff); | |
274 | space.install_rom(0xf8000, 0xfffff, | |
275 | space.machine().root_device().memregion("maincpu")->base() + 0x8000); | |
276 | #endif | |
277 | } | |
278 | ||
279 | // | |
280 | ||
281 | INTERRUPT_GEN_MEMBER(isa8_pgc_device::vblank_irq) | |
282 | { | |
283 | DBG_LOG(2,"irq",("vblank_irq\n")); | |
284 | m_cpu->set_input_line(0, ASSERT_LINE); | |
285 | } | |
286 | ||
287 | IRQ_CALLBACK_MEMBER(isa8_pgc_device::irq_callback) | |
288 | { | |
289 | DBG_LOG(2,"irq",("irq_callback\n")); | |
290 | m_cpu->set_input_line(0, CLEAR_LINE); | |
291 | return 3; | |
292 | } | |
293 | ||
294 | // memory handlers | |
295 | ||
296 | READ8_MEMBER( isa8_pgc_device::stateparam_r ) { | |
297 | UINT8 ret; | |
298 | ||
299 | ret = m_stateparam[offset >> 1]; | |
300 | if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0) | |
301 | { | |
302 | DBG_LOG(1,"stateparam",("R @ %02x == %02x\n", offset, ret)); | |
303 | } | |
304 | return ret; | |
305 | } | |
306 | ||
307 | WRITE8_MEMBER( isa8_pgc_device::stateparam_w ) { | |
308 | if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0) | |
309 | { | |
310 | DBG_LOG(1,"stateparam",("W @ %02x <- %02x\n", offset, data)); | |
311 | } | |
312 | m_stateparam[offset >> 1] = data; | |
313 | } | |
314 | ||
315 | WRITE8_MEMBER( isa8_pgc_device::lut_w ) { | |
316 | UINT8 o = (offset >> 1) * 3; | |
317 | ||
318 | if (offset & 1) { | |
319 | m_lut[o + 2] = (data & 15) << 4; | |
320 | m_palette->set_pen_color( offset >> 1, m_lut[o], m_lut[o + 1], m_lut[o + 2] ); | |
321 | DBG_LOG(1,"lut",("W @ %02X <- %d %d %d\n", | |
322 | offset >> 1, m_lut[o], m_lut[o + 1], m_lut[o + 2] )); | |
323 | } else { | |
324 | m_lut[o ] = data & 0xf0; | |
325 | m_lut[o + 1] = (data & 15) << 4; | |
326 | } | |
327 | } | |
328 | ||
329 | READ8_MEMBER( isa8_pgc_device::init_r ) { | |
330 | DBG_LOG(1,"INIT",("unmapping ROM\n")); | |
331 | space.unmap_read(0xf8000, 0xfffff); | |
332 | ||
333 | DBG_LOG(1,"INIT",("mapping emulator RAM\n")); | |
334 | space.install_readwrite_bank(0xf8000, 0xfffff, "eram"); | |
335 | membank("eram")->set_base(m_eram); | |
336 | ||
337 | DBG_LOG(1,"INIT",("mapping LUT\n")); | |
338 | space.install_write_handler(0xf8400, 0xf85ff, | |
339 | write8_delegate(FUNC(isa8_pgc_device::lut_w), this)); | |
340 | ||
341 | return 0; // XXX ignored | |
342 | } | |
343 | ||
344 | TIMER_DEVICE_CALLBACK_MEMBER(isa8_pgc_device::scanline_callback) | |
345 | { | |
346 | UINT16 x, y = m_screen->vpos(); | |
347 | UINT16 *p; | |
348 | UINT8 *v; | |
349 | ||
350 | // XXX hpos shifts every frame -- fix | |
351 | if (y == 0) DBG_LOG(2,"scanline_cb", | |
352 | ("frame %d x %.4d y %.3d\n", | |
353 | (int) m_screen->frame_number(), m_screen->hpos(), y)); | |
354 | ||
355 | if (y < PGC_VERT_START) return; | |
356 | y -= PGC_VERT_START; | |
357 | if (y >= PGC_DISP_VERT) return; | |
358 | ||
359 | // XXX address translation happens in hardware | |
360 | v = &m_vram[y * 1024]; | |
361 | p = &m_bitmap->pix16(y, 0); | |
362 | ||
363 | for (x = 0; x < PGC_DISP_HORZ; x++) { | |
364 | *p++ = *v++; | |
365 | } | |
366 | } | |
367 | ||
368 | UINT32 isa8_pgc_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) | |
369 | { | |
370 | copybitmap(bitmap, *m_bitmap, 0, 0, PGC_HORZ_START, PGC_VERT_START, cliprect); | |
371 | return 0; | |
372 | } |
r0 | r249190 | |
---|---|---|
1 | // license:BSD-3-Clause | |
2 | // copyright-holders:Sergey Svishchev | |
3 | ||
4 | #pragma once | |
5 | ||
6 | #ifndef __ISA_PGC_H__ | |
7 | #define __ISA_PGC_H__ | |
8 | ||
9 | #include "emu.h" | |
10 | ||
11 | #include "cpu/i86/i86.h" | |
12 | #include "isa.h" | |
13 | ||
14 | //************************************************************************** | |
15 | // TYPE DEFINITIONS | |
16 | //************************************************************************** | |
17 | ||
18 | // ======================> isa8_pgc_device | |
19 | ||
20 | class isa8_pgc_device : | |
21 | public device_t, | |
22 | public device_isa8_card_interface | |
23 | { | |
24 | public: | |
25 | // construction/destruction | |
26 | isa8_pgc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
27 | isa8_pgc_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); | |
28 | ||
29 | // optional information overrides | |
30 | virtual machine_config_constructor device_mconfig_additions() const; | |
31 | virtual const rom_entry *device_rom_region() const; | |
32 | virtual ioport_constructor device_input_ports() const; | |
33 | ||
34 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); | |
35 | ||
36 | TIMER_DEVICE_CALLBACK_MEMBER( scanline_callback ); | |
37 | INTERRUPT_GEN_MEMBER(vblank_irq); | |
38 | IRQ_CALLBACK_MEMBER(irq_callback); | |
39 | ||
40 | DECLARE_WRITE8_MEMBER( stateparam_w ); | |
41 | DECLARE_READ8_MEMBER( stateparam_r ); | |
42 | DECLARE_WRITE8_MEMBER( lut_w ); | |
43 | DECLARE_READ8_MEMBER( init_r ); | |
44 | ||
45 | protected: | |
46 | // device-level overrides | |
47 | virtual void device_start(); | |
48 | virtual void device_reset(); | |
49 | ||
50 | private: | |
51 | required_device<i8088_cpu_device> m_cpu; | |
52 | required_device<screen_device> m_screen; | |
53 | required_device<palette_device> m_palette; | |
54 | ||
55 | UINT8 *m_commarea; | |
56 | UINT8 *m_vram; | |
57 | UINT8 *m_eram; | |
58 | UINT8 m_stateparam[16]; | |
59 | UINT8 m_lut[256*3]; | |
60 | bitmap_ind16 *m_bitmap; | |
61 | }; | |
62 | ||
63 | ||
64 | // device type definition | |
65 | extern const device_type ISA8_PGC; | |
66 | ||
67 | #endif /* __ISA_PGC_H__ */ |
r249189 | r249190 | |
---|---|---|
2845 | 2845 | case 0x2e: /* SWR */ (this->*m_swr)(op); break; |
2846 | 2846 | case 0x2f: /* CACHE */ /* effective no-op */ break; |
2847 | 2847 | case 0x30: /* LL */ if (RWORD(SIMMVAL+RSVAL32, &temp) && RTREG) RTVAL64 = (UINT32)temp; m_ll_value = RTVAL32; break; |
2848 | case 0x31: /* LWC1 */ if (RWORD(SIMMVAL+RSVAL32, &temp)) set_cop1_reg32(RTREG, temp); break; | |
2848 | case 0x31: /* LWC1 */ | |
2849 | if (!(SR & SR_COP1)) | |
2850 | { | |
2851 | m_badcop_value = 1; | |
2852 | generate_exception(EXCEPTION_BADCOP, 1); | |
2853 | } | |
2854 | if (RWORD(SIMMVAL+RSVAL32, &temp)) set_cop1_reg32(RTREG, temp); break; | |
2849 | 2855 | case 0x32: /* LWC2 */ if (RWORD(SIMMVAL+RSVAL32, &temp)) set_cop2_reg(RTREG, temp); break; |
2850 | 2856 | case 0x33: /* PREF */ /* effective no-op */ break; |
2851 | 2857 | case 0x34: /* LLD */ if (RDOUBLE(SIMMVAL+RSVAL32, &temp64) && RTREG) RTVAL64 = temp64; m_lld_value = temp64; break; |
2852 | case 0x35: /* LDC1 */ if (RDOUBLE(SIMMVAL+RSVAL32, &temp64)) set_cop1_reg64(RTREG, temp64); break; | |
2858 | case 0x35: /* LDC1 */ | |
2859 | if (!(SR & SR_COP1)) | |
2860 | { | |
2861 | m_badcop_value = 1; | |
2862 | generate_exception(EXCEPTION_BADCOP, 1); | |
2863 | } | |
2864 | if (RDOUBLE(SIMMVAL+RSVAL32, &temp64)) set_cop1_reg64(RTREG, temp64); break; | |
2853 | 2865 | case 0x36: /* LDC2 */ if (RDOUBLE(SIMMVAL+RSVAL32, &temp64)) set_cop2_reg(RTREG, temp64); break; |
2854 | 2866 | case 0x37: /* LD */ if (RDOUBLE(SIMMVAL+RSVAL32, &temp64) && RTREG) RTVAL64 = temp64; break; |
2855 | 2867 | case 0x38: /* SC */ if (RWORD(SIMMVAL+RSVAL32, &temp) && RTREG) |
r249189 | r249190 | |
2865 | 2877 | } |
2866 | 2878 | } |
2867 | 2879 | break; |
2868 | case 0x39: /* SWC1 */ WWORD(SIMMVAL+RSVAL32, get_cop1_reg32(RTREG)); break; | |
2880 | case 0x39: /* SWC1 */ | |
2881 | if (!(SR & SR_COP1)) | |
2882 | { | |
2883 | m_badcop_value = 1; | |
2884 | generate_exception(EXCEPTION_BADCOP, 1); | |
2885 | } | |
2886 | WWORD(SIMMVAL+RSVAL32, get_cop1_reg32(RTREG)); break; | |
2869 | 2887 | case 0x3a: /* SWC2 */ WWORD(SIMMVAL+RSVAL32, get_cop2_reg(RTREG)); break; |
2870 | 2888 | case 0x3b: /* SWC3 */ invalid_instruction(op); break; |
2871 | 2889 | case 0x3c: /* SCD */ if (RDOUBLE(SIMMVAL+RSVAL32, &temp64) && RTREG) |
r249189 | r249190 | |
2881 | 2899 | } |
2882 | 2900 | } |
2883 | 2901 | break; |
2884 | case 0x3d: /* SDC1 */ WDOUBLE(SIMMVAL+RSVAL32, get_cop1_reg64(RTREG)); break; | |
2902 | case 0x3d: /* SDC1 */ | |
2903 | if (!(SR & SR_COP1)) | |
2904 | { | |
2905 | m_badcop_value = 1; | |
2906 | generate_exception(EXCEPTION_BADCOP, 1); | |
2907 | } | |
2908 | WDOUBLE(SIMMVAL+RSVAL32, get_cop1_reg64(RTREG)); break; | |
2885 | 2909 | case 0x3e: /* SDC2 */ WDOUBLE(SIMMVAL+RSVAL32, get_cop2_reg(RTREG)); break; |
2886 | 2910 | case 0x3f: /* SD */ WDOUBLE(SIMMVAL+RSVAL32, RTVAL64); break; |
2887 | 2911 | default: /* ??? */ invalid_instruction(op); break; |
r249189 | r249190 | |
---|---|---|
30 | 30 | }; |
31 | 31 | #endif |
32 | 32 | |
33 | static const char *const cacheop[32] = | |
34 | { | |
35 | "I_Invd", "D_WBInvd", "Unknown 2", "Unknown 3", "I_IndexLoadTag", "D_IndexLoadTag", "Unknown 6", "Unknown 7", | |
36 | "I_IndexStoreTag", "D_IndexStoreTag", "Unknown 10", "Unknown 11", "Unknown 12", "D_CreateDirtyExcl", "Unknown 14", "Unknown 15", | |
37 | "I_HitInvalid", "D_HitInvalid", "Unknown 18", "Unknown 19", "I_Fill", "D_HitWBInvalid", "Unknown 22", "Unknown 23", | |
38 | "I_HitWB", "D_HitWB", "Unknown 26", "Unknown 27", "Unknown 28", "Unknown 29", "Unknown 30", "Unknown 31" | |
39 | }; | |
33 | 40 | |
34 | 41 | |
35 | 42 | static const char *const cpreg[4][32] = |
r249189 | r249190 | |
503 | 510 | case 0x2c: sprintf(buffer, "sdl %s,%s(%s)", reg[rt], signed_16bit(op), reg[rs]); break; |
504 | 511 | case 0x2d: sprintf(buffer, "sdr %s,%s(%s)", reg[rt], signed_16bit(op), reg[rs]); break; |
505 | 512 | case 0x2e: sprintf(buffer, "swr %s,%s(%s)", reg[rt], signed_16bit(op), reg[rs]); break; |
506 | case 0x2f: sprintf(buffer, "cache %s(%s)", reg[rs], signed_16bit(op)); break; | |
513 | case 0x2f: sprintf(buffer, "cache %s,%s(%s)", cacheop[rt], reg[rs], signed_16bit(op)); break; | |
507 | 514 | case 0x30: sprintf(buffer, "ll %s,%s(%s)", reg[rt], signed_16bit(op), reg[rs]); break; |
508 | 515 | case 0x31: sprintf(buffer, "lwc1 %s,%s(%s)", cpreg[1][rt], signed_16bit(op), reg[rs]); break; |
509 | 516 | case 0x32: sprintf(buffer, "lwc2 %s,%s(%s)", cpreg[2][rt], signed_16bit(op), reg[rs]); break; |
r0 | r249190 | |
---|---|---|
1 | /* Sega 315-5641 / D77591 / 9442CA010 */ | |
2 | ||
3 | #include "emu.h" | |
4 | #include "315-5641.h" | |
5 | ||
6 | const device_type SEGA_315_5641_PCM = &device_creator<sega_315_5641_pcm_device>; | |
7 | ||
8 | sega_315_5641_pcm_device::sega_315_5641_pcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
9 | : upd7759_device(mconfig, SEGA_315_5641_PCM, "315-5641 PCM", tag, owner, clock, "315-5641_pcm", __FILE__) | |
10 | { | |
11 | } | |
12 | ||
13 | void sega_315_5641_pcm_device::device_start() | |
14 | { | |
15 | save_item(NAME(m_fifo_data), 0x40); | |
16 | save_item(NAME(m_fifo_read)); | |
17 | save_item(NAME(m_fifo_write)); | |
18 | ||
19 | upd7759_device::device_start(); | |
20 | } | |
21 | ||
22 | void sega_315_5641_pcm_device::advance_state() | |
23 | { | |
24 | switch (m_state) | |
25 | { | |
26 | case STATE_DROP_DRQ: | |
27 | if (m_rombase == NULL) | |
28 | { | |
29 | // Slave Mode: get data from FIFO buffer | |
30 | UINT8 fiforead = (m_fifo_read + 1) & 0x3F; | |
31 | if (fiforead != m_fifo_write) | |
32 | { | |
33 | m_fifo_in = m_fifo_data[fiforead]; | |
34 | m_fifo_read = fiforead; | |
35 | } | |
36 | } | |
37 | break; | |
38 | } | |
39 | ||
40 | upd775x_device::advance_state(); | |
41 | } | |
42 | ||
43 | ||
44 | WRITE8_MEMBER( sega_315_5641_pcm_device::port_w ) | |
45 | { | |
46 | if (m_rombase != NULL) | |
47 | { | |
48 | /* update the FIFO value */ | |
49 | m_fifo_in = data; | |
50 | } | |
51 | else | |
52 | { | |
53 | m_fifo_data[m_fifo_write++] = data; | |
54 | m_fifo_write &= 0x3F; | |
55 | } | |
56 | } | |
57 | ||
58 | ||
59 | UINT8 sega_315_5641_pcm_device::get_fifo_space() | |
60 | { | |
61 | return (m_fifo_read - m_fifo_write) & 0x3F; | |
62 | } | |
63 | ||
64 | void sega_315_5641_pcm_device::device_reset() | |
65 | { | |
66 | m_fifo_read = 0x3F; | |
67 | m_fifo_write = 0x00; | |
68 | ||
69 | upd775x_device::device_reset(); | |
70 | } | |
No newline at end of file |
r0 | r249190 | |
---|---|---|
1 | /* Sega 315-5641 / D77591 / 9442CA010 */ | |
2 | ||
3 | // this is the PICO sound chip, we are not sure if it's the same as a 7759 or not, it requires FIFO logic | |
4 | // which the 7759 does _not_ have but it is possible that is handled somewhere else on the PICO hardawre. | |
5 | ||
6 | #include "upd7759.h" | |
7 | ||
8 | ||
9 | class sega_315_5641_pcm_device : public upd7759_device | |
10 | { | |
11 | public: | |
12 | sega_315_5641_pcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
13 | ||
14 | UINT8 get_fifo_space(); | |
15 | void advance_state(); | |
16 | DECLARE_WRITE8_MEMBER(port_w); | |
17 | ||
18 | UINT8 m_fifo_data[0x40]; | |
19 | UINT8 m_fifo_read; // last read offset (will read in m_fifo_read+1) | |
20 | UINT8 m_fifo_write; // write offset | |
21 | ||
22 | protected: | |
23 | // device-level overrides | |
24 | virtual void device_start(); | |
25 | virtual void device_reset(); | |
26 | ||
27 | ||
28 | }; | |
29 | ||
30 | extern const device_type SEGA_315_5641_PCM; | |
No newline at end of file |
r249189 | r249190 | |
---|---|---|
407 | 407 | * Old frame was unvoiced, new is voiced (note this is the case on the patent but may not be correct on the real final chip) |
408 | 408 | */ |
409 | 409 | if ( ((OLD_FRAME_UNVOICED_FLAG == 0) && (NEW_FRAME_UNVOICED_FLAG == 1)) |
410 | || ((OLD_FRAME_UNVOICED_FLAG == 1) && (NEW_FRAME_UNVOICED_FLAG == 0)) | |
410 | || ((OLD_FRAME_UNVOICED_FLAG == 1) && (NEW_FRAME_UNVOICED_FLAG == 0)) | |
411 | 411 | || ((OLD_FRAME_SILENCE_FLAG == 1) && (NEW_FRAME_SILENCE_FLAG == 0)) ) |
412 | 412 | m_inhibit = 1; |
413 | 413 | else // normal frame, normal interpolation |
r249189 | r249190 | |
415 | 415 | |
416 | 416 | #ifdef DEBUG_GENERATION |
417 | 417 | /* Debug info for current parsed frame */ |
418 | fprintf(stderr, "OLDE: %d; OLDP: %d; ", m_OLDE, m_OLDP); | |
418 | fprintf(stderr, "OLDE=0: %d; OLDP=0: %d; E=0: %d; P=0: %d; ", m_OLDE, m_OLDP, (m_new_frame_energy_idx==0), (m_new_frame_pitch_idx==0)); | |
419 | 419 | fprintf(stderr,"Processing new frame: "); |
420 | 420 | if (m_inhibit == 0) |
421 | 421 | fprintf(stderr, "Normal Frame\n"); |
r249189 | r249190 | |
1004 | 1004 | fprintf(stderr," "); |
1005 | 1005 | #endif |
1006 | 1006 | } |
1007 | #ifdef DEBUG_PARSE_FRAME_DUMP | |
1008 | fprintf(stderr,"\n"); | |
1009 | #endif | |
1010 | 1007 | #ifdef VERBOSE |
1011 | 1008 | logerror("Parsed a frame successfully in ROM\n"); |
1012 | 1009 | #endif |
r249189 | r249190 | |
---|---|---|
630 | 630 | if (m_speechrom) |
631 | 631 | val = m_speechrom->read(count); |
632 | 632 | } |
633 | ||
634 | 633 | return val; |
635 | 634 | } |
636 | 635 | |
r249189 | r249190 | |
649 | 648 | } |
650 | 649 | else |
651 | 650 | { /* read status */ |
652 | ||
653 | 651 | /* clear the interrupt pin on status read */ |
654 | 652 | set_interrupt_state(0); |
655 | 653 | #ifdef DEBUG_PIN_READS |
656 | 654 | fprintf(stderr,"Status read: TS=%d BL=%d BE=%d\n", TALK_STATUS, m_buffer_low, m_buffer_empty); |
657 | 655 | #endif |
658 | ||
659 | 656 | return (TALK_STATUS << 7) | (m_buffer_low << 6) | (m_buffer_empty << 5); |
660 | 657 | } |
661 | 658 | } |
r249189 | r249190 | |
---|---|---|
143 | 143 | #define FRAC_ONE (1 << FRAC_BITS) |
144 | 144 | #define FRAC_MASK (FRAC_ONE - 1) |
145 | 145 | |
146 | /* chip states */ | |
147 | enum | |
148 | { | |
149 | STATE_IDLE, | |
150 | STATE_DROP_DRQ, | |
151 | STATE_START, | |
152 | STATE_FIRST_REQ, | |
153 | STATE_LAST_SAMPLE, | |
154 | STATE_DUMMY1, | |
155 | STATE_ADDR_MSB, | |
156 | STATE_ADDR_LSB, | |
157 | STATE_DUMMY2, | |
158 | STATE_BLOCK_HEADER, | |
159 | STATE_NIBBLE_COUNT, | |
160 | STATE_NIBBLE_MSN, | |
161 | STATE_NIBBLE_LSN | |
162 | }; | |
163 | 146 | |
164 | 147 | upd775x_device::upd775x_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) |
165 | 148 | : device_t(mconfig, type, name, tag, owner, clock, shortname, source), |
r249189 | r249190 | |
204 | 187 | { |
205 | 188 | } |
206 | 189 | |
190 | ||
191 | upd7759_device::upd7759_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) | |
192 | : upd775x_device(mconfig, type, name, tag, owner, clock, shortname, source), | |
193 | m_timer(NULL) | |
194 | { | |
195 | } | |
196 | ||
197 | ||
207 | 198 | const device_type UPD7756 = &device_creator<upd7756_device>; |
208 | 199 | |
209 | 200 | upd7756_device::upd7756_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
r249189 | r249190 | |
---|---|---|
5 | 5 | #ifndef __UPD7759_H__ |
6 | 6 | #define __UPD7759_H__ |
7 | 7 | |
8 | /* chip states */ | |
9 | enum | |
10 | { | |
11 | STATE_IDLE, | |
12 | STATE_DROP_DRQ, | |
13 | STATE_START, | |
14 | STATE_FIRST_REQ, | |
15 | STATE_LAST_SAMPLE, | |
16 | STATE_DUMMY1, | |
17 | STATE_ADDR_MSB, | |
18 | STATE_ADDR_LSB, | |
19 | STATE_DUMMY2, | |
20 | STATE_BLOCK_HEADER, | |
21 | STATE_NIBBLE_COUNT, | |
22 | STATE_NIBBLE_MSN, | |
23 | STATE_NIBBLE_LSN | |
24 | }; | |
8 | 25 | |
9 | 26 | /* NEC uPD7759/55/56/P56/57/58 ADPCM Speech Processor */ |
10 | 27 | |
r249189 | r249190 | |
29 | 46 | |
30 | 47 | DECLARE_WRITE_LINE_MEMBER( reset_w ); |
31 | 48 | DECLARE_READ_LINE_MEMBER( busy_r ); |
32 | DECLARE_WRITE8_MEMBER( port_w ); | |
49 | virtual DECLARE_WRITE8_MEMBER( port_w ); | |
33 | 50 | void postload(); |
34 | 51 | |
35 | 52 | protected: |
r249189 | r249190 | |
86 | 103 | devcb_write_line m_drqcallback; |
87 | 104 | |
88 | 105 | void update_adpcm(int data); |
89 | void advance_state(); | |
106 | virtual void advance_state(); | |
90 | 107 | }; |
91 | 108 | |
92 | 109 | class upd7759_device : public upd775x_device |
93 | 110 | { |
94 | 111 | public: |
95 | 112 | upd7759_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
113 | upd7759_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); | |
96 | 114 | |
97 | 115 | enum |
98 | 116 | { |
r249189 | r249190 | |
---|---|---|
38 | 38 | save_item(NAME(m_linecounter)); |
39 | 39 | save_item(NAME(m_screen2_l)); |
40 | 40 | save_item(NAME(m_screen2_h)); |
41 | save_item(NAME(m_cursor_l)); | |
42 | save_item(NAME(m_cursor_h)); | |
41 | 43 | } |
42 | 44 | |
43 | 45 | void scn2674_device::device_reset() |
r249189 | r249190 | |
94 | 96 | m_spl1= 0; |
95 | 97 | m_spl2= 0; |
96 | 98 | m_dbl1= 0; |
99 | m_buffer= 0; | |
97 | 100 | m_linecounter= 0; |
98 | 101 | m_irq_state= 0; |
99 | 102 | m_IR_pointer = 0; |
100 | 103 | m_address = 0; |
104 | m_start1change = 0; | |
101 | 105 | m_hpixels_per_column = m_text_hpixels_per_column; |
102 | 106 | } |
103 | 107 | |
r249189 | r249190 | |
246 | 250 | break; |
247 | 251 | |
248 | 252 | } |
249 | if(m_display_enabled) | |
250 | recompute_parameters(); | |
253 | recompute_parameters(); | |
251 | 254 | |
252 | 255 | m_IR_pointer++; |
253 | 256 | if (m_IR_pointer>14)m_IR_pointer=14; |
r249189 | r249190 | |
291 | 294 | /* Disable GFX */ |
292 | 295 | LOG2674(("disable GFX %02x\n",data)); |
293 | 296 | m_gfx_enabled = 0; |
294 | if(m_display_enabled) | |
295 | recompute_parameters(); | |
297 | recompute_parameters(); | |
296 | 298 | } |
297 | 299 | |
298 | 300 | if ((data&0xe3)==0x23) |
r249189 | r249190 | |
300 | 302 | /* Enable GFX */ |
301 | 303 | LOG2674(("enable GFX %02x\n",data)); |
302 | 304 | m_gfx_enabled = 1; |
303 | if(m_display_enabled) | |
304 | recompute_parameters(); | |
305 | recompute_parameters(); | |
305 | 306 | } |
306 | 307 | |
307 | 308 | if ((data&0xe9)==0x28) |
r249189 | r249190 | |
410 | 411 | |
411 | 412 | /* Delayed Commands */ |
412 | 413 | /* These set 0x20 in status register when done */ |
413 | ||
414 | if (data == 0xa4) | |
414 | // These use the pointer address according to the datasheet but the pcx expects the screen start 2 address instead | |
415 | switch(data) | |
415 | 416 | { |
416 | /* read at pointer address */ | |
417 | LOG2674(("DELAYED read at pointer address %02x\n",data)); | |
418 | } | |
417 | case 0xa4: | |
418 | /* read at pointer address */ | |
419 | m_buffer = space().read_byte(m_screen2_l | (m_screen2_h << 8)); | |
420 | LOG2674(("DELAYED read at pointer address %02x\n",data)); | |
421 | break; | |
419 | 422 | |
420 | if (data == 0xa2) | |
421 | { | |
422 | /* write at pointer address */ | |
423 | LOG2674(("DELAYED write at pointer address %02x\n",data)); | |
424 | } | |
423 | case 0xa2: | |
424 | /* write at pointer address */ | |
425 | space().write_byte(m_screen2_l | (m_screen2_h << 8), m_buffer); | |
426 | LOG2674(("DELAYED write at pointer address %02x\n",data)); | |
427 | break; | |
425 | 428 | |
426 | if (data == 0xa9) | |
427 | { | |
428 | /* increase cursor address */ | |
429 | LOG2674(("DELAYED increase cursor address %02x\n",data)); | |
430 | } | |
429 | case 0xa9: | |
430 | /* increment cursor address */ | |
431 | if(!(++m_cursor_l)) | |
432 | m_cursor_h++; | |
433 | LOG2674(("DELAYED increase cursor address %02x\n",data)); | |
434 | break; | |
431 | 435 | |
432 | if (data == 0xac) | |
433 | { | |
434 | /* read at cursor address */ | |
435 | LOG2674(("DELAYED read at cursor address %02x\n",data)); | |
436 | } | |
436 | case 0xac: | |
437 | /* read at cursor address */ | |
438 | m_buffer = space().read_byte(m_cursor_l | (m_cursor_h << 8)); | |
439 | LOG2674(("DELAYED read at cursor address %02x\n",data)); | |
440 | break; | |
437 | 441 | |
438 | if (data == 0xaa) | |
439 | { | |
440 | /* write at cursor address */ | |
441 | LOG2674(("DELAYED write at cursor address %02x\n",data)); | |
442 | } | |
442 | case 0xaa: | |
443 | /* write at cursor address */ | |
444 | space().write_byte(m_cursor_l | (m_cursor_h << 8), m_buffer); | |
445 | LOG2674(("DELAYED write at cursor address %02x\n",data)); | |
446 | break; | |
443 | 447 | |
444 | if (data == 0xad) | |
445 | { | |
446 | /* read at cursor address + increment */ | |
447 | LOG2674(("DELAYED read at cursor address+increment %02x\n",data)); | |
448 | } | |
448 | case 0xad: | |
449 | /* read at cursor address + increment */ | |
450 | m_buffer = space().read_byte(m_cursor_l | (m_cursor_h << 8)); | |
451 | if(!(++m_cursor_l)) | |
452 | m_cursor_h++; | |
453 | LOG2674(("DELAYED read at cursor address+increment %02x\n",data)); | |
454 | break; | |
449 | 455 | |
450 | if (data == 0xab) | |
451 | { | |
452 | /* write at cursor address + increment */ | |
453 | LOG2674(("DELAYED write at cursor address+increment %02x\n",data)); | |
454 | } | |
456 | case 0xab: | |
457 | /* write at cursor address + increment */ | |
458 | space().write_byte(m_cursor_l | (m_cursor_h << 8), m_buffer); | |
459 | if(!(++m_cursor_l)) | |
460 | m_cursor_h++; | |
461 | LOG2674(("DELAYED write at cursor address+increment %02x\n",data)); | |
462 | break; | |
455 | 463 | |
456 | if (data == 0xbb) | |
457 | { | |
458 | /* write from cursor address to pointer address */ | |
459 | LOG2674(("DELAYED write from cursor address to pointer address %02x\n",data)); | |
460 | } | |
464 | case 0xbb: | |
465 | /* write from cursor address to pointer address TODO: transfer only during blank*/ | |
466 | for(i = m_cursor_l | (m_cursor_h << 8); i != (m_screen2_l | (m_screen2_h << 8)); i = ((i + 1) & 0xffff)) | |
467 | space().write_byte(i, m_buffer); | |
468 | space().write_byte(i, m_buffer); // get the last | |
469 | m_cursor_l = m_screen2_l; | |
470 | m_cursor_h = m_screen2_h; | |
471 | LOG2674(("DELAYED write from cursor address to pointer address %02x\n",data)); | |
472 | break; | |
461 | 473 | |
462 | if (data == 0xbd) | |
463 | { | |
464 | /* read from cursor address to pointer address */ | |
465 | LOG2674(("DELAYED read from cursor address to pointer address %02x\n",data)); | |
474 | case 0xbd: | |
475 | /* read from cursor address to pointer address */ | |
476 | LOG2674(("DELAYED read from cursor address to pointer address %02x\n",data)); | |
477 | break; | |
466 | 478 | } |
467 | 479 | } |
468 | 480 | |
r249189 | r249190 | |
540 | 552 | write_command(data); |
541 | 553 | break; |
542 | 554 | |
543 | case 2: m_screen1_l = data; break; | |
555 | case 2: | |
556 | m_screen1_l = data; | |
557 | if(!m_screen->vblank()) | |
558 | m_start1change = (m_linecounter / m_IR0_scanline_per_char_row) + 1; | |
559 | break; | |
544 | 560 | case 3: |
545 | 561 | m_screen1_h = data; |
546 | 562 | m_dbl1=(data & 0xc0)>>6; |
r249189 | r249190 | |
550 | 566 | m_screen1_h &= 0x3f; |
551 | 567 | LOG2674(("IR14 - Double 1 overridden %02x\n",m_IR14_double_1)); |
552 | 568 | } |
569 | if(!m_screen->vblank()) | |
570 | m_start1change = (m_linecounter / m_IR0_scanline_per_char_row) + 1; | |
553 | 571 | break; |
554 | 572 | |
555 | 573 | case 4: m_cursor_l = data; break; |
r249189 | r249190 | |
572 | 590 | int max_visible_x = (m_IR5_character_per_row * m_hpixels_per_column) - 1; |
573 | 591 | int max_visible_y = (m_IR4_rows_per_screen * m_IR0_scanline_per_char_row) - 1; |
574 | 592 | |
593 | if(!horiz_pix_total || !vert_pix_total) | |
594 | { | |
595 | m_scanline_timer->adjust(attotime::never); | |
596 | return; | |
597 | } | |
598 | ||
575 | 599 | LOG2674(("width %u height %u max_x %u max_y %u refresh %f\n", horiz_pix_total, vert_pix_total, max_visible_x, max_visible_y, 1 / ATTOSECONDS_TO_DOUBLE(refresh))); |
576 | 600 | |
577 | 601 | rectangle visarea; |
r249189 | r249190 | |
594 | 618 | m_display_enabled_scanline = 0; |
595 | 619 | m_display_enabled_field = 0; |
596 | 620 | } |
597 | else if(!m_display_enabled) | |
598 | break; | |
599 | 621 | else |
600 | 622 | m_linecounter++; |
601 | 623 | |
602 | // should be triggered at the start of each ROW (line zero for that row) | |
603 | 624 | if(m_linecounter >= m_screen->height()) |
604 | 625 | { |
605 | m_status_register |= 0x08; | |
606 | if (m_irq_mask & 0x08) | |
607 | { | |
608 | LOG2674(("SCN2674 Line Zero\n")); | |
609 | m_irq_state = 1; | |
610 | m_irq_register |= 0x08; | |
611 | m_irq_cb(1); | |
612 | } | |
613 | 626 | m_linecounter = 0; |
614 | 627 | m_address = (m_screen1_h << 8) | m_screen1_l; |
615 | 628 | } |
r249189 | r249190 | |
629 | 642 | if(m_linecounter >= (m_IR4_rows_per_screen * m_IR0_scanline_per_char_row)) |
630 | 643 | break; |
631 | 644 | |
645 | int charrow = m_linecounter % m_IR0_scanline_per_char_row; | |
646 | int tilerow = charrow; | |
647 | ||
648 | // should be triggered at the start of each ROW (line zero for that row) | |
649 | if(!charrow) | |
650 | { | |
651 | m_status_register |= 0x08; | |
652 | if (m_irq_mask & 0x08) | |
653 | { | |
654 | LOG2674(("SCN2674 Line Zero\n")); | |
655 | m_irq_state = 1; | |
656 | m_irq_register |= 0x08; | |
657 | m_irq_cb(1); | |
658 | } | |
659 | } | |
660 | ||
632 | 661 | if((m_linecounter == (m_IR12_split_register_1 * m_IR0_scanline_per_char_row)) && m_linecounter) /* Split Screen 1 */ |
633 | 662 | { |
634 | 663 | m_status_register |= 0x04; |
r249189 | r249190 | |
661 | 690 | dw = m_IR14_double_2; |
662 | 691 | } |
663 | 692 | |
664 | int charrow = m_linecounter % m_IR0_scanline_per_char_row; | |
665 | int tilerow = charrow; | |
693 | if(!m_display_enabled) | |
694 | break; | |
666 | 695 | |
667 | 696 | if(m_IR2_row_table) |
668 | 697 | { |
r249189 | r249190 | |
684 | 713 | m_screen2_h = (addr >> 8) & 0x3f; |
685 | 714 | m_screen2_l = addr & 0xff; |
686 | 715 | } |
687 | ||
688 | 716 | } |
717 | else if(m_start1change && (m_start1change == (m_linecounter / m_IR0_scanline_per_char_row))) | |
718 | { | |
719 | m_address = (m_screen1_h << 8) | m_screen1_l; | |
720 | m_start1change = 0; | |
721 | } | |
689 | 722 | |
690 | 723 | if(dw == 2) |
691 | 724 | tilerow >>= 1; |
r249189 | r249190 | |
---|---|---|
37 | 37 | |
38 | 38 | DECLARE_READ8_MEMBER( read ); |
39 | 39 | DECLARE_WRITE8_MEMBER( write ); |
40 | DECLARE_READ8_MEMBER( buffer_r ) { return m_buffer; } | |
41 | DECLARE_WRITE8_MEMBER( buffer_w ) { m_buffer = data; } | |
40 | 42 | |
41 | 43 | UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); |
42 | 44 | virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_0) ? &m_space_config : NULL; } |
r249189 | r249190 | |
105 | 107 | UINT8 m_spl1; |
106 | 108 | UINT8 m_spl2; |
107 | 109 | UINT8 m_dbl1; |
110 | UINT8 m_buffer; | |
108 | 111 | int m_linecounter; |
109 | 112 | UINT16 m_address; |
113 | int m_start1change; | |
110 | 114 | |
111 | 115 | UINT8 m_irq_state; |
112 | 116 |
r249189 | r249190 | |
---|---|---|
1 | 1 | // license:GPL-2.0+ |
2 | // copyright-holders:Dirk Best | |
2 | // copyright-holders:Dirk Best, Nigel Barnes | |
3 | 3 | /*************************************************************************** |
4 | 4 | |
5 | 5 | BBC Micro |
6 | 6 | |
7 | Disk image format | |
7 | Disk image formats | |
8 | 8 | |
9 | 9 | ***************************************************************************/ |
10 | 10 | |
11 | 11 | #include "bbc_dsk.h" |
12 | #include "basicdsk.h" | |
12 | 13 | |
13 | bbc_format::bbc_format() : wd177x_format(formats) | |
14 | LEGACY_FLOPPY_OPTIONS_START(bbc) | |
15 | LEGACY_FLOPPY_OPTION( ssd40, "bbc,img,ssd", "BBC 40t SSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, | |
16 | HEADS([1]) | |
17 | TRACKS([40]) | |
18 | SECTORS([10]) | |
19 | SECTOR_LENGTH([256]) | |
20 | FIRST_SECTOR_ID([0])) | |
21 | LEGACY_FLOPPY_OPTION( ssd80, "bbc,img,ssd", "BBC 80t SSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, | |
22 | HEADS([1]) | |
23 | TRACKS([80]) | |
24 | SECTORS([10]) | |
25 | SECTOR_LENGTH([256]) | |
26 | FIRST_SECTOR_ID([0])) | |
27 | LEGACY_FLOPPY_OPTION( dsd40, "dsd", "BBC 40t DSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, | |
28 | HEADS([2]) | |
29 | TRACKS([40]) | |
30 | SECTORS([10]) | |
31 | SECTOR_LENGTH([256]) | |
32 | INTERLEAVE([0]) | |
33 | FIRST_SECTOR_ID([0])) | |
34 | LEGACY_FLOPPY_OPTION( dsd80, "dsd", "BBC 80t DSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, | |
35 | HEADS([2]) | |
36 | TRACKS([80]) | |
37 | SECTORS([10]) | |
38 | SECTOR_LENGTH([256]) | |
39 | INTERLEAVE([0]) | |
40 | FIRST_SECTOR_ID([0])) | |
41 | LEGACY_FLOPPY_OPTIONS_END | |
42 | ||
43 | /********************************************************************/ | |
44 | ||
45 | bbc_ssd_525_format::bbc_ssd_525_format() : wd177x_format(formats) | |
14 | 46 | { |
15 | 47 | } |
16 | 48 | |
17 | const char *bbc_format::name() const | |
49 | const char *bbc_ssd_525_format::name() const | |
18 | 50 | { |
19 | return " | |
51 | return "ssd"; | |
20 | 52 | } |
21 | 53 | |
22 | const char *bbc_format::description() const | |
54 | const char *bbc_ssd_525_format::description() const | |
23 | 55 | { |
24 | return "BBC Micro disk image"; | |
56 | return "BBC Micro 5.25\" disk image"; | |
25 | 57 | } |
26 | 58 | |
27 | const char *bbc_format::extensions() const | |
59 | const char *bbc_ssd_525_format::extensions() const | |
28 | 60 | { |
29 | return "bbc,img,ssd | |
61 | return "bbc,img,ssd"; | |
30 | 62 | } |
31 | 63 | |
32 | ||
64 | int bbc_ssd_525_format::find_size(io_generic *io, UINT32 form_factor) | |
33 | 65 | { |
34 | { // 100k single sided single density | |
66 | char cat[8]; | |
67 | io_generic_read(io, cat, 256, 8); | |
68 | UINT64 sectors = ((cat[6] & 3) << 8) + cat[7]; // sector count from catalogue | |
69 | UINT64 size = io_generic_size(io); | |
70 | for(int i=0; formats[i].form_factor; i++) { | |
71 | const format &f = formats[i]; | |
72 | if(form_factor != floppy_image::FF_UNKNOWN && form_factor != f.form_factor) | |
73 | continue; | |
74 | ||
75 | if((size <= (UINT64)compute_track_size(f) * f.track_count * f.head_count) && (sectors == f.track_count * f.sector_count)) | |
76 | return i; | |
77 | } | |
78 | return -1; | |
79 | } | |
80 | ||
81 | const bbc_ssd_525_format::format bbc_ssd_525_format::formats[] = | |
82 | { | |
83 | { // 100k 40 track single sided single density | |
35 | 84 | floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, |
36 | 4000, 10, 40, 1, 256, {}, 0, {}, | |
85 | 4000, 10, 40, 1, 256, {}, 0, {}, 40, 10, 10 | |
37 | 86 | }, |
38 | { // 200k double sided single density | |
87 | { // 200k 80 track single sided single density | |
88 | floppy_image::FF_525, floppy_image::SSQD, floppy_image::FM, | |
89 | 4000, 10, 80, 1, 256, {}, 0, {}, 40, 10, 10 | |
90 | }, | |
91 | { // 200k 40 track double sided single density | |
39 | 92 | floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, |
40 | 4000, 10, 40, 2, 256, {}, 0, {}, | |
93 | 4000, 10, 40, 2, 256, {}, 0, {}, 40, 10, 10 | |
41 | 94 | }, |
42 | { // 200k single sided double density | |
43 | floppy_image::FF_525, floppy_image::SSQD, floppy_image::FM, | |
44 | 4000, 10, 80, 1, 256, {}, 0, {}, 16, 11, 19 | |
95 | { // 400k 80 track double sided single density | |
96 | floppy_image::FF_525, floppy_image::DSQD, floppy_image::FM, | |
97 | 4000, 10, 80, 2, 256, {}, 0, {}, 40, 10, 10 | |
45 | 98 | }, |
46 | { // 400k double sided double density | |
99 | {} | |
100 | }; | |
101 | ||
102 | ||
103 | bbc_dsd_525_format::bbc_dsd_525_format() : wd177x_format(formats) | |
104 | { | |
105 | } | |
106 | ||
107 | const char *bbc_dsd_525_format::name() const | |
108 | { | |
109 | return "dsd"; | |
110 | } | |
111 | ||
112 | const char *bbc_dsd_525_format::description() const | |
113 | { | |
114 | return "BBC Micro 5.25\" disk image"; | |
115 | } | |
116 | ||
117 | const char *bbc_dsd_525_format::extensions() const | |
118 | { | |
119 | return "dsd"; | |
120 | } | |
121 | ||
122 | int bbc_dsd_525_format::find_size(io_generic *io, UINT32 form_factor) | |
123 | { | |
124 | char cat[8]; | |
125 | io_generic_read(io, cat, 256, 8); | |
126 | UINT64 sectors = ((cat[6] & 3) << 8) + cat[7]; // sector count from catalogue | |
127 | UINT64 size = io_generic_size(io); | |
128 | for(int i=0; formats[i].form_factor; i++) { | |
129 | const format &f = formats[i]; | |
130 | if(form_factor != floppy_image::FF_UNKNOWN && form_factor != f.form_factor) | |
131 | continue; | |
132 | ||
133 | if((size <= (UINT64)compute_track_size(f) * f.track_count * f.head_count) && (sectors == f.track_count * f.sector_count)) | |
134 | return i; | |
135 | } | |
136 | return -1; | |
137 | } | |
138 | ||
139 | const bbc_dsd_525_format::format bbc_dsd_525_format::formats[] = | |
140 | { | |
141 | { // 200k 40 track double sided single density | |
47 | 142 | floppy_image::FF_525, floppy_image::DSQD, floppy_image::FM, |
48 | 4000, 10, | |
143 | 4000, 10, 40, 2, 256, {}, -1, { 0,1,2,3,4,5,6,7,8,9 }, 40, 10, 10 | |
49 | 144 | }, |
145 | { // 400k 80 track double sided single density | |
146 | floppy_image::FF_525, floppy_image::DSQD, floppy_image::FM, | |
147 | 4000, 10, 80, 2, 256, {}, -1, { 0,1,2,3,4,5,6,7,8,9 }, 40, 10, 10 | |
148 | }, | |
50 | 149 | {} |
51 | 150 | }; |
52 | 151 | |
53 | const floppy_format_type FLOPPY_BBC_FORMAT = &floppy_image_format_creator<bbc_format>; | |
152 | ||
153 | bbc_adf_525_format::bbc_adf_525_format() : wd177x_format(formats) | |
154 | { | |
155 | } | |
156 | ||
157 | const char *bbc_adf_525_format::name() const | |
158 | { | |
159 | return "adf"; | |
160 | } | |
161 | ||
162 | const char *bbc_adf_525_format::description() const | |
163 | { | |
164 | return "BBC Micro 5.25\" ADFS disk image"; | |
165 | } | |
166 | ||
167 | const char *bbc_adf_525_format::extensions() const | |
168 | { | |
169 | return "adf,ads,adm,adl,img"; | |
170 | } | |
171 | ||
172 | const bbc_adf_525_format::format bbc_adf_525_format::formats[] = | |
173 | { | |
174 | { // 160K 40 track single sided double density | |
175 | floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, | |
176 | 2000, 16, 40, 1, 256, {}, 0, {}, 60, 22, 43 | |
177 | }, | |
178 | { // 320K 80 track single sided double density | |
179 | floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, | |
180 | 2000, 16, 80, 1, 256, {}, 0, {}, 60, 22, 43 | |
181 | }, | |
182 | { // 640K 80 track double sided double density | |
183 | floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, | |
184 | 2000, 16, 80, 2, 256, {}, -1, { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, 60, 22, 43 | |
185 | }, | |
186 | {} | |
187 | }; | |
188 | ||
189 | ||
190 | bbc_adf_35_format::bbc_adf_35_format() : wd177x_format(formats) | |
191 | { | |
192 | } | |
193 | ||
194 | const char *bbc_adf_35_format::name() const | |
195 | { | |
196 | return "adf"; | |
197 | } | |
198 | ||
199 | const char *bbc_adf_35_format::description() const | |
200 | { | |
201 | return "BBC Micro 3.5\" ADFS disk image"; | |
202 | } | |
203 | ||
204 | const char *bbc_adf_35_format::extensions() const | |
205 | { | |
206 | return "adf,ads,adm,adl,img"; | |
207 | } | |
208 | ||
209 | const bbc_adf_35_format::format bbc_adf_35_format::formats[] = { | |
210 | { // 160K 3 1/2 inch 40 track single sided double density | |
211 | floppy_image::FF_35, floppy_image::SSDD, floppy_image::MFM, | |
212 | 2000, 16, 40, 1, 256, {}, 0, {}, 60, 22, 43 | |
213 | }, | |
214 | { // 320K 3 1/2 inch 80 track single sided double density | |
215 | floppy_image::FF_35, floppy_image::SSQD, floppy_image::MFM, | |
216 | 2000, 16, 80, 1, 256, {}, 0, {}, 60, 22, 43 | |
217 | }, | |
218 | { // 640K 3 1/2 inch 80 track double sided double density | |
219 | floppy_image::FF_35, floppy_image::DSQD, floppy_image::MFM, | |
220 | 2000, 16, 80, 2, 256, {}, -1, { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, 60, 22, 43 | |
221 | }, | |
222 | {} | |
223 | }; | |
224 | ||
225 | ||
226 | const floppy_format_type FLOPPY_BBC_SSD_525_FORMAT = &floppy_image_format_creator<bbc_ssd_525_format>; | |
227 | const floppy_format_type FLOPPY_BBC_DSD_525_FORMAT = &floppy_image_format_creator<bbc_dsd_525_format>; | |
228 | const floppy_format_type FLOPPY_BBC_ADF_525_FORMAT = &floppy_image_format_creator<bbc_adf_525_format>; | |
229 | const floppy_format_type FLOPPY_BBC_ADF_35_FORMAT = &floppy_image_format_creator<bbc_adf_35_format>; |
r249189 | r249190 | |
---|---|---|
1 | 1 | // license:GPL-2.0+ |
2 | // copyright-holders:Dirk Best | |
2 | // copyright-holders:Dirk Best, Nigel Barnes | |
3 | 3 | /*************************************************************************** |
4 | 4 | |
5 | 5 | BBC Micro |
6 | 6 | |
7 | Disk image format | |
7 | Disk image formats | |
8 | 8 | |
9 | 9 | ***************************************************************************/ |
10 | 10 | |
r249189 | r249190 | |
13 | 13 | #ifndef __BBC_DSK_H__ |
14 | 14 | #define __BBC_DSK_H__ |
15 | 15 | |
16 | #include "flopimg.h" | |
16 | 17 | #include "wd177x_dsk.h" |
17 | 18 | |
18 | class bbc_format : public wd177x_format | |
19 | /**************************************************************************/ | |
20 | ||
21 | LEGACY_FLOPPY_OPTIONS_EXTERN(bbc); | |
22 | ||
23 | /**************************************************************************/ | |
24 | ||
25 | class bbc_ssd_525_format : public wd177x_format | |
19 | 26 | { |
20 | 27 | public: |
21 | bbc_format(); | |
28 | bbc_ssd_525_format(); | |
22 | 29 | |
30 | virtual int find_size(io_generic *io, UINT32 form_factor); | |
23 | 31 | virtual const char *name() const; |
24 | 32 | virtual const char *description() const; |
25 | 33 | virtual const char *extensions() const; |
r249189 | r249190 | |
28 | 36 | static const format formats[]; |
29 | 37 | }; |
30 | 38 | |
31 | extern const floppy_format_type FLOPPY_BBC_FORMAT; | |
39 | class bbc_dsd_525_format : public wd177x_format | |
40 | { | |
41 | public: | |
42 | bbc_dsd_525_format(); | |
32 | 43 | |
44 | virtual int find_size(io_generic *io, UINT32 form_factor); | |
45 | virtual const char *name() const; | |
46 | virtual const char *description() const; | |
47 | virtual const char *extensions() const; | |
48 | ||
49 | private: | |
50 | static const format formats[]; | |
51 | }; | |
52 | ||
53 | class bbc_adf_525_format : public wd177x_format | |
54 | { | |
55 | public: | |
56 | bbc_adf_525_format(); | |
57 | ||
58 | virtual const char *name() const; | |
59 | virtual const char *description() const; | |
60 | virtual const char *extensions() const; | |
61 | ||
62 | private: | |
63 | static const format formats[]; | |
64 | }; | |
65 | ||
66 | class bbc_adf_35_format : public wd177x_format | |
67 | { | |
68 | public: | |
69 | bbc_adf_35_format(); | |
70 | ||
71 | virtual const char *name() const; | |
72 | virtual const char *description() const; | |
73 | virtual const char *extensions() const; | |
74 | ||
75 | private: | |
76 | static const format formats[]; | |
77 | }; | |
78 | ||
79 | ||
80 | extern const floppy_format_type FLOPPY_BBC_SSD_525_FORMAT; | |
81 | extern const floppy_format_type FLOPPY_BBC_DSD_525_FORMAT; | |
82 | extern const floppy_format_type FLOPPY_BBC_ADF_525_FORMAT; | |
83 | extern const floppy_format_type FLOPPY_BBC_ADF_35_FORMAT; | |
84 | ||
33 | 85 | #endif // __BBC_DSK_H__ |
r249189 | r249190 | |
---|---|---|
4802 | 4802 | rachero // 1990.?? Racing Hero (World, FD1094) |
4803 | 4803 | abcop // 1990.?? A.B.Cop (World, FD1094) |
4804 | 4804 | abcopj // 1991.01 A.B.Cop (Japan, FD1094) |
4805 | gpriderj // 1990.10 GP Rider (Japan, FD1094) | |
4806 | gprider // 1990.?? GP Rider (World, FD1094) | |
4807 | gpridert // as above | |
4808 | gprideru // 1990.12 GP Rider (US, FD1094) | |
4805 | gpriderjs // 1990.10 GP Rider (Japan, FD1094) | |
4806 | gpriderj // as above | |
4807 | gpriders // 1990.?? GP Rider (World, FD1094) | |
4808 | gprider // as above | |
4809 | gpriderus // 1990.12 GP Rider (US, FD1094) | |
4810 | gprideru // as above | |
4809 | 4811 | rascot // 1991.?? Royal Ascot (Japan) |
4810 | 4812 | |
4811 | 4813 | |
r249189 | r249190 | |
6286 | 6288 | wc90b1 // bootleg |
6287 | 6289 | wc90b2 // bootleg |
6288 | 6290 | wc90ba // bootleg |
6291 | pac90 // bootleg | |
6289 | 6292 | spbactn // 9002 - (c) 1991 Tecmo |
6290 | 6293 | spbactnj // 9002 - (c) 1991 Tecmo |
6291 | 6294 | spbactnp // prototype |
r249189 | r249190 | |
9910 | 9913 | |
9911 | 9914 | // IGS027A Cpu Games |
9912 | 9915 | slqz3 // (c) 1999 |
9916 | amazonia // (c) 1999 | |
9913 | 9917 | fruitpar // (c) 200? |
9914 | 9918 | zhongguo // (c) 2000 |
9915 | 9919 | sdwx // (c) 2002 |
9920 | amazoni2 // (c) 2002 | |
9916 | 9921 | sddz // (c) 200? |
9917 | 9922 | lhzb3 // (c) 200? |
9918 | 9923 | lhzb4 // (c) 200? |
r249189 | r249190 | |
9939 | 9944 | orlegendca // |
9940 | 9945 | orlegend111c // |
9941 | 9946 | orlegend111t // |
9947 | orlegend111k // | |
9942 | 9948 | orlegend105k // |
9943 | 9949 | drgw2 // (c) 1997 Dragon World 2 |
9944 | 9950 | dw2v100x // |
r249189 | r249190 | |
---|---|---|
375 | 375 | AM_RANGE(0xba00, 0xba00) AM_READ_PORT("START") /* maybe a mirror of b800 */ |
376 | 376 | ADDRESS_MAP_END |
377 | 377 | |
378 | static ADDRESS_MAP_START( yamato_decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, cclimber_state ) | |
379 | AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes") | |
380 | ADDRESS_MAP_END | |
381 | ||
378 | 382 | static ADDRESS_MAP_START( toprollr_map, AS_PROGRAM, 8, cclimber_state ) |
379 | 383 | AM_RANGE(0x0000, 0x5fff) AM_ROMBANK("bank1") |
380 | 384 | AM_RANGE(0x6000, 0x6bff) AM_RAM AM_SHARE("ram") |
r249189 | r249190 | |
1056 | 1060 | MCFG_CPU_MODIFY("maincpu") |
1057 | 1061 | MCFG_CPU_PROGRAM_MAP(yamato_map) |
1058 | 1062 | MCFG_CPU_IO_MAP(yamato_portmap) |
1059 | MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map) | |
1063 | MCFG_CPU_DECRYPTED_OPCODES_MAP(yamato_decrypted_opcodes_map) | |
1060 | 1064 | |
1061 | 1065 | MCFG_CPU_ADD("audiocpu", Z80, 3072000) /* 3.072 MHz ? */ |
1062 | 1066 | MCFG_CPU_PROGRAM_MAP(yamato_audio_map) |
r249189 | r249190 | |
2415 | 2419 | { 0x20,0xa0,0x28,0xa8 }, { 0x00,0x08,0x20,0x28 } /* ...1...1...1...1 */ |
2416 | 2420 | }; |
2417 | 2421 | |
2418 | sega_decode(memregion("maincpu")->base(), m_decrypted_opcodes, 0x | |
2422 | sega_decode(memregion("maincpu")->base(), m_decrypted_opcodes, 0x8000, convtable); | |
2419 | 2423 | |
2420 | 2424 | save_item(NAME(m_yamato_p0)); |
2421 | 2425 | save_item(NAME(m_yamato_p1)); |
r249189 | r249190 | |
---|---|---|
896 | 896 | ROMX_LOAD(name, offset, length, hash, ROM_BIOS(bios+1)) /* Note '+1' */ |
897 | 897 | |
898 | 898 | #define CHIHIRO_BIOS \ |
899 | ROM_REGION( 0x | |
899 | ROM_REGION( 0x100000, "bios", 0) \ | |
900 | 900 | ROM_SYSTEM_BIOS( 0, "bios0", "Chihiro Bios" ) \ |
901 | 901 | ROM_LOAD_BIOS( 0, "chihiro_xbox_bios.bin", 0x000000, 0x80000, CRC(66232714) SHA1(b700b0041af8f84835e45d1d1250247bf7077188) ) \ |
902 | 902 | ROM_REGION( 0x404080, "others", 0) \ |
r249189 | r249190 | |
---|---|---|
1396 | 1396 | |
1397 | 1397 | ROM_REGION( 1024, "proms", 0 ) |
1398 | 1398 | ROM_LOAD( "mb7122h.7v", 0x00000, 0x400, CRC(a1267336) SHA1(d11ea9d78526ac3c0dc6e57a2da5914273ad1e3f) ) /* Priority Unused */ |
1399 | ||
1400 | ROM_REGION( 0x0e00, "plds", 0 ) | |
1401 | ROM_LOAD( "tj-00.9j", 0x0000, 0x0117, CRC(46defe8f) SHA1(50db2c265a0ab592938f780f212ef86070b2daa2) ) /* GAL16V8 */ | |
1402 | ROM_LOAD( "tj-01.9h", 0x0200, 0x0117, CRC(7a86902d) SHA1(7e116dbabe615ddae1588001b31a0a6e6e4dc46d) ) /* GAL16V8 */ | |
1403 | ROM_LOAD( "tj-02.9h", 0x0400, 0x0117, CRC(b476d59c) SHA1(c17b7884180b5041d1524e9fd479cddac787a3cb) ) /* GAL16V8 */ | |
1404 | ROM_LOAD( "tj-03.9e", 0x0600, 0x0117, CRC(cfb6e4aa) SHA1(fc70d1d43d8836ae7984c432b3f9e35c2256b18e) ) /* GAL16V8 */ | |
1405 | ROM_LOAD( "tj-04.5n", 0x0800, 0x0117, CRC(bca07086) SHA1(cf713185d7430e17077a95a58a42d28336432c95) ) /* GAL16V8 */ | |
1406 | ROM_LOAD( "tj-05.1r", 0x0a00, 0x0117, CRC(0dfc091b) SHA1(ab7ff0c8ada10633d27d5305f1f41f738647412a) ) /* GAL16V8 */ | |
1399 | 1407 | ROM_END |
1400 | 1408 | |
1401 | 1409 | ROM_START( cninja1 ) /* World ver 1 */ |
r249189 | r249190 | |
1437 | 1445 | |
1438 | 1446 | ROM_REGION( 1024, "proms", 0 ) |
1439 | 1447 | ROM_LOAD( "mb7122h.7v", 0x00000, 0x400, CRC(a1267336) SHA1(d11ea9d78526ac3c0dc6e57a2da5914273ad1e3f) ) /* Priority Unused */ |
1448 | ||
1449 | ROM_REGION( 0x0e00, "plds", 0 ) | |
1450 | ROM_LOAD( "tj-00.9j", 0x0000, 0x0117, CRC(46defe8f) SHA1(50db2c265a0ab592938f780f212ef86070b2daa2) ) /* GAL16V8 */ | |
1451 | ROM_LOAD( "tj-01.9h", 0x0200, 0x0117, CRC(7a86902d) SHA1(7e116dbabe615ddae1588001b31a0a6e6e4dc46d) ) /* GAL16V8 */ | |
1452 | ROM_LOAD( "tj-02.9h", 0x0400, 0x0117, CRC(b476d59c) SHA1(c17b7884180b5041d1524e9fd479cddac787a3cb) ) /* GAL16V8 */ | |
1453 | ROM_LOAD( "tj-03.9e", 0x0600, 0x0117, CRC(cfb6e4aa) SHA1(fc70d1d43d8836ae7984c432b3f9e35c2256b18e) ) /* GAL16V8 */ | |
1454 | ROM_LOAD( "tj-04.5n", 0x0800, 0x0117, CRC(bca07086) SHA1(cf713185d7430e17077a95a58a42d28336432c95) ) /* GAL16V8 */ | |
1455 | ROM_LOAD( "tj-05.1r", 0x0a00, 0x0117, CRC(0dfc091b) SHA1(ab7ff0c8ada10633d27d5305f1f41f738647412a) ) /* GAL16V8 */ | |
1440 | 1456 | ROM_END |
1441 | 1457 | |
1442 | 1458 | ROM_START( cninjau ) /* US ver 4 */ |
r249189 | r249190 | |
1478 | 1494 | |
1479 | 1495 | ROM_REGION( 1024, "proms", 0 ) |
1480 | 1496 | ROM_LOAD( "mb7122h.7v", 0x00000, 0x400, CRC(a1267336) SHA1(d11ea9d78526ac3c0dc6e57a2da5914273ad1e3f) ) /* Priority Unused */ |
1497 | ||
1498 | ROM_REGION( 0x0e00, "plds", 0 ) | |
1499 | ROM_LOAD( "tj-00.9j", 0x0000, 0x0117, CRC(46defe8f) SHA1(50db2c265a0ab592938f780f212ef86070b2daa2) ) /* GAL16V8 */ | |
1500 | ROM_LOAD( "tj-01.9h", 0x0200, 0x0117, CRC(7a86902d) SHA1(7e116dbabe615ddae1588001b31a0a6e6e4dc46d) ) /* GAL16V8 */ | |
1501 | ROM_LOAD( "tj-02.9h", 0x0400, 0x0117, CRC(b476d59c) SHA1(c17b7884180b5041d1524e9fd479cddac787a3cb) ) /* GAL16V8 */ | |
1502 | ROM_LOAD( "tj-03.9e", 0x0600, 0x0117, CRC(cfb6e4aa) SHA1(fc70d1d43d8836ae7984c432b3f9e35c2256b18e) ) /* GAL16V8 */ | |
1503 | ROM_LOAD( "tj-04.5n", 0x0800, 0x0117, CRC(bca07086) SHA1(cf713185d7430e17077a95a58a42d28336432c95) ) /* GAL16V8 */ | |
1504 | ROM_LOAD( "tj-05.1r", 0x0a00, 0x0117, CRC(0dfc091b) SHA1(ab7ff0c8ada10633d27d5305f1f41f738647412a) ) /* GAL16V8 */ | |
1481 | 1505 | ROM_END |
1482 | 1506 | |
1483 | 1507 | ROM_START( joemac ) /* Japan ver 1 */ |
r249189 | r249190 | |
1519 | 1543 | |
1520 | 1544 | ROM_REGION( 1024, "proms", 0 ) |
1521 | 1545 | ROM_LOAD( "mb7122h.7v", 0x00000, 0x400, CRC(a1267336) SHA1(d11ea9d78526ac3c0dc6e57a2da5914273ad1e3f) ) /* Priority Unused */ |
1546 | ||
1547 | ROM_REGION( 0x0e00, "plds", 0 ) | |
1548 | ROM_LOAD( "tj-00.9j", 0x0000, 0x0117, CRC(46defe8f) SHA1(50db2c265a0ab592938f780f212ef86070b2daa2) ) /* GAL16V8 */ | |
1549 | ROM_LOAD( "tj-01.9h", 0x0200, 0x0117, CRC(7a86902d) SHA1(7e116dbabe615ddae1588001b31a0a6e6e4dc46d) ) /* GAL16V8 */ | |
1550 | ROM_LOAD( "tj-02.9h", 0x0400, 0x0117, CRC(b476d59c) SHA1(c17b7884180b5041d1524e9fd479cddac787a3cb) ) /* GAL16V8 */ | |
1551 | ROM_LOAD( "tj-03.9e", 0x0600, 0x0117, CRC(cfb6e4aa) SHA1(fc70d1d43d8836ae7984c432b3f9e35c2256b18e) ) /* GAL16V8 */ | |
1552 | ROM_LOAD( "tj-04.5n", 0x0800, 0x0117, CRC(bca07086) SHA1(cf713185d7430e17077a95a58a42d28336432c95) ) /* GAL16V8 */ | |
1553 | ROM_LOAD( "tj-05.1r", 0x0a00, 0x0117, CRC(0dfc091b) SHA1(ab7ff0c8ada10633d27d5305f1f41f738647412a) ) /* GAL16V8 */ | |
1522 | 1554 | ROM_END |
1523 | 1555 | |
1524 | 1556 | ROM_START( stoneage ) |
r249189 | r249190 | |
---|---|---|
1300 | 1300 | 32*32 |
1301 | 1301 | }; |
1302 | 1302 | |
1303 | ||
1304 | 1303 | static const gfx_layout hng64_16x16x8_tilelayout = |
1305 | 1304 | { |
1306 | 1305 | 16,16, |
r249189 | r249190 | |
1551 | 1550 | MCFG_CPU_PROGRAM_MAP(hng_map) |
1552 | 1551 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", hng64_state, hng64_irq, "screen", 0, 1) |
1553 | 1552 | |
1554 | ||
1555 | ||
1556 | ||
1557 | 1553 | MCFG_NVRAM_ADD_0FILL("nvram") |
1558 | 1554 | |
1559 | 1555 | MCFG_DEVICE_ADD("rtc", MSM6242, XTAL_32_768kHz) |
r249189 | r249190 | |
2011 | 2007 | GAME( 1997, hng64, 0, hng64, hng64, hng64_state, hng64, ROT0, "SNK", "Hyper NeoGeo 64 Bios", MACHINE_NOT_WORKING|MACHINE_NO_SOUND|MACHINE_IS_BIOS_ROOT ) |
2012 | 2008 | |
2013 | 2009 | /* Games */ |
2014 | GAME( 1997, roadedge, hng64, hng64, roadedge, hng64_state, hng64_race, ROT0, "SNK", "Roads Edge / Round Trip (rev.B)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) /* 001 */ | |
2015 | GAME( 1998, sams64, hng64, hng64, hng64, hng64_state, ss64, ROT0, "SNK", "Samurai Shodown 64 / Samurai Spirits 64", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) /* 002 */ | |
2016 | GAME( 1998, xrally, hng64, hng64, roadedge, hng64_state, hng64_race, ROT0, "SNK", "Xtreme Rally / Off Beat Racer!", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) /* 003 */ | |
2017 | GAME( 1998, bbust2, hng64, hng64, bbust2, hng64_state, hng64_shoot, ROT0, "SNK", "Beast Busters 2nd Nightmare", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) /* 004 */ | |
2018 | GAME( 1998, sams64_2, hng64, hng64, hng64, hng64_state, ss64, ROT0, "SNK", "Samurai Shodown: Warrior's Rage / Samurai Spirits 2: Asura Zanmaden", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) /* 005 */ | |
2019 | GAME( 1998, fatfurwa, hng64, hng64, hng64, hng64_state, fatfurwa, ROT0, "SNK", "Fatal Fury: Wild Ambition (rev.A)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) /* 006 */ | |
2020 | GAME( 1999, buriki, hng64, hng64, hng64, hng64_state, buriki, ROT0, "SNK", "Buriki One (rev.B)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) /* 007 */ | |
2010 | GAME( 1997, roadedge, hng64, hng64, roadedge, hng64_state, hng64_race, ROT0, "SNK", "Roads Edge / Round Trip (rev.B)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) /* 001 */ | |
2011 | GAME( 1998, sams64, hng64, hng64, hng64, hng64_state, ss64, ROT0, "SNK", "Samurai Shodown 64 / Samurai Spirits 64", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) /* 002 */ | |
2012 | GAME( 1998, xrally, hng64, hng64, roadedge, hng64_state, hng64_race, ROT0, "SNK", "Xtreme Rally / Off Beat Racer!", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) /* 003 */ | |
2013 | GAME( 1998, bbust2, hng64, hng64, bbust2, hng64_state, hng64_shoot, ROT0, "SNK", "Beast Busters 2nd Nightmare", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) /* 004 */ | |
2014 | GAME( 1998, sams64_2, hng64, hng64, hng64, hng64_state, ss64, ROT0, "SNK", "Samurai Shodown: Warrior's Rage / Samurai Spirits 2: Asura Zanmaden", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) /* 005 */ | |
2015 | GAME( 1998, fatfurwa, hng64, hng64, hng64, hng64_state, fatfurwa, ROT0, "SNK", "Fatal Fury: Wild Ambition (rev.A)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) /* 006 */ | |
2016 | GAME( 1999, buriki, hng64, hng64, hng64, hng64_state, buriki, ROT0, "SNK", "Buriki One (rev.B)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) /* 007 */ |
r249189 | r249190 | |
---|---|---|
68 | 68 | DECLARE_DRIVER_INIT(fearless); |
69 | 69 | DECLARE_DRIVER_INIT(slqz3); |
70 | 70 | DECLARE_DRIVER_INIT(fruitpar); |
71 | DECLARE_DRIVER_INIT(amazonia); | |
72 | DECLARE_DRIVER_INIT(amazoni2); | |
71 | 73 | TILE_GET_INFO_MEMBER(get_tx_tilemap_tile_info); |
72 | 74 | TILE_GET_INFO_MEMBER(get_bg_tilemap_tile_info); |
73 | 75 | virtual void video_start(); |
r249189 | r249190 | |
538 | 540 | |
539 | 541 | |
540 | 542 | |
543 | /*************************************************************************** | |
541 | 544 | |
545 | Amazonia King | |
546 | IGS | |
547 | ||
548 | IGS PCB-0367-00-FG-1 | |
549 | ||
550 | - IGS 027A | |
551 | - IGS 031 | |
552 | - IGS A2107 | |
553 | - IGS T2105 | |
554 | - K668 (qfp44) == OKI6225 | |
555 | - 82C55 | |
556 | ||
557 | ***************************************************************************/ | |
558 | ||
559 | ROM_START( amazonia ) | |
560 | ROM_REGION( 0x04000, "maincpu", 0 ) | |
561 | /* Internal rom of IGS027A type G ARM based MCU */ | |
562 | ROM_LOAD( "amazonia_igs027a", 0x00000, 0x4000, NO_DUMP ) | |
563 | ||
564 | ROM_REGION( 0x80000, "user1", 0 ) // external ARM data / prg | |
565 | ROM_LOAD( "amazonia_v-104br.u23", 0x00000, 0x80000, CRC(103d465e) SHA1(68d088f24171e27c0a9b0660f81d3334f730637a) ) | |
566 | ||
567 | ROM_REGION( 0x480000, "gfx1", 0 ) | |
568 | ROM_LOAD( "amazonia_cg.u11", 0x000000, 0x80000, CRC(2ac2cfd1) SHA1(f8750a4727ddabf1415dab6eaa4a72e60e86e7f1) ) | |
569 | ||
570 | ROM_REGION( 0x80000, "oki", 0 ) | |
571 | ROM_LOAD( "igs_s2102.u28", 0x00000, 0x80000, CRC(90dda82d) SHA1(67fbc1e8d76b85e124136e2f1df09c8b6c5a8f97) ) | |
572 | ROM_END | |
573 | ||
574 | ||
542 | 575 | ROM_START( sdwx ) |
543 | 576 | ROM_REGION( 0x04000, "maincpu", 0 ) |
544 | 577 | /* Internal rom of IGS027A ARM based MCU */ |
r249189 | r249190 | |
553 | 586 | ROM_REGION( 0x200000, "gfx2", 0 ) |
554 | 587 | ROM_LOAD( "cg.u25", 0x000000, 0x200000, CRC(709b9a42) SHA1(18c4b8e159b29c168f5cafb437fe6eb123672471) ) |
555 | 588 | |
556 | ROM_REGION( 0x80000, " | |
589 | ROM_REGION( 0x80000, "oki", 0 ) // m6295 samples | |
557 | 590 | ROM_LOAD( "sp.u2", 0x00000, 0x80000, CRC(216b5418) SHA1(b7bc24ced0ccb5476c974420aa506c13b971fc9f) ) |
558 | 591 | ROM_END |
559 | 592 | |
593 | /* | |
594 | Amazonia King II by IGS 2004 ( International Game System ) | |
595 | Patented by EAGO. | |
560 | 596 | |
597 | U12 is a 27c240 labeled ( AKII TEXT ) ( text ) | |
598 | U13 is a 27c160 labeled ( AKII CG ) ( Grafics) | |
599 | U23 is a 27c4096 labeled ( AKII_V-202br ) ( Program version Brazil ) | |
600 | U28 is a 29F4000 labeled (AKII SP) ( Sound Program ) | |
601 | U17 is a ATF16V8B-15P labeled ( FG-1 ) (read protected) | |
602 | U10 is a IGS 003c Dip 40 pin ( Maybe 8255 ? ) | |
603 | U24 is a IGS031 QFP with 208 pin | |
604 | U32 is a IGS027a QFP with 120 pin ( Encrypted ARM, internal code, stamped P9 A/K II ) | |
605 | Crystal Frequency = 22.000 Mhz | |
606 | Sound Processor ( U6295 ) | |
607 | */ | |
561 | 608 | |
609 | ROM_START( amazoni2 ) | |
610 | ROM_REGION( 0x04000, "maincpu", 0 ) | |
611 | /* Internal rom of IGS027A ARM based MCU */ | |
612 | ROM_LOAD( "sdwx_igs027a", 0x00000, 0x4000, NO_DUMP ) | |
562 | 613 | |
614 | ROM_REGION( 0x80000, "user1", 0 ) // external ARM data / prg | |
615 | ROM_LOAD( "U23_27c4096_AKII_V-202br.bin", 0x000000, 0x80000, CRC(7147b43c) SHA1(29a4a20867595650918c4ab892ddb71440bd3f4b) ) | |
616 | ||
617 | ROM_REGION( 0x80000, "gfx1", 0 ) | |
618 | ROM_LOAD( "akii_text.u24", 0x000000, 0x80000, CRC(60b415ac) SHA1(b4475b0ba1e70504cac9ac05078873df0b16495b) ) | |
619 | ||
620 | ROM_REGION( 0x200000, "gfx2", 0 ) | |
621 | ROM_LOAD( "U13_27c160_AKII_CG.bin", 0x000000, 0x200000, CRC(254bd84f) SHA1(091ecda792c4c4a7bb039b2c708788ef87fdaf86) ) // FIXED BITS (xxxxxxx0xxxxxxxx) | |
622 | ||
623 | ROM_REGION( 0x80000, "oki", 0 ) // m6295 samples | |
624 | ROM_LOAD( "akii_sp.u28", 0x00000, 0x80000, CRC(216b5418) SHA1(b7bc24ced0ccb5476c974420aa506c13b971fc9f) ) | |
625 | ROM_END | |
626 | ||
627 | ||
563 | 628 | ROM_START( sddz ) |
564 | 629 | ROM_REGION( 0x04000, "maincpu", 0 ) |
565 | 630 | /* Internal rom of IGS027A ARM based MCU */ |
r249189 | r249190 | |
1064 | 1129 | pgm_create_dummy_internal_arm_region(); |
1065 | 1130 | } |
1066 | 1131 | |
1132 | DRIVER_INIT_MEMBER(igs_m027_state,amazonia) | |
1133 | { | |
1134 | amazonia_decrypt(machine()); | |
1135 | //sdwx_gfx_decrypt(machine()); | |
1136 | pgm_create_dummy_internal_arm_region(); | |
1137 | } | |
1138 | ||
1139 | DRIVER_INIT_MEMBER(igs_m027_state,amazoni2) | |
1140 | { | |
1141 | amazoni2_decrypt(machine()); | |
1142 | //sdwx_gfx_decrypt(machine()); | |
1143 | pgm_create_dummy_internal_arm_region(); | |
1144 | } | |
1145 | ||
1067 | 1146 | /*************************************************************************** |
1068 | 1147 | |
1069 | 1148 | Game Drivers |
r249189 | r249190 | |
1071 | 1150 | ***************************************************************************/ |
1072 | 1151 | |
1073 | 1152 | GAME( 1999, slqz3, 0, igs_majhong, sdwx, igs_m027_state, slqz3, ROT0, "IGS", "Mahjong Shuang Long Qiang Zhu 3 (China, VS107C)", MACHINE_IS_SKELETON ) |
1153 | GAME( 1999, amazonia, 0, igs_majhong, sdwx, igs_m027_state, amazonia, ROT0, "IGS", "Amazonia King (V104BR)", MACHINE_IS_SKELETON ) | |
1074 | 1154 | GAME( 200?, fruitpar, 0, igs_majhong, sdwx, igs_m027_state, fruitpar, ROT0, "IGS", "Fruit Paradise (V214)", MACHINE_IS_SKELETON ) |
1075 | GAME( 2002, sdwx, 0, igs_majhong, sdwx, igs_m027_state, sdwx, ROT0, "IGS", "Sheng Dan Wu Xian", MACHINE_IS_SKELETON ) // aka Christmas 5 Line? | |
1155 | GAME( 2002, sdwx, 0, igs_majhong, sdwx, igs_m027_state, sdwx, ROT0, "IGS", "Sheng Dan Wu Xian", MACHINE_IS_SKELETON ) // aka Christmas 5 Line? (or Amazonia King II, shares roms at least?) | |
1156 | GAME( 2002, amazoni2, 0, igs_majhong, sdwx, igs_m027_state, amazoni2, ROT0, "IGS", "Amazonia King II (V202BR)", MACHINE_IS_SKELETON ) | |
1076 | 1157 | GAME( 200?, sddz, 0, igs_majhong, sdwx, igs_m027_state, sddz, ROT0, "IGS", "Super Dou Di Zhu", MACHINE_IS_SKELETON ) |
1077 | 1158 | GAME( 2000, zhongguo, 0, igs_majhong, sdwx, igs_m027_state, zhongguo, ROT0, "IGS", "Zhong Guo Chu Da D", MACHINE_IS_SKELETON ) |
1078 | 1159 | GAME( 200?, lhzb3, 0, igs_majhong, sdwx, igs_m027_state, lhzb3, ROT0, "IGS", "Long Hu Zheng Ba 3", MACHINE_IS_SKELETON ) |
r249189 | r249190 | |
---|---|---|
625 | 625 | |
626 | 626 | ROM_REGION16_BE( 0x400000, "ensoniq.1", 0 ) |
627 | 627 | ROM_COPY( "ensoniq.0", 0x400000, 0x000000, 0x400000 ) |
628 | ||
629 | ROM_REGION( 0x0600, "plds", 0 ) | |
630 | ROM_LOAD( "u8.u8", 0x0000, 0x0117, CRC(99bd3cc1) SHA1(b0d3ac93cb5d2857cf9c184c7a2b4afa0211d588) ) /* unprotected GAL16V8B */ | |
631 | ROM_LOAD( "u9.u9", 0x0200, 0x0117, CRC(480f4860) SHA1(7ff3723122cbdda5c0dcea5167508e9a7437f551) ) /* unprotected GAL16V8B */ | |
632 | ROM_LOAD( "u200.u200", 0x0400, 0x0117, CRC(9343ad76) SHA1(a2adf2510011078ee9fae65acdd2daa0ffab48f6) ) /* unprotected GAL16V8B */ | |
628 | 633 | ROM_END |
629 | 634 | |
630 | 635 | ROM_START( quizmoon ) |
r249189 | r249190 | |
---|---|---|
4362 | 4362 | static MACHINE_CONFIG_START( gunnail, nmk16_state ) |
4363 | 4363 | |
4364 | 4364 | /* basic machine hardware */ |
4365 | MCFG_CPU_ADD("maincpu", M68000, 1 | |
4365 | MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz) /* verified on pcb */ | |
4366 | 4366 | MCFG_CPU_PROGRAM_MAP(gunnail_map) |
4367 | 4367 | NMK_HACKY_INTERRUPT_TIMING |
4368 | 4368 | |
r249189 | r249190 | |
4370 | 4370 | NMK_HACKY_SCREEN_HIRES |
4371 | 4371 | MCFG_SCREEN_UPDATE_DRIVER(nmk16_state, screen_update_gunnail) |
4372 | 4372 | |
4373 | ||
4374 | ||
4375 | ||
4376 | 4373 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", macross) |
4377 | 4374 | MCFG_PALETTE_ADD("palette", 1024) |
4378 | 4375 | MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx) |
r249189 | r249190 | |
4382 | 4379 | /* sound hardware */ |
4383 | 4380 | MCFG_SPEAKER_STANDARD_MONO("mono") |
4384 | 4381 | |
4385 | MCFG_NMK004_ADD("nmk004", | |
4382 | MCFG_NMK004_ADD("nmk004", XTAL_16MHz/2) /* verified on pcb */ | |
4386 | 4383 | |
4387 | MCFG_SOUND_ADD("ymsnd", YM2203, 1 | |
4384 | MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_12MHz/8) /* verified on pcb */ | |
4388 | 4385 | MCFG_YM2203_IRQ_HANDLER(DEVWRITELINE("nmk004", nmk004_device, ym2203_irq_handler)) |
4389 | 4386 | MCFG_SOUND_ROUTE(0, "mono", 0.50) |
4390 | 4387 | MCFG_SOUND_ROUTE(1, "mono", 0.50) |
4391 | 4388 | MCFG_SOUND_ROUTE(2, "mono", 0.50) |
4392 | 4389 | MCFG_SOUND_ROUTE(3, "mono", 1.20) |
4393 | 4390 | |
4394 | MCFG_OKIM6295_ADD("oki1", 16 | |
4391 | MCFG_OKIM6295_ADD("oki1", XTAL_16MHz/4, OKIM6295_PIN7_LOW) /* verified on pcb */ | |
4395 | 4392 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10) |
4396 | 4393 | |
4397 | MCFG_OKIM6295_ADD("oki2", 16 | |
4394 | MCFG_OKIM6295_ADD("oki2", XTAL_16MHz/4, OKIM6295_PIN7_LOW) /* verified on pcb */ | |
4398 | 4395 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10) |
4399 | 4396 | MACHINE_CONFIG_END |
4400 | 4397 | |
r249189 | r249190 | |
6175 | 6172 | |
6176 | 6173 | AK92077 |
6177 | 6174 | |-------------------------------------------------------------| |
6178 | | LA4460 VOL YM2203 6116 92077-2.U10 | |
6175 | | LA4460 VOL YM2203 6116 92077-2.U101 62256 62256 | | |
6179 | 6176 | |-| 16MHz |------| 62256 62256 | |
6180 | 6177 | | 4558 6295 92077-6.U57 |NMK004| 62256 62256 | |
6181 | 6178 | |-| 12MHz | | 62256 62256 | |
r249189 | r249190 | |
6203 | 6200 | | 6264 10MHz | |
6204 | 6201 | |-------------------------------------------------------------| |
6205 | 6202 | Notes: |
6206 | 68000 - Motorola MC68000P12 CPU running at 10.000MHz (DIP64) | |
6207 | 6116 - 2K x8 SRAM (x9, DIP24) | |
6208 | 6264 - 8K x8 SRAM (x2, DIP28) | |
6209 | 62256 - 32K x8 SRAM (x10, DIP28) | |
6210 | YM2203- Yamaha YM2203 (DIP40) | |
6203 | 68000 - Motorola MC68000P12 CPU running at 10MHz (DIP64) | |
6204 | 6116 - 2Kb x8 SRAM (x9, DIP24) | |
6205 | 6264 - 8Kb x8 SRAM (x2, DIP28) | |
6206 | 62256 - 32Kb x8 SRAM (x10, DIP28) | |
6207 | YM2203- Yamaha YM2203 running at 1.5MHz [12/8] (DIP40) | |
6211 | 6208 | YM3014- Yamaha YM3014 (DIP8) |
6209 | 6295 - OKI M6295 running at 4MHz, pin 7 low [16/4] (x2, QFP44) | |
6212 | 6210 | 4558 - BA4558 Op Amp (DIP8) |
6213 | 6211 | LA4460- Power Amplifier |
6214 | 6295 - Oki M6295, running at MHz, sample rate (x2, QFP44) | |
6215 | DIP1/2- 8 position Dip Switches | |
6212 | DIP1/2- 8 position DIP Switches | |
6216 | 6213 | VOL - Volume Potentiometer |
6214 | OSC - 12MHz, 16MHz, 10MHz | |
6215 | HSync - 15.367kHz | |
6216 | VSync - 56.205Hz | |
6217 | 6217 | |
6218 | 6218 | NMK CUSTOM IC'S |
6219 | - NMK004; Actually a TLCS90-based Toshiba TMP91P640F-10 MCU | |
6220 | with 16K internal OTP PROM, running at 8.000MHz [16 / 2] (QFP64) | |
6221 | Note that the internal ROM is secured :( | |
6219 | - NMK004 marked "NMK004 0840-1324". Actually a TLCS90-based Toshiba TMP90C840AF | |
6220 | Microcontroller with 256 bytes RAM & 8Kb ROM, running at 8.000MHz [16/2] (QFP64) | |
6222 | 6221 | - NMK005 (x1, Square QFP64) |
6223 | 6222 | - NMK008 (x1, Square QFP84) |
6224 | 6223 | - NMK009 (x2, Square QFP100) |
r249189 | r249190 | |
6228 | 6227 | - NMK214 (x2, SDIP64) |
6229 | 6228 | - NMK215 (x1, SDIP64) |
6230 | 6229 | |
6231 | Sound:YM2203C,OKI M6295 x2 | |
6232 | OSC :12.0000MHz,16.0000MHz,10.0000MHz | |
6233 | Other:NMK 111 x3,214 x2,901,903 x2,902,005,004,215,008,009 x2 | |
6234 | 6230 | */ |
6235 | 6231 | |
6236 | 6232 | ROM_START( gunnail ) |
6237 | 6233 | ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */ |
6238 | ROM_LOAD16_BYTE( "3e.bin", 0x00000, 0x40000, CRC(61d985b2) SHA1(96daca603f18accb47f98a3e584b2c84fc5a2ca4) ) | |
6239 | ROM_LOAD16_BYTE( "3o.bin", 0x00001, 0x40000, CRC(f114e89c) SHA1(a12f5278167f446bb5277e87289c41b5aa365c86) ) | |
6234 | ROM_LOAD16_BYTE( "3e.u131", 0x00000, 0x40000, CRC(61d985b2) SHA1(96daca603f18accb47f98a3e584b2c84fc5a2ca4) ) | |
6235 | ROM_LOAD16_BYTE( "3o.u133", 0x00001, 0x40000, CRC(f114e89c) SHA1(a12f5278167f446bb5277e87289c41b5aa365c86) ) | |
6240 | 6236 | |
6241 | ROM_REGION( 0x10000, "audiocpu", 0 ) /* Code for (unknown?) CPU */ | |
6242 | ROM_LOAD( "92077_2.bin", 0x00000, 0x10000, CRC(cd4e55f8) SHA1(92182767ca0ec37ec4949bd1a88c2efdcdcb60ed) ) | |
6237 | ROM_REGION( 0x10000, "audiocpu", 0 ) /* Code for NMK004 CPU */ | |
6238 | ROM_LOAD( "92077_2.u101", 0x00000, 0x10000, CRC(cd4e55f8) SHA1(92182767ca0ec37ec4949bd1a88c2efdcdcb60ed) ) | |
6243 | 6239 | |
6244 | 6240 | ROM_REGION( 0x020000, "fgtile", 0 ) |
6245 | ROM_LOAD( "1. | |
6241 | ROM_LOAD( "1.u21", 0x000000, 0x020000, CRC(3d00a9f4) SHA1(91a82e3e74c8774d7f8b2adceb228b97010facfd) ) /* 8x8 tiles */ | |
6246 | 6242 | |
6247 | 6243 | ROM_REGION( 0x100000, "bgtile", 0 ) |
6248 | ROM_LOAD( "92077-4. | |
6244 | ROM_LOAD( "92077-4.u19", 0x000000, 0x100000, CRC(a9ea2804) SHA1(14dbdb3c7986db5e44dc7c5be6fcf39f3d1e50b0) ) /* 16x16 tiles */ | |
6249 | 6245 | |
6250 | 6246 | ROM_REGION( 0x200000, "sprites", 0 ) |
6251 | ROM_LOAD16_WORD_SWAP( "92077-7. | |
6247 | ROM_LOAD16_WORD_SWAP( "92077-7.u134", 0x000000, 0x200000, CRC(d49169b3) SHA1(565ff7725dd6ace79b55706114132d8d867e81a9) ) /* Sprites */ | |
6252 | 6248 | |
6253 | 6249 | ROM_REGION( 0x0a0000, "oki1", 0 ) /* OKIM6295 samples */ |
6254 | ROM_LOAD( "92077-5. | |
6250 | ROM_LOAD( "92077-5.u56", 0x00000, 0x20000, CRC(feb83c73) SHA1(b44e9d20b4af02e218c4bc875d66a7d6b8551cae) ) | |
6255 | 6251 | ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */ |
6256 | 6252 | |
6257 | 6253 | ROM_REGION( 0x0a0000, "oki2", 0 ) /* OKIM6295 samples */ |
6258 | ROM_LOAD( "92077-6. | |
6254 | ROM_LOAD( "92077-6.u57", 0x00000, 0x20000, CRC(6d133f0d) SHA1(8a5e6e27a297196f20e4de0d060f1188115809bb) ) | |
6259 | 6255 | ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */ |
6260 | 6256 | |
6261 | 6257 | ROM_REGION( 0x0220, "proms", 0 ) |
6262 | ROM_LOAD( "8.bpr", 0x0000, 0x0100, CRC(4299776e) SHA1(683d14d2ace14965f0fcfe0f0540c1b77d2cece5) ) /* unknown */ | |
6263 | ROM_LOAD( "9.bpr", 0x0100, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) /* unknown */ | |
6264 | ROM_LOAD( "10.bpr", 0x0200, 0x0020, CRC(c60103c8) SHA1(dfb05b704bb5e1f75f5aaa4fa36e8ddcc905f8b6) ) /* unknown */ | |
6258 | ROM_LOAD( "8_82s129.u35", 0x0000, 0x0100, CRC(4299776e) SHA1(683d14d2ace14965f0fcfe0f0540c1b77d2cece5) ) /* unknown */ | |
6259 | ROM_LOAD( "9_82s135.u72", 0x0100, 0x0100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) /* unknown */ | |
6260 | ROM_LOAD( "10_82s123.u96", 0x0200, 0x0020, CRC(c60103c8) SHA1(dfb05b704bb5e1f75f5aaa4fa36e8ddcc905f8b6) ) /* unknown */ | |
6265 | 6261 | ROM_END |
6266 | 6262 | |
6267 | 6263 | ROM_START( macross2 ) |
r249189 | r249190 | |
---|---|---|
580 | 580 | |
581 | 581 | ROM_REGION( 0x800000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ |
582 | 582 | PGM_VIDEO_BIOS |
583 | ROM_LOAD( "t0100. | |
583 | ROM_LOAD( "t0100.u8", 0x180000, 0x400000, CRC(61425e1e) SHA1(20753b86fc12003cfd763d903f034dbba8010b32) ) | |
584 | 584 | |
585 | 585 | ROM_REGION( 0x1800000, "sprcol", 0 ) /* Sprite Colour Data */ |
586 | ROM_LOAD( "a0100.rom", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) ) | |
587 | ROM_LOAD( "a0101.rom", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) ) | |
588 | ROM_LOAD( "a0102.rom", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) ) | |
589 | ROM_LOAD( "a0103.rom", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) ) | |
590 | ROM_LOAD( "a0104.rom", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) ) | |
591 | ROM_LOAD( "a0105.rom", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) ) | |
586 | ROM_LOAD( "a0100.u5", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) ) | |
587 | ROM_LOAD( "a0101.u6", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) ) | |
588 | ROM_LOAD( "a0102.u7", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) ) | |
589 | ROM_LOAD( "a0103.u8", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) ) | |
590 | ROM_LOAD( "a0104.u11", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) ) | |
591 | ROM_LOAD( "a0105.u12", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) ) | |
592 | 592 | |
593 | 593 | ROM_REGION( 0x1000000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ |
594 | ROM_LOAD( "b0100.rom", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) ) | |
595 | ROM_LOAD( "b0101.rom", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) ) | |
596 | ROM_LOAD( "b0102.rom", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) ) | |
594 | ROM_LOAD( "b0100.u9", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) ) | |
595 | ROM_LOAD( "b0101.u10", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) ) | |
596 | ROM_LOAD( "b0102.u15", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) ) | |
597 | 597 | |
598 | 598 | ROM_REGION( 0x600000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */ |
599 | 599 | PGM_AUDIO_BIOS |
600 | ROM_LOAD( "m0100. | |
600 | ROM_LOAD( "m0100.u1", 0x400000, 0x200000, CRC(e5c36c83) SHA1(50c6f66770e8faa3df349f7d68c407a7ad021716) ) | |
601 | 601 | ROM_END |
602 | 602 | |
603 | 603 | ROM_START( orlegende ) |
r249189 | r249190 | |
607 | 607 | |
608 | 608 | ROM_REGION( 0x800000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ |
609 | 609 | PGM_VIDEO_BIOS |
610 | ROM_LOAD( "t0100. | |
610 | ROM_LOAD( "t0100.u8", 0x180000, 0x400000, CRC(61425e1e) SHA1(20753b86fc12003cfd763d903f034dbba8010b32) ) | |
611 | 611 | |
612 | 612 | ROM_REGION( 0x1800000, "sprcol", 0 ) /* Sprite Colour Data */ |
613 | ROM_LOAD( "a0100.rom", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) ) | |
614 | ROM_LOAD( "a0101.rom", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) ) | |
615 | ROM_LOAD( "a0102.rom", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) ) | |
616 | ROM_LOAD( "a0103.rom", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) ) | |
617 | ROM_LOAD( "a0104.rom", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) ) | |
618 | ROM_LOAD( "a0105.rom", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) ) | |
613 | ROM_LOAD( "a0100.u5", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) ) | |
614 | ROM_LOAD( "a0101.u6", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) ) | |
615 | ROM_LOAD( "a0102.u7", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) ) | |
616 | ROM_LOAD( "a0103.u8", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) ) | |
617 | ROM_LOAD( "a0104.u11", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) ) | |
618 | ROM_LOAD( "a0105.u12", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) ) | |
619 | 619 | |
620 | 620 | ROM_REGION( 0x1000000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ |
621 | ROM_LOAD( "b0100.rom", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) ) | |
622 | ROM_LOAD( "b0101.rom", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) ) | |
623 | ROM_LOAD( "b0102.rom", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) ) | |
621 | ROM_LOAD( "b0100.u9", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) ) | |
622 | ROM_LOAD( "b0101.u10", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) ) | |
623 | ROM_LOAD( "b0102.u15", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) ) | |
624 | 624 | |
625 | 625 | ROM_REGION( 0x600000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */ |
626 | 626 | PGM_AUDIO_BIOS |
627 | ROM_LOAD( "m0100. | |
627 | ROM_LOAD( "m0100.u1", 0x400000, 0x200000, CRC(e5c36c83) SHA1(50c6f66770e8faa3df349f7d68c407a7ad021716) ) | |
628 | 628 | ROM_END |
629 | 629 | |
630 | 630 | ROM_START( orlegendc ) |
r249189 | r249190 | |
634 | 634 | |
635 | 635 | ROM_REGION( 0x800000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ |
636 | 636 | PGM_VIDEO_BIOS |
637 | ROM_LOAD( "t0100. | |
637 | ROM_LOAD( "t0100.u8", 0x180000, 0x400000, CRC(61425e1e) SHA1(20753b86fc12003cfd763d903f034dbba8010b32) ) | |
638 | 638 | |
639 | 639 | ROM_REGION( 0x1800000, "sprcol", 0 ) /* Sprite Colour Data */ |
640 | ROM_LOAD( "a0100.rom", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) ) | |
641 | ROM_LOAD( "a0101.rom", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) ) | |
642 | ROM_LOAD( "a0102.rom", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) ) | |
643 | ROM_LOAD( "a0103.rom", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) ) | |
644 | ROM_LOAD( "a0104.rom", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) ) | |
645 | ROM_LOAD( "a0105.rom", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) ) | |
640 | ROM_LOAD( "a0100.u5", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) ) | |
641 | ROM_LOAD( "a0101.u6", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) ) | |
642 | ROM_LOAD( "a0102.u7", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) ) | |
643 | ROM_LOAD( "a0103.u8", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) ) | |
644 | ROM_LOAD( "a0104.u11", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) ) | |
645 | ROM_LOAD( "a0105.u12", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) ) | |
646 | 646 | |
647 | 647 | ROM_REGION( 0x1000000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ |
648 | ROM_LOAD( "b0100.rom", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) ) | |
649 | ROM_LOAD( "b0101.rom", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) ) | |
650 | ROM_LOAD( "b0102.rom", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) ) | |
648 | ROM_LOAD( "b0100.u9", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) ) | |
649 | ROM_LOAD( "b0101.u10", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) ) | |
650 | ROM_LOAD( "b0102.u15", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) ) | |
651 | 651 | |
652 | 652 | ROM_REGION( 0x600000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */ |
653 | 653 | PGM_AUDIO_BIOS |
654 | ROM_LOAD( "m0100. | |
654 | ROM_LOAD( "m0100.u1", 0x400000, 0x200000, CRC(e5c36c83) SHA1(50c6f66770e8faa3df349f7d68c407a7ad021716) ) | |
655 | 655 | ROM_END |
656 | 656 | |
657 | 657 | ROM_START( orlegendca ) |
r249189 | r249190 | |
661 | 661 | |
662 | 662 | ROM_REGION( 0x800000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ |
663 | 663 | PGM_VIDEO_BIOS |
664 | ROM_LOAD( "t0100. | |
664 | ROM_LOAD( "t0100.u8", 0x180000, 0x400000, CRC(61425e1e) SHA1(20753b86fc12003cfd763d903f034dbba8010b32) ) | |
665 | 665 | |
666 | 666 | ROM_REGION( 0x1800000, "sprcol", 0 ) /* Sprite Colour Data */ |
667 | ROM_LOAD( "a0100.rom", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) ) | |
668 | ROM_LOAD( "a0101.rom", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) ) | |
669 | ROM_LOAD( "a0102.rom", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) ) | |
670 | ROM_LOAD( "a0103.rom", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) ) | |
671 | ROM_LOAD( "a0104.rom", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) ) | |
672 | ROM_LOAD( "a0105.rom", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) ) | |
667 | ROM_LOAD( "a0100.u5", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) ) | |
668 | ROM_LOAD( "a0101.u6", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) ) | |
669 | ROM_LOAD( "a0102.u7", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) ) | |
670 | ROM_LOAD( "a0103.u8", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) ) | |
671 | ROM_LOAD( "a0104.u11", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) ) | |
672 | ROM_LOAD( "a0105.u12", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) ) | |
673 | 673 | |
674 | 674 | ROM_REGION( 0x1000000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ |
675 | ROM_LOAD( "b0100.rom", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) ) | |
676 | ROM_LOAD( "b0101.rom", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) ) | |
677 | ROM_LOAD( "b0102.rom", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) ) | |
675 | ROM_LOAD( "b0100.u9", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) ) | |
676 | ROM_LOAD( "b0101.u10", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) ) | |
677 | ROM_LOAD( "b0102.u15", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) ) | |
678 | 678 | |
679 | 679 | ROM_REGION( 0x600000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */ |
680 | 680 | PGM_AUDIO_BIOS |
681 | ROM_LOAD( "m0100. | |
681 | ROM_LOAD( "m0100.u1", 0x400000, 0x200000, CRC(e5c36c83) SHA1(50c6f66770e8faa3df349f7d68c407a7ad021716) ) | |
682 | 682 | ROM_END |
683 | 683 | |
684 | 684 | |
r249189 | r249190 | |
691 | 691 | IGS PCB NO-0134-1 |
692 | 692 | IGS PCB NO-0135 |
693 | 693 | |
694 | ||
695 | 694 | OLV111CH.U11 [b80ddd3c] |
696 | 695 | OLV111CH.U6 [5fb86373] |
697 | 696 | OLV111CH.U7 [6ee79faf] |
r249189 | r249190 | |
699 | 698 | |
700 | 699 | T0100.U8 |
701 | 700 | |
702 | ||
703 | 701 | A0100.U5 |
704 | 702 | A0101.U6 |
705 | 703 | A0102.U7 |
r249189 | r249190 | |
725 | 723 | |
726 | 724 | ROM_REGION( 0x800000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ |
727 | 725 | PGM_VIDEO_BIOS |
728 | ROM_LOAD( "t0100. | |
726 | ROM_LOAD( "t0100.u8", 0x180000, 0x400000, CRC(61425e1e) SHA1(20753b86fc12003cfd763d903f034dbba8010b32) ) | |
729 | 727 | |
730 | 728 | ROM_REGION( 0x1800000, "sprcol", 0 ) /* Sprite Colour Data */ |
731 | ROM_LOAD( "a0100.rom", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) ) | |
732 | ROM_LOAD( "a0101.rom", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) ) | |
733 | ROM_LOAD( "a0102.rom", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) ) | |
734 | ROM_LOAD( "a0103.rom", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) ) | |
735 | ROM_LOAD( "a0104.rom", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) ) | |
736 | ROM_LOAD( "a0105.rom", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) ) | |
729 | ROM_LOAD( "a0100.u5", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) ) | |
730 | ROM_LOAD( "a0101.u6", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) ) | |
731 | ROM_LOAD( "a0102.u7", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) ) | |
732 | ROM_LOAD( "a0103.u8", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) ) | |
733 | ROM_LOAD( "a0104.u11", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) ) | |
734 | ROM_LOAD( "a0105.u12", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) ) | |
737 | 735 | |
738 | 736 | ROM_REGION( 0x1000000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ |
739 | ROM_LOAD( "b0100.rom", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) ) | |
740 | ROM_LOAD( "b0101.rom", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) ) | |
741 | ROM_LOAD( "b0102.rom", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) ) | |
737 | ROM_LOAD( "b0100.u9", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) ) | |
738 | ROM_LOAD( "b0101.u10", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) ) | |
739 | ROM_LOAD( "b0102.u15", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) ) | |
742 | 740 | |
743 | 741 | ROM_REGION( 0x600000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */ |
744 | 742 | PGM_AUDIO_BIOS |
745 | ROM_LOAD( "m0100. | |
743 | ROM_LOAD( "m0100.u1", 0x400000, 0x200000, CRC(e5c36c83) SHA1(50c6f66770e8faa3df349f7d68c407a7ad021716) ) | |
746 | 744 | ROM_END |
747 | 745 | |
748 | 746 | |
r249189 | r249190 | |
750 | 748 | ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */ |
751 | 749 | PGM_68K_BIOS |
752 | 750 | ROM_LOAD16_BYTE( "olv111tw.u6", 0x100001, 0x080000, CRC(b205a733) SHA1(33f4c9162e36be4957004f80593f94fc33b163f8) ) |
753 | ROM_LOAD16_BYTE( "olv111tw.u | |
751 | ROM_LOAD16_BYTE( "olv111tw.u9", 0x100000, 0x080000, CRC(6d9d29b4) SHA1(29a18de7e5b58c2f3125d6dc9cc8a8186180e956) ) | |
754 | 752 | ROM_LOAD16_BYTE( "olv111tw.u7", 0x200001, 0x080000, CRC(27628e87) SHA1(a0effd83dc57ac72ba4f110737a075705d78e798) ) |
755 | ROM_LOAD16_BYTE( "olv111tw.u | |
753 | ROM_LOAD16_BYTE( "olv111tw.u11", 0x200000, 0x080000, CRC(23f33bc9) SHA1(f24490370d40d905afe8b716a3953b4e9f0aada4) ) | |
756 | 754 | |
757 | 755 | ROM_REGION( 0x800000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ |
758 | 756 | PGM_VIDEO_BIOS |
759 | ROM_LOAD( "t0100. | |
757 | ROM_LOAD( "t0100.u8", 0x180000, 0x400000, CRC(61425e1e) SHA1(20753b86fc12003cfd763d903f034dbba8010b32) ) | |
760 | 758 | |
761 | 759 | ROM_REGION( 0x1800000, "sprcol", 0 ) /* Sprite Colour Data */ |
762 | ROM_LOAD( "a0100.rom", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) ) | |
763 | ROM_LOAD( "a0101.rom", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) ) | |
764 | ROM_LOAD( "a0102.rom", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) ) | |
765 | ROM_LOAD( "a0103.rom", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) ) | |
766 | ROM_LOAD( "a0104.rom", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) ) | |
767 | ROM_LOAD( "a0105.rom", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) ) | |
760 | ROM_LOAD( "a0100.u5", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) ) | |
761 | ROM_LOAD( "a0101.u6", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) ) | |
762 | ROM_LOAD( "a0102.u7", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) ) | |
763 | ROM_LOAD( "a0103.u8", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) ) | |
764 | ROM_LOAD( "a0104.u11", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) ) | |
765 | ROM_LOAD( "a0105.u12", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) ) | |
768 | 766 | |
769 | 767 | ROM_REGION( 0x1000000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ |
770 | ROM_LOAD( "b0100.rom", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) ) | |
771 | ROM_LOAD( "b0101.rom", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) ) | |
772 | ROM_LOAD( "b0102.rom", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) ) | |
768 | ROM_LOAD( "b0100.u9", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) ) | |
769 | ROM_LOAD( "b0101.u10", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) ) | |
770 | ROM_LOAD( "b0102.u15", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) ) | |
773 | 771 | |
774 | 772 | ROM_REGION( 0x600000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */ |
775 | 773 | PGM_AUDIO_BIOS |
776 | ROM_LOAD( "m0100. | |
774 | ROM_LOAD( "m0100.u1", 0x400000, 0x200000, CRC(e5c36c83) SHA1(50c6f66770e8faa3df349f7d68c407a7ad021716) ) | |
777 | 775 | ROM_END |
778 | 776 | |
777 | ROM_START( orlegend111k ) | |
778 | ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */ | |
779 | PGM_68K_BIOS | |
780 | ROM_LOAD16_BYTE( "olv111ko.u6", 0x100001, 0x080000, CRC(1ff35baa) SHA1(f6791cc37ea468d0154b0e31a99f6f33a74bca81) ) | |
781 | ROM_LOAD16_BYTE( "olv111ko.u9", 0x100000, 0x080000, CRC(87b6d202) SHA1(32828166a645158630f79e7d493a2774e69bc265) ) | |
782 | ROM_LOAD16_BYTE( "olv111ko.u7", 0x200001, 0x080000, CRC(27628e87) SHA1(a0effd83dc57ac72ba4f110737a075705d78e798) ) | |
783 | ROM_LOAD16_BYTE( "olv111ko.u11", 0x200000, 0x080000, CRC(23f33bc9) SHA1(f24490370d40d905afe8b716a3953b4e9f0aada4) ) | |
784 | ||
785 | ROM_REGION( 0x800000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ | |
786 | PGM_VIDEO_BIOS | |
787 | ROM_LOAD( "t0100.u8", 0x180000, 0x400000, CRC(61425e1e) SHA1(20753b86fc12003cfd763d903f034dbba8010b32) ) | |
788 | ||
789 | ROM_REGION( 0x1800000, "sprcol", 0 ) /* Sprite Colour Data */ | |
790 | ROM_LOAD( "a0100.u5", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) ) | |
791 | ROM_LOAD( "a0101.u6", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) ) | |
792 | ROM_LOAD( "a0102.u7", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) ) | |
793 | ROM_LOAD( "a0103.u8", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) ) | |
794 | ROM_LOAD( "a0104.u11", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) ) | |
795 | ROM_LOAD( "a0105.u12", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) ) | |
796 | ||
797 | ROM_REGION( 0x1000000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ | |
798 | ROM_LOAD( "b0100.u9", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) ) | |
799 | ROM_LOAD( "b0101.u10", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) ) | |
800 | ROM_LOAD( "b0102.u15", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) ) | |
801 | ||
802 | ROM_REGION( 0x600000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */ | |
803 | PGM_AUDIO_BIOS | |
804 | ROM_LOAD( "m0100.u1", 0x400000, 0x200000, CRC(e5c36c83) SHA1(50c6f66770e8faa3df349f7d68c407a7ad021716) ) | |
805 | ROM_END | |
806 | ||
779 | 807 | /* |
780 | 808 | |
781 | 809 | Oriental Legend / Xi You Shi E Zhuan (KOREA 105 Ver.) |
r249189 | r249190 | |
785 | 813 | IGS PCB NO-0134-2 |
786 | 814 | IGS PCB NO-0135 |
787 | 815 | |
788 | ||
789 | 816 | OLV105KO.U11 [40ae4d9e] |
790 | 817 | OLV105KO.U6 [b86703fe] |
791 | 818 | OLV105KO.U7 [5712facc] |
r249189 | r249190 | |
793 | 820 | |
794 | 821 | T0100.U8 |
795 | 822 | |
796 | ||
797 | 823 | A0100.U5 |
798 | 824 | A0101.U6 |
799 | 825 | A0102.U7 |
r249189 | r249190 | |
819 | 845 | |
820 | 846 | ROM_REGION( 0x800000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ |
821 | 847 | PGM_VIDEO_BIOS |
822 | ROM_LOAD( "t0100. | |
848 | ROM_LOAD( "t0100.u8", 0x180000, 0x400000, CRC(61425e1e) SHA1(20753b86fc12003cfd763d903f034dbba8010b32) ) | |
823 | 849 | |
824 | 850 | ROM_REGION( 0x1800000, "sprcol", 0 ) /* Sprite Colour Data */ |
825 | ROM_LOAD( "a0100.rom", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) ) | |
826 | ROM_LOAD( "a0101.rom", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) ) | |
827 | ROM_LOAD( "a0102.rom", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) ) | |
828 | ROM_LOAD( "a0103.rom", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) ) | |
829 | ROM_LOAD( "a0104.rom", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) ) | |
830 | ROM_LOAD( "a0105.rom", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) ) | |
851 | ROM_LOAD( "a0100.u5", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) ) | |
852 | ROM_LOAD( "a0101.u6", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) ) | |
853 | ROM_LOAD( "a0102.u7", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) ) | |
854 | ROM_LOAD( "a0103.u8", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) ) | |
855 | ROM_LOAD( "a0104.u11", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) ) | |
856 | ROM_LOAD( "a0105.u12", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) ) | |
831 | 857 | |
832 | 858 | ROM_REGION( 0x1000000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ |
833 | ROM_LOAD( "b0100.rom", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) ) | |
834 | ROM_LOAD( "b0101.rom", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) ) | |
835 | ROM_LOAD( "b0102.rom", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) ) | |
859 | ROM_LOAD( "b0100.u9", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) ) | |
860 | ROM_LOAD( "b0101.u10", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) ) | |
861 | ROM_LOAD( "b0102.u15", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) ) | |
836 | 862 | |
837 | 863 | ROM_REGION( 0x600000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */ |
838 | 864 | PGM_AUDIO_BIOS |
839 | ROM_LOAD( "m0100. | |
865 | ROM_LOAD( "m0100.u1", 0x400000, 0x200000, CRC(e5c36c83) SHA1(50c6f66770e8faa3df349f7d68c407a7ad021716) ) | |
840 | 866 | ROM_END |
841 | 867 | |
842 | 868 | /* |
r249189 | r249190 | |
3180 | 3206 | ROM_LOAD( "dmnfrnt_igs027a.bin", 0x000000, 0x04000, NO_DUMP ) |
3181 | 3207 | |
3182 | 3208 | ROM_REGION( 0x800000, "user1", 0 ) /* Protection Data (encrypted external ARM data, internal missing) */ |
3183 | /* one of these is probably a bad dump, it should be obvious once progress is made because the external rom is checksummed by the internal one */ | |
3184 | ROM_LOAD( "v105_32m.u26", 0x000000, 0x400000, CRC(d200ee63) SHA1(3128c27c5f5a4361d31e7b4bb006de631b3a228c) ) | |
3185 | ROM_LOAD( "chinese-v105.u62", 0x000000, 0x400000, CRC(c798c2ef) SHA1(91e364c33b935293fa765ca521cdb67ac45ec70f) ) | |
3209 | ROM_LOAD( "v105_32m.u26", 0x000000, 0x400000, CRC(c798c2ef) SHA1(91e364c33b935293fa765ca521cdb67ac45ec70f) ) | |
3186 | 3210 | |
3187 | 3211 | ROM_REGION( 0xc00000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ |
3188 | 3212 | PGM_VIDEO_BIOS |
r249189 | r249190 | |
4178 | 4202 | -----------------------------------------------------------------------------------------------------------------------*/ |
4179 | 4203 | |
4180 | 4204 | // the version numbering on these is a mess... date strings from ROM (and in some cases even those are missing..) |
4181 | GAME( 1997, orlegend, pgm, pgm_asic3, orlegend, pgm_asic3_state, orlegend, ROT0, "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 126)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // V0001 01/14/98 18:16:38 - runs as World | |
4182 | GAME( 1997, orlegende, orlegend, pgm_asic3, orlegend, pgm_asic3_state, orlegend, ROT0, "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 112)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // V0001 07/14/97 11:19:45 - runs as World | |
4183 | GAME( 1997, orlegendc, orlegend, pgm_asic3, orlegend, pgm_asic3_state, orlegend, ROT0, "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 112, Chinese Board)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // V0001 05/05/97 10:08:21 - runs as World, Korea, China | |
4184 | GAME( 1997, orlegendca, orlegend, pgm_asic3, orlegend, pgm_asic3_state, orlegend, ROT0, "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. ???, Chinese Board)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // V0001 04/02/97 13:35:43 - runs as HongKong, China, China | |
4185 | GAME( 1997, orlegend111c, orlegend, pgm_asic3, orlegend, pgm_asic3_state, orlegend, ROT0, "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 111, Chinese Board)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // V0001 no date! - runs as HongKong, China, China | |
4205 | GAME( 1997, orlegend, pgm, pgm_asic3, orlegend, pgm_asic3_state, orlegend, ROT0, "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 126)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // V0001 01/14/98 18:16:38 - runs as World | |
4206 | GAME( 1997, orlegende, orlegend, pgm_asic3, orlegend, pgm_asic3_state, orlegend, ROT0, "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 112)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // V0001 07/14/97 11:19:45 - runs as World | |
4207 | GAME( 1997, orlegendc, orlegend, pgm_asic3, orlegend, pgm_asic3_state, orlegend, ROT0, "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 112, Chinese Board)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // V0001 05/05/97 10:08:21 - runs as World, Korea, China | |
4208 | GAME( 1997, orlegendca, orlegend, pgm_asic3, orlegend, pgm_asic3_state, orlegend, ROT0, "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. ???, Chinese Board)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // V0001 04/02/97 13:35:43 - runs as HongKong, China, China | |
4209 | GAME( 1997, orlegend111c, orlegend, pgm_asic3, orlegend, pgm_asic3_state, orlegend, ROT0, "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 111, Chinese Board)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // V0001 no date! - runs as HongKong, China, China | |
4186 | 4210 | GAME( 1997, orlegend111t, orlegend, pgm_asic3, orlegendt,pgm_asic3_state, orlegend, ROT0, "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 111, Taiwanese Board)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )// V0001 no date! - needs a different protection sequence |
4187 | GAME( 1997, orlegend105k, orlegend, pgm_asic3, orld105k, pgm_asic3_state, orlegend, ROT0, "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 105, Korean Board)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // V0000 no date! - runs as Korea | |
4211 | GAME( 1997, orlegend111k, orlegend, pgm_asic3, orlegendk,pgm_asic3_state, orlegend, ROT0, "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 111, Korean Board)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // not checked | |
4212 | GAME( 1997, orlegend105k, orlegend, pgm_asic3, orlegendk,pgm_asic3_state, orlegend, ROT0, "IGS", "Oriental Legend / Xi You Shi E Zhuan (ver. 105, Korean Board)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // V0000 no date! - runs as Korea | |
4188 | 4213 | |
4189 | 4214 | GAME( 1997, drgw2, pgm, pgm_012_025_drgw2, pgm, pgm_012_025_state, drgw2, ROT0, "IGS", "Dragon World II (ver. 110X, Export)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) |
4190 | 4215 | GAME( 1997, dw2v100x, drgw2, pgm_012_025_drgw2, pgm, pgm_012_025_state, dw2v100x, ROT0, "IGS", "Dragon World II (ver. 100X, Export)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) |
r249189 | r249190 | |
---|---|---|
3388 | 3388 | // Custom Chip 315-5304 (IC 127) |
3389 | 3389 | // IC BD Number: 834-7626-03 (roms are "MPR") / 834-7626-05 (roms are "EPR") |
3390 | 3390 | // |
3391 | ROM_START( gprider ) | |
3391 | ROM_START( gpriders ) | |
3392 | 3392 | ROM_REGION( 0x80000, "mainpcb:maincpu", 0 ) // 68000 code |
3393 | 3393 | ROM_LOAD16_BYTE( "epr-13409.ic58", 0x00000, 0x20000, CRC(9abb81b6) SHA1(f6308f3ec99ee66677e86f6a915e4dff8557d25f) ) |
3394 | 3394 | ROM_LOAD16_BYTE( "epr-13408.ic63", 0x00001, 0x20000, CRC(8e410e97) SHA1(2021d738064e57d175b59ba053d9ee35ed4516c8) ) |
r249189 | r249190 | |
3438 | 3438 | ROM_END |
3439 | 3439 | |
3440 | 3440 | // Twin setup |
3441 | ROM_START( gprider | |
3441 | ROM_START( gprider ) | |
3442 | 3442 | ROM_REGION( 0x80000, "mainpcb:maincpu", 0 ) // 68000 code |
3443 | 3443 | ROM_LOAD16_BYTE( "epr-13409.ic58", 0x00000, 0x20000, CRC(9abb81b6) SHA1(f6308f3ec99ee66677e86f6a915e4dff8557d25f) ) |
3444 | 3444 | ROM_LOAD16_BYTE( "epr-13408.ic63", 0x00001, 0x20000, CRC(8e410e97) SHA1(2021d738064e57d175b59ba053d9ee35ed4516c8) ) |
r249189 | r249190 | |
3541 | 3541 | // Custom Chip 315-5304 (IC 127) |
3542 | 3542 | // IC BD Number: 834-7626-01 (roms are "MPR") / 834-7626-04 (roms are "EPR") |
3543 | 3543 | // |
3544 | ROM_START( gpriderus ) | |
3545 | ROM_REGION( 0x80000, "mainpcb:maincpu", 0 ) // 68000 code | |
3546 | ROM_LOAD16_BYTE( "epr-13407.ic58", 0x00000, 0x20000, CRC(03553ebd) SHA1(041a71a2dce2ad56360f500cb11e29a629020160) ) | |
3547 | ROM_LOAD16_BYTE( "epr-13406.ic63", 0x00001, 0x20000, CRC(122c711f) SHA1(2bcc51347e771a7e7f770e68b24d82497d24aa2e) ) | |
3548 | ||
3549 | ROM_REGION( 0x2000, "mainpcb:maincpu:key", 0 ) // decryption key | |
3550 | ROM_LOAD( "317-0162.key", 0x0000, 0x2000, CRC(8067de53) SHA1(e8cd1dfbad94856c6bd51569557667e72f0a5dd4) ) | |
3551 | ||
3552 | ROM_REGION( 0x80000, "mainpcb:subcpu", 0 ) // 2nd 68000 code | |
3553 | ROM_LOAD16_BYTE( "epr-13395.ic20", 0x00000, 0x20000,CRC(d6ccfac7) SHA1(9287ab08600163a0d9bd33618c629f99391316bd) ) | |
3554 | ROM_LOAD16_BYTE( "epr-13394.ic29", 0x00001, 0x20000,CRC(914a55ec) SHA1(84fe1df12478990418b46b6800425e5599e9eff9) ) | |
3555 | ROM_LOAD16_BYTE( "epr-13393.ic21", 0x40000, 0x20000,CRC(08d023cc) SHA1(d008d57e494f484a1a84896065d53fb9b1d8d60e) ) | |
3556 | ROM_LOAD16_BYTE( "epr-13392.ic30", 0x40001, 0x20000,CRC(f927cd42) SHA1(67eab328c1fb878fe3d086d0639f5051b135a037) ) | |
3557 | ||
3558 | ROM_REGION( 0x30000, "mainpcb:gfx1", 0 ) // tiles | |
3559 | ROM_LOAD( "epr-13383.ic154", 0x00000, 0x10000, CRC(24f897a7) SHA1(68ba17067d90f07bb5a549017be4773b33ae81d0) ) | |
3560 | ROM_LOAD( "epr-13384.ic153", 0x10000, 0x10000, CRC(fe8238bd) SHA1(601910bd86536e6b08f5308b298c8f01fa60f233) ) | |
3561 | ROM_LOAD( "epr-13385.ic152", 0x20000, 0x10000, CRC(6df1b995) SHA1(5aab19b87a9ef162c30ccf5974cb795e37dba91f) ) | |
3562 | ||
3563 | ROM_REGION32_LE( 0x200000, "mainpcb:sprites", 0 ) // sprites | |
3564 | ROM_LOAD32_BYTE( "epr-13382.ic90", 0x000000, 0x20000, CRC(01dac209) SHA1(4c6b03308193c472f6cdbcede306f8ce6db0cc4b) ) | |
3565 | ROM_LOAD32_BYTE( "epr-13381.ic94", 0x000001, 0x20000, CRC(3a50d931) SHA1(9d9cb1793f3b8f562ce0ea49f2afeef099f20859) ) | |
3566 | ROM_LOAD32_BYTE( "epr-13380.ic98", 0x000002, 0x20000, CRC(ad1024c8) SHA1(86e941424b2e2e00940886e5daed640a78ed7403) ) | |
3567 | ROM_LOAD32_BYTE( "epr-13379.ic102", 0x000003, 0x20000, CRC(1ac17625) SHA1(7aefd382041dd3f97936ecb8738a3f2c9780c58f) ) | |
3568 | ROM_LOAD32_BYTE( "epr-13378.ic91", 0x080000, 0x20000, CRC(50c9b867) SHA1(dd9702b369ea8abd50da22ce721b7040428e9d4b) ) | |
3569 | ROM_LOAD32_BYTE( "epr-13377.ic95", 0x080001, 0x20000, CRC(9b12f5c0) SHA1(2060420611b3354974c49bc80f556f945512570b) ) | |
3570 | ROM_LOAD32_BYTE( "epr-13376.ic99", 0x080002, 0x20000, CRC(449ac518) SHA1(0438a72e53a7889d39ea7e2530e49a2594d97e90) ) | |
3571 | ROM_LOAD32_BYTE( "epr-13375.ic103", 0x080003, 0x20000, CRC(5489a9ff) SHA1(c458cb55d957edae340535f54189438296f3ec2f) ) | |
3572 | ROM_LOAD32_BYTE( "epr-13374.ic92", 0x100000, 0x20000, CRC(6a319e4f) SHA1(d9f92b15f4baa14745048073205add35b7d42d27) ) | |
3573 | ROM_LOAD32_BYTE( "epr-13373.ic96", 0x100001, 0x20000, CRC(eca5588b) SHA1(11def0c293868193d457958fe7459fd8c31dbd2b) ) | |
3574 | ROM_LOAD32_BYTE( "epr-13372.ic100", 0x100002, 0x20000, CRC(0b45a433) SHA1(82fa2b208eaf70b70524681fbc3ec70085e70d83) ) | |
3575 | ROM_LOAD32_BYTE( "epr-13371.ic104", 0x100003, 0x20000, CRC(b68f4cff) SHA1(166f2a685cbc230c098fdc1646b6e632dd2b09dd) ) | |
3576 | ROM_LOAD32_BYTE( "epr-13370.ic93", 0x180000, 0x20000, CRC(78276620) SHA1(2c4505c57a1e765f9cfd48fb1637d67d199a2f1d) ) | |
3577 | ROM_LOAD32_BYTE( "epr-13369.ic97", 0x180001, 0x20000, CRC(8625bf0f) SHA1(0ae70bc0d54e25eecf4a11cf0600225dca35914d) ) | |
3578 | ROM_LOAD32_BYTE( "epr-13368.ic101", 0x180002, 0x20000, CRC(0f50716c) SHA1(eb4c7f47e11c58fe0d58f67e6dafabc6291eabb8) ) | |
3579 | ROM_LOAD32_BYTE( "epr-13367.ic105", 0x180003, 0x20000, CRC(4b1bb51f) SHA1(17fd5ac9e18dd6097a015e9d7b6815826f9c53f1) ) | |
3580 | ||
3581 | ROM_REGION( 0x10000, "mainpcb:gfx3", ROMREGION_ERASE00 ) // road gfx | |
3582 | // none?? | |
3583 | ||
3584 | ROM_REGION( 0x10000, "mainpcb:soundcpu", 0 ) // sound CPU | |
3585 | ROM_LOAD( "epr-13388.ic17", 0x00000, 0x10000, CRC(706581e4) SHA1(51c9dbf2bf0d6b8826de24cd33596f5c95136870) ) | |
3586 | ||
3587 | ROM_REGION( 0x80000, "mainpcb:pcm", ROMREGION_ERASEFF ) // Sega PCM sound data | |
3588 | ROM_LOAD( "epr-13391.ic11", 0x00000, 0x20000, CRC(8c30c867) SHA1(0d735291b1311890938f8a1143fae6af9feb2a69) ) | |
3589 | ROM_LOAD( "epr-13390.ic12", 0x20000, 0x20000, CRC(8c93cd05) SHA1(bb08094abac6c104eddf14f634e9791f03122946) ) | |
3590 | ROM_LOAD( "epr-13389.ic13", 0x40000, 0x20000, CRC(4e4c758e) SHA1(181750dfcdd6d5b28b063c980c251991163d9474) ) | |
3591 | ROM_END | |
3592 | ||
3593 | // twin setup | |
3544 | 3594 | ROM_START( gprideru ) |
3545 | 3595 | ROM_REGION( 0x80000, "mainpcb:maincpu", 0 ) // 68000 code |
3546 | 3596 | ROM_LOAD16_BYTE( "epr-13407.ic58", 0x00000, 0x20000, CRC(03553ebd) SHA1(041a71a2dce2ad56360f500cb11e29a629020160) ) |
r249189 | r249190 | |
3588 | 3638 | ROM_LOAD( "epr-13391.ic11", 0x00000, 0x20000, CRC(8c30c867) SHA1(0d735291b1311890938f8a1143fae6af9feb2a69) ) |
3589 | 3639 | ROM_LOAD( "epr-13390.ic12", 0x20000, 0x20000, CRC(8c93cd05) SHA1(bb08094abac6c104eddf14f634e9791f03122946) ) |
3590 | 3640 | ROM_LOAD( "epr-13389.ic13", 0x40000, 0x20000, CRC(4e4c758e) SHA1(181750dfcdd6d5b28b063c980c251991163d9474) ) |
3641 | ||
3642 | ROM_REGION( 0x80000, "subpcb:maincpu", 0 ) // 68000 code | |
3643 | ROM_LOAD16_BYTE( "epr-13407.ic58", 0x00000, 0x20000, CRC(03553ebd) SHA1(041a71a2dce2ad56360f500cb11e29a629020160) ) | |
3644 | ROM_LOAD16_BYTE( "epr-13406.ic63", 0x00001, 0x20000, CRC(122c711f) SHA1(2bcc51347e771a7e7f770e68b24d82497d24aa2e) ) | |
3645 | ||
3646 | ROM_REGION( 0x2000, "subpcb:maincpu:key", 0 ) // decryption key | |
3647 | ROM_LOAD( "317-0162.key", 0x0000, 0x2000, CRC(8067de53) SHA1(e8cd1dfbad94856c6bd51569557667e72f0a5dd4) ) | |
3648 | ||
3649 | ROM_REGION( 0x80000, "subpcb:subcpu", 0 ) // 2nd 68000 code | |
3650 | ROM_LOAD16_BYTE( "epr-13395.ic20", 0x00000, 0x20000,CRC(d6ccfac7) SHA1(9287ab08600163a0d9bd33618c629f99391316bd) ) | |
3651 | ROM_LOAD16_BYTE( "epr-13394.ic29", 0x00001, 0x20000,CRC(914a55ec) SHA1(84fe1df12478990418b46b6800425e5599e9eff9) ) | |
3652 | ROM_LOAD16_BYTE( "epr-13393.ic21", 0x40000, 0x20000,CRC(08d023cc) SHA1(d008d57e494f484a1a84896065d53fb9b1d8d60e) ) | |
3653 | ROM_LOAD16_BYTE( "epr-13392.ic30", 0x40001, 0x20000,CRC(f927cd42) SHA1(67eab328c1fb878fe3d086d0639f5051b135a037) ) | |
3654 | ||
3655 | ROM_REGION( 0x30000, "subpcb:gfx1", 0 ) // tiles | |
3656 | ROM_LOAD( "epr-13383.ic154", 0x00000, 0x10000, CRC(24f897a7) SHA1(68ba17067d90f07bb5a549017be4773b33ae81d0) ) | |
3657 | ROM_LOAD( "epr-13384.ic153", 0x10000, 0x10000, CRC(fe8238bd) SHA1(601910bd86536e6b08f5308b298c8f01fa60f233) ) | |
3658 | ROM_LOAD( "epr-13385.ic152", 0x20000, 0x10000, CRC(6df1b995) SHA1(5aab19b87a9ef162c30ccf5974cb795e37dba91f) ) | |
3659 | ||
3660 | ROM_REGION32_LE( 0x200000, "subpcb:sprites", 0 ) // sprites | |
3661 | ROM_LOAD32_BYTE( "epr-13382.ic90", 0x000000, 0x20000, CRC(01dac209) SHA1(4c6b03308193c472f6cdbcede306f8ce6db0cc4b) ) | |
3662 | ROM_LOAD32_BYTE( "epr-13381.ic94", 0x000001, 0x20000, CRC(3a50d931) SHA1(9d9cb1793f3b8f562ce0ea49f2afeef099f20859) ) | |
3663 | ROM_LOAD32_BYTE( "epr-13380.ic98", 0x000002, 0x20000, CRC(ad1024c8) SHA1(86e941424b2e2e00940886e5daed640a78ed7403) ) | |
3664 | ROM_LOAD32_BYTE( "epr-13379.ic102", 0x000003, 0x20000, CRC(1ac17625) SHA1(7aefd382041dd3f97936ecb8738a3f2c9780c58f) ) | |
3665 | ROM_LOAD32_BYTE( "epr-13378.ic91", 0x080000, 0x20000, CRC(50c9b867) SHA1(dd9702b369ea8abd50da22ce721b7040428e9d4b) ) | |
3666 | ROM_LOAD32_BYTE( "epr-13377.ic95", 0x080001, 0x20000, CRC(9b12f5c0) SHA1(2060420611b3354974c49bc80f556f945512570b) ) | |
3667 | ROM_LOAD32_BYTE( "epr-13376.ic99", 0x080002, 0x20000, CRC(449ac518) SHA1(0438a72e53a7889d39ea7e2530e49a2594d97e90) ) | |
3668 | ROM_LOAD32_BYTE( "epr-13375.ic103", 0x080003, 0x20000, CRC(5489a9ff) SHA1(c458cb55d957edae340535f54189438296f3ec2f) ) | |
3669 | ROM_LOAD32_BYTE( "epr-13374.ic92", 0x100000, 0x20000, CRC(6a319e4f) SHA1(d9f92b15f4baa14745048073205add35b7d42d27) ) | |
3670 | ROM_LOAD32_BYTE( "epr-13373.ic96", 0x100001, 0x20000, CRC(eca5588b) SHA1(11def0c293868193d457958fe7459fd8c31dbd2b) ) | |
3671 | ROM_LOAD32_BYTE( "epr-13372.ic100", 0x100002, 0x20000, CRC(0b45a433) SHA1(82fa2b208eaf70b70524681fbc3ec70085e70d83) ) | |
3672 | ROM_LOAD32_BYTE( "epr-13371.ic104", 0x100003, 0x20000, CRC(b68f4cff) SHA1(166f2a685cbc230c098fdc1646b6e632dd2b09dd) ) | |
3673 | ROM_LOAD32_BYTE( "epr-13370.ic93", 0x180000, 0x20000, CRC(78276620) SHA1(2c4505c57a1e765f9cfd48fb1637d67d199a2f1d) ) | |
3674 | ROM_LOAD32_BYTE( "epr-13369.ic97", 0x180001, 0x20000, CRC(8625bf0f) SHA1(0ae70bc0d54e25eecf4a11cf0600225dca35914d) ) | |
3675 | ROM_LOAD32_BYTE( "epr-13368.ic101", 0x180002, 0x20000, CRC(0f50716c) SHA1(eb4c7f47e11c58fe0d58f67e6dafabc6291eabb8) ) | |
3676 | ROM_LOAD32_BYTE( "epr-13367.ic105", 0x180003, 0x20000, CRC(4b1bb51f) SHA1(17fd5ac9e18dd6097a015e9d7b6815826f9c53f1) ) | |
3677 | ||
3678 | ROM_REGION( 0x10000, "subpcb:gfx3", ROMREGION_ERASE00 ) // road gfx | |
3679 | // none?? | |
3680 | ||
3681 | ROM_REGION( 0x10000, "subpcb:soundcpu", 0 ) // sound CPU | |
3682 | ROM_LOAD( "epr-13388.ic17", 0x00000, 0x10000, CRC(706581e4) SHA1(51c9dbf2bf0d6b8826de24cd33596f5c95136870) ) | |
3683 | ||
3684 | ROM_REGION( 0x80000, "subpcb:pcm", ROMREGION_ERASEFF ) // Sega PCM sound data | |
3685 | ROM_LOAD( "epr-13391.ic11", 0x00000, 0x20000, CRC(8c30c867) SHA1(0d735291b1311890938f8a1143fae6af9feb2a69) ) | |
3686 | ROM_LOAD( "epr-13390.ic12", 0x20000, 0x20000, CRC(8c93cd05) SHA1(bb08094abac6c104eddf14f634e9791f03122946) ) | |
3687 | ROM_LOAD( "epr-13389.ic13", 0x40000, 0x20000, CRC(4e4c758e) SHA1(181750dfcdd6d5b28b063c980c251991163d9474) ) | |
3591 | 3688 | ROM_END |
3592 | 3689 | |
3593 | 3690 | //************************************************************************************************************************* |
r249189 | r249190 | |
3596 | 3693 | // Custom Chip 315-5304 (IC 127) |
3597 | 3694 | // IC BD Number: 834-7626-01 (roms are "MPR") / 834-7626-04 (roms are "EPR") |
3598 | 3695 | // |
3696 | ROM_START( gpriderjs ) | |
3697 | ROM_REGION( 0x80000, "mainpcb:maincpu", 0 ) // 68000 code | |
3698 | ROM_LOAD16_BYTE( "epr-13387.ic58", 0x00000, 0x20000, CRC(a1e8b2c5) SHA1(22b70a9074263af808bb9dffee29cbcff7e304e3) ) | |
3699 | ROM_LOAD16_BYTE( "epr-13386.ic63", 0x00001, 0x20000, CRC(d8be9e66) SHA1(d81c03b08fd6b971554b94e0adac131a1dcf3248) ) | |
3700 | ||
3701 | ROM_REGION( 0x2000, "mainpcb:maincpu:key", 0 ) // decryption key | |
3702 | ROM_LOAD( "317-0161.key", 0x0000, 0x2000, CRC(e38ddc16) SHA1(d1f7f261320cbc605b4f7e5a9c28f49af5471d87) ) | |
3703 | ||
3704 | ROM_REGION( 0x80000, "mainpcb:subcpu", 0 ) // 2nd 68000 code | |
3705 | ROM_LOAD16_BYTE( "epr-13395.ic20", 0x00000, 0x20000,CRC(d6ccfac7) SHA1(9287ab08600163a0d9bd33618c629f99391316bd) ) | |
3706 | ROM_LOAD16_BYTE( "epr-13394.ic29", 0x00001, 0x20000,CRC(914a55ec) SHA1(84fe1df12478990418b46b6800425e5599e9eff9) ) | |
3707 | ROM_LOAD16_BYTE( "epr-13393.ic21", 0x40000, 0x20000,CRC(08d023cc) SHA1(d008d57e494f484a1a84896065d53fb9b1d8d60e) ) | |
3708 | ROM_LOAD16_BYTE( "epr-13392.ic30", 0x40001, 0x20000,CRC(f927cd42) SHA1(67eab328c1fb878fe3d086d0639f5051b135a037) ) | |
3709 | ||
3710 | ROM_REGION( 0x30000, "mainpcb:gfx1", 0 ) // tiles | |
3711 | ROM_LOAD( "epr-13383.ic154", 0x00000, 0x10000, CRC(24f897a7) SHA1(68ba17067d90f07bb5a549017be4773b33ae81d0) ) | |
3712 | ROM_LOAD( "epr-13384.ic153", 0x10000, 0x10000, CRC(fe8238bd) SHA1(601910bd86536e6b08f5308b298c8f01fa60f233) ) | |
3713 | ROM_LOAD( "epr-13385.ic152", 0x20000, 0x10000, CRC(6df1b995) SHA1(5aab19b87a9ef162c30ccf5974cb795e37dba91f) ) | |
3714 | ||
3715 | ROM_REGION32_LE( 0x200000, "mainpcb:sprites", 0 ) // sprites | |
3716 | ROM_LOAD32_BYTE( "epr-13382.ic90", 0x000000, 0x20000, CRC(01dac209) SHA1(4c6b03308193c472f6cdbcede306f8ce6db0cc4b) ) | |
3717 | ROM_LOAD32_BYTE( "epr-13381.ic94", 0x000001, 0x20000, CRC(3a50d931) SHA1(9d9cb1793f3b8f562ce0ea49f2afeef099f20859) ) | |
3718 | ROM_LOAD32_BYTE( "epr-13380.ic98", 0x000002, 0x20000, CRC(ad1024c8) SHA1(86e941424b2e2e00940886e5daed640a78ed7403) ) | |
3719 | ROM_LOAD32_BYTE( "epr-13379.ic102", 0x000003, 0x20000, CRC(1ac17625) SHA1(7aefd382041dd3f97936ecb8738a3f2c9780c58f) ) | |
3720 | ROM_LOAD32_BYTE( "epr-13378.ic91", 0x080000, 0x20000, CRC(50c9b867) SHA1(dd9702b369ea8abd50da22ce721b7040428e9d4b) ) | |
3721 | ROM_LOAD32_BYTE( "epr-13377.ic95", 0x080001, 0x20000, CRC(9b12f5c0) SHA1(2060420611b3354974c49bc80f556f945512570b) ) | |
3722 | ROM_LOAD32_BYTE( "epr-13376.ic99", 0x080002, 0x20000, CRC(449ac518) SHA1(0438a72e53a7889d39ea7e2530e49a2594d97e90) ) | |
3723 | ROM_LOAD32_BYTE( "epr-13375.ic103", 0x080003, 0x20000, CRC(5489a9ff) SHA1(c458cb55d957edae340535f54189438296f3ec2f) ) | |
3724 | ROM_LOAD32_BYTE( "epr-13374.ic92", 0x100000, 0x20000, CRC(6a319e4f) SHA1(d9f92b15f4baa14745048073205add35b7d42d27) ) | |
3725 | ROM_LOAD32_BYTE( "epr-13373.ic96", 0x100001, 0x20000, CRC(eca5588b) SHA1(11def0c293868193d457958fe7459fd8c31dbd2b) ) | |
3726 | ROM_LOAD32_BYTE( "epr-13372.ic100", 0x100002, 0x20000, CRC(0b45a433) SHA1(82fa2b208eaf70b70524681fbc3ec70085e70d83) ) | |
3727 | ROM_LOAD32_BYTE( "epr-13371.ic104", 0x100003, 0x20000, CRC(b68f4cff) SHA1(166f2a685cbc230c098fdc1646b6e632dd2b09dd) ) | |
3728 | ROM_LOAD32_BYTE( "epr-13370.ic93", 0x180000, 0x20000, CRC(78276620) SHA1(2c4505c57a1e765f9cfd48fb1637d67d199a2f1d) ) | |
3729 | ROM_LOAD32_BYTE( "epr-13369.ic97", 0x180001, 0x20000, CRC(8625bf0f) SHA1(0ae70bc0d54e25eecf4a11cf0600225dca35914d) ) | |
3730 | ROM_LOAD32_BYTE( "epr-13368.ic101", 0x180002, 0x20000, CRC(0f50716c) SHA1(eb4c7f47e11c58fe0d58f67e6dafabc6291eabb8) ) | |
3731 | ROM_LOAD32_BYTE( "epr-13367.ic105", 0x180003, 0x20000, CRC(4b1bb51f) SHA1(17fd5ac9e18dd6097a015e9d7b6815826f9c53f1) ) | |
3732 | ||
3733 | ROM_REGION( 0x10000, "mainpcb:gfx3", ROMREGION_ERASE00 ) // road gfx | |
3734 | // none?? | |
3735 | ||
3736 | ROM_REGION( 0x10000, "mainpcb:soundcpu", 0 ) // sound CPU | |
3737 | ROM_LOAD( "epr-13388.ic17", 0x00000, 0x10000, CRC(706581e4) SHA1(51c9dbf2bf0d6b8826de24cd33596f5c95136870) ) | |
3738 | ||
3739 | ROM_REGION( 0x80000, "mainpcb:pcm", ROMREGION_ERASEFF ) // Sega PCM sound data | |
3740 | ROM_LOAD( "epr-13391.ic11", 0x00000, 0x20000, CRC(8c30c867) SHA1(0d735291b1311890938f8a1143fae6af9feb2a69) ) | |
3741 | ROM_LOAD( "epr-13390.ic12", 0x20000, 0x20000, CRC(8c93cd05) SHA1(bb08094abac6c104eddf14f634e9791f03122946) ) | |
3742 | ROM_LOAD( "epr-13389.ic13", 0x40000, 0x20000, CRC(4e4c758e) SHA1(181750dfcdd6d5b28b063c980c251991163d9474) ) | |
3743 | ROM_END | |
3744 | ||
3745 | // twin setup | |
3599 | 3746 | ROM_START( gpriderj ) |
3600 | 3747 | ROM_REGION( 0x80000, "mainpcb:maincpu", 0 ) // 68000 code |
3601 | 3748 | ROM_LOAD16_BYTE( "epr-13387.ic58", 0x00000, 0x20000, CRC(a1e8b2c5) SHA1(22b70a9074263af808bb9dffee29cbcff7e304e3) ) |
r249189 | r249190 | |
3643 | 3790 | ROM_LOAD( "epr-13391.ic11", 0x00000, 0x20000, CRC(8c30c867) SHA1(0d735291b1311890938f8a1143fae6af9feb2a69) ) |
3644 | 3791 | ROM_LOAD( "epr-13390.ic12", 0x20000, 0x20000, CRC(8c93cd05) SHA1(bb08094abac6c104eddf14f634e9791f03122946) ) |
3645 | 3792 | ROM_LOAD( "epr-13389.ic13", 0x40000, 0x20000, CRC(4e4c758e) SHA1(181750dfcdd6d5b28b063c980c251991163d9474) ) |
3793 | ||
3794 | ROM_REGION( 0x80000, "subpcb:maincpu", 0 ) // 68000 code | |
3795 | ROM_LOAD16_BYTE( "epr-13387.ic58", 0x00000, 0x20000, CRC(a1e8b2c5) SHA1(22b70a9074263af808bb9dffee29cbcff7e304e3) ) | |
3796 | ROM_LOAD16_BYTE( "epr-13386.ic63", 0x00001, 0x20000, CRC(d8be9e66) SHA1(d81c03b08fd6b971554b94e0adac131a1dcf3248) ) | |
3797 | ||
3798 | ROM_REGION( 0x2000, "subpcb:maincpu:key", 0 ) // decryption key | |
3799 | ROM_LOAD( "317-0161.key", 0x0000, 0x2000, CRC(e38ddc16) SHA1(d1f7f261320cbc605b4f7e5a9c28f49af5471d87) ) | |
3800 | ||
3801 | ROM_REGION( 0x80000, "subpcb:subcpu", 0 ) // 2nd 68000 code | |
3802 | ROM_LOAD16_BYTE( "epr-13395.ic20", 0x00000, 0x20000,CRC(d6ccfac7) SHA1(9287ab08600163a0d9bd33618c629f99391316bd) ) | |
3803 | ROM_LOAD16_BYTE( "epr-13394.ic29", 0x00001, 0x20000,CRC(914a55ec) SHA1(84fe1df12478990418b46b6800425e5599e9eff9) ) | |
3804 | ROM_LOAD16_BYTE( "epr-13393.ic21", 0x40000, 0x20000,CRC(08d023cc) SHA1(d008d57e494f484a1a84896065d53fb9b1d8d60e) ) | |
3805 | ROM_LOAD16_BYTE( "epr-13392.ic30", 0x40001, 0x20000,CRC(f927cd42) SHA1(67eab328c1fb878fe3d086d0639f5051b135a037) ) | |
3806 | ||
3807 | ROM_REGION( 0x30000, "subpcb:gfx1", 0 ) // tiles | |
3808 | ROM_LOAD( "epr-13383.ic154", 0x00000, 0x10000, CRC(24f897a7) SHA1(68ba17067d90f07bb5a549017be4773b33ae81d0) ) | |
3809 | ROM_LOAD( "epr-13384.ic153", 0x10000, 0x10000, CRC(fe8238bd) SHA1(601910bd86536e6b08f5308b298c8f01fa60f233) ) | |
3810 | ROM_LOAD( "epr-13385.ic152", 0x20000, 0x10000, CRC(6df1b995) SHA1(5aab19b87a9ef162c30ccf5974cb795e37dba91f) ) | |
3811 | ||
3812 | ROM_REGION32_LE( 0x200000, "subpcb:sprites", 0 ) // sprites | |
3813 | ROM_LOAD32_BYTE( "epr-13382.ic90", 0x000000, 0x20000, CRC(01dac209) SHA1(4c6b03308193c472f6cdbcede306f8ce6db0cc4b) ) | |
3814 | ROM_LOAD32_BYTE( "epr-13381.ic94", 0x000001, 0x20000, CRC(3a50d931) SHA1(9d9cb1793f3b8f562ce0ea49f2afeef099f20859) ) | |
3815 | ROM_LOAD32_BYTE( "epr-13380.ic98", 0x000002, 0x20000, CRC(ad1024c8) SHA1(86e941424b2e2e00940886e5daed640a78ed7403) ) | |
3816 | ROM_LOAD32_BYTE( "epr-13379.ic102", 0x000003, 0x20000, CRC(1ac17625) SHA1(7aefd382041dd3f97936ecb8738a3f2c9780c58f) ) | |
3817 | ROM_LOAD32_BYTE( "epr-13378.ic91", 0x080000, 0x20000, CRC(50c9b867) SHA1(dd9702b369ea8abd50da22ce721b7040428e9d4b) ) | |
3818 | ROM_LOAD32_BYTE( "epr-13377.ic95", 0x080001, 0x20000, CRC(9b12f5c0) SHA1(2060420611b3354974c49bc80f556f945512570b) ) | |
3819 | ROM_LOAD32_BYTE( "epr-13376.ic99", 0x080002, 0x20000, CRC(449ac518) SHA1(0438a72e53a7889d39ea7e2530e49a2594d97e90) ) | |
3820 | ROM_LOAD32_BYTE( "epr-13375.ic103", 0x080003, 0x20000, CRC(5489a9ff) SHA1(c458cb55d957edae340535f54189438296f3ec2f) ) | |
3821 | ROM_LOAD32_BYTE( "epr-13374.ic92", 0x100000, 0x20000, CRC(6a319e4f) SHA1(d9f92b15f4baa14745048073205add35b7d42d27) ) | |
3822 | ROM_LOAD32_BYTE( "epr-13373.ic96", 0x100001, 0x20000, CRC(eca5588b) SHA1(11def0c293868193d457958fe7459fd8c31dbd2b) ) | |
3823 | ROM_LOAD32_BYTE( "epr-13372.ic100", 0x100002, 0x20000, CRC(0b45a433) SHA1(82fa2b208eaf70b70524681fbc3ec70085e70d83) ) | |
3824 | ROM_LOAD32_BYTE( "epr-13371.ic104", 0x100003, 0x20000, CRC(b68f4cff) SHA1(166f2a685cbc230c098fdc1646b6e632dd2b09dd) ) | |
3825 | ROM_LOAD32_BYTE( "epr-13370.ic93", 0x180000, 0x20000, CRC(78276620) SHA1(2c4505c57a1e765f9cfd48fb1637d67d199a2f1d) ) | |
3826 | ROM_LOAD32_BYTE( "epr-13369.ic97", 0x180001, 0x20000, CRC(8625bf0f) SHA1(0ae70bc0d54e25eecf4a11cf0600225dca35914d) ) | |
3827 | ROM_LOAD32_BYTE( "epr-13368.ic101", 0x180002, 0x20000, CRC(0f50716c) SHA1(eb4c7f47e11c58fe0d58f67e6dafabc6291eabb8) ) | |
3828 | ROM_LOAD32_BYTE( "epr-13367.ic105", 0x180003, 0x20000, CRC(4b1bb51f) SHA1(17fd5ac9e18dd6097a015e9d7b6815826f9c53f1) ) | |
3829 | ||
3830 | ROM_REGION( 0x10000, "subpcb:gfx3", ROMREGION_ERASE00 ) // road gfx | |
3831 | // none?? | |
3832 | ||
3833 | ROM_REGION( 0x10000, "subpcb:soundcpu", 0 ) // sound CPU | |
3834 | ROM_LOAD( "epr-13388.ic17", 0x00000, 0x10000, CRC(706581e4) SHA1(51c9dbf2bf0d6b8826de24cd33596f5c95136870) ) | |
3835 | ||
3836 | ROM_REGION( 0x80000, "subpcb:pcm", ROMREGION_ERASEFF ) // Sega PCM sound data | |
3837 | ROM_LOAD( "epr-13391.ic11", 0x00000, 0x20000, CRC(8c30c867) SHA1(0d735291b1311890938f8a1143fae6af9feb2a69) ) | |
3838 | ROM_LOAD( "epr-13390.ic12", 0x20000, 0x20000, CRC(8c93cd05) SHA1(bb08094abac6c104eddf14f634e9791f03122946) ) | |
3839 | ROM_LOAD( "epr-13389.ic13", 0x40000, 0x20000, CRC(4e4c758e) SHA1(181750dfcdd6d5b28b063c980c251991163d9474) ) | |
3646 | 3840 | ROM_END |
3647 | 3841 | |
3648 | ||
3649 | 3842 | //************************************************************************************************************************* |
3650 | 3843 | //************************************************************************************************************************* |
3651 | 3844 | //************************************************************************************************************************* |
r249189 | r249190 | |
3746 | 3939 | |
3747 | 3940 | DRIVER_INIT_MEMBER(segaxbd_new_state,rascot) |
3748 | 3941 | { |
3749 | #if 0 | |
3750 | 3942 | // patch out bootup link test |
3751 | 3943 | UINT16 *rom = reinterpret_cast<UINT16 *>(memregion("mainpcb:subcpu")->base()); |
3752 | 3944 | rom[0xb78/2] = 0x601e; // subrom checksum test |
r249189 | r249190 | |
3755 | 3947 | rom[0x606/2] = 0x4e71; |
3756 | 3948 | |
3757 | 3949 | // map /EXCS space |
3758 | m_mainpcb->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x0f0000, 0x0f3fff, read16_delegate(FUNC(segaxbd_state::rascot_excs_r), this), write16_delegate(FUNC(segaxbd_state::rascot_excs_w), this)); | |
3759 | #endif | |
3950 | m_mainpcb->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x0f0000, 0x0f3fff, read16_delegate(FUNC(segaxbd_state::rascot_excs_r), (segaxbd_state*)m_mainpcb), write16_delegate(FUNC(segaxbd_state::rascot_excs_w), (segaxbd_state*)m_mainpcb)); | |
3760 | 3951 | } |
3761 | 3952 | |
3762 | 3953 | void segaxbd_state::install_gprider(void) |
r249189 | r249190 | |
3806 | 3997 | GAME( 1989, smgpja, smgp, sega_smgp_fd1094, smgp, segaxbd_new_state, smgp, ROT0, "Sega", "Super Monaco GP (Japan, Rev A, FD1094 317-0124a)", 0 ) |
3807 | 3998 | GAME( 1990, abcop, 0, sega_xboard_fd1094, abcop, driver_device, 0, ROT0, "Sega", "A.B. Cop (World, FD1094 317-0169b)", 0 ) |
3808 | 3999 | GAME( 1990, abcopj, abcop, sega_xboard_fd1094, abcop, driver_device, 0, ROT0, "Sega", "A.B. Cop (Japan, FD1094 317-0169b)", 0 ) |
3809 | GAME( 1990, gprider, 0, sega_xboard_fd1094, gprider, segaxbd_new_state, gprider, ROT0, "Sega", "GP Rider (World, FD1094 317-0163)", 0 ) | |
3810 | GAME( 1990, gprideru, gprider, sega_xboard_fd1094, gprider, segaxbd_new_state, gprider, ROT0, "Sega", "GP Rider (US, FD1094 317-0162)", 0 ) | |
3811 | GAME( 1990, gpriderj, gprider, sega_xboard_fd1094, gprider, segaxbd_new_state, gprider, ROT0, "Sega", "GP Rider (Japan, FD1094 317-0161)", 0 ) | |
4000 | // wasn't officially available as a single PCB setup, but runs anyway albeit with messages suggesting you can compete against a rival that doesn't exist? | |
4001 | GAME( 1990, gpriders, gprider, sega_xboard_fd1094, gprider, segaxbd_new_state, gprider, ROT0, "Sega", "GP Rider (World, FD1094 317-0163)", 0 ) | |
4002 | GAME( 1990, gpriderus,gprider, sega_xboard_fd1094, gprider, segaxbd_new_state, gprider, ROT0, "Sega", "GP Rider (US, FD1094 317-0162)", 0 ) | |
4003 | GAME( 1990, gpriderjs,gprider, sega_xboard_fd1094, gprider, segaxbd_new_state, gprider, ROT0, "Sega", "GP Rider (Japan, FD1094 317-0161)", 0 ) | |
3812 | 4004 | |
3813 | // multi X-Board (2 stacks directly connected, shared RAM on bridge PCB?) | |
3814 | GAME( 1990, gpridert, gprider, sega_xboard_fd1094_double, gprider_double, segaxbd_new_state_double, gprider_double, ROT0, "Sega", "GP Rider (World, FD1094 317-0163) (master-slave setup)", MACHINE_NOT_WORKING ) // communication breaks down | |
4005 | // multi X-Board (2 stacks directly connected, shared RAM on bridge PCB - not networked) | |
4006 | GAME( 1990, gprider, 0, sega_xboard_fd1094_double, gprider_double, segaxbd_new_state_double, gprider_double, ROT0, "Sega", "GP Rider (World, FD1094 317-0163) (Twin setup)", 0 ) | |
4007 | GAME( 1990, gprideru,gprider, sega_xboard_fd1094_double, gprider_double, segaxbd_new_state_double, gprider_double, ROT0, "Sega", "GP Rider (US, FD1094 317-0162) (Twin setup)", 0 ) | |
4008 | GAME( 1990, gpriderj,gprider, sega_xboard_fd1094_double, gprider_double, segaxbd_new_state_double, gprider_double, ROT0, "Sega", "GP Rider (Japan, FD1094 317-0161) (Twin setup)", 0 ) | |
3815 | 4009 | |
3816 | 4010 | // X-Board + other boards? |
3817 | 4011 | GAME( 1991, rascot, 0, sega_rascot, rascot, segaxbd_new_state, rascot, ROT0, "Sega", "Royal Ascot (Japan, terminal?)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) |
r249189 | r249190 | |
---|---|---|
51 | 51 | Press one of the start buttons to exit. |
52 | 52 | |
53 | 53 | |
54 | ***************************** | |
55 | * * | |
56 | * Pacman on WC90 Hardware * | |
57 | * * | |
58 | ***************************** | |
59 | ||
60 | There is known to be a Pacman hack running on this hardware. It was done by Mike C. and isn't meant | |
61 | for inclusion in MAME. However the roms with checksums are listed below to prevent it being added | |
62 | as a newly "found" game: | |
63 | ||
64 | Set is known as pac90 (rom names may differ, but the CRC32/SHA1 values are listed): | |
65 | ||
66 | rom1.ic87 CRC32 8af34306 SHA1 1a98adca74f46da36e3648d37bfcb56a328a031e | |
67 | rom2.ic67 CRC32 bc9bfdf2 SHA1 869e4012e5c577e501143cbfd75cce8cef919c86 | |
68 | rom3.ic54 CRC32 1c4d17fd SHA1 5abebf867de452cc3e85331e91b9110c26a8b050 | |
69 | char.ic85 CRC32 70941a50 SHA1 283583743c21774d0097dc935ae7bc7009b5b633 | |
70 | char.ic85 CRC32 0b906dae SHA1 0d14d6a7bbe0b8772143afb4c6c94c62313e4b9c <-- An alternate version... | |
71 | sprite1.ic50 CRC32 190852ea SHA1 fad7eb3aa53d03917173dd5a040655cfd329db32 | |
72 | sprite2.ic60 CRC32 33effbea SHA1 dbf6b735f3c8bacb695caf5d15ac8b7961bffc74 | |
73 | voice.ic82 CRC32 abc61f3d SHA1 c6f123d16a26c4d77c635617dd97bb4b906c463a | |
74 | ||
75 | ||
76 | 54 | */ |
77 | 55 | |
78 | 56 | #include "emu.h" |
r249189 | r249190 | |
235 | 213 | |
236 | 214 | |
237 | 215 | |
216 | static INPUT_PORTS_START( pac90 ) | |
217 | PORT_START("P1") | |
218 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY | |
219 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY | |
220 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY | |
221 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY | |
222 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) | |
223 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) | |
224 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) | |
225 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) | |
226 | ||
227 | PORT_START("P2") | |
228 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) | |
229 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) | |
230 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) | |
231 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) | |
232 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) | |
233 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) | |
234 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) | |
235 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) | |
236 | ||
237 | PORT_START("DSW1") | |
238 | PORT_DIPNAME( 0x03, 0x01, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:8,7") | |
239 | PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) | |
240 | PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) ) | |
241 | PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) | |
242 | PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) | |
243 | PORT_DIPNAME( 0x0c, 0x08, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:6,5") | |
244 | PORT_DIPSETTING( 0x00, "1" ) | |
245 | PORT_DIPSETTING( 0x04, "2" ) | |
246 | PORT_DIPSETTING( 0x08, "3" ) | |
247 | PORT_DIPSETTING( 0x0c, "5" ) | |
248 | PORT_DIPNAME( 0x30, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4,3") | |
249 | PORT_DIPSETTING( 0x00, "10000" ) | |
250 | PORT_DIPSETTING( 0x10, "15000" ) | |
251 | PORT_DIPSETTING( 0x20, "20000" ) | |
252 | PORT_DIPSETTING( 0x30, DEF_STR( None ) ) | |
253 | PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:2") | |
254 | PORT_DIPSETTING( 0x40, DEF_STR( Normal ) ) | |
255 | PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) | |
256 | PORT_DIPNAME( 0x80, 0x80, "Ghost Names" ) PORT_DIPLOCATION("SW1:1") | |
257 | PORT_DIPSETTING( 0x80, DEF_STR( Normal ) ) | |
258 | PORT_DIPSETTING( 0x00, DEF_STR( Alternate ) ) | |
259 | ||
260 | PORT_START("DSW2") | |
261 | PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:8") | |
262 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) | |
263 | PORT_DIPSETTING( 0x01, DEF_STR( On ) ) | |
264 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:7") | |
265 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) | |
266 | PORT_DIPSETTING( 0x02, DEF_STR( On ) ) | |
267 | PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:6") | |
268 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) | |
269 | PORT_DIPSETTING( 0x04, DEF_STR( On ) ) | |
270 | PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:5") | |
271 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) | |
272 | PORT_DIPSETTING( 0x08, DEF_STR( On ) ) | |
273 | PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:4") | |
274 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) | |
275 | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) | |
276 | PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:3") | |
277 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) | |
278 | PORT_DIPSETTING( 0x20, DEF_STR( On ) ) | |
279 | PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:2") | |
280 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) | |
281 | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) | |
282 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:1") | |
283 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) | |
284 | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) | |
285 | ||
286 | ||
287 | PORT_START("SYSTEM") | |
288 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) | |
289 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) | |
290 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) | |
291 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) | |
292 | INPUT_PORTS_END | |
293 | ||
294 | ||
295 | ||
238 | 296 | static const gfx_layout charlayout = |
239 | 297 | { |
240 | 298 | 8,8, |
r249189 | r249190 | |
332 | 390 | MCFG_VIDEO_START_OVERRIDE(wc90_state, wc90t ) |
333 | 391 | MACHINE_CONFIG_END |
334 | 392 | |
393 | static MACHINE_CONFIG_DERIVED( pac90, wc90 ) | |
394 | MCFG_DEVICE_MODIFY("spritegen") | |
395 | MCFG_TECMO_SPRITE_YOFFSET(16) // sprites need shifting, why? | |
396 | MACHINE_CONFIG_END | |
397 | ||
398 | ||
335 | 399 | ROM_START( wc90 ) |
336 | 400 | ROM_REGION( 0x20000, "maincpu", 0 ) |
337 | 401 | ROM_LOAD( "ic87_01.bin", 0x00000, 0x08000, CRC(4a1affbc) SHA1(bc531e97ca31c66fdac194e2d79d5c6ba1300556) ) /* c000-ffff is not used */ |
r249189 | r249190 | |
365 | 429 | ROM_LOAD( "ic82_06.bin", 0x00000, 0x20000, CRC(2fd692ed) SHA1(0273dc39181504320bec0187d074b2f86c821508) ) |
366 | 430 | ROM_END |
367 | 431 | |
432 | ||
368 | 433 | ROM_START( wc90a ) |
369 | 434 | ROM_REGION( 0x20000, "maincpu", 0 ) |
370 | 435 | ROM_LOAD( "wc90-1.bin", 0x00000, 0x08000, CRC(d1804e1a) SHA1(eec7374f4d23c89843f38fffff436635adb43b63) ) /* c000-ffff is not used */ |
r249189 | r249190 | |
464 | 529 | ROM_LOAD( "ic82_06.bin", 0x00000, 0x20000, CRC(2fd692ed) SHA1(0273dc39181504320bec0187d074b2f86c821508) ) |
465 | 530 | ROM_END |
466 | 531 | |
532 | ROM_START( pac90 ) | |
533 | ROM_REGION( 0x20000, "maincpu", 0 ) | |
534 | ROM_LOAD( "rom1.ic87", 0x00000, 0x08000, CRC(8af34306) SHA1(1a98adca74f46da36e3648d37bfcb56a328a031e) ) | |
535 | ||
536 | ROM_REGION( 0x20000, "sub", ROMREGION_ERASE00 ) /* Second CPU */ | |
537 | ROM_LOAD( "rom2.ic67", 0x00000, 0x10000, CRC(bc9bfdf2) SHA1(869e4012e5c577e501143cbfd75cce8cef919c86) ) | |
538 | ||
539 | ROM_REGION( 0x10000, "audiocpu", 0 ) | |
540 | ROM_LOAD( "rom3.ic54", 0x00000, 0x10000, CRC(1c4d17fd) SHA1(5abebf867de452cc3e85331e91b9110c26a8b050) ) | |
541 | ||
542 | ROM_REGION( 0x010000, "gfx1", 0 ) | |
543 | ROM_LOAD( "char.ic85", 0x00000, 0x10000, CRC(70941a50) SHA1(283583743c21774d0097dc935ae7bc7009b5b633) ) | |
544 | // char.ic85 CRC32 0b906dae SHA1 0d14d6a7bbe0b8772143afb4c6c94c62313e4b9c <-- An alternate version... | |
545 | ||
546 | ROM_REGION( 0x040000, "gfx2", ROMREGION_ERASE00 ) | |
547 | //ROM_LOAD( "ic86_08v.bin", 0x00000, 0x20000, CRC(8fa1a1ff) SHA1(ce624617ac8c8b54e41294cf5dca7a09c91f53ba) ) /* tiles #1 */ | |
548 | //ROM_LOAD( "ic90_09v.bin", 0x20000, 0x20000, CRC(99f8841c) SHA1(1969b4d78ca00924a7550826e1c4f4fa0588ef02) ) /* tiles #2 */ | |
549 | ||
550 | ROM_REGION( 0x040000, "gfx3", ROMREGION_ERASE00 ) | |
551 | //ROM_LOAD( "ic87_10v.bin", 0x00000, 0x20000, CRC(8232093d) SHA1(59bf9c9a858b47326cf0c64b1ee6ac727a15a20b) ) /* tiles #3 */ | |
552 | //ROM_LOAD( "ic91_11v.bin", 0x20000, 0x20000, CRC(188d3789) SHA1(35654a99a20735bae09b32f74255f8132dee9af2) ) /* tiles #4 */ | |
553 | ||
554 | ROM_REGION( 0x080000, "gfx4", ROMREGION_ERASE00 ) | |
555 | ROM_LOAD( "sprite1.ic50", 0x00000, 0x10000, CRC(190852ea) SHA1(fad7eb3aa53d03917173dd5a040655cfd329db32) ) /* sprites */ | |
556 | ROM_LOAD( "sprite2.ic60", 0x40000, 0x10000, CRC(33effbea) SHA1(dbf6b735f3c8bacb695caf5d15ac8b7961bffc74) ) /* sprites */ | |
557 | ||
558 | ROM_REGION( 0x20000, "ymsnd", ROMREGION_ERASE00 ) /* 64k for ADPCM samples */ | |
559 | ROM_LOAD( "voice.ic82", 0x00000, 0x10000, CRC(abc61f3d) SHA1(c6f123d16a26c4d77c635617dd97bb4b906c463a) ) | |
560 | ROM_END | |
561 | ||
562 | ||
467 | 563 | GAME( 1989, wc90, 0, wc90, wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (World)", MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) |
468 | 564 | GAME( 1989, wc90a, wc90, wc90, wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (Euro set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) |
469 | 565 | GAME( 1989, wc90b, wc90, wc90, wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (Euro set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) |
470 | 566 | GAME( 1989, wc90t, wc90, wc90t,wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (trackball set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) |
567 | ||
568 | GAME( 199?, pac90, puckman, pac90,pac90,driver_device, 0, ROT90, "bootleg (Macro)", "Pac-Man (bootleg on World Cup '90 hardware)", MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // made by Mike Coates etc. |
r249189 | r249190 | |
---|---|---|
224 | 224 | dilate_rendertarget = 0; |
225 | 225 | antialiasing_rendertarget = 0; |
226 | 226 | type_rendertarget = nv2a_renderer::LINEAR; |
227 | depth_rendertarget = nv2a_renderer::NV2A_RT_DEPTH_FORMAT_Z24S8; | |
228 | color_rendertarget = nv2a_renderer::NV2A_COLOR_FORMAT_A8R8G8B8; | |
227 | depthformat_rendertarget = nv2a_renderer::NV2A_RT_DEPTH_FORMAT_Z24S8; | |
228 | colorformat_rendertarget = nv2a_renderer::NV2A_COLOR_FORMAT_A8R8G8B8; | |
229 | bytespixel_rendertarget = 4; | |
230 | antialias_control = 0; | |
229 | 231 | rendertarget = NULL; |
230 | 232 | depthbuffer = NULL; |
231 | 233 | displayedtarget = NULL; |
r249189 | r249190 | |
254 | 256 | void geforce_read_dma_object(UINT32 handle, UINT32 &offset, UINT32 &size); |
255 | 257 | int geforce_exec_method(address_space &space, UINT32 channel, UINT32 subchannel, UINT32 method, UINT32 address, int &countlen); |
256 | 258 | UINT32 texture_get_texel(int number, int x, int y); |
259 | UINT8 *read_pixel(int x, int y, UINT32 c[4]); | |
257 | 260 | void write_pixel(int x, int y, UINT32 color, UINT32 depth); |
258 | 261 | void combiner_initialize_registers(UINT32 argb8[6]); |
259 | 262 | void combiner_initialize_stage(int stage_number); |
r249189 | r249190 | |
293 | 296 | int read_vertices_0x1810(address_space & space, vertex_nv *destination, int offset, int limit); |
294 | 297 | int read_vertices_0x1818(address_space & space, vertex_nv *destination, UINT32 address, int limit); |
295 | 298 | void convert_vertices_poly(vertex_nv *source, vertex_t *destination, int count); |
299 | void clear_depth_buffer(int what, UINT32 value); | |
296 | 300 | inline UINT8 *direct_access_ptr(offs_t address); |
297 | 301 | TIMER_CALLBACK_MEMBER(puller_timer_work); |
298 | 302 | |
r249189 | r249190 | |
321 | 325 | int dilate_rendertarget; |
322 | 326 | int antialiasing_rendertarget; |
323 | 327 | int type_rendertarget; |
324 | int depth_rendertarget; | |
325 | int color_rendertarget; | |
328 | int depthformat_rendertarget; | |
329 | int colorformat_rendertarget; | |
330 | int bytespixel_rendertarget; | |
331 | UINT32 antialias_control; | |
326 | 332 | UINT32 *rendertarget; |
327 | 333 | UINT32 *depthbuffer; |
328 | 334 | UINT32 *displayedtarget; |
r249189 | r249190 | |
---|---|---|
4 | 4 | #include "cpu/mips/mips3.h" |
5 | 5 | #include "cpu/nec/v53.h" |
6 | 6 | #include "sound/l7a1045_l6028_dsp_a.h" |
7 | #include "video/poly.h" | |
7 | 8 | |
8 | 9 | enum |
9 | 10 | { |
r249189 | r249190 | |
21 | 22 | HNG64_TILEMAP_ALPHA |
22 | 23 | }; |
23 | 24 | |
24 | ||
25 | 25 | struct blit_parameters |
26 | 26 | { |
27 | 27 | bitmap_rgb32 * bitmap; |
r249189 | r249190 | |
35 | 35 | |
36 | 36 | #define HNG64_MASTER_CLOCK 50000000 |
37 | 37 | |
38 | /////////////// | |
39 | // 3d Engine // | |
40 | /////////////// | |
41 | 38 | |
39 | ///////////////// | |
40 | /// 3d Engine /// | |
41 | ///////////////// | |
42 | ||
42 | 43 | struct polyVert |
43 | 44 | { |
44 | 45 | float worldCoords[4]; // World space coordinates (X Y Z 1.0) |
r249189 | r249190 | |
72 | 73 | }; |
73 | 74 | |
74 | 75 | |
76 | ///////////////////////// | |
77 | /// polygon rendering /// | |
78 | ///////////////////////// | |
75 | 79 | |
76 | /////////////////////// | |
77 | // polygon rendering // | |
78 | /////////////////////// | |
80 | // Refer to the clipping planes as numbers | |
81 | #define HNG64_LEFT 0 | |
82 | #define HNG64_RIGHT 1 | |
83 | #define HNG64_TOP 2 | |
84 | #define HNG64_BOTTOM 3 | |
85 | #define HNG64_NEAR 4 | |
86 | #define HNG64_FAR 5 | |
79 | 87 | |
80 | struct polygonRasterOptions | |
88 | ||
89 | //////////////////////////////////// | |
90 | /// Polygon rasterizer interface /// | |
91 | //////////////////////////////////// | |
92 | ||
93 | const int HNG64_MAX_POLYGONS = 10000; | |
94 | ||
95 | struct hng64_poly_data | |
81 | 96 | { |
82 | 97 | UINT8 texType; |
83 | 98 | UINT8 texIndex; |
r249189 | r249190 | |
89 | 104 | int debugColor; |
90 | 105 | }; |
91 | 106 | |
92 | // Refer to the clipping planes as numbers | |
93 | #define HNG64_LEFT 0 | |
94 | #define HNG64_RIGHT 1 | |
95 | #define HNG64_TOP 2 | |
96 | #define HNG64_BOTTOM 3 | |
97 | #define HNG64_NEAR 4 | |
98 | #define HNG64_FAR 5 | |
107 | class hng64_state; | |
99 | 108 | |
109 | class hng64_poly_renderer : public poly_manager<float, hng64_poly_data, 7, HNG64_MAX_POLYGONS> | |
110 | { | |
111 | public: | |
112 | hng64_poly_renderer(hng64_state& state); | |
113 | ||
114 | void drawShaded(struct polygon *p); | |
115 | void render_scanline(INT32 scanline, const extent_t& extent, const hng64_poly_data& renderData, int threadid); | |
100 | 116 | |
117 | hng64_state& state() { return m_state; } | |
118 | bitmap_rgb32& colorBuffer3d() { return m_colorBuffer3d; } | |
119 | float* depthBuffer3d() { return m_depthBuffer3d; } | |
120 | ||
121 | private: | |
122 | hng64_state& m_state; | |
123 | ||
124 | // (Temporarily class members - someday they will live in the memory map) | |
125 | bitmap_rgb32 m_colorBuffer3d; | |
126 | float* m_depthBuffer3d; | |
127 | }; | |
101 | 128 | |
129 | ||
130 | ||
102 | 131 | class hng64_state : public driver_device |
103 | 132 | { |
104 | 133 | public: |
r249189 | r249190 | |
143 | 172 | required_shared_ptr<UINT32> m_videoram; |
144 | 173 | required_shared_ptr<UINT32> m_videoregs; |
145 | 174 | required_shared_ptr<UINT32> m_tcram; |
146 | /* 3D stuff */ | |
175 | ||
176 | /* 3D stuff */ | |
147 | 177 | UINT16* m_dl; |
148 | 178 | |
149 | 179 | required_shared_ptr<UINT32> m_3dregs; |
r249189 | r249190 | |
194 | 224 | |
195 | 225 | UINT8 m_additive_tilemap_debug; |
196 | 226 | |
197 | // 3d display buffers | |
198 | // (Temporarily global - someday they will live with the proper bit-depth in the memory map) | |
199 | float *m_depthBuffer3d; | |
200 | UINT32 *m_colorBuffer3d; | |
201 | ||
202 | 227 | UINT32 m_old_animmask; |
203 | 228 | UINT32 m_old_animbits; |
204 | 229 | UINT16 m_old_tileflags[4]; |
r249189 | r249190 | |
299 | 324 | DECLARE_CUSTOM_INPUT_MEMBER(right_handle_r); |
300 | 325 | DECLARE_CUSTOM_INPUT_MEMBER(acc_down_r); |
301 | 326 | DECLARE_CUSTOM_INPUT_MEMBER(brake_down_r); |
302 | void clear3d(); | |
327 | ||
328 | hng64_poly_renderer* m_poly_renderer; | |
329 | ||
330 | void clear3d(); | |
303 | 331 | TIMER_CALLBACK_MEMBER(hng64_3dfifo_processed); |
304 | 332 | |
305 | void FillSmoothTexPCHorizontalLine( | |
306 | const polygonRasterOptions& prOptions, | |
307 | int x_start, int x_end, int y, float z_start, float z_delta, | |
308 | float w_start, float w_delta, float r_start, float r_delta, | |
309 | float g_start, float g_delta, float b_start, float b_delta, | |
310 | float s_start, float s_delta, float t_start, float t_delta); | |
311 | ||
312 | 333 | void hng64_command3d(const UINT16* packet); |
313 | 334 | void draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); |
314 | void transition_control( | |
335 | void transition_control(bitmap_rgb32 &bitmap, const rectangle &cliprect); | |
315 | 336 | void hng64_tilemap_draw_roz_core(screen_device &screen, tilemap_t *tmap, const blit_parameters *blit, |
316 | 337 | UINT32 startx, UINT32 starty, int incxx, int incxy, int incyx, int incyy, int wraparound); |
317 | 338 | void hng64_drawtilemap(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int tm); |
r249189 | r249190 | |
331 | 352 | UINT32 startx, UINT32 starty, int incxx, int incxy, int incyx, int incyy, |
332 | 353 | int wraparound, UINT32 flags, UINT8 priority, UINT8 priority_mask, hng64trans_t drawformat); |
333 | 354 | |
334 | void RasterizeTriangle_SMOOTH_TEX_PC( | |
335 | float A[4], float B[4], float C[4], | |
336 | float Ca[3], float Cb[3], float Cc[3], // PER-VERTEX RGB COLORS | |
337 | float Ta[2], float Tb[2], float Tc[2], // PER-VERTEX (S,T) TEX-COORDS | |
338 | const polygonRasterOptions& prOptions); | |
339 | ||
340 | void drawShaded( struct polygon *p); | |
341 | ||
342 | 355 | void printPacket(const UINT16* packet, int hex); |
343 | 356 | void matmul4(float *product, const float *a, const float *b); |
344 | 357 | void vecmatmul4(float *product, const float *a, const float *b); |
r249189 | r249190 | |
---|---|---|
86 | 86 | TIMER_CALLBACK_MEMBER(vi_scanline_callback); |
87 | 87 | TIMER_CALLBACK_MEMBER(ai_timer_callback); |
88 | 88 | TIMER_CALLBACK_MEMBER(pi_dma_callback); |
89 | TIMER_CALLBACK_MEMBER(si_dma_callback); | |
89 | 90 | DECLARE_READ32_MEMBER( dp_reg_r ); |
90 | 91 | DECLARE_WRITE32_MEMBER( dp_reg_w ); |
91 | 92 | DECLARE_READ32_MEMBER( sp_reg_r ); |
r249189 | r249190 | |
96 | 97 | |
97 | 98 | void ai_timer_tick(); |
98 | 99 | void pi_dma_tick(); |
100 | void si_dma_tick(); | |
99 | 101 | void vi_scanline_tick(); |
100 | 102 | void reset_tick(); |
101 | 103 | |
r249189 | r249190 | |
242 | 244 | UINT32 pi_dma_dir; |
243 | 245 | |
244 | 246 | // Serial Interface (SI) registers and functions |
247 | emu_timer *si_dma_timer; | |
245 | 248 | void pif_dma(int direction); |
246 | 249 | void handle_pif(); |
247 | 250 | int pif_channel_handle_command(int channel, int slength, UINT8 *sdata, int rlength, UINT8 *rdata); |
r249189 | r249190 | |
---|---|---|
474 | 474 | |
475 | 475 | INPUT_PORTS_EXTERN( orlegend ); |
476 | 476 | INPUT_PORTS_EXTERN( orlegendt ); |
477 | INPUT_PORTS_EXTERN( orld | |
477 | INPUT_PORTS_EXTERN( orlegendk ); | |
478 | 478 | |
479 | ||
479 | 480 | MACHINE_CONFIG_EXTERN( pgm_asic3 ); |
480 | 481 | |
481 | 482 | /*----------- defined in machine/pgmprot1.c -----------*/ |
r249189 | r249190 | |
---|---|---|
109 | 109 | { |
110 | 110 | ai_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(n64_periphs::ai_timer_callback),this)); |
111 | 111 | pi_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(n64_periphs::pi_dma_callback),this)); |
112 | si_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(n64_periphs::si_dma_callback),this)); | |
112 | 113 | vi_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(n64_periphs::vi_scanline_callback),this)); |
113 | 114 | reset_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(n64_periphs::reset_timer_callback),this)); |
114 | 115 | } |
r249189 | r249190 | |
202 | 203 | si_dram_addr = 0; |
203 | 204 | si_pif_addr = 0; |
204 | 205 | si_status = 0; |
206 | si_dma_timer->adjust(attotime::never); | |
205 | 207 | |
206 | memset(m_save_data.eeprom, 0, 2048); | |
208 | //memset(m_save_data.eeprom, 0, 2048); | |
207 | 209 | |
208 | 210 | dp_clock = 0; |
209 | 211 | |
r249189 | r249190 | |
225 | 227 | pif_ram[0x26] = 0x3f; |
226 | 228 | pif_ram[0x27] = 0x3f; |
227 | 229 | cic_type=2; |
228 | mem_map->write_dword(0x00000318, 0x800000); | |
230 | mem_map->write_dword(0x00000318, 0x800000); /* RDRAM Size */ | |
229 | 231 | |
230 | 232 | if (boot_checksum == U64(0x00000000001ff230)) |
231 | 233 | { |
r249189 | r249190 | |
993 | 995 | // Video Interface |
994 | 996 | void n64_periphs::vi_recalculate_resolution() |
995 | 997 | { |
996 | n64_state *state = machine().driver_data<n64_state>(); | |
998 | //n64_state *state = machine().driver_data<n64_state>(); | |
997 | 999 | |
998 | 1000 | int x_start = (vi_hstart & 0x03ff0000) >> 16; |
999 | 1001 | int x_end = vi_hstart & 0x000003ff; |
r249189 | r249190 | |
1025 | 1027 | if (height > 480) |
1026 | 1028 | height = 480; |
1027 | 1029 | |
1028 | state->m_rdp->m_misc_state.m_fb_height = height; | |
1030 | if(vi_control & 0x40) /* Interlace */ | |
1031 | { | |
1032 | height *= 2; | |
1033 | } | |
1029 | 1034 | |
1035 | //state->m_rdp->m_misc_state.m_fb_height = height; | |
1036 | ||
1030 | 1037 | visarea.max_x = width - 1; |
1031 | 1038 | visarea.max_y = height - 1; |
1032 | 1039 | m_screen->configure(width, 525, visarea, period); |
r249189 | r249190 | |
1054 | 1061 | break; |
1055 | 1062 | |
1056 | 1063 | case 0x10/4: // VI_CURRENT_REG |
1057 | ret = m_screen->vpos() << 1; | |
1064 | ret = (m_screen->vpos() << 1) + 1; | |
1058 | 1065 | break; |
1059 | 1066 | |
1060 | 1067 | case 0x14/4: // VI_BURST_REG |
r249189 | r249190 | |
1103 | 1110 | |
1104 | 1111 | WRITE32_MEMBER( n64_periphs::vi_reg_w ) |
1105 | 1112 | { |
1106 | n64_state *state = machine().driver_data<n64_state>(); | |
1113 | //n64_state *state = machine().driver_data<n64_state>(); | |
1107 | 1114 | |
1108 | 1115 | switch (offset) |
1109 | 1116 | { |
r249189 | r249190 | |
1122 | 1129 | vi_recalculate_resolution(); |
1123 | 1130 | } |
1124 | 1131 | vi_width = data; |
1125 | state->m_rdp->m_misc_state.m_fb_width = data; | |
1132 | //state->m_rdp->m_misc_state.m_fb_width = data; | |
1126 | 1133 | break; |
1127 | 1134 | |
1128 | 1135 | case 0x0c/4: // VI_INTR_REG |
r249189 | r249190 | |
1214 | 1221 | |
1215 | 1222 | if (! (ai_status & 0x40000000)) |
1216 | 1223 | { |
1217 | signal_rcp_interrupt(AI_INTERRUPT); | |
1224 | //signal_rcp_interrupt(AI_INTERRUPT); | |
1218 | 1225 | ai_dma(); |
1219 | 1226 | } |
1220 | 1227 | } |
r249189 | r249190 | |
1237 | 1244 | if (ai_fifo_num < AUDIO_DMA_DEPTH) |
1238 | 1245 | { |
1239 | 1246 | ai_status &= ~0x80000001; // FIFO not full |
1240 | signal_rcp_interrupt(AI_INTERRUPT); | |
1247 | //signal_rcp_interrupt(AI_INTERRUPT); | |
1241 | 1248 | } |
1242 | 1249 | } |
1243 | 1250 | |
r249189 | r249190 | |
1277 | 1284 | ai_status |= 0x40000000; |
1278 | 1285 | |
1279 | 1286 | // adjust the timer |
1280 | period = attotime::from_hz(DACRATE_NTSC) * ( | |
1287 | period = attotime::from_hz(DACRATE_NTSC) * (ai_dacrate + 1) * (current->length / 4); | |
1281 | 1288 | ai_timer->adjust(period); |
1282 | 1289 | } |
1283 | 1290 | |
r249189 | r249190 | |
1289 | 1296 | void n64_periphs::ai_timer_tick() |
1290 | 1297 | { |
1291 | 1298 | ai_fifo_pop(); |
1299 | signal_rcp_interrupt(AI_INTERRUPT); | |
1292 | 1300 | |
1293 | 1301 | // keep playing if there's another DMA queued |
1294 | 1302 | if (ai_fifo_get_top() != NULL) |
1295 | 1303 | { |
1296 | 1304 | ai_dma(); |
1297 | signal_rcp_interrupt(AI_INTERRUPT); | |
1298 | 1305 | } |
1299 | 1306 | else |
1300 | 1307 | { |
r249189 | r249190 | |
1325 | 1332 | } |
1326 | 1333 | break; |
1327 | 1334 | } |
1328 | ||
1335 | case 0x08/4: | |
1336 | ret = ai_control; | |
1337 | break; | |
1329 | 1338 | case 0x0c/4: // AI_STATUS_REG |
1330 | 1339 | ret = ai_status; |
1331 | 1340 | break; |
r249189 | r249190 | |
1425 | 1434 | { |
1426 | 1435 | UINT32 dma_length = pi_wr_len + 1; |
1427 | 1436 | //logerror("PI Write, %X, %X, %X\n", pi_cart_addr, pi_dram_addr, pi_wr_len); |
1428 | if (dma_length & | |
1437 | if (dma_length & 1) | |
1429 | 1438 | { |
1430 | dma_length = (dma_length + | |
1439 | dma_length = (dma_length + 1) & ~1; | |
1431 | 1440 | } |
1432 | 1441 | |
1433 | 1442 | if (pi_dram_addr != 0xffffffff) |
r249189 | r249190 | |
1445 | 1454 | { |
1446 | 1455 | UINT32 dma_length = pi_rd_len + 1; |
1447 | 1456 | //logerror("PI Read, %X, %X, %X\n", pi_cart_addr, pi_dram_addr, pi_rd_len); |
1448 | if (dma_length & | |
1457 | if (dma_length & 1) | |
1449 | 1458 | { |
1450 | dma_length = (dma_length + | |
1459 | dma_length = (dma_length + 1) & ~1; | |
1451 | 1460 | } |
1452 | 1461 | |
1453 | 1462 | if (pi_dram_addr != 0xffffffff) |
r249189 | r249190 | |
2076 | 2085 | }*/ |
2077 | 2086 | } |
2078 | 2087 | |
2088 | TIMER_CALLBACK_MEMBER(n64_periphs::si_dma_callback) | |
2089 | { | |
2090 | machine().device<n64_periphs>("rcp")->si_dma_tick(); | |
2091 | } | |
2092 | ||
2093 | void n64_periphs::si_dma_tick() | |
2094 | { | |
2095 | si_dma_timer->adjust(attotime::never); | |
2096 | si_status |= 0x1000; | |
2097 | signal_rcp_interrupt(SI_INTERRUPT); | |
2098 | } | |
2099 | ||
2079 | 2100 | void n64_periphs::pif_dma(int direction) |
2080 | 2101 | { |
2081 | 2102 | if (si_dram_addr & 0x3) |
r249189 | r249190 | |
2116 | 2137 | } |
2117 | 2138 | } |
2118 | 2139 | |
2119 | si_status |= 0x1000; | |
2120 | signal_rcp_interrupt(SI_INTERRUPT); | |
2140 | si_dma_timer->adjust(attotime::from_hz(500)); | |
2141 | //si_status |= 0x1000; | |
2142 | //signal_rcp_interrupt(SI_INTERRUPT); | |
2121 | 2143 | } |
2122 | 2144 | |
2123 | 2145 | READ32_MEMBER( n64_periphs::si_reg_r ) |
r249189 | r249190 | |
---|---|---|
84 | 84 | |
85 | 85 | |
86 | 86 | static MACHINE_CONFIG_FRAGMENT( nmk004 ) |
87 | MCFG_CPU_ADD("mcu",TMP90840, DERIVED_CLOCK(1,1)) // | |
87 | MCFG_CPU_ADD("mcu",TMP90840, DERIVED_CLOCK(1,1)) // Toshiba TMP90C840AF in QFP64 package with 8Kbyte internal ROM | |
88 | 88 | MCFG_CPU_PROGRAM_MAP(nmk004_sound_mem_map) |
89 | 89 | MCFG_CPU_IO_MAP(nmk004_sound_io_map) |
90 | 90 | MACHINE_CONFIG_END |
r249189 | r249190 | |
---|---|---|
1571 | 1571 | src[i] = x; |
1572 | 1572 | } |
1573 | 1573 | } |
1574 | ||
1575 | ||
1576 | static UINT8 amazonia_tab[0x100] = { // seems to be correct | |
1577 | 0x87, 0x01, 0xd3, 0x6b, 0x79, 0x00, 0xbd, 0x81, 0xc7, 0x8f, 0x9b, 0xd9, 0x3b, 0x53, 0x09, 0x15, | |
1578 | 0x05, 0x57, 0x7b, 0x1f, 0x2f, 0x09, 0x47, 0xa1, 0x45, 0x00, 0xf7, 0xbf, 0x3d, 0x59, 0xd1, 0x19, | |
1579 | 0xad, 0xd5, 0xa1, 0x03, 0x2d, 0x35, 0xc7, 0x07, 0x09, 0x4f, 0x85, 0x95, 0x2b, 0x3f, 0x89, 0x09, | |
1580 | 0x49, 0x85, 0xb9, 0xe7, 0x4b, 0x53, 0x3f, 0x51, 0xff, 0x3b, 0xd5, 0xc9, 0xff, 0xfd, 0x53, 0x25, | |
1581 | 0xe3, 0xa9, 0x75, 0xd7, 0xa3, 0xfd, 0xf1, 0x5f, 0x51, 0xfb, 0xbb, 0x09, 0xf5, 0xc9, 0x91, 0xed, | |
1582 | 0xc7, 0xcd, 0xc9, 0x25, 0x93, 0x07, 0x63, 0x51, 0x69, 0xb3, 0x4b, 0x47, 0x85, 0x19, 0xe7, 0x1f, | |
1583 | 0x7f, 0xb3, 0xe9, 0x5f, 0xb5, 0x8b, 0x57, 0x83, 0xf5, 0xcb, 0xd5, 0xb1, 0x6d, 0xa3, 0x37, 0xbb, | |
1584 | 0xd7, 0x67, 0x45, 0x55, 0xe3, 0xdd, 0xcf, 0x97, 0xdd, 0xe9, 0xf1, 0xb5, 0xa7, 0x63, 0xa5, 0xfd, | |
1585 | 0xdb, 0x2b, 0x93, 0x13, 0x37, 0x95, 0x0d, 0x69, 0x4d, 0xf7, 0x6d, 0x03, 0x6f, 0x8b, 0x95, 0x69, | |
1586 | 0xd5, 0x8b, 0xc3, 0xeb, 0x0f, 0x8b, 0x97, 0x1b, 0xb1, 0x19, 0x5f, 0x89, 0x3d, 0x95, 0xa9, 0xb9, | |
1587 | 0x4f, 0x4b, 0x0b, 0x6b, 0x05, 0xd5, 0x2d, 0x0b, 0xb5, 0xb7, 0x19, 0x75, 0xcf, 0x35, 0xc3, 0xef, | |
1588 | 0x13, 0x71, 0xdb, 0x61, 0xf3, 0xcb, 0xd3, 0xd7, 0x3f, 0x79, 0x2d, 0x39, 0x21, 0x65, 0x07, 0x49, | |
1589 | 0x31, 0x47, 0xe9, 0xdd, 0xf3, 0x03, 0xcf, 0x5f, 0x7f, 0x45, 0x71, 0x83, 0x69, 0x5b, 0xd9, 0x47, | |
1590 | 0xef, 0x53, 0x27, 0x2f, 0x63, 0x55, 0x9f, 0xc1, 0xdf, 0x41, 0xf5, 0x41, 0x27, 0x8d, 0xdb, 0xa7, | |
1591 | 0xd9, 0x5b, 0xc7, 0xe5, 0xdd, 0xd7, 0x09, 0x5f, 0x09, 0xd7, 0x0d, 0xa1, 0x13, 0xb3, 0xef, 0x67, | |
1592 | 0xbb, 0x65, 0x3d, 0xcd, 0x3b, 0xdf, 0x0f, 0xd3, 0xe7, 0xab, 0x4d, 0x15, 0x29, 0xc5, 0x39, 0xc9 | |
1593 | }; | |
1594 | ||
1595 | void amazonia_decrypt(running_machine &machine) | |
1596 | { | |
1597 | int i; | |
1598 | UINT16 *src = (UINT16 *)machine.root_device().memregion("user1")->base(); | |
1599 | ||
1600 | int rom_size = 0x80000; | |
1601 | for (i = 0; i < rom_size / 2; i++) { | |
1602 | int x = amazonia_tab[(i / 2) & 0xff] << 8; | |
1603 | ||
1604 | if ((i & 0x040480) != 0x000080) x ^= 0x0001; | |
1605 | if ((i & 0x004008) == 0x004008) x ^= 0x0002; | |
1606 | if ((i & 0x080030) == 0x080010) x ^= 0x0004; // pin high?? | |
1607 | if ((i & 0x000242) != 0x000042) x ^= 0x0008; | |
1608 | if ((i & 0x008100) == 0x008000) x ^= 0x0010; | |
1609 | if ((i & 0x022004) != 0x000004) x ^= 0x0020; // verified | |
1610 | if ((i & 0x011800) != 0x010000) x ^= 0x0040; | |
1611 | if ((i & 0x004820) == 0x004820) x ^= 0x0080; // verified | |
1612 | ||
1613 | src[i] ^= x; | |
1614 | } | |
1615 | } | |
1616 | ||
1617 | // not 100% verified | |
1618 | static const UINT8 amazoni2_tab[0x100] = { | |
1619 | 0x49, 0x47, 0x53, 0x30, 0x30, 0x37, 0x37, 0x52, 0x44, 0x34, 0x30, 0x32, 0x31, 0x30, 0x31, 0x36, | |
1620 | 0xed, 0x3f, 0x77, 0xd0, 0xc4, 0x72, 0x77, 0xe1, 0x35, 0x15, 0x10, 0xc6, 0x1b, 0xee, 0x25, 0x4a, | |
1621 | 0x0d, 0x06, 0x37, 0x19, 0xfa, 0xf9, 0x29, 0xb0, 0x03, 0x7e, 0x32, 0x83, 0x99, 0x32, 0x23, 0x6e, | |
1622 | 0xd8, 0xa9, 0xdb, 0x5f, 0x23, 0xb7, 0x08, 0x41, 0x00, 0xfb, 0x20, 0x2b, 0x36, 0xae, 0x9f, 0xc9, | |
1623 | 0x24, 0xaa, 0x82, 0x0b, 0x64, 0xbe, 0x03, 0x0d, 0xa2, 0x31, 0x97, 0x47, 0xb6, 0x94, 0x26, 0xf6, | |
1624 | 0x09, 0xcd, 0x8a, 0xca, 0x26, 0x61, 0x4a, 0xd1, 0x9f, 0x01, 0x98, 0xa3, 0x23, 0x58, 0x88, 0xcf, | |
1625 | 0xdd, 0x14, 0x93, 0x86, 0x0f, 0x33, 0x4c, 0x86, 0xef, 0x8f, 0x61, 0x4a, 0xc2, 0xad, 0xd5, 0x70, | |
1626 | 0x37, 0xc2, 0x7b, 0x6a, 0x06, 0x07, 0xb7, 0x69, 0xc9, 0x3f, 0x71, 0x87, 0x1a, 0x85, 0x5a, 0x33, | |
1627 | 0xee, 0x5b, 0x63, 0xe2, 0x32, 0xf0, 0x7a, 0xf4, 0xa4, 0xb2, 0x87, 0xe4, 0xf3, 0x14, 0xa7, 0xb4, | |
1628 | 0x1a, 0xa1, 0xa8, 0x98, 0xf9, 0x42, 0xc5, 0xe1, 0x36, 0xcc, 0xa3, 0x2d, 0x54, 0xcd, 0x8b, 0xcd, | |
1629 | 0x11, 0x98, 0xe9, 0x77, 0x05, 0x8e, 0x06, 0x2d, 0x78, 0xb0, 0x02, 0x6d, 0x83, 0x62, 0x15, 0x9a, | |
1630 | 0x6b, 0x82, 0x07, 0xaa, 0x3a, 0xa9, 0xed, 0x12, 0x9f, 0xc0, 0x25, 0xee, 0x08, 0xc7, 0x94, 0x75, | |
1631 | 0xfd, 0xe2, 0x1f, 0x9d, 0xc0, 0xa5, 0x68, 0x0a, 0x23, 0xa1, 0xca, 0x3d, 0xa9, 0x2f, 0x97, 0xfa, | |
1632 | 0xe0, 0x7c, 0x91, 0xfa, 0xfe, 0xd5, 0xa6, 0xd2, 0xbb, 0x34, 0xf1, 0x23, 0x6e, 0x0c, 0xed, 0x03, | |
1633 | 0x6b, 0x52, 0xfb, 0xac, 0x9c, 0xcc, 0x17, 0x64, 0x5d, 0x9e, 0xd7, 0xac, 0x9e, 0x12, 0xa5, 0xac, | |
1634 | 0x34, 0xa7, 0x3e, 0xde, 0x7f, 0x5d, 0x6a, 0xfa, 0x42, 0x40, 0xfd, 0x23, 0xbf, 0x33, 0x0e, 0x50 | |
1635 | }; | |
1636 | ||
1637 | ||
1638 | void amazoni2_decrypt(running_machine &machine) | |
1639 | { | |
1640 | int i; | |
1641 | UINT16 *src = (UINT16 *) machine.root_device().memregion("user1")->base(); | |
1642 | ||
1643 | int rom_size = 0x80000; | |
1644 | ||
1645 | for(i=0; i<rom_size/2; i++) | |
1646 | { | |
1647 | UINT16 x = src[i]; | |
1648 | ||
1649 | // should be correct | |
1650 | IGS27_CRYPT1 | |
1651 | IGS27_CRYPT2_ALT | |
1652 | // IGS27_CRYPT3 | |
1653 | IGS27_CRYPT4 | |
1654 | IGS27_CRYPT5 | |
1655 | IGS27_CRYPT6_ALT // second half is junk, not sure... | |
1656 | IGS27_CRYPT7 | |
1657 | IGS27_CRYPT8 | |
1658 | ||
1659 | x ^= amazoni2_tab[(i >> 1) & 0xff] << 8; | |
1660 | ||
1661 | src[i] = x; | |
1662 | } | |
1663 | } |
r249189 | r249190 | |
---|---|---|
36 | 36 | void pgm_decrypt_pgm3in1(running_machine &machine); |
37 | 37 | void slqz3_decrypt(running_machine &machine); |
38 | 38 | void fruitpar_decrypt(running_machine &machine); |
39 | void amazonia_decrypt(running_machine &machine); | |
40 | void amazoni2_decrypt(running_machine &machine); |
r249189 | r249190 | |
---|---|---|
205 | 205 | PORT_CONFSETTING( 0x0004, DEF_STR( Taiwan ) ) |
206 | 206 | INPUT_PORTS_END |
207 | 207 | |
208 | INPUT_PORTS_START( orld105k ) | |
208 | ||
209 | INPUT_PORTS_START( orlegendk ) | |
209 | 210 | PORT_INCLUDE ( pgm ) |
210 | 211 | |
211 | 212 | PORT_MODIFY("Region") |
212 | PORT_DIPNAME( 0x0003, 0x0002, DEF_STR( Unused ) ) // region switch | |
213 | PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) // if enabled, game gives | |
214 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) // "incorrect version" error | |
213 | PORT_DIPNAME( 0x0007, 0x0002, DEF_STR( Region ) ) | |
214 | PORT_CONFSETTING( 0x0000, "Invalid 00?" ) | |
215 | PORT_CONFSETTING( 0x0001, "Invalid 01?" ) | |
216 | PORT_CONFSETTING( 0x0002, DEF_STR( Korea ) ) | |
217 | PORT_CONFSETTING( 0x0003, "Invalid 03?" ) | |
218 | PORT_CONFSETTING( 0x0004, "Invalid 04?" ) | |
215 | 219 | INPUT_PORTS_END |
216 | 220 | |
221 | ||
217 | 222 | MACHINE_CONFIG_START( pgm_asic3, pgm_asic3_state ) |
218 | 223 | MCFG_FRAGMENT_ADD(pgmbase) |
219 | 224 | MACHINE_CONFIG_END |
r249189 | r249190 | |
---|---|---|
1418 | 1418 | AM_RANGE(0xfed00000, 0xfed003ff) AM_READWRITE(usbctrl_r, usbctrl_w) |
1419 | 1419 | AM_RANGE(0xfe800000, 0xfe85ffff) AM_READWRITE(audio_apu_r, audio_apu_w) |
1420 | 1420 | AM_RANGE(0xfec00000, 0xfec001ff) AM_READWRITE(audio_ac93_r, audio_ac93_w) |
1421 | AM_RANGE(0xff000000, 0xff0 | |
1421 | AM_RANGE(0xff000000, 0xff0fffff) AM_ROM AM_REGION("bios", 0) AM_MIRROR(0x00f80000) | |
1422 | 1422 | ADDRESS_MAP_END |
1423 | 1423 | |
1424 | 1424 | ADDRESS_MAP_START(xbox_base_map_io, AS_IO, 32, xbox_base_state) |
r249189 | r249190 | |
---|---|---|
342 | 342 | atombb // 1979 Acorn Atom |
343 | 343 | //prophet2 |
344 | 344 | bbca // 1981 BBC Micro Model A |
345 | bbcb // 1981 BBC Micro Model B | |
345 | bbcb // 1981 BBC Micro Model B w/8271 FDC | |
346 | 346 | bbcb_de // 1981 BBC Micro Model B (German) |
347 | bbcb_us // 198 | |
347 | bbcb_us // 1983 BBC Micro Model B (US) | |
348 | 348 | electron // 1983 Acorn Electron |
349 | bbcb1770 // 1985 BBC Micro Model B w/1770 FDC | |
349 | 350 | bbcbp // 1985 BBC Micro Model B+ 64K |
350 | 351 | bbcbp128 // 1985 BBC Micro Model B+ 128K |
352 | abc110 // 1985 ABC 110 | |
353 | abc210 // 1985 ABC 210/Cambridge Workstation | |
354 | abc310 // 1985 ABC 310 | |
355 | reutapm // 1985 Reuters APM Board | |
351 | 356 | bbcm // 1986 BBC Master 128 |
352 | 357 | bbcmt // 1986 BBC Master Turbo |
353 | 358 | bbcmaiv // 1986 BBC Master AIV |
r249189 | r249190 | |
355 | 360 | bbcm512 // 1986 BBC Master 512 |
356 | 361 | bbcmarm // 1986 ARM Evaluation System |
357 | 362 | bbcmc // 1986 BBC Master Compact |
358 | bbcmc_ar // 1986 BBC Master Comapact (Arabic) | |
363 | bbcmc_ar // 1986 BBC Master Compact (Arabic) | |
364 | pro128s // 1987 Olivetti Prodest PC 128S | |
359 | 365 | bbcbc // 1985 BBC Bridge Companion |
360 | 366 | a310 // 1988 Acorn Archimedes 310 |
361 | 367 | a3010 // 1988 Acorn Archimedes 3010 |
r249189 | r249190 | |
---|---|---|
1240 | 1240 | } |
1241 | 1241 | } |
1242 | 1242 | |
1243 | inline UINT8 *nv2a_renderer::read_pixel(int x, int y, UINT32 c[4]) | |
1244 | { | |
1245 | UINT32 offset; | |
1246 | UINT32 color; | |
1247 | UINT32 *addr; | |
1248 | UINT16 *addr16; | |
1249 | UINT8 *addr8; | |
1250 | ||
1251 | if (type_rendertarget == SWIZZLED) | |
1252 | offset = (dilated0[dilate_rendertarget][x] + dilated1[dilate_rendertarget][y]) * bytespixel_rendertarget; | |
1253 | else // type_rendertarget == LINEAR*/ | |
1254 | offset = pitch_rendertarget * y + x * bytespixel_rendertarget; | |
1255 | switch (colorformat_rendertarget) { | |
1256 | case NV2A_COLOR_FORMAT_R5G6B5: | |
1257 | addr16 = (UINT16 *)((UINT8 *)rendertarget + offset); | |
1258 | color = *addr16; | |
1259 | c[3] = 0xff; | |
1260 | c[2] = pal5bit((color & 0xf800) >> 11); | |
1261 | c[1] = pal6bit((color & 0x07e0) >> 5); | |
1262 | c[0] = pal5bit(color & 0x1f); | |
1263 | return (UINT8 *)addr16; | |
1264 | case NV2A_COLOR_FORMAT_X8R8G8B8: | |
1265 | addr = (UINT32 *)((UINT8 *)rendertarget + offset); | |
1266 | color = *addr; | |
1267 | ||
1268 | c[3] = 0xff; | |
1269 | c[2] = (color >> 16) & 255; | |
1270 | c[1] = (color >> 8) & 255; | |
1271 | c[0] = color & 255; | |
1272 | return (UINT8 *)addr; | |
1273 | case NV2A_COLOR_FORMAT_A8R8G8B8: | |
1274 | addr = (UINT32 *)((UINT8 *)rendertarget + offset); | |
1275 | color = *addr; | |
1276 | c[3] = color >> 24; | |
1277 | c[2] = (color >> 16) & 255; | |
1278 | c[1] = (color >> 8) & 255; | |
1279 | c[0] = color & 255; | |
1280 | return (UINT8 *)addr; | |
1281 | case NV2A_COLOR_FORMAT_B8: | |
1282 | addr8 = (UINT8 *)rendertarget + offset; | |
1283 | c[0] = *addr8; | |
1284 | c[1] = c[2] = 0; | |
1285 | c[3] = 0xff; | |
1286 | return addr8; | |
1287 | } | |
1288 | return NULL; | |
1289 | } | |
1290 | ||
1243 | 1291 | void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth) |
1244 | 1292 | { |
1245 | UINT32 *addr, *daddr; | |
1246 | UINT32 fbcolor, deptsten; | |
1293 | UINT8 *addr; | |
1294 | UINT32 *daddr32; | |
1295 | UINT16 *daddr16; | |
1296 | UINT32 deptsten; | |
1247 | 1297 | UINT32 c[4], fb[4], s[4], d[4], cc[4]; |
1248 | 1298 | UINT32 dep, sten, stenc, stenv; |
1249 | 1299 | bool stencil_passed; |
1250 | 1300 | bool depth_passed; |
1251 | 1301 | |
1252 | if (type_rendertarget == SWIZZLED) | |
1253 | addr = rendertarget + (dilated0[dilate_rendertarget][x] + dilated1[dilate_rendertarget][y]); | |
1254 | else // type_rendertarget == LINEAR*/ | |
1255 | addr = rendertarget + (pitch_rendertarget / 4)*y + x; | |
1256 | fbcolor = 0; | |
1302 | fb[3] = fb[2] = fb[1] = fb[0] = 0; | |
1303 | addr = NULL; | |
1257 | 1304 | if (color_mask != 0) |
1258 | fbcolor = *addr; | |
1259 | daddr=depthbuffer + (pitch_depthbuffer / 4)*y + x; | |
1260 | deptsten = *daddr; | |
1305 | addr = read_pixel(x, y, fb); | |
1306 | if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) { | |
1307 | daddr32 = depthbuffer + (pitch_depthbuffer / 4) * y + x; | |
1308 | deptsten = *daddr32; | |
1309 | dep = deptsten >> 8; | |
1310 | sten = deptsten & 255; | |
1311 | daddr16 = NULL; | |
1312 | } | |
1313 | else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) { | |
1314 | daddr16 = (UINT16 *)depthbuffer + (pitch_depthbuffer / 2) * y + x; | |
1315 | deptsten = *daddr16; | |
1316 | dep = (deptsten << 8) | 0xff; | |
1317 | sten = 0; | |
1318 | daddr32 = NULL; | |
1319 | } | |
1320 | else { | |
1321 | daddr32 = NULL; | |
1322 | daddr16 = NULL; | |
1323 | dep = 0xffffff; | |
1324 | sten = 0; | |
1325 | } | |
1326 | if (depth > 0xffffff) | |
1327 | depth = 0xffffff; | |
1261 | 1328 | c[3] = color >> 24; |
1262 | 1329 | c[2] = (color >> 16) & 255; |
1263 | 1330 | c[1] = (color >> 8) & 255; |
1264 | 1331 | c[0] = color & 255; |
1265 | fb[3] = fbcolor >> 24; | |
1266 | fb[2] = (fbcolor >> 16) & 255; | |
1267 | fb[1] = (fbcolor >> 8) & 255; | |
1268 | fb[0] = fbcolor & 255; | |
1269 | 1332 | cc[3] = blend_color >> 24; |
1270 | 1333 | cc[2] = (blend_color >> 16) & 255; |
1271 | 1334 | cc[1] = (blend_color >> 8) & 255; |
1272 | 1335 | cc[0] = blend_color & 255; |
1273 | dep = deptsten >> 8; | |
1274 | sten = deptsten & 255; | |
1275 | if (depth > 0xffffff) | |
1276 | depth = 0xffffff; | |
1277 | if (depth & 0x80000000) | |
1278 | depth = 0; | |
1279 | 1336 | // ownership test and scissor test not done |
1280 | 1337 | // alpha test |
1281 | 1338 | if (alpha_test_enabled) { |
r249189 | r249190 | |
1383 | 1440 | sten = 255; |
1384 | 1441 | break; |
1385 | 1442 | } |
1386 | deptsten = (dep << 8) | sten; | |
1387 | *daddr = deptsten; | |
1443 | if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) { | |
1444 | deptsten = (dep << 8) | sten; | |
1445 | *daddr32 = deptsten; | |
1446 | } | |
1447 | else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) { | |
1448 | deptsten = dep >> 8; | |
1449 | *daddr16 = (UINT16)deptsten; | |
1450 | } | |
1388 | 1451 | return; |
1389 | 1452 | } |
1390 | 1453 | } |
r249189 | r249190 | |
1458 | 1521 | sten = 255; |
1459 | 1522 | break; |
1460 | 1523 | } |
1461 | deptsten = (dep << 8) | sten; | |
1462 | *daddr = deptsten; | |
1524 | if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) { | |
1525 | deptsten = (dep << 8) | sten; | |
1526 | *daddr32 = deptsten; | |
1527 | } | |
1528 | else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) { | |
1529 | deptsten = dep >> 8; | |
1530 | *daddr16 = (UINT16)deptsten; | |
1531 | } | |
1463 | 1532 | return; |
1464 | 1533 | } |
1465 | 1534 | switch (stencil_op_zpass) { |
r249189 | r249190 | |
1782 | 1851 | } |
1783 | 1852 | } |
1784 | 1853 | if (color_mask != 0) { |
1785 | UINT32 | |
1854 | UINT32 ct,ft,w; | |
1786 | 1855 | |
1787 | fbcolor_tmp = (c[3] << 24) | (c[2] << 16) | (c[1] << 8) | c[0]; | |
1788 | *addr = (fbcolor & ~color_mask) | (fbcolor_tmp & color_mask); | |
1856 | ct = (c[3] << 24) | (c[2] << 16) | (c[1] << 8) | c[0]; | |
1857 | ft = (fb[3] << 24) | (fb[2] << 16) | (fb[1] << 8) | fb[0]; | |
1858 | w = (ft & ~color_mask) | (ct & color_mask); | |
1859 | switch (colorformat_rendertarget) { | |
1860 | case NV2A_COLOR_FORMAT_R5G6B5: | |
1861 | w = ((w >> 8) & 0xf800) + ((w >> 5) & 0x7e0) + ((w >> 3) & 0x1f); | |
1862 | *((UINT16 *)addr) = (UINT16)w; | |
1863 | break; | |
1864 | case NV2A_COLOR_FORMAT_X8R8G8B8: | |
1865 | *((UINT32 *)addr) = w; | |
1866 | break; | |
1867 | case NV2A_COLOR_FORMAT_A8R8G8B8: | |
1868 | *((UINT32 *)addr) = w; | |
1869 | break; | |
1870 | case NV2A_COLOR_FORMAT_B8: | |
1871 | *addr = (UINT8)w; | |
1872 | break; | |
1873 | } | |
1789 | 1874 | } |
1790 | 1875 | if (depth_write_enabled) |
1791 | 1876 | dep = depth; |
1792 | deptsten = (dep << 8) | sten; | |
1793 | *daddr = deptsten; | |
1877 | if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) { | |
1878 | deptsten = (dep << 8) | sten; | |
1879 | *daddr32 = deptsten; | |
1880 | } | |
1881 | else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) { | |
1882 | deptsten = dep >> 8; | |
1883 | *daddr16 = (UINT16)deptsten; | |
1884 | } | |
1794 | 1885 | } |
1795 | 1886 | |
1796 | 1887 | void nv2a_renderer::render_color(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid) |
r249189 | r249190 | |
2238 | 2329 | } |
2239 | 2330 | } |
2240 | 2331 | |
2332 | void nv2a_renderer::clear_depth_buffer(int what, UINT32 value) | |
2333 | { | |
2334 | int m; | |
2335 | ||
2336 | m = antialias_control; | |
2337 | if (antialiasing_rendertarget != 0) | |
2338 | m = 2; | |
2339 | else | |
2340 | m = 1; | |
2341 | if (what == 3) { | |
2342 | if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) { | |
2343 | UINT32 *p, *pl; | |
2344 | int x, y; | |
2345 | ||
2346 | pl = (UINT32 *)depthbuffer; | |
2347 | for (y = (limits_rendertarget.bottom() + 1) * m; y != 0; y--) { | |
2348 | p = pl; | |
2349 | for (x = (limits_rendertarget.right() + 1) * m; x != 0; x--) { | |
2350 | *p = value; | |
2351 | p++; | |
2352 | } | |
2353 | pl = pl + pitch_rendertarget / 4; | |
2354 | } | |
2355 | } | |
2356 | else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) { | |
2357 | UINT16 *p, *pl; | |
2358 | int x, y; | |
2359 | ||
2360 | pl = (UINT16 *)depthbuffer; | |
2361 | for (y = (limits_rendertarget.bottom() + 1) * m; y != 0; y--) { | |
2362 | p = pl; | |
2363 | for (x = (limits_rendertarget.right() + 1) * m; x != 0; x--) { | |
2364 | *p = (UINT16)value; | |
2365 | p++; | |
2366 | } | |
2367 | pl = pl + pitch_rendertarget / 2; | |
2368 | } | |
2369 | } | |
2370 | } | |
2371 | else { | |
2372 | if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) { | |
2373 | UINT32 mask; | |
2374 | UINT32 *p, *pl; | |
2375 | int x, y; | |
2376 | ||
2377 | if ((what & 0x03) == 2) | |
2378 | mask = 0x000000ff; | |
2379 | else | |
2380 | mask = 0xffffff00; | |
2381 | value = value & mask; | |
2382 | pl = depthbuffer; | |
2383 | for (y = (limits_rendertarget.bottom() + 1) * m; y != 0; y--) { | |
2384 | p = pl; | |
2385 | for (x = (limits_rendertarget.right() + 1) * m; x != 0; x--) { | |
2386 | *p = (*p & ~mask) | value; | |
2387 | p++; | |
2388 | } | |
2389 | pl = pl + pitch_rendertarget / 4; | |
2390 | } | |
2391 | } | |
2392 | else if ((depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) && (what == 1)) { | |
2393 | UINT16 *p, *pl; | |
2394 | int x, y; | |
2395 | ||
2396 | pl = (UINT16 *)depthbuffer; | |
2397 | for (y = (limits_rendertarget.bottom() + 1) * m; y != 0; y--) { | |
2398 | p = pl; | |
2399 | for (x = (limits_rendertarget.right() + 1) * m; x != 0; x--) { | |
2400 | *p = (UINT16)value; | |
2401 | p++; | |
2402 | } | |
2403 | pl = pl + pitch_rendertarget / 2; | |
2404 | } | |
2405 | } | |
2406 | } | |
2407 | } | |
2408 | ||
2241 | 2409 | int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UINT32 subchannel, UINT32 method, UINT32 address, int &countlen) |
2242 | 2410 | { |
2243 | 2411 | UINT32 maddress; |
r249189 | r249190 | |
2359 | 2527 | convert_vertices_poly(vert, xy, 4); |
2360 | 2528 | render_polygon<4>(limits_rendertarget, renderspans, 4 + 4 * 2, xy); // 4 rgba, 4 texture units 2 uv |
2361 | 2529 | } |
2530 | wait(); | |
2362 | 2531 | } |
2363 | 2532 | else if (type == nv2a_renderer::TRIANGLE_FAN) { |
2364 | 2533 | if ((countlen * mult + indexesleft_count) >= 3) { |
r249189 | r249190 | |
2405 | 2574 | convert_vertices_poly(vert, xy, 3); |
2406 | 2575 | render_triangle(limits_rendertarget, renderspans, 4 + 4 * 2, xy[0], xy[1], xy[2]); // 4 rgba, 4 texture units 2 uv |
2407 | 2576 | } |
2577 | wait(); | |
2408 | 2578 | } |
2409 | 2579 | else if (type == nv2a_renderer::TRIANGLE_STRIP) { |
2410 | 2580 | if ((countlen * mult + indexesleft_count) >= 3) { |
r249189 | r249190 | |
2432 | 2602 | xy[(n + 2) & 3].y = xy[(n + 2) & 3].y + 1.0f; |
2433 | 2603 | render_triangle(limits_rendertarget, renderspans, 4 + 4 * 2, xy[((n & 1) + n) & 3], xy[((~n & 1) + n) & 3], xy[(2 + n) & 3]); |
2434 | 2604 | } |
2605 | wait(); | |
2435 | 2606 | } |
2436 | 2607 | } |
2437 | 2608 | else { |
r249189 | r249190 | |
2519 | 2690 | address = address + c * 3; |
2520 | 2691 | render_triangle(limits_rendertarget, renderspans, 4 + 4 * 2, xy[0], xy[1], xy[2]); // 4 rgba, 4 texture units 2 uv |
2521 | 2692 | } |
2693 | wait(); | |
2522 | 2694 | } |
2523 | 2695 | else if (type == nv2a_renderer::TRIANGLE_STRIP) { |
2524 | 2696 | vertex_nv vert[4]; |
r249189 | r249190 | |
2666 | 2838 | space.write_dword(base + offset, data); |
2667 | 2839 | countlen--; |
2668 | 2840 | } |
2841 | if (maddress == 0x1d7c) { | |
2842 | antialias_control = data; | |
2843 | countlen--; | |
2844 | } | |
2669 | 2845 | if (maddress == 0x1d98) { |
2670 | 2846 | countlen--; |
2671 | 2847 | } |
r249189 | r249190 | |
2675 | 2851 | if (maddress == 0x1d94) { |
2676 | 2852 | int m; |
2677 | 2853 | |
2678 | m = | |
2854 | m = antialias_control; | |
2679 | 2855 | if (antialiasing_rendertarget != 0) |
2680 | 2856 | m = 2; |
2681 | 2857 | else |
r249189 | r249190 | |
2683 | 2859 | // possible buffers: color, depth, stencil |
2684 | 2860 | // clear framebuffer |
2685 | 2861 | if (data & 0xf0) { |
2686 | bitmap_rgb32 bm(rendertarget, (limits_rendertarget.right() + 1) * m, (limits_rendertarget.bottom() + 1) * m, pitch_rendertarget / 4); // why *2 ? | |
2687 | // clear colors | |
2688 | UINT32 color = channel[chanel][subchannel].object.method[0x1d90 / 4]; | |
2689 | bm.fill(color); | |
2862 | if (bytespixel_rendertarget == 4) { | |
2863 | bitmap_rgb32 bm(rendertarget, (limits_rendertarget.right() + 1) * m, (limits_rendertarget.bottom() + 1) * m, pitch_rendertarget / 4); | |
2864 | ||
2865 | UINT32 color = channel[chanel][subchannel].object.method[0x1d90 / 4]; | |
2866 | bm.fill(color); | |
2867 | } | |
2868 | else if (bytespixel_rendertarget == 2) { | |
2869 | bitmap_ind16 bm((UINT16 *)rendertarget, (limits_rendertarget.right() + 1) * m, (limits_rendertarget.bottom() + 1) * m, pitch_rendertarget / 2); | |
2870 | ||
2871 | UINT16 color = channel[chanel][subchannel].object.method[0x1d90 / 4] & 0xffff; | |
2872 | ||
2873 | bm.fill(color); | |
2874 | } | |
2875 | else if (bytespixel_rendertarget == 1) { | |
2876 | UINT8 color = channel[chanel][subchannel].object.method[0x1d90 / 4] & 0xff; | |
2877 | ||
2878 | memset(rendertarget, color, pitch_rendertarget*(limits_rendertarget.bottom() + 1) * m); | |
2879 | } | |
2690 | 2880 | #ifdef LOG_NV2A |
2691 | 2881 | printf("clearscreen\n\r"); |
2692 | 2882 | #endif |
2693 | 2883 | } |
2694 | if ((data & 0x03) == 3) { | |
2695 | bitmap_rgb32 bm(depthbuffer, (limits_rendertarget.right() + 1) * m, (limits_rendertarget.bottom() + 1) * m, pitch_rendertarget / 4); // why *2 ? | |
2696 | // clear zbuffer and stencil | |
2697 | UINT32 depth_stencil = channel[chanel][subchannel].object.method[0x1d8c / 4]; | |
2698 | bm.fill(depth_stencil); | |
2699 | } | |
2700 | else if (((data & 0x03) == 1) || ((data & 0x03) == 2)) | |
2701 | logerror("Unsupported clear method parameter %d\n\r", data & 0x03); | |
2884 | clear_depth_buffer(data & 3, channel[chanel][subchannel].object.method[0x1d8c / 4]); | |
2702 | 2885 | countlen--; |
2703 | 2886 | } |
2704 | 2887 | if (maddress == 0x0200) { |
r249189 | r249190 | |
2720 | 2903 | log2width_rendertarget = (data >> 16) & 255; |
2721 | 2904 | antialiasing_rendertarget = (data >> 12) & 15; |
2722 | 2905 | type_rendertarget = (data >> 8) & 15; |
2723 | depth_rendertarget = (data >> 4) & 15; | |
2724 | color_rendertarget = (data >> 0) & 15;; | |
2906 | depthformat_rendertarget = (data >> 4) & 15; | |
2907 | colorformat_rendertarget = (data >> 0) & 15; | |
2908 | switch (colorformat_rendertarget) { | |
2909 | case NV2A_COLOR_FORMAT_R5G6B5: | |
2910 | bytespixel_rendertarget = 2; | |
2911 | break; | |
2912 | case NV2A_COLOR_FORMAT_X8R8G8B8: | |
2913 | case NV2A_COLOR_FORMAT_A8R8G8B8: | |
2914 | bytespixel_rendertarget = 4; | |
2915 | break; | |
2916 | case NV2A_COLOR_FORMAT_B8: | |
2917 | bytespixel_rendertarget = 1; | |
2918 | break; | |
2919 | default: | |
2920 | #ifdef LOG_NV2A | |
2921 | printf("Unknown render target color format %d\n\r", colorformat_rendertarget); | |
2922 | #endif | |
2923 | bytespixel_rendertarget = 4; | |
2924 | break; | |
2925 | } | |
2725 | 2926 | dilate_rendertarget = dilatechose[(log2width_rendertarget << 4) + log2height_rendertarget]; |
2726 | 2927 | } |
2727 | 2928 | if (maddress == 0x020c) { |
r249189 | r249190 | |
---|---|---|
166 | 166 | // pppppppp ff--atttt tttttttt tttttttt |
167 | 167 | #define HNG64_GET_TILE_INFO \ |
168 | 168 | { \ |
169 | UINT16 tilemapinfo = (m_videoregs[reg]>>shift)&0xffff; \ | |
169 | UINT16 tilemapinfo = (m_videoregs[reg]>>shift)&0xffff; \ | |
170 | 170 | int tileno,pal, flip; \ |
171 | \ | |
172 | tileno = m_videoram[tile_index+(offset/4)]; \ | |
173 | \ | |
171 | \ | |
172 | tileno = m_videoram[tile_index+(offset/4)]; \ | |
173 | \ | |
174 | 174 | pal = (tileno&0xff000000)>>24; \ |
175 | 175 | flip =(tileno&0x00c00000)>>22; \ |
176 | | |
176 | \ | |
177 | 177 | if (tileno&0x200000) \ |
178 | 178 | { \ |
179 | tileno = (tileno & m_videoregs[0x0b]) | m_videoregs[0x0c]; \ | |
179 | tileno = (tileno & m_videoregs[0x0b]) | m_videoregs[0x0c]; \ | |
180 | 180 | } \ |
181 | | |
181 | \ | |
182 | 182 | tileno &= 0x1fffff; \ |
183 | | |
183 | \ | |
184 | 184 | if (size==0) \ |
185 | 185 | { \ |
186 | 186 | if (tilemapinfo&0x400) \ |
187 | 187 | { \ |
188 | SET_TILE_INFO_MEMBER(1,tileno>>1,pal>>4,TILE_FLIPYX(flip)); | |
188 | SET_TILE_INFO_MEMBER(1,tileno>>1,pal>>4,TILE_FLIPYX(flip)); \ | |
189 | 189 | } \ |
190 | 190 | else \ |
191 | 191 | { \ |
192 | SET_TILE_INFO_MEMBER(0,tileno, pal,TILE_FLIPYX(flip)); | |
192 | SET_TILE_INFO_MEMBER(0,tileno, pal,TILE_FLIPYX(flip)); \ | |
193 | 193 | } \ |
194 | 194 | } \ |
195 | 195 | else \ |
196 | 196 | { \ |
197 | 197 | if (tilemapinfo&0x400) \ |
198 | 198 | { \ |
199 | SET_TILE_INFO_MEMBER(3,tileno>>3,pal>>4,TILE_FLIPYX(flip)); | |
199 | SET_TILE_INFO_MEMBER(3,tileno>>3,pal>>4,TILE_FLIPYX(flip)); \ | |
200 | 200 | } \ |
201 | 201 | else \ |
202 | 202 | { \ |
203 | SET_TILE_INFO_MEMBER(2,tileno>>2, pal,TILE_FLIPYX(flip)); | |
203 | SET_TILE_INFO_MEMBER(2,tileno>>2, pal,TILE_FLIPYX(flip)); \ | |
204 | 204 | } \ |
205 | 205 | } \ |
206 | 206 | } |
207 | ||
207 | 208 | TILE_GET_INFO_MEMBER(hng64_state::get_hng64_tile0_8x8_info) |
208 | 209 | { |
209 | 210 | int offset = 0x00000; |
r249189 | r249190 | |
384 | 385 | -------------------------------------------------*/ |
385 | 386 | |
386 | 387 | #define HNG64_ROZ_PLOT_PIXEL(INPUT_VAL) \ |
387 | do { \ | |
388 | if (blit->drawformat == HNG64_TILEMAP_NORMAL) \ | |
389 | *(UINT32 *)dest = clut[INPUT_VAL]; \ | |
390 | else if (blit->drawformat == HNG64_TILEMAP_ADDITIVE) \ | |
388 | do { \ | |
389 | if (blit->drawformat == HNG64_TILEMAP_NORMAL) \ | |
390 | *(UINT32 *)dest = clut[INPUT_VAL]; \ | |
391 | else if (blit->drawformat == HNG64_TILEMAP_ADDITIVE) \ | |
391 | 392 | *(UINT32 *)dest = alpha_additive_r32(*(UINT32 *)dest, clut[INPUT_VAL], alpha); \ |
392 | else if (blit->drawformat == HNG64_TILEMAP_ALPHA) \ | |
393 | *(UINT32 *)dest = alpha_blend_r32(*(UINT32 *)dest, clut[INPUT_VAL], alpha); \ | |
393 | else if (blit->drawformat == HNG64_TILEMAP_ALPHA) \ | |
394 | *(UINT32 *)dest = alpha_blend_r32(*(UINT32 *)dest, clut[INPUT_VAL], alpha); \ | |
394 | 395 | } while (0) |
395 | 396 | |
396 | 397 | void hng64_state::hng64_tilemap_draw_roz_core(screen_device &screen, tilemap_t *tmap, const blit_parameters *blit, |
r249189 | r249190 | |
1122 | 1123 | // Blit the color buffer into the primary bitmap |
1123 | 1124 | for (y = cliprect.min_y; y <= cliprect.max_y; y++) |
1124 | 1125 | { |
1125 | UINT32 *src = &m_colorBuffer3d | |
1126 | UINT32 *src = &m_poly_renderer->colorBuffer3d().pix32(y, cliprect.min_x); | |
1126 | 1127 | UINT32 *dst = &bitmap.pix32(y, cliprect.min_x); |
1127 | 1128 | |
1128 | 1129 | for (x = cliprect.min_x; x <= cliprect.max_x; x++) |
r249189 | r249190 | |
1234 | 1235 | |
1235 | 1236 | void hng64_state::video_start() |
1236 | 1237 | { |
1237 | const rectangle &visarea = m_screen->visible_area(); | |
1238 | ||
1239 | 1238 | m_old_animmask = -1; |
1240 | 1239 | m_old_animbits = -1; |
1241 | 1240 | m_old_tileflags[0] = -1; |
r249189 | r249190 | |
1269 | 1268 | // Debug switch, turn on / off additive blending on a per-tilemap basis |
1270 | 1269 | m_additive_tilemap_debug = 0; |
1271 | 1270 | |
1272 | // 3d Buffer Allocation | |
1273 | m_depthBuffer3d = auto_alloc_array(machine(), float, (visarea.max_x + 1)*(visarea.max_y + 1)); | |
1274 | m_colorBuffer3d = auto_alloc_array(machine(), UINT32, (visarea.max_x + 1)*(visarea.max_y + 1)); | |
1271 | // Rasterizer creation | |
1272 | m_poly_renderer = auto_alloc(machine(), hng64_poly_renderer(*this)); | |
1275 | 1273 | |
1276 | ||
1274 | // 3d information | |
1277 | 1275 | m_dl = auto_alloc_array(machine(), UINT16, 0x200/2); |
1278 | 1276 | polys.resize(1024*5); |
1279 | 1277 |
r249189 | r249190 | |
---|---|---|
1 | 1 | // license:LGPL-2.1+ |
2 | 2 | // copyright-holders:David Haywood, Angelo Salese, ElSemi, Andrew Gardner, Andrew Zaferakis |
3 | /* Hyper NeoGeo 64 - 3D bits */ | |
4 | 3 | |
5 | // todo, use poly.c | |
6 | ||
7 | 4 | #include "includes/hng64.h" |
8 | 5 | |
6 | ///////////////////////////////// | |
7 | /// Hyper NeoGeo 64 - 3D bits /// | |
8 | ///////////////////////////////// | |
9 | 9 | |
10 | 10 | |
11 | // Polygon rasterizer interface | |
12 | hng64_poly_renderer::hng64_poly_renderer(hng64_state& state) | |
13 | : poly_manager<float, hng64_poly_data, 7, HNG64_MAX_POLYGONS>(state.machine()) | |
14 | , m_state(state) | |
15 | , m_colorBuffer3d(state.m_screen->visible_area().width(), state.m_screen->visible_area().height()) | |
16 | { | |
17 | const INT32 bufferSize = state.m_screen->visible_area().width() * state.m_screen->visible_area().height(); | |
18 | m_depthBuffer3d = auto_alloc_array(state.machine(), float, bufferSize); | |
19 | } | |
20 | ||
21 | ||
22 | ||
11 | 23 | // Hardware calls these '3d buffers' |
12 | 24 | // They're only read during the startup check of fatfurwa. Z-buffer memory? Front buffer, back buffer? |
13 | 25 | // They're definitely mirrored in the startup test, according to ElSemi |
r249189 | r249190 | |
54 | 66 | for(int packetStart=0;packetStart<0x200;packetStart+=32) |
55 | 67 | { |
56 | 68 | // Send it off to the 3d subsystem. |
57 | hng64_command3d( | |
69 | hng64_command3d(&m_dl[packetStart/2]); | |
58 | 70 | } |
59 | 71 | |
60 | 72 | machine().scheduler().timer_set(m_maincpu->cycles_to_attotime(0x200*8), timer_expired_delegate(FUNC(hng64_state::hng64_3dfifo_processed),this)); |
61 | 73 | g_profiler.stop(); |
62 | 74 | } |
63 | 75 | |
64 | TIMER_CALLBACK_MEMBER(hng64_state::hng64_3dfifo_processed | |
76 | TIMER_CALLBACK_MEMBER(hng64_state::hng64_3dfifo_processed) | |
65 | 77 | { |
66 | 78 | // ... |
67 | 79 | m_set_irq(0x0008); |
r249189 | r249190 | |
584 | 596 | polys[*numPolys].vert[m].texCoords[3] = 1.0f; |
585 | 597 | |
586 | 598 | polys[*numPolys].vert[m].normal[0] = uToF(chunkOffset[9 + (9*m)]); |
587 | polys[*numPolys].vert[m].normal[1] = uToF(chunkOffset[10 + (9*m)] ); | |
588 | polys[*numPolys].vert[m].normal[2] = uToF(chunkOffset[11 + (9*m)] ); | |
599 | polys[*numPolys].vert[m].normal[1] = uToF(chunkOffset[10 + (9*m)]); | |
600 | polys[*numPolys].vert[m].normal[2] = uToF(chunkOffset[11 + (9*m)]); | |
589 | 601 | polys[*numPolys].vert[m].normal[3] = 0.0f; |
590 | 602 | } |
591 | 603 | |
r249189 | r249190 | |
900 | 912 | if (packet[2] == 0x0003 && packet[3] == 0x8f37 && m_mcu_type == SHOOT_MCU) |
901 | 913 | break; |
902 | 914 | |
903 | recoverPolygonBlock( | |
915 | recoverPolygonBlock(packet, &numPolys); | |
904 | 916 | break; |
905 | 917 | |
906 | 918 | case 0x0102: // Geometry with only translation |
r249189 | r249190 | |
920 | 932 | miniPacket[7] = 0x7fff; |
921 | 933 | miniPacket[11] = 0x7fff; |
922 | 934 | miniPacket[15] = 0x7fff; |
923 | recoverPolygonBlock( | |
935 | recoverPolygonBlock(miniPacket, &numPolys); | |
924 | 936 | |
925 | 937 | memset(miniPacket, 0, sizeof(UINT16)*16); |
926 | 938 | for (int i = 0; i < 7; i++) miniPacket[i] = packet[i+8]; |
r249189 | r249190 | |
928 | 940 | miniPacket[7] = 0x7fff; |
929 | 941 | miniPacket[11] = 0x7fff; |
930 | 942 | miniPacket[15] = 0x7fff; |
931 | recoverPolygonBlock( | |
943 | recoverPolygonBlock(miniPacket, &numPolys); | |
932 | 944 | break; |
933 | 945 | |
934 | 946 | case 0x1000: // Unknown: Some sort of global flags? |
r249189 | r249190 | |
949 | 961 | { |
950 | 962 | if (polys[i].visible) |
951 | 963 | { |
952 | drawShaded( | |
964 | m_poly_renderer->drawShaded(&polys[i]); | |
953 | 965 | } |
954 | 966 | } |
967 | m_poly_renderer->wait(); | |
955 | 968 | } |
956 | 969 | |
957 | 970 | void hng64_state::clear3d() |
r249189 | r249190 | |
963 | 976 | // Reset the buffers... |
964 | 977 | for (i = 0; i < (visarea.max_x)*(visarea.max_y); i++) |
965 | 978 | { |
966 | m_depthBuffer3d[i] = 100.0f; | |
967 | m_colorBuffer3d[i] = rgb_t(0, 0, 0, 0); | |
979 | m_poly_renderer->depthBuffer3d()[i] = 100.0f; | |
968 | 980 | } |
981 | ||
982 | // Clear the 3d rasterizer buffer | |
983 | m_poly_renderer->colorBuffer3d().fill(0x00000000, m_screen->visible_area()); | |
969 | 984 | |
970 | 985 | // Set some matrices to the identity... |
971 | 986 | setIdentity(m_projectionMatrix); |
r249189 | r249190 | |
994 | 1009 | ///////////////////// |
995 | 1010 | |
996 | 1011 | /* 4x4 matrix multiplication */ |
997 | void hng64_state::matmul4(float *product, const float *a, const float *b | |
1012 | void hng64_state::matmul4(float *product, const float *a, const float *b) | |
998 | 1013 | { |
999 | 1014 | int i; |
1000 | 1015 | for (i = 0; i < 4; i++) |
r249189 | r249190 | |
1072 | 1087 | // POLYGON CLIPPING CODE // |
1073 | 1088 | /////////////////////////// |
1074 | 1089 | |
1075 | /////////////////////////////////////////////////////////////////////////////////// | |
1076 | // The remainder of the code in this file is heavily // | |
1077 | // influenced by, and sometimes copied verbatim from Andrew Zaferakis' SoftGL // | |
1078 | // rasterizing system. // | |
1079 | // // | |
1080 | // Andrew granted permission for its use in MAME in October of 2004. // | |
1081 | /////////////////////////////////////////////////////////////////////////////////// | |
1082 | ||
1083 | ||
1084 | ||
1085 | 1090 | int hng64_state::Inside(struct polyVert *v, int plane) |
1086 | 1091 | { |
1087 | 1092 | switch(plane) |
r249189 | r249190 | |
1158 | 1163 | Ol[2] = Il0[2] + (Il1[2] - Il0[2]) * t; |
1159 | 1164 | } |
1160 | 1165 | |
1166 | ////////////////////////////////////////////////////////////////////////// | |
1167 | // Clip against the volumes defined by the homogeneous clip coordinates // | |
1168 | ////////////////////////////////////////////////////////////////////////// | |
1169 | ||
1161 | 1170 | void hng64_state::performFrustumClip(struct polygon *p) |
1162 | 1171 | { |
1163 | int i, j, k; | |
1164 | ////////////////////////////////////////////////////////////////////////// | |
1165 | // Clip against the volumes defined by the homogeneous clip coordinates // | |
1166 | ////////////////////////////////////////////////////////////////////////// | |
1172 | polyVert *v0; | |
1173 | polyVert *v1; | |
1174 | polyVert *tv; | |
1167 | 1175 | |
1168 | struct polygon temp; | |
1169 | ||
1170 | struct polyVert *v0; | |
1171 | struct polyVert *v1; | |
1172 | struct polyVert *tv; | |
1173 | ||
1176 | polygon temp; | |
1174 | 1177 | temp.n = 0; |
1175 | 1178 | |
1176 | 1179 | // Skip near and far clipping planes ? |
1177 | for (j = 0; j <= HNG64_BOTTOM; j++) | |
1180 | for (int j = 0; j <= HNG64_BOTTOM; j++) | |
1178 | 1181 | { |
1179 | for (i = 0; i < p->n; i++) | |
1182 | for (int i = 0; i < p->n; i++) | |
1180 | 1183 | { |
1181 | k = (i+1) % p->n; // Index of next vertex | |
1184 | int k = (i+1) % p->n; // Index of next vertex | |
1182 | 1185 | |
1183 | 1186 | v0 = &p->vert[i]; |
1184 | 1187 | v1 = &p->vert[k]; |
r249189 | r249190 | |
1190 | 1193 | memcpy(tv, v1, sizeof(struct polyVert)); |
1191 | 1194 | temp.n++; |
1192 | 1195 | } |
1193 | ||
1194 | 1196 | else if (Inside(v0, j) && !Inside(v1, j)) // Edge goes from in to out... |
1195 | 1197 | { |
1196 | 1198 | Intersect(v0, v1, tv, j); |
1197 | 1199 | temp.n++; |
1198 | 1200 | } |
1199 | ||
1200 | 1201 | else if (!Inside(v0, j) && Inside(v1, j)) // Edge goes from out to in... |
1201 | 1202 | { |
1202 | 1203 | Intersect(v0, v1, tv, j); |
r249189 | r249190 | |
1207 | 1208 | |
1208 | 1209 | p->n = temp.n; |
1209 | 1210 | |
1210 | for (i = 0; i < temp.n; i++) | |
1211 | for (int i = 0; i < temp.n; i++) | |
1211 | 1212 | { |
1212 | 1213 | memcpy(&p->vert[i], &temp.vert[i], sizeof(struct polyVert)); |
1213 | 1214 | } |
r249189 | r249190 | |
1216 | 1217 | } |
1217 | 1218 | } |
1218 | 1219 | |
1219 | ||
1220 | ||
1221 | /*********************************************************************/ | |
1222 | /** FillSmoothTexPCHorizontalLine **/ | |
1223 | /** Input: Color Buffer (framebuffer), depth buffer, width and **/ | |
1224 | /** height of framebuffer, starting, and ending values **/ | |
1225 | /** for x and y, constant y. Fills horizontally with **/ | |
1226 | /** z,r,g,b interpolation. **/ | |
1227 | /** **/ | |
1228 | /** Output: none **/ | |
1229 | /*********************************************************************/ | |
1230 | inline void hng64_state::FillSmoothTexPCHorizontalLine( | |
1231 | const polygonRasterOptions& prOptions, | |
1232 | int x_start, int x_end, int y, float z_start, float z_delta, | |
1233 | float w_start, float w_delta, float r_start, float r_delta, | |
1234 | float g_start, float g_delta, float b_start, float b_delta, | |
1235 | float s_start, float s_delta, float t_start, float t_delta) | |
1220 | void hng64_poly_renderer::render_scanline(INT32 scanline, const extent_t& extent, const hng64_poly_data& renderData, int threadid) | |
1236 | 1221 | { |
1237 | float* db = &(m_depthBuffer3d[(y * m_screen->visible_area().max_x) + x_start]); | |
1238 | UINT32* cb = &(m_colorBuffer3d[(y * m_screen->visible_area().max_x) + x_start]); | |
1222 | // Pull the parameters out of the extent structure | |
1223 | float z = extent.param[0].start; | |
1224 | float w = extent.param[1].start; | |
1225 | float lightR = extent.param[2].start; | |
1226 | float lightG = extent.param[3].start; | |
1227 | float lightB = extent.param[4].start; | |
1228 | float s = extent.param[5].start; | |
1229 | float t = extent.param[6].start; | |
1230 | ||
1231 | const float dz = extent.param[0].dpdx; | |
1232 | const float dw = extent.param[1].dpdx; | |
1233 | const float dlightR = extent.param[2].dpdx; | |
1234 | const float dlightG = extent.param[3].dpdx; | |
1235 | const float dlightB = extent.param[4].dpdx; | |
1236 | const float ds = extent.param[5].dpdx; | |
1237 | const float dt = extent.param[6].dpdx; | |
1238 | ||
1239 | // Pointers to the pixel buffers | |
1240 | UINT32* colorBuffer = &m_colorBuffer3d.pix32(scanline, extent.startx); | |
1241 | float* depthBuffer = &m_depthBuffer3d[(scanline * m_state.m_screen->visible_area().width()) + extent.startx]; | |
1239 | 1242 | |
1240 | UINT8 paletteEntry = 0; | |
1241 | float t_coord, s_coord; | |
1242 | const UINT8 *gfx = m_texturerom; | |
1243 | const UINT8 *textureOffset = &gfx[prOptions.texIndex * 1024 * 1024]; | |
1243 | const UINT8 *textureOffset = &m_state.m_texturerom[renderData.texIndex * 1024 * 1024]; | |
1244 | ||
1245 | // Step over each pixel in the horizontal span | |
1246 | for(int x = extent.startx; x < extent.stopx; x++) | |
1247 | { | |
1248 | if (z < *depthBuffer) | |
1249 | { | |
1250 | // Translucency currently isn't an issue, so soldier on | |
1251 | *depthBuffer = z; | |
1244 | 1252 | |
1245 | for (; x_start <= x_end; x_start++) | |
1246 | { | |
1247 | if (z_start < (*db)) | |
1248 | { | |
1249 | // MULTIPLY BACK THROUGH BY W | |
1250 | t_coord = t_start / w_start; | |
1251 | s_coord = s_start / w_start; | |
1252 | ||
1253 | if ((prOptions.debugColor & 0xff000000) == 0x01000000) | |
1253 | // Multiply back through by w for everything that was interpolated perspective-correctly | |
1254 | const float sCorrect = s / w; | |
1255 | const float tCorrect = t / w; | |
1256 | const float rCorrect = lightR / w; | |
1257 | const float gCorrect = lightG / w; | |
1258 | const float bCorrect = lightB / w; | |
1259 | ||
1260 | if ((renderData.debugColor & 0xff000000) == 0x01000000) | |
1254 | 1261 | { |
1255 | // UV COLOR MODE | |
1256 | *cb = rgb_t(255, (UINT8)(s_coord*255.0f), (UINT8)(t_coord*255.0f), (UINT8)(0)); | |
1257 | *db = z_start; | |
1262 | // ST color mode | |
1263 | *colorBuffer = rgb_t(255, (UINT8)(sCorrect*255.0f), (UINT8)(tCorrect*255.0f), (UINT8)(0)); | |
1258 | 1264 | } |
1259 | else if (( | |
1265 | else if ((renderData.debugColor & 0xff000000) == 0x02000000) | |
1260 | 1266 | { |
1261 | // Lit | |
1262 | *cb = rgb_t(255, (UINT8)(r_start/w_start), (UINT8)(g_start/w_start), (UINT8)(b_start/w_start)); | |
1263 | *db = z_start; | |
1267 | // Lighting only | |
1268 | *colorBuffer = rgb_t(255, (UINT8)rCorrect, (UINT8)gCorrect, (UINT8)bCorrect); | |
1264 | 1269 | } |
1265 | else if (( | |
1270 | else if ((renderData.debugColor & 0xff000000) == 0xff000000) | |
1266 | 1271 | { |
1267 | // DEBUG COLOR MODE | |
1268 | *cb = prOptions.debugColor; | |
1269 | *db = z_start; | |
1272 | // Debug color mode | |
1273 | *colorBuffer = renderData.debugColor; | |
1270 | 1274 | } |
1271 | 1275 | else |
1272 | 1276 | { |
r249189 | r249190 | |
1274 | 1278 | float textureT = 0.0f; |
1275 | 1279 | |
1276 | 1280 | // Standard & Half-Res textures |
1277 | if ( | |
1281 | if (renderData.texType == 0x0) | |
1278 | 1282 | { |
1279 | textureS = s_coord * 1024.0f; | |
1280 | textureT = t_coord * 1024.0f; | |
1283 | textureS = sCorrect * 1024.0f; | |
1284 | textureT = tCorrect * 1024.0f; | |
1281 | 1285 | } |
1282 | else if ( | |
1286 | else if (renderData.texType == 0x1) | |
1283 | 1287 | { |
1284 | textureS = s_coord * 512.0f; | |
1285 | textureT = t_coord * 512.0f; | |
1288 | textureS = sCorrect * 512.0f; | |
1289 | textureT = tCorrect * 512.0f; | |
1286 | 1290 | } |
1287 | 1291 | |
1288 | // stuff in mode 1 here already looks good? | |
1289 | 1292 | // Small-Page textures |
1290 | if ( | |
1293 | if (renderData.texPageSmall == 2) | |
1291 | 1294 | { |
1292 | 1295 | textureT = fmod(textureT, 256.0f); |
1293 | 1296 | textureS = fmod(textureS, 256.0f); |
1294 | 1297 | |
1295 | textureT += (256.0f * (prOptions.texPageHorizOffset>>1)); | |
1296 | textureS += (256.0f * (prOptions.texPageVertOffset>>1)); | |
1298 | textureT += (256.0f * (renderData.texPageHorizOffset>>1)); | |
1299 | textureS += (256.0f * (renderData.texPageVertOffset>>1)); | |
1297 | 1300 | } |
1298 | else if ( | |
1301 | else if (renderData.texPageSmall == 3) | |
1299 | 1302 | { |
1300 | 1303 | textureT = fmod(textureT, 128.0f); |
1301 | 1304 | textureS = fmod(textureS, 128.0f); |
1302 | 1305 | |
1303 | textureT += (128.0f * (prOptions.texPageHorizOffset>>0)); | |
1304 | textureS += (128.0f * (prOptions.texPageVertOffset>>0)); | |
1306 | textureT += (128.0f * (renderData.texPageHorizOffset>>0)); | |
1307 | textureS += (128.0f * (renderData.texPageVertOffset>>0)); | |
1305 | 1308 | } |
1306 | 1309 | |
1307 | paletteEntry = textureOffset[((int)textureS)*1024 + (int)textureT]; | |
1310 | UINT8 paletteEntry = textureOffset[((int)textureS)*1024 + (int)textureT]; | |
1308 | 1311 | |
1309 | // Nai | |
1312 | // Naive Alpha Implementation (?) - don't draw if you're at texture index 0... | |
1310 | 1313 | if (paletteEntry != 0) |
1311 | 1314 | { |
1312 | 1315 | // The color out of the texture |
1313 | paletteEntry %= prOptions.palPageSize; | |
1314 | rgb_t color = m_palette->pen(prOptions.palOffset + paletteEntry); | |
1316 | paletteEntry %= renderData.palPageSize; | |
1317 | rgb_t color = m_state.m_palette->pen(renderData.palOffset + paletteEntry); | |
1315 | 1318 | |
1316 | 1319 | // Apply the lighting |
1317 | float rIntensity = (r_start/w_start) / 255.0f; | |
1318 | float gIntensity = (g_start/w_start) / 255.0f; | |
1319 | float bIntensity = (b_start/w_start) / 255.0f; | |
1320 | float red = color.r() * rIntensity; | |
1320 | float rIntensity = rCorrect / 255.0f; | |
1321 | float gIntensity = gCorrect / 255.0f; | |
1322 | float bIntensity = bCorrect / 255.0f; | |
1323 | float red = color.r() * rIntensity; | |
1321 | 1324 | float green = color.g() * gIntensity; |
1322 | float blue = color.b() | |
1325 | float blue = color.b() * bIntensity; | |
1323 | 1326 | |
1324 | 1327 | // Clamp and finalize |
1325 | 1328 | red = color.r() + red; |
r249189 | r249190 | |
1332 | 1335 | |
1333 | 1336 | color = rgb_t(255, (UINT8)red, (UINT8)green, (UINT8)blue); |
1334 | 1337 | |
1335 | *cb = color; | |
1336 | *db = z_start; | |
1338 | *colorBuffer = color; | |
1337 | 1339 | } |
1338 | 1340 | } |
1339 | } | |
1340 | db++; | |
1341 | cb++; | |
1342 | z_start += z_delta; | |
1343 | w_start += w_delta; | |
1344 | r_start += r_delta; | |
1345 | g_start += g_delta; | |
1346 | b_start += b_delta; | |
1347 | s_start += s_delta; | |
1348 | t_start += t_delta; | |
1349 | } | |
1350 | } | |
1341 | } | |
1351 | 1342 | |
1352 | //---------------------------------------------------------------------------- | |
1353 | // Given 3D triangle ABC in screen space with clipped coordinates within the following | |
1354 | // bounds: x in [0,W], y in [0,H], z in [0,1]. The origin for (x,y) is in the bottom | |
1355 | // left corner of the pixel grid. z=0 is the near plane and z=1 is the far plane, | |
1356 | // so lesser values are closer. The coordinates of the pixels are evenly spaced | |
1357 | // in x and y 1 units apart starting at the bottom-left pixel with coords | |
1358 | // (0.5,0.5). In other words, the pixel sample point is in the center of the | |
1359 | // rectangular grid cell containing the pixel sample. The framebuffer has | |
1360 | // dimensions width x height (WxH). The Color buffer is a 1D array (row-major | |
1361 | // order) with 3 unsigned chars per pixel (24-bit color). The Depth buffer is | |
1362 | // a 1D array (also row-major order) with a float value per pixel | |
1363 | // For a pixel location (x,y) we can obtain | |
1364 | // the Color and Depth array locations as: Color[(((int)y)*W+((int)x))*3] | |
1365 | // (for the red value, green is offset +1, and blue is offset +2 and | |
1366 | // Depth[((int)y)*W+((int)x)]. Fills the pixels contained in the triangle | |
1367 | // with the global current color and the properly linearly interpolated depth | |
1368 | // value (performs Z-buffer depth test before writing new pixel). | |
1369 | // Pixel samples that lie inside the triangle edges are filled with | |
1370 | // a bias towards the minimum values (samples that lie exactly on a triangle | |
1371 | // edge are filled only for minimum x values along a horizontal span and for | |
1372 | // minimum y values, samples lying on max values are not filled). | |
1373 | // Per-vertex colors are RGB floating point triplets in [0.0,255.0]. The vertices | |
1374 | // include their w-components for use in linearly interpolating perspectively | |
1375 | // correct color (RGB) and texture-coords (st) across the face of the triangle. | |
1376 | // A texture image of RGB floating point triplets of size TWxWH is also given. | |
1377 | // Texture colors are normalized RGB values in [0,1]. | |
1378 | // clamp and repeat wrapping modes : Wrapping={0,1} | |
1379 | // nearest and bilinear filtering: Filtering={0,1} | |
1380 | // replace and modulate application modes: Function={0,1} | |
1381 | //--------------------------------------------------------------------------- | |
1382 | void hng64_state::RasterizeTriangle_SMOOTH_TEX_PC( | |
1383 | float A[4], float B[4], float C[4], | |
1384 | float Ca[3], float Cb[3], float Cc[3], // PER-VERTEX RGB COLORS | |
1385 | float Ta[2], float Tb[2], float Tc[2], // PER-VERTEX (S,T) TEX-COORDS | |
1386 | const polygonRasterOptions& prOptions) | |
1387 | { | |
1388 | // Get our order of points by increasing y-coord | |
1389 | float *p_min = ((A[1] <= B[1]) && (A[1] <= C[1])) ? A : ((B[1] <= A[1]) && (B[1] <= C[1])) ? B : C; | |
1390 | float *p_max = ((A[1] >= B[1]) && (A[1] >= C[1])) ? A : ((B[1] >= A[1]) && (B[1] >= C[1])) ? B : C; | |
1391 | float *p_mid = ((A != p_min) && (A != p_max)) ? A : ((B != p_min) && (B != p_max)) ? B : C; | |
1392 | ||
1393 | // Perspectively correct color interpolation, interpolate r/w, g/w, b/w, then divide by 1/w at each pixel (A[3] = 1/w) | |
1394 | float ca[3], cb[3], cc[3]; | |
1395 | float ta[2], tb[2], tc[2]; | |
1396 | ||
1397 | float *c_min; | |
1398 | float *c_mid; | |
1399 | float *c_max; | |
1400 | ||
1401 | // We must keep the tex coords straight with the point ordering | |
1402 | float *t_min; | |
1403 | float *t_mid; | |
1404 | float *t_max; | |
1405 | ||
1406 | // Find out control points for y, this divides the triangle into upper and lower | |
1407 | int y_min; | |
1408 | int y_max; | |
1409 | int y_mid; | |
1410 | ||
1411 | // Compute the slopes of each line, and color this is used to determine the interpolation | |
1412 | float x1_slope; | |
1413 | float x2_slope; | |
1414 | float z1_slope; | |
1415 | float z2_slope; | |
1416 | float w1_slope; | |
1417 | float w2_slope; | |
1418 | float r1_slope; | |
1419 | float r2_slope; | |
1420 | float g1_slope; | |
1421 | float g2_slope; | |
1422 | float b1_slope; | |
1423 | float b2_slope; | |
1424 | float s1_slope; | |
1425 | float s2_slope; | |
1426 | float t1_slope; | |
1427 | float t2_slope; | |
1428 | ||
1429 | // Compute the t values used in the equation Ax = Ax + (Bx - Ax)*t | |
1430 | // We only need one t, because it is only used to compute the start. | |
1431 | // Create storage for the interpolated x and z values for both lines | |
1432 | // also for the RGB interpolation | |
1433 | float t; | |
1434 | float x1_interp; | |
1435 | float z1_interp; | |
1436 | float w1_interp; | |
1437 | float r1_interp; | |
1438 | float g1_interp; | |
1439 | float b1_interp; | |
1440 | float s1_interp; | |
1441 | float t1_interp; | |
1442 | ||
1443 | float x2_interp; | |
1444 | float z2_interp; | |
1445 | float w2_interp; | |
1446 | float r2_interp; | |
1447 | float g2_interp; | |
1448 | float b2_interp; | |
1449 | float s2_interp; | |
1450 | float t2_interp; | |
1451 | ||
1452 | // Create storage for the horizontal interpolation of z and RGB color and its starting points | |
1453 | // This is used to fill the triangle horizontally | |
1454 | int x_start, x_end; | |
1455 | float z_interp_x, z_delta_x; | |
1456 | float w_interp_x, w_delta_x; | |
1457 | float r_interp_x, r_delta_x; | |
1458 | float g_interp_x, g_delta_x; | |
1459 | float b_interp_x, b_delta_x; | |
1460 | float s_interp_x, s_delta_x; | |
1461 | float t_interp_x, t_delta_x; | |
1462 | ||
1463 | ca[0] = Ca[0]; ca[1] = Ca[1]; ca[2] = Ca[2]; | |
1464 | cb[0] = Cb[0]; cb[1] = Cb[1]; cb[2] = Cb[2]; | |
1465 | cc[0] = Cc[0]; cc[1] = Cc[1]; cc[2] = Cc[2]; | |
1466 | ||
1467 | // Perspectively correct tex interpolation, interpolate s/w, t/w, then divide by 1/w at each pixel (A[3] = 1/w) | |
1468 | ta[0] = Ta[0]; ta[1] = Ta[1]; | |
1469 | tb[0] = Tb[0]; tb[1] = Tb[1]; | |
1470 | tc[0] = Tc[0]; tc[1] = Tc[1]; | |
1471 | ||
1472 | // We must keep the colors straight with the point ordering | |
1473 | c_min = (p_min == A) ? ca : (p_min == B) ? cb : cc; | |
1474 | c_mid = (p_mid == A) ? ca : (p_mid == B) ? cb : cc; | |
1475 | c_max = (p_max == A) ? ca : (p_max == B) ? cb : cc; | |
1476 | ||
1477 | // We must keep the tex coords straight with the point ordering | |
1478 | t_min = (p_min == A) ? ta : (p_min == B) ? tb : tc; | |
1479 | t_mid = (p_mid == A) ? ta : (p_mid == B) ? tb : tc; | |
1480 | t_max = (p_max == A) ? ta : (p_max == B) ? tb : tc; | |
1481 | ||
1482 | // Find out control points for y, this divides the triangle into upper and lower | |
1483 | y_min = (((int)p_min[1]) + 0.5 >= p_min[1]) ? (int)p_min[1] : ((int)p_min[1]) + 1; | |
1484 | y_max = (((int)p_max[1]) + 0.5 < p_max[1]) ? (int)p_max[1] : ((int)p_max[1]) - 1; | |
1485 | y_mid = (((int)p_mid[1]) + 0.5 >= p_mid[1]) ? (int)p_mid[1] : ((int)p_mid[1]) + 1; | |
1486 | ||
1487 | // Compute the slopes of each line, and color this is used to determine the interpolation | |
1488 | x1_slope = (p_max[0] - p_min[0]) / (p_max[1] - p_min[1]); | |
1489 | x2_slope = (p_mid[0] - p_min[0]) / (p_mid[1] - p_min[1]); | |
1490 | z1_slope = (p_max[2] - p_min[2]) / (p_max[1] - p_min[1]); | |
1491 | z2_slope = (p_mid[2] - p_min[2]) / (p_mid[1] - p_min[1]); | |
1492 | w1_slope = (p_max[3] - p_min[3]) / (p_max[1] - p_min[1]); | |
1493 | w2_slope = (p_mid[3] - p_min[3]) / (p_mid[1] - p_min[1]); | |
1494 | r1_slope = (c_max[0] - c_min[0]) / (p_max[1] - p_min[1]); | |
1495 | r2_slope = (c_mid[0] - c_min[0]) / (p_mid[1] - p_min[1]); | |
1496 | g1_slope = (c_max[1] - c_min[1]) / (p_max[1] - p_min[1]); | |
1497 | g2_slope = (c_mid[1] - c_min[1]) / (p_mid[1] - p_min[1]); | |
1498 | b1_slope = (c_max[2] - c_min[2]) / (p_max[1] - p_min[1]); | |
1499 | b2_slope = (c_mid[2] - c_min[2]) / (p_mid[1] - p_min[1]); | |
1500 | s1_slope = (t_max[0] - t_min[0]) / (p_max[1] - p_min[1]); | |
1501 | s2_slope = (t_mid[0] - t_min[0]) / (p_mid[1] - p_min[1]); | |
1502 | t1_slope = (t_max[1] - t_min[1]) / (p_max[1] - p_min[1]); | |
1503 | t2_slope = (t_mid[1] - t_min[1]) / (p_mid[1] - p_min[1]); | |
1504 | ||
1505 | // Compute the t values used in the equation Ax = Ax + (Bx - Ax)*t | |
1506 | // We only need one t, because it is only used to compute the start. | |
1507 | // Create storage for the interpolated x and z values for both lines | |
1508 | // also for the RGB interpolation | |
1509 | t = (((float)y_min) + 0.5 - p_min[1]) / (p_max[1] - p_min[1]); | |
1510 | x1_interp = p_min[0] + (p_max[0] - p_min[0]) * t; | |
1511 | z1_interp = p_min[2] + (p_max[2] - p_min[2]) * t; | |
1512 | w1_interp = p_min[3] + (p_max[3] - p_min[3]) * t; | |
1513 | r1_interp = c_min[0] + (c_max[0] - c_min[0]) * t; | |
1514 | g1_interp = c_min[1] + (c_max[1] - c_min[1]) * t; | |
1515 | b1_interp = c_min[2] + (c_max[2] - c_min[2]) * t; | |
1516 | s1_interp = t_min[0] + (t_max[0] - t_min[0]) * t; | |
1517 | t1_interp = t_min[1] + (t_max[1] - t_min[1]) * t; | |
1518 | ||
1519 | t = (((float)y_min) + 0.5 - p_min[1]) / (p_mid[1] - p_min[1]); | |
1520 | x2_interp = p_min[0] + (p_mid[0] - p_min[0]) * t; | |
1521 | z2_interp = p_min[2] + (p_mid[2] - p_min[2]) * t; | |
1522 | w2_interp = p_min[3] + (p_mid[3] - p_min[3]) * t; | |
1523 | r2_interp = c_min[0] + (c_mid[0] - c_min[0]) * t; | |
1524 | g2_interp = c_min[1] + (c_mid[1] - c_min[1]) * t; | |
1525 | b2_interp = c_min[2] + (c_mid[2] - c_min[2]) * t; | |
1526 | s2_interp = t_min[0] + (t_mid[0] - t_min[0]) * t; | |
1527 | t2_interp = t_min[1] + (t_mid[1] - t_min[1]) * t; | |
1528 | ||
1529 | // First work on the bottom half of the triangle | |
1530 | // I'm using y_min as the incrementer because it saves space and we don't need it anymore | |
1531 | for (; y_min < y_mid; y_min++) { | |
1532 | // We always want to fill left to right, so we have 2 main cases | |
1533 | // Compute the integer starting and ending points and the appropriate z by | |
1534 | // interpolating. Remember the pixels are in the middle of the grid, i.e. (0.5,0.5,0.5) | |
1535 | if (x1_interp < x2_interp) { | |
1536 | x_start = ((((int)x1_interp) + 0.5) >= x1_interp) ? (int)x1_interp : ((int)x1_interp) + 1; | |
1537 | x_end = ((((int)x2_interp) + 0.5) < x2_interp) ? (int)x2_interp : ((int)x2_interp) - 1; | |
1538 | z_delta_x = (z2_interp - z1_interp) / (x2_interp - x1_interp); | |
1539 | w_delta_x = (w2_interp - w1_interp) / (x2_interp - x1_interp); | |
1540 | r_delta_x = (r2_interp - r1_interp) / (x2_interp - x1_interp); | |
1541 | g_delta_x = (g2_interp - g1_interp) / (x2_interp - x1_interp); | |
1542 | b_delta_x = (b2_interp - b1_interp) / (x2_interp - x1_interp); | |
1543 | s_delta_x = (s2_interp - s1_interp) / (x2_interp - x1_interp); | |
1544 | t_delta_x = (t2_interp - t1_interp) / (x2_interp - x1_interp); | |
1545 | t = (x_start + 0.5 - x1_interp) / (x2_interp - x1_interp); | |
1546 | z_interp_x = z1_interp + (z2_interp - z1_interp) * t; | |
1547 | w_interp_x = w1_interp + (w2_interp - w1_interp) * t; | |
1548 | r_interp_x = r1_interp + (r2_interp - r1_interp) * t; | |
1549 | g_interp_x = g1_interp + (g2_interp - g1_interp) * t; | |
1550 | b_interp_x = b1_interp + (b2_interp - b1_interp) * t; | |
1551 | s_interp_x = s1_interp + (s2_interp - s1_interp) * t; | |
1552 | t_interp_x = t1_interp + (t2_interp - t1_interp) * t; | |
1553 | ||
1554 | } else { | |
1555 | x_start = ((((int)x2_interp) + 0.5) >= x2_interp) ? (int)x2_interp : ((int)x2_interp) + 1; | |
1556 | x_end = ((((int)x1_interp) + 0.5) < x1_interp) ? (int)x1_interp : ((int)x1_interp) - 1; | |
1557 | z_delta_x = (z1_interp - z2_interp) / (x1_interp - x2_interp); | |
1558 | w_delta_x = (w1_interp - w2_interp) / (x1_interp - x2_interp); | |
1559 | r_delta_x = (r1_interp - r2_interp) / (x1_interp - x2_interp); | |
1560 | g_delta_x = (g1_interp - g2_interp) / (x1_interp - x2_interp); | |
1561 | b_delta_x = (b1_interp - b2_interp) / (x1_interp - x2_interp); | |
1562 | s_delta_x = (s1_interp - s2_interp) / (x1_interp - x2_interp); | |
1563 | t_delta_x = (t1_interp - t2_interp) / (x1_interp - x2_interp); | |
1564 | t = (x_start + 0.5 - x2_interp) / (x1_interp - x2_interp); | |
1565 | z_interp_x = z2_interp + (z1_interp - z2_interp) * t; | |
1566 | w_interp_x = w2_interp + (w1_interp - w2_interp) * t; | |
1567 | r_interp_x = r2_interp + (r1_interp - r2_interp) * t; | |
1568 | g_interp_x = g2_interp + (g1_interp - g2_interp) * t; | |
1569 | b_interp_x = b2_interp + (b1_interp - b2_interp) * t; | |
1570 | s_interp_x = s2_interp + (s1_interp - s2_interp) * t; | |
1571 | t_interp_x = t2_interp + (t1_interp - t2_interp) * t; | |
1572 | } | |
1573 | ||
1574 | // Pass the horizontal line to the filler, this could be put in the routine | |
1575 | // then interpolate for the next values of x and z | |
1576 | FillSmoothTexPCHorizontalLine( prOptions, | |
1577 | x_start, x_end, y_min, z_interp_x, z_delta_x, w_interp_x, w_delta_x, | |
1578 | r_interp_x, r_delta_x, g_interp_x, g_delta_x, b_interp_x, b_delta_x, | |
1579 | s_interp_x, s_delta_x, t_interp_x, t_delta_x); | |
1580 | x1_interp += x1_slope; z1_interp += z1_slope; | |
1581 | x2_interp += x2_slope; z2_interp += z2_slope; | |
1582 | r1_interp += r1_slope; r2_interp += r2_slope; | |
1583 | g1_interp += g1_slope; g2_interp += g2_slope; | |
1584 | b1_interp += b1_slope; b2_interp += b2_slope; | |
1585 | w1_interp += w1_slope; w2_interp += w2_slope; | |
1586 | s1_interp += s1_slope; s2_interp += s2_slope; | |
1587 | t1_interp += t1_slope; t2_interp += t2_slope; | |
1588 | } | |
1589 | ||
1590 | // Now do the same thing for the top half of the triangle. | |
1591 | // We only need to recompute the x2 line because it changes at the midpoint | |
1592 | x2_slope = (p_max[0] - p_mid[0]) / (p_max[1] - p_mid[1]); | |
1593 | z2_slope = (p_max[2] - p_mid[2]) / (p_max[1] - p_mid[1]); | |
1594 | w2_slope = (p_max[3] - p_mid[3]) / (p_max[1] - p_mid[1]); | |
1595 | r2_slope = (c_max[0] - c_mid[0]) / (p_max[1] - p_mid[1]); | |
1596 | g2_slope = (c_max[1] - c_mid[1]) / (p_max[1] - p_mid[1]); | |
1597 | b2_slope = (c_max[2] - c_mid[2]) / (p_max[1] - p_mid[1]); | |
1598 | s2_slope = (t_max[0] - t_mid[0]) / (p_max[1] - p_mid[1]); | |
1599 | t2_slope = (t_max[1] - t_mid[1]) / (p_max[1] - p_mid[1]); | |
1600 | ||
1601 | t = (((float)y_mid) + 0.5 - p_mid[1]) / (p_max[1] - p_mid[1]); | |
1602 | x2_interp = p_mid[0] + (p_max[0] - p_mid[0]) * t; | |
1603 | z2_interp = p_mid[2] + (p_max[2] - p_mid[2]) * t; | |
1604 | w2_interp = p_mid[3] + (p_max[3] - p_mid[3]) * t; | |
1605 | r2_interp = c_mid[0] + (c_max[0] - c_mid[0]) * t; | |
1606 | g2_interp = c_mid[1] + (c_max[1] - c_mid[1]) * t; | |
1607 | b2_interp = c_mid[2] + (c_max[2] - c_mid[2]) * t; | |
1608 | s2_interp = t_mid[0] + (t_max[0] - t_mid[0]) * t; | |
1609 | t2_interp = t_mid[1] + (t_max[1] - t_mid[1]) * t; | |
1610 | ||
1611 | // We've seen this loop before haven't we? | |
1612 | // I'm using y_mid as the incrementer because it saves space and we don't need it anymore | |
1613 | for (; y_mid <= y_max; y_mid++) { | |
1614 | if (x1_interp < x2_interp) { | |
1615 | x_start = ((((int)x1_interp) + 0.5) >= x1_interp) ? (int)x1_interp : ((int)x1_interp) + 1; | |
1616 | x_end = ((((int)x2_interp) + 0.5) < x2_interp) ? (int)x2_interp : ((int)x2_interp) - 1; | |
1617 | z_delta_x = (z2_interp - z1_interp) / (x2_interp - x1_interp); | |
1618 | w_delta_x = (w2_interp - w1_interp) / (x2_interp - x1_interp); | |
1619 | r_delta_x = (r2_interp - r1_interp) / (x2_interp - x1_interp); | |
1620 | g_delta_x = (g2_interp - g1_interp) / (x2_interp - x1_interp); | |
1621 | b_delta_x = (b2_interp - b1_interp) / (x2_interp - x1_interp); | |
1622 | s_delta_x = (s2_interp - s1_interp) / (x2_interp - x1_interp); | |
1623 | t_delta_x = (t2_interp - t1_interp) / (x2_interp - x1_interp); | |
1624 | t = (x_start + 0.5 - x1_interp) / (x2_interp - x1_interp); | |
1625 | z_interp_x = z1_interp + (z2_interp - z1_interp) * t; | |
1626 | w_interp_x = w1_interp + (w2_interp - w1_interp) * t; | |
1627 | r_interp_x = r1_interp + (r2_interp - r1_interp) * t; | |
1628 | g_interp_x = g1_interp + (g2_interp - g1_interp) * t; | |
1629 | b_interp_x = b1_interp + (b2_interp - b1_interp) * t; | |
1630 | s_interp_x = s1_interp + (s2_interp - s1_interp) * t; | |
1631 | t_interp_x = t1_interp + (t2_interp - t1_interp) * t; | |
1632 | ||
1633 | } else { | |
1634 | x_start = ((((int)x2_interp) + 0.5) >= x2_interp) ? (int)x2_interp : ((int)x2_interp) + 1; | |
1635 | x_end = ((((int)x1_interp) + 0.5) < x1_interp) ? (int)x1_interp : ((int)x1_interp) - 1; | |
1636 | z_delta_x = (z1_interp - z2_interp) / (x1_interp - x2_interp); | |
1637 | w_delta_x = (w1_interp - w2_interp) / (x1_interp - x2_interp); | |
1638 | r_delta_x = (r1_interp - r2_interp) / (x1_interp - x2_interp); | |
1639 | g_delta_x = (g1_interp - g2_interp) / (x1_interp - x2_interp); | |
1640 | b_delta_x = (b1_interp - b2_interp) / (x1_interp - x2_interp); | |
1641 | s_delta_x = (s1_interp - s2_interp) / (x1_interp - x2_interp); | |
1642 | t_delta_x = (t1_interp - t2_interp) / (x1_interp - x2_interp); | |
1643 | t = (x_start + 0.5 - x2_interp) / (x1_interp - x2_interp); | |
1644 | z_interp_x = z2_interp + (z1_interp - z2_interp) * t; | |
1645 | w_interp_x = w2_interp + (w1_interp - w2_interp) * t; | |
1646 | r_interp_x = r2_interp + (r1_interp - r2_interp) * t; | |
1647 | g_interp_x = g2_interp + (g1_interp - g2_interp) * t; | |
1648 | b_interp_x = b2_interp + (b1_interp - b2_interp) * t; | |
1649 | s_interp_x = s2_interp + (s1_interp - s2_interp) * t; | |
1650 | t_interp_x = t2_interp + (t1_interp - t2_interp) * t; | |
1651 | } | |
1652 | ||
1653 | // Pass the horizontal line to the filler, this could be put in the routine | |
1654 | // then interpolate for the next values of x and z | |
1655 | FillSmoothTexPCHorizontalLine( prOptions, | |
1656 | x_start, x_end, y_mid, z_interp_x, z_delta_x, w_interp_x, w_delta_x, | |
1657 | r_interp_x, r_delta_x, g_interp_x, g_delta_x, b_interp_x, b_delta_x, | |
1658 | s_interp_x, s_delta_x, t_interp_x, t_delta_x); | |
1659 | x1_interp += x1_slope; z1_interp += z1_slope; | |
1660 | x2_interp += x2_slope; z2_interp += z2_slope; | |
1661 | r1_interp += r1_slope; r2_interp += r2_slope; | |
1662 | g1_interp += g1_slope; g2_interp += g2_slope; | |
1663 | b1_interp += b1_slope; b2_interp += b2_slope; | |
1664 | w1_interp += w1_slope; w2_interp += w2_slope; | |
1665 | s1_interp += s1_slope; s2_interp += s2_slope; | |
1666 | t1_interp += t1_slope; t2_interp += t2_slope; | |
1667 | } | |
1343 | z += dz; | |
1344 | w += dw; | |
1345 | lightR += dlightR; | |
1346 | lightG += dlightG; | |
1347 | lightB += dlightB; | |
1348 | s += ds; | |
1349 | t += dt; | |
1350 | ||
1351 | colorBuffer++; | |
1352 | depthBuffer++; | |
1353 | } | |
1668 | 1354 | } |
1669 | 1355 | |
1670 | void hng64_ | |
1356 | void hng64_poly_renderer::drawShaded(struct polygon *p) | |
1671 | 1357 | { |
1358 | // Polygon information for the rasterizer | |
1359 | hng64_poly_data rOptions; | |
1360 | rOptions.texType = p->texType; | |
1361 | rOptions.texIndex = p->texIndex; | |
1362 | rOptions.palOffset = p->palOffset; | |
1363 | rOptions.palPageSize = p->palPageSize; | |
1364 | rOptions.debugColor = p->debugColor; | |
1365 | rOptions.texPageSmall = p->texPageSmall; | |
1366 | rOptions.texPageHorizOffset = p->texPageHorizOffset; | |
1367 | rOptions.texPageVertOffset = p->texPageVertOffset; | |
1368 | ||
1672 | 1369 | // The perspective-correct texture divide... |
1673 | // !!! There is a very good chance the HNG64 hardware does not do perspective-correct texture-mapping !!! | |
1674 | int j; | |
1675 | for (j = 0; j < p->n; j++) | |
1370 | // NOTE: There is a very good chance the HNG64 hardware does not do perspective-correct texture-mapping - explore | |
1371 | for (int j = 0; j < p->n; j++) | |
1676 | 1372 | { |
1677 | 1373 | p->vert[j].clipCoords[3] = 1.0f / p->vert[j].clipCoords[3]; |
1678 | 1374 | p->vert[j].light[0] = p->vert[j].light[0] * p->vert[j].clipCoords[3]; |
r249189 | r249190 | |
1682 | 1378 | p->vert[j].texCoords[1] = p->vert[j].texCoords[1] * p->vert[j].clipCoords[3]; |
1683 | 1379 | } |
1684 | 1380 | |
1685 | // Set up the struct that will pass the polygon's options around. | |
1686 | polygonRasterOptions prOptions; | |
1687 | prOptions.texType = p->texType; | |
1688 | prOptions.texIndex = p->texIndex; | |
1689 | prOptions.palOffset = p->palOffset; | |
1690 | prOptions.palPageSize = p->palPageSize; | |
1691 | prOptions.debugColor = p->debugColor; | |
1692 | prOptions.texPageSmall = p->texPageSmall; | |
1693 | prOptions.texPageHorizOffset = p->texPageHorizOffset; | |
1694 | prOptions.texPageVertOffset = p->texPageVertOffset; | |
1695 | ||
1696 | for (j = 1; j < p->n-1; j++) | |
1381 | // Rasterize the triangles | |
1382 | for (int j = 1; j < p->n-1; j++) | |
1697 | 1383 | { |
1698 | RasterizeTriangle_SMOOTH_TEX_PC( | |
1699 | p->vert[0].clipCoords, p->vert[j].clipCoords, p->vert[j+1].clipCoords, | |
1700 | p->vert[0].light, p->vert[j].light, p->vert[j+1].light, | |
1701 | p->vert[0].texCoords, p->vert[j].texCoords, p->vert[j+1].texCoords, | |
1702 | prOptions); | |
1384 | // Build some MAME rasterizer vertices from the hng64 vertices | |
1385 | vertex_t pVert[3]; | |
1386 | ||
1387 | const polyVert& pv0 = p->vert[0]; | |
1388 | pVert[0].x = pv0.clipCoords[0]; | |
1389 | pVert[0].y = pv0.clipCoords[1]; | |
1390 | pVert[0].p[0] = pv0.clipCoords[2]; | |
1391 | pVert[0].p[1] = pv0.clipCoords[3]; | |
1392 | pVert[0].p[2] = pv0.light[0]; | |
1393 | pVert[0].p[3] = pv0.light[1]; | |
1394 | pVert[0].p[4] = pv0.light[2]; | |
1395 | pVert[0].p[5] = pv0.texCoords[0]; | |
1396 | pVert[0].p[6] = pv0.texCoords[1]; | |
1397 | ||
1398 | const polyVert& pvj = p->vert[j]; | |
1399 | pVert[1].x = pvj.clipCoords[0]; | |
1400 | pVert[1].y = pvj.clipCoords[1]; | |
1401 | pVert[1].p[0] = pvj.clipCoords[2]; | |
1402 | pVert[1].p[1] = pvj.clipCoords[3]; | |
1403 | pVert[1].p[2] = pvj.light[0]; | |
1404 | pVert[1].p[3] = pvj.light[1]; | |
1405 | pVert[1].p[4] = pvj.light[2]; | |
1406 | pVert[1].p[5] = pvj.texCoords[0]; | |
1407 | pVert[1].p[6] = pvj.texCoords[1]; | |
1408 | ||
1409 | const polyVert& pvjp1 = p->vert[j+1]; | |
1410 | pVert[2].x = pvjp1.clipCoords[0]; | |
1411 | pVert[2].y = pvjp1.clipCoords[1]; | |
1412 | pVert[2].p[0] = pvjp1.clipCoords[2]; | |
1413 | pVert[2].p[1] = pvjp1.clipCoords[3]; | |
1414 | pVert[2].p[2] = pvjp1.light[0]; | |
1415 | pVert[2].p[3] = pvjp1.light[1]; | |
1416 | pVert[2].p[4] = pvjp1.light[2]; | |
1417 | pVert[2].p[5] = pvjp1.texCoords[0]; | |
1418 | pVert[2].p[6] = pvjp1.texCoords[1]; | |
1419 | ||
1420 | // Pass the render data into the rasterizer | |
1421 | hng64_poly_data& renderData = object_data_alloc(); | |
1422 | renderData = rOptions; | |
1423 | ||
1424 | const rectangle& visibleArea = m_state.m_screen->visible_area(); | |
1425 | render_triangle(visibleArea, render_delegate(FUNC(hng64_poly_renderer::render_scanline), this), 7, pVert[0], pVert[1], pVert[2]); | |
1703 | 1426 | } |
1704 | 1427 | } |
r249189 | r249190 | |
---|---|---|
20 | 20 | tecmo_spr_device::tecmo_spr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
21 | 21 | : device_t(mconfig, TECMO_SPRITE, "Tecmo Chained Sprites", tag, owner, clock, "tecmo_spr", __FILE__), |
22 | 22 | m_gfxregion(0), |
23 | m_bootleg(0) | |
23 | m_bootleg(0), | |
24 | m_yoffset(0) | |
24 | 25 | { |
25 | 26 | } |
26 | 27 | |
r249189 | r249190 | |
46 | 47 | dev.m_bootleg = bootleg; |
47 | 48 | } |
48 | 49 | |
50 | void tecmo_spr_device::set_yoffset(device_t &device, int yoffset) | |
51 | { | |
52 | tecmo_spr_device &dev = downcast<tecmo_spr_device &>(device); | |
53 | dev.m_yoffset = yoffset; | |
54 | } | |
49 | 55 | |
56 | ||
50 | 57 | static const UINT8 layout[8][8] = |
51 | 58 | { |
52 | 59 | { 0, 1, 4, 5, 16, 17, 20, 21 }, |
r249189 | r249190 | |
323 | 330 | code = ( spriteram[offs+2] ) + ( spriteram[offs+3] << 8 ); |
324 | 331 | |
325 | 332 | int xpos = spriteram[offs + 8] + ( (spriteram[offs + 9] & 3 ) << 8 ); |
326 | int ypos = spriteram[offs + 6] + ( (spriteram[offs + 7] & 1 ) << 8 ); | |
333 | int ypos = spriteram[offs + 6] + ( (spriteram[offs + 7] & 1 ) << 8 ) + m_yoffset; | |
327 | 334 | |
328 | 335 | if (xpos >= 0x0300) xpos -= 0x0400; |
329 | 336 |
r249189 | r249190 | |
---|---|---|
10 | 10 | tecmo_spr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
11 | 11 | static void set_gfx_region(device_t &device, int gfxregion); |
12 | 12 | static void set_bootleg(device_t &device, int bootleg); |
13 | static void set_yoffset(device_t &device, int bootleg); | |
13 | 14 | |
14 | 15 | // gaiden.c / spbactn.c / tecmo16.c sprites |
15 | 16 | void gaiden_draw_sprites(screen_device &screen, gfxdecode_device *gfxdecode, const rectangle &cliprect, UINT16* spriteram, int sprite_sizey, int spr_offset_y, int flip_screen, bitmap_ind16 &sprite_bitmap); |
r249189 | r249190 | |
29 | 30 | |
30 | 31 | UINT8 m_gfxregion; |
31 | 32 | int m_bootleg; // for Gals Pinball / Hot Pinball |
33 | int m_yoffset; | |
32 | 34 | |
33 | ||
34 | 35 | private: |
35 | 36 | }; |
36 | 37 | |
r249189 | r249190 | |
42 | 43 | |
43 | 44 | #define MCFG_TECMO_SPRITE_BOOTLEG(_bootleg) \ |
44 | 45 | tecmo_spr_device::set_bootleg(*device, _bootleg); |
46 | ||
47 | #define MCFG_TECMO_SPRITE_YOFFSET(_yoffset) \ | |
48 | tecmo_spr_device::set_yoffset(*device, _yoffset); |
r249189 | r249190 | |
---|---|---|
846 | 846 | SLOT_INTERFACE("hd20", CPC_HD20) |
847 | 847 | SLOT_INTERFACE_END |
848 | 848 | |
849 | SLOT_INTERFACE_START(aleste_exp_cards) | |
850 | SLOT_INTERFACE("ssa1", CPC_SSA1) | |
851 | SLOT_INTERFACE("dkspeech", CPC_DKSPEECH) | |
852 | SLOT_INTERFACE("rom", CPC_ROM) | |
853 | SLOT_INTERFACE("multiface2", CPC_MFACE2) | |
854 | SLOT_INTERFACE("pds", CPC_PDS) | |
855 | SLOT_INTERFACE("rs232", CPC_RS232) | |
856 | SLOT_INTERFACE("amsrs232", CPC_RS232_AMS) | |
857 | SLOT_INTERFACE("sf2", CPC_SYMBIFACE2) | |
858 | SLOT_INTERFACE("amdrum", CPC_AMDRUM) | |
859 | SLOT_INTERFACE("playcity", CPC_PLAYCITY) | |
860 | SLOT_INTERFACE("smartwatch", CPC_SMARTWATCH) | |
861 | SLOT_INTERFACE("brunword4", CPC_BRUNWORD_MK4) | |
862 | SLOT_INTERFACE("hd20", CPC_HD20) | |
863 | SLOT_INTERFACE("magicsound", AL_MAGICSOUND) | |
864 | SLOT_INTERFACE_END | |
865 | ||
849 | 866 | SLOT_INTERFACE_START(amstrad_centronics_devices) |
850 | 867 | SLOT_INTERFACE("pl80", COMX_PL80) |
851 | 868 | SLOT_INTERFACE("ex800", EPSON_EX800) |
r249189 | r249190 | |
1128 | 1145 | MCFG_DEVICE_REMOVE("upd765") |
1129 | 1146 | MCFG_I8272A_ADD("upd765", true) |
1130 | 1147 | |
1148 | MCFG_DEVICE_REMOVE("exp") | |
1149 | MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0) | |
1150 | MCFG_DEVICE_SLOT_INTERFACE(aleste_exp_cards, NULL, false) | |
1151 | MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(INPUTLINE("maincpu", 0)) | |
1152 | MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(INPUTLINE("maincpu", INPUT_LINE_NMI)) | |
1153 | MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE(amstrad_state, cpc_romdis)) // ROMDIS | |
1154 | MCFG_CPC_EXPANSION_SLOT_ROM_SELECT(WRITE8(amstrad_state,rom_select)) | |
1155 | ||
1131 | 1156 | MCFG_FLOPPY_DRIVE_ADD("upd765:0", aleste_floppies, "35dd", amstrad_state::aleste_floppy_formats) |
1132 | 1157 | MCFG_FLOPPY_DRIVE_ADD("upd765:1", aleste_floppies, "35dd", amstrad_state::aleste_floppy_formats) |
1133 | 1158 |
r249189 | r249190 | |
---|---|---|
1448 | 1448 | ROM_LOAD ( "unitron.f0" , 0x3000, 0x1000, CRC(8e047c4a) SHA1(78c57c0e00dfce7fdec9437fe2b4c25def447e5d)) |
1449 | 1449 | ROM_END |
1450 | 1450 | |
1451 | ROM_START(uniap2ti) | |
1451 | ROM_START(uniap2ti) /* "Teclado Inteligente" means "smart keyboard" in brazilian portuguese */ | |
1452 | 1452 | ROM_REGION(0x1000,"gfx1",0) |
1453 | 1453 | ROM_LOAD ( "unitron.chr", 0x0000, 0x1000, CRC(7fdd1af6) SHA1(2f4f90d90f2f3a8c1fbea304e1072780fb22e698)) |
1454 | 1454 | |
r249189 | r249190 | |
1458 | 1458 | ROM_LOAD ( "unitron.f0" , 0x3000, 0x1000, CRC(8e047c4a) SHA1(78c57c0e00dfce7fdec9437fe2b4c25def447e5d)) |
1459 | 1459 | |
1460 | 1460 | ROM_REGION(0x4000,"keyboard",0) |
1461 | ROM_LOAD ( "unitron_apii_keyboard.ic3", 0x | |
1461 | ROM_LOAD ( "unitron_apii+_keyboard.ic3", 0x0800, 0x0800, CRC(edc43205) SHA1(220cc21d86f1ab63a301ae7a9c5ff0f3f6cddb70)) | |
1462 | 1462 | ROM_END |
1463 | 1463 | |
1464 | 1464 | |
r249189 | r249190 | |
1603 | 1603 | COMP( 1982, ace100, apple2, 0, apple2, apple2p, driver_device, 0, "Franklin Computer", "Franklin Ace 100", MACHINE_SUPPORTS_SAVE ) |
1604 | 1604 | COMP( 1982, uniap2en, apple2, 0, apple2p, apple2p, driver_device, 0, "Unitron Eletronica", "Unitron AP II (in English)", MACHINE_SUPPORTS_SAVE ) |
1605 | 1605 | COMP( 1982, uniap2pt, apple2, 0, apple2p, apple2p, driver_device, 0, "Unitron Eletronica", "Unitron AP II (in Brazilian Portuguese)", MACHINE_SUPPORTS_SAVE ) |
1606 | COMP( 198 | |
1606 | COMP( 1984, uniap2ti, apple2, 0, apple2p, apple2p, driver_device, 0, "Unitron Eletronica", "Unitron AP II+ (Teclado Inteligente)", MACHINE_SUPPORTS_SAVE ) | |
1607 | 1607 | COMP( 1983, agat7, apple2, 0, apple2p, apple2p, driver_device, 0, "Agat", "Agat-7", MACHINE_NOT_WORKING) // disk controller ROM JSRs to $FCA8 which is a delay on apple II, illegal instruction crash here :( |
1608 | 1608 | // reverse font direction -\/ |
1609 | 1609 | COMP( 1984, ivelultr, apple2, 0, apple2p, apple2p, driver_device, 0, "Ivasim", "Ivel Ultra", MACHINE_SUPPORTS_SAVE ) |
r249189 | r249190 | |
---|---|---|
48 | 48 | #include "cpu/m6502/m6502.h" |
49 | 49 | #include "cpu/m6502/m65sc02.h" |
50 | 50 | #include "machine/6522via.h" |
51 | #include "machine/mc146818.h" /* RTC & CMOS RAM */ | |
52 | 51 | #include "bus/centronics/ctronics.h" |
53 | 52 | #include "bus/econet/econet.h" |
54 | 53 | #include "sound/tms5220.h" /* Speech */ |
r249189 | r249190 | |
58 | 57 | /* Devices */ |
59 | 58 | #include "imagedev/flopdrv.h" |
60 | 59 | #include "formats/bbc_dsk.h" |
61 | #include "formats/basicdsk.h" | |
62 | 60 | #include "imagedev/cassette.h" |
63 | 61 | #include "formats/uef_cas.h" |
64 | 62 | #include "formats/csw_cas.h" |
r249189 | r249190 | |
138 | 136 | } |
139 | 137 | |
140 | 138 | static ADDRESS_MAP_START( bbca_mem, AS_PROGRAM, 8, bbc_state ) |
141 | ADDRESS_MAP_UNMAP_HIGH /* Hardware marked with a # is not present in a Model A */ | |
139 | ADDRESS_MAP_UNMAP_HIGH /* Hardware marked with a # is not present in a Model A */ | |
142 | 140 | |
143 | AM_RANGE(0x0000, 0x3fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorya1_w) /* 0000-3fff Regular Ram */ | |
144 | AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Repeat of the Regular Ram */ | |
145 | AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") /* 8000-bfff Paged ROM */ | |
146 | AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */ | |
147 | AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */ | |
148 | /* fe00-feff Shiela Address Page */ | |
149 | AM_RANGE(0xfe00, 0xfe07) AM_READWRITE(bbc_6845_r, bbc_6845_w) /* fe00-fe07 6845 CRTC Video controller */ | |
150 | AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) | |
141 | AM_RANGE(0x0000, 0x3fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorya1_w) /* 0000-3fff Regular Ram */ | |
142 | AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Repeat of the Regular Ram */ | |
143 | AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */ | |
144 | AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */ | |
145 | AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */ | |
146 | /* fe00-feff SHEILA Address Page */ | |
147 | AM_RANGE(0xfe00, 0xfe00) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, status_r, address_w) /* fe00-fe07 6845 CRTC Video controller */ | |
148 | AM_RANGE(0xfe01, 0xfe01) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, register_r, register_w) | |
149 | AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) /* fe08-fe0F 6850 ACIA Serial controller */ | |
151 | 150 | AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_r, data_w) |
152 | AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */ | |
153 | AM_RANGE(0xfe18, 0xfe1f) AM_NOP /* fe18-fe1f INTOFF/STATID # ECONET Interrupt Off / ID No. */ | |
154 | AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON # ECONET Interrupt On */ | |
155 | /* W: fe20-fe2f Video ULA Video system chip */ | |
156 | AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selecta_w) /* R: fe30-fe3f NC Not Connected */ | |
157 | /* W: fe30-fe3f 84LS161 Paged ROM selector */ | |
158 | AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */ | |
159 | AM_RANGE(0xfe60, 0xfe7f) AM_NOP /* fe60-fe7f 6522 VIA # USER VIA */ | |
160 | AM_RANGE(0xfe80, 0xfe9f) AM_NOP /* fe80-fe9f 8271/1770 FDC # Floppy disc controller */ | |
161 | AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC # ECONET controller */ | |
162 | AM_RANGE(0xfec0, 0xfedf) AM_NOP /* fec0-fedf uPD7002 # Analogue to digital converter */ | |
163 | AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA # Tube system interface */ | |
164 | AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS Rom (continued) */ | |
151 | AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */ | |
152 | AM_RANGE(0xfe18, 0xfe1f) AM_NOP /* fe18-fe1f INTOFF/STATID # ECONET Interrupt Off / ID No. */ | |
153 | AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON # ECONET Interrupt On */ | |
154 | /* W: fe20-fe2f Video ULA Video system chip */ | |
155 | AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selecta_w) /* R: fe30-fe3f NC Not Connected */ | |
156 | /* W: fe30-fe3f 84LS161 Paged ROM selector */ | |
157 | AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */ | |
158 | AM_RANGE(0xfe60, 0xfe7f) AM_NOP /* fe60-fe7f 6522 VIA # USER VIA */ | |
159 | AM_RANGE(0xfe80, 0xfe9f) AM_NOP /* fe80-fe9f 8271/1770 FDC # Floppy disc controller */ | |
160 | AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC # ECONET controller */ | |
161 | AM_RANGE(0xfec0, 0xfedf) AM_NOP /* fec0-fedf uPD7002 # Analogue to digital converter */ | |
162 | AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA # Tube system interface */ | |
163 | AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS Rom (continued) */ | |
165 | 164 | ADDRESS_MAP_END |
166 | 165 | |
167 | 166 | |
168 | static ADDRESS_MAP_START( bbc | |
167 | static ADDRESS_MAP_START( bbc_base, AS_PROGRAM, 8, bbc_state ) | |
169 | 168 | ADDRESS_MAP_UNMAP_HIGH |
170 | 169 | |
170 | AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */ | |
171 | AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */ | |
172 | /* fe00-feff SHEILA Address Page */ | |
173 | AM_RANGE(0xfe00, 0xfe00) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, status_r, address_w) /* fe00-fe07 6845 CRTC Video controller */ | |
174 | AM_RANGE(0xfe01, 0xfe01) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, register_r, register_w) | |
175 | AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) /* fe08-fe0F 6850 ACIA Serial controller */ | |
176 | AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_r, data_w) | |
177 | AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */ | |
178 | AM_RANGE(0xfe18, 0xfe1f) AM_READ_PORT("S11") /* fe18-fe1f INTOFF/STATID ECONET Interrupt Off / ID No. */ | |
179 | AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON ECONET Interrupt On */ | |
180 | /* W: fe20-fe2f Video ULA Video system chip */ | |
181 | AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */ | |
182 | AM_RANGE(0xfe60, 0xfe7f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write) /* fe60-fe7f 6522 VIA USER VIA */ | |
183 | /* fe80-fe9f FDC Floppy disc controller */ | |
184 | AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC ECONET controller */ | |
185 | AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write) /* fec0-fedf uPD7002 Analogue to digital converter */ | |
186 | AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA Tube system interface */ | |
187 | AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS ROM (continued) */ | |
188 | ADDRESS_MAP_END | |
189 | ||
190 | ||
191 | static ADDRESS_MAP_START( bbcb_mem, AS_PROGRAM, 8, bbc_state ) | |
171 | 192 | AM_RANGE(0x0000, 0x3fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorya1_w) /* 0000-3fff Regular Ram */ |
172 | AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Re | |
193 | AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Regular Ram */ | |
173 | 194 | AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */ |
174 | AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */ | |
175 | AM_RANGE(0xfc00, 0xfdff) AM_READWRITE(bbc_opus_read, bbc_opus_write) /* fc00-fdff OPUS Disc Controller */ | |
176 | /* fe00-feff Shiela Address Page */ | |
177 | AM_RANGE(0xfe00, 0xfe07) AM_READWRITE(bbc_6845_r, bbc_6845_w) /* fe00-fe07 6845 CRTC Video controller */ | |
178 | AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) | |
179 | AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_r, data_w) | |
180 | AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */ | |
181 | AM_RANGE(0xfe18, 0xfe1f) AM_NOP /* fe18-fe1f INTOFF/STATID ECONET Interrupt Off / ID No. */ | |
182 | AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON ECONET Interrupt On */ | |
183 | /* W: fe20-fe2f Video ULA Video system chip */ | |
184 | 195 | AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectb_w) /* R: fe30-fe3f NC Not Connected */ |
185 | /* W: fe30-fe3f 84LS161 Paged ROM selector */ | |
186 | AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */ | |
187 | AM_RANGE(0xfe60, 0xfe7f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write) /* fe60-fe7f 6522 VIA USER VIA */ | |
188 | AM_RANGE(0xfe80, 0xfe9f) AM_READWRITE(bbc_disc_r, bbc_disc_w) /* fe80-fe9f 8271 FDC Floppy disc controller */ | |
189 | AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC ECONET controller */ | |
190 | AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write) /* fec0-fedf uPD7002 Analogue to digital converter */ | |
191 | AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA Tube system interface */ | |
192 | AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS Rom (continued) */ | |
196 | /* W: fe30-fe3f 84LS161 Paged ROM selector */ | |
197 | AM_RANGE(0xfe80, 0xfe83) AM_DEVREADWRITE("i8271", i8271_device, read, write) /* fe80-fe9f 8271 FDC Floppy disc controller */ | |
198 | AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("i8271", i8271_device, dack_r, dack_w) /* fe80-fe9f 8271 FDC Floppy disc controller */ | |
199 | AM_IMPORT_FROM(bbc_base) | |
193 | 200 | ADDRESS_MAP_END |
194 | 201 | |
195 | 202 | |
203 | static ADDRESS_MAP_START(bbcb1770_mem, AS_PROGRAM, 8, bbc_state) | |
204 | AM_RANGE(0x0000, 0x3fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorya1_w) /* 0000-3fff Regular Ram */ | |
205 | AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Regular Ram */ | |
206 | AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */ | |
207 | AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectb_w) /* R: fe30-fe3f NC Not Connected */ | |
208 | /* W: fe30-fe3f 84LS161 Paged ROM selector */ | |
209 | AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */ | |
210 | AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */ | |
211 | AM_IMPORT_FROM(bbc_base) | |
212 | ADDRESS_MAP_END | |
213 | ||
214 | ||
196 | 215 | static ADDRESS_MAP_START( bbcbp_mem, AS_PROGRAM, 8, bbc_state ) |
197 | ADDRESS_MAP_UNMAP_HIGH | |
198 | ||
199 | 216 | AM_RANGE(0x0000, 0x2fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorybp1_w) /* 0000-2fff Regular Ram */ |
200 | 217 | AM_RANGE(0x3000, 0x7fff) AM_READ_BANK("bank2") AM_WRITE(bbc_memorybp2_w) /* 3000-7fff Video/Shadow Ram */ |
201 | 218 | AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_w) /* 8000-afff Paged ROM or 12K of SWRAM */ |
202 | 219 | AM_RANGE(0xb000, 0xbfff) AM_READ_BANK("bank6") /* b000-bfff Rest of paged ROM area */ |
203 | AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */ | |
204 | AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */ | |
205 | /* fe00-feff Shiela Address Page */ | |
206 | AM_RANGE(0xfe00, 0xfe07) AM_READWRITE(bbc_6845_r, bbc_6845_w) /* fe00-fe07 6845 CRTC Video controller */ | |
207 | AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) | |
208 | AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_r, data_w) | |
209 | AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */ | |
210 | AM_RANGE(0xfe18, 0xfe1f) AM_NOP /* fe18-fe1f INTOFF/STATID ECONET Interrupt Off / ID No. */ | |
211 | AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON ECONET Interrupt On */ | |
212 | /* W: fe20-fe2f Video ULA Video system chip */ | |
213 | 220 | AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w) /* R: fe30-fe3f NC Not Connected */ |
214 | /* W: fe30-fe3f 84LS161 Paged ROM selector */ | |
215 | AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */ | |
216 | AM_RANGE(0xfe60, 0xfe7f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write) /* fe60-fe7f 6522 VIA USER VIA */ | |
217 | AM_RANGE(0xfe80, 0xfe9f) AM_READWRITE(bbc_wd1770_read, bbc_wd1770_write) /* fe80-fe9f 1770 FDC Floppy disc controller */ | |
218 | AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC ECONET controller */ | |
219 | AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write) /* fec0-fedf uPD7002 Analogue to digital converter */ | |
220 | AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA Tube system interface */ | |
221 | AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS Rom (continued) */ | |
221 | /* W: fe30-fe3f 84LS161 Paged ROM selector */ | |
222 | AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */ | |
223 | AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */ | |
224 | AM_IMPORT_FROM(bbc_base) | |
222 | 225 | ADDRESS_MAP_END |
223 | 226 | |
224 | 227 | |
225 | 228 | static ADDRESS_MAP_START( bbcbp128_mem, AS_PROGRAM, 8, bbc_state ) |
226 | ADDRESS_MAP_UNMAP_HIGH | |
227 | ||
228 | 229 | AM_RANGE(0x0000, 0x2fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorybp1_w) /* 0000-2fff Regular Ram */ |
229 | 230 | AM_RANGE(0x3000, 0x7fff) AM_READ_BANK("bank2") AM_WRITE(bbc_memorybp2_w) /* 3000-7fff Video/Shadow Ram */ |
230 | 231 | AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_128_w) /* 8000-afff Paged ROM or 12K of SWRAM */ |
231 | 232 | AM_RANGE(0xb000, 0xbfff) AM_READ_BANK("bank6") AM_WRITE(bbc_memorybp6_128_w) /* b000-bfff Rest of paged ROM area */ |
232 | AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */ | |
233 | AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */ | |
234 | /* fe00-feff Shiela Address Page */ | |
235 | AM_RANGE(0xfe00, 0xfe07) AM_READWRITE(bbc_6845_r, bbc_6845_w) /* fe00-fe07 6845 CRTC Video controller */ | |
236 | AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) | |
237 | AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_r, data_w) | |
238 | AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */ | |
239 | AM_RANGE(0xfe10, 0xfe17) AM_NOP /* fe10-fe17 Serial ULA Serial system chip */ | |
240 | AM_RANGE(0xfe18, 0xfe1f) AM_NOP /* fe18-fe1f INTOFF/STATID ECONET Interrupt Off / ID No. */ | |
241 | AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON ECONET Interrupt On */ | |
242 | /* W: fe20-fe2f Video ULA Video system chip */ | |
243 | 233 | AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w) /* R: fe30-fe3f NC Not Connected */ |
244 | /* W: fe30-fe3f 84LS161 Paged ROM selector */ | |
245 | AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */ | |
246 | AM_RANGE(0xfe60, 0xfe7f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write) /* fe60-fe7f 6522 VIA USER VIA */ | |
247 | AM_RANGE(0xfe80, 0xfe9f) AM_READWRITE(bbc_wd1770_read, bbc_wd1770_write) /* fe80-fe9f 1770 FDC Floppy disc controller */ | |
248 | AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC ECONET controller */ | |
249 | AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write) /* fec0-fedf uPD7002 Analogue to digital converter */ | |
250 | AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA Tube system interface */ | |
251 | AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS Rom (continued) */ | |
234 | /* W: fe30-fe3f 84LS161 Paged ROM selector */ | |
235 | AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */ | |
236 | AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */ | |
237 | AM_IMPORT_FROM(bbc_base) | |
252 | 238 | ADDRESS_MAP_END |
253 | 239 | |
254 | 240 | |
241 | static ADDRESS_MAP_START( reutapm_mem, AS_PROGRAM, 8, bbc_state ) | |
242 | AM_RANGE(0x0000, 0x2fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorybp1_w) /* 0000-2fff Regular Ram */ | |
243 | AM_RANGE(0x3000, 0x7fff) AM_READ_BANK("bank2") AM_WRITE(bbc_memorybp2_w) /* 3000-7fff Video/Shadow Ram */ | |
244 | AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_w) /* 8000-afff Paged ROM or 12K of SWRAM */ | |
245 | AM_RANGE(0xb000, 0xbfff) AM_READ_BANK("bank6") /* b000-bfff Rest of paged ROM area */ | |
246 | AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w) /* R: fe30-fe3f NC Not Connected */ | |
247 | /* W: fe30-fe3f 84LS161 Paged ROM selector */ | |
248 | AM_RANGE(0xfe80, 0xfe83) AM_NOP /* fe80-fe83 1770 FDC Drive control register */ | |
249 | AM_RANGE(0xfe84, 0xfe9f) AM_NOP /* fe84-fe9f 1770 FDC Floppy disc controller */ | |
250 | AM_IMPORT_FROM(bbc_base) | |
251 | ADDRESS_MAP_END | |
252 | ||
255 | 253 | /****************************************************************************** |
256 | 254 | &FC00-&FCFF FRED |
257 | 255 | &FD00-&FDFF JIM |
r249189 | r249190 | |
263 | 261 | |
264 | 262 | &20-&23 Video ULA - Video system chip 4 ( 2 bytes x 2 ) |
265 | 263 | &24-&27 FDC Latch 1770 Control latch 1770 Control latch 4 ( 1 byte x 4 ) |
266 | &28-&2F 1770 registers 1770 Disc Controller 1 | |
264 | &28-&2F 1770 registers 1770 Disc Controller 1770 Disc Controller 8 ( 4 bytes x 2 ) | |
267 | 265 | &30-&33 ROMSEL - ROM Select 4 ( 1 byte x 4 ) |
268 | 266 | &34-&37 ACCCON ACCCON select reg. ACCCON select reg 4 ( 1 byte x 4 ) |
269 | 267 | &38-&3F NC - - |
r249189 | r249190 | |
282 | 280 | AM_RANGE(0x8000, 0x8fff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybm4_w) /* 8000-8fff Paged ROM/RAM or 4K of RAM ANDY */ |
283 | 281 | AM_RANGE(0x9000, 0xbfff) AM_READ_BANK("bank5") AM_WRITE(bbc_memorybm5_w) /* 9000-bfff Rest of paged ROM/RAM area */ |
284 | 282 | AM_RANGE(0xc000, 0xdfff) AM_READ_BANK("bank7") AM_WRITE(bbc_memorybm7_w) /* c000-dfff OS ROM or 8K of RAM HAZEL */ |
285 | AM_RANGE(0xe000, 0xfbff) AM_ROM AM_REGION("os", 0x2000) /* e000-fbff OS ROM */ | |
286 | AM_RANGE(0xfc00, 0xfeff) AM_READ_BANK("bank8") AM_WRITE(bbcm_w) /* this is now processed directly because it can be ROM or hardware */ | |
287 | AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS ROM (continued) */ | |
283 | AM_RANGE(0xe000, 0xfbff) AM_ROM AM_REGION("os", 0x2000) /* e000-fbff OS ROM */ | |
284 | AM_RANGE(0xfc00, 0xfeff) AM_READ_BANK("bank8") AM_WRITE(bbcm_w) /* processed directly because it can be ROM or hardware */ | |
285 | AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS ROM (continued) */ | |
288 | 286 | ADDRESS_MAP_END |
289 | 287 | |
290 | 288 | |
r249189 | r249190 | |
464 | 462 | |
465 | 463 | static INPUT_PORTS_START(bbc_dipswitch) |
466 | 464 | PORT_MODIFY("COL2") |
467 | PORT_DIPNAME(0x01, 0x01, "D | |
465 | PORT_DIPNAME(0x01, 0x01, "Default File System") PORT_DIPLOCATION("KBD:1") | |
468 | 466 | PORT_DIPSETTING( 0x00, "NFS" ) |
469 | 467 | PORT_DIPSETTING( 0x01, "DFS" ) |
470 | 468 | |
471 | 469 | PORT_MODIFY("COL3") |
472 | PORT_DIPNAME(0x01, 0x01, " | |
470 | PORT_DIPNAME(0x01, 0x01, "Not Used") PORT_DIPLOCATION("KBD:2") | |
473 | 471 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
474 | 472 | PORT_DIPSETTING( 0x01, DEF_STR( On )) |
475 | 473 | |
476 | 474 | PORT_MODIFY("COL4") |
477 | PORT_DIPNAME(0x01, 0x01, "D | |
475 | PORT_DIPNAME(0x01, 0x01, "Disc Timings") PORT_DIPLOCATION("KBD:3") | |
478 | 476 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
479 | 477 | PORT_DIPSETTING( 0x01, DEF_STR( On )) |
480 | 478 | |
481 | 479 | PORT_MODIFY("COL5") |
482 | PORT_DIPNAME(0x01, 0x01, "D | |
480 | PORT_DIPNAME(0x01, 0x01, "Disc Timings") PORT_DIPLOCATION("KBD:4") | |
483 | 481 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
484 | 482 | PORT_DIPSETTING( 0x01, DEF_STR( On )) |
485 | 483 | |
486 | 484 | PORT_MODIFY("COL6") |
487 | PORT_DIPNAME(0x01, 0x01, " | |
485 | PORT_DIPNAME(0x01, 0x01, "Boot") PORT_DIPLOCATION("KBD:5") | |
488 | 486 | PORT_DIPSETTING( 0x00, "SHIFT" ) |
489 | 487 | PORT_DIPSETTING( 0x01, "SHIFT-BREAK" ) |
490 | 488 | |
491 | 489 | PORT_MODIFY("COL7") |
492 | PORT_DIPNAME(0x01, 0x01, " | |
490 | PORT_DIPNAME(0x01, 0x01, "Screen Mode") PORT_DIPLOCATION("KBD:6") | |
493 | 491 | PORT_DIPSETTING( 0x00, "+0" ) |
494 | 492 | PORT_DIPSETTING( 0x01, "+4" ) |
495 | ||
493 | ||
496 | 494 | PORT_MODIFY("COL8") |
497 | PORT_DIPNAME(0x01, 0x01, " | |
495 | PORT_DIPNAME(0x01, 0x01, "Screen Mode") PORT_DIPLOCATION("KBD:7") | |
498 | 496 | PORT_DIPSETTING( 0x00, "+0" ) |
499 | 497 | PORT_DIPSETTING( 0x01, "+2" ) |
500 | 498 | |
501 | 499 | PORT_MODIFY("COL9") |
502 | PORT_DIPNAME(0x01, 0x01, " | |
500 | PORT_DIPNAME(0x01, 0x01, "Screen Mode") PORT_DIPLOCATION("KBD:8") | |
503 | 501 | PORT_DIPSETTING( 0x00, "+0" ) |
504 | 502 | PORT_DIPSETTING( 0x01, "+1" ) |
505 | 503 | INPUT_PORTS_END |
506 | 504 | |
507 | 505 | |
506 | static INPUT_PORTS_START(bbc_links) | |
507 | PORT_START("S11") | |
508 | PORT_DIPNAME(0xff, 0xfe, "Econet ID") PORT_DIPLOCATION("S11:1,2,3,4,5,6,7,8") | |
509 | PORT_DIPSETTING( 0x00, "0" ) PORT_DIPSETTING( 0x01, "1" ) PORT_DIPSETTING( 0x02, "2" ) PORT_DIPSETTING( 0x03, "3" ) PORT_DIPSETTING( 0x04, "4" ) | |
510 | PORT_DIPSETTING( 0x05, "5" ) PORT_DIPSETTING( 0x06, "6" ) PORT_DIPSETTING( 0x07, "7" ) PORT_DIPSETTING( 0x08, "8" ) PORT_DIPSETTING( 0x09, "9" ) | |
511 | PORT_DIPSETTING( 0x0a, "10" ) PORT_DIPSETTING( 0x0b, "11" ) PORT_DIPSETTING( 0x0c, "12" ) PORT_DIPSETTING( 0x0d, "13" ) PORT_DIPSETTING( 0x0e, "14" ) | |
512 | PORT_DIPSETTING( 0x0f, "15" ) PORT_DIPSETTING( 0x10, "16" ) PORT_DIPSETTING( 0x11, "17" ) PORT_DIPSETTING( 0x12, "18" ) PORT_DIPSETTING( 0x13, "19" ) | |
513 | PORT_DIPSETTING( 0x14, "20" ) PORT_DIPSETTING( 0x15, "21" ) PORT_DIPSETTING( 0x16, "22" ) PORT_DIPSETTING( 0x17, "23" ) PORT_DIPSETTING( 0x18, "24" ) | |
514 | PORT_DIPSETTING( 0x19, "25" ) PORT_DIPSETTING( 0x1a, "26" ) PORT_DIPSETTING( 0x1b, "27" ) PORT_DIPSETTING( 0x1c, "28" ) PORT_DIPSETTING( 0x1d, "29" ) | |
515 | PORT_DIPSETTING( 0x1e, "30" ) PORT_DIPSETTING( 0x1f, "31" ) PORT_DIPSETTING( 0x20, "32" ) PORT_DIPSETTING( 0x21, "33" ) PORT_DIPSETTING( 0x22, "34" ) | |
516 | PORT_DIPSETTING( 0x23, "35" ) PORT_DIPSETTING( 0x24, "36" ) PORT_DIPSETTING( 0x25, "37" ) PORT_DIPSETTING( 0x26, "38" ) PORT_DIPSETTING( 0x27, "39" ) | |
517 | PORT_DIPSETTING( 0x28, "40" ) PORT_DIPSETTING( 0x29, "41" ) PORT_DIPSETTING( 0x2a, "42" ) PORT_DIPSETTING( 0x2b, "43" ) PORT_DIPSETTING( 0x2c, "44" ) | |
518 | PORT_DIPSETTING( 0x2d, "45" ) PORT_DIPSETTING( 0x2e, "46" ) PORT_DIPSETTING( 0x2f, "47" ) PORT_DIPSETTING( 0x30, "48" ) PORT_DIPSETTING( 0x31, "49" ) | |
519 | PORT_DIPSETTING( 0x32, "50" ) PORT_DIPSETTING( 0x33, "51" ) PORT_DIPSETTING( 0x34, "52" ) PORT_DIPSETTING( 0x35, "53" ) PORT_DIPSETTING( 0x36, "54" ) | |
520 | PORT_DIPSETTING( 0x37, "15" ) PORT_DIPSETTING( 0x38, "56" ) PORT_DIPSETTING( 0x39, "57" ) PORT_DIPSETTING( 0x3a, "58" ) PORT_DIPSETTING( 0x3b, "59" ) | |
521 | PORT_DIPSETTING( 0x3c, "60" ) PORT_DIPSETTING( 0x3d, "61" ) PORT_DIPSETTING( 0x3e, "62" ) PORT_DIPSETTING( 0x3f, "63" ) PORT_DIPSETTING( 0x40, "64" ) | |
522 | PORT_DIPSETTING( 0x41, "65" ) PORT_DIPSETTING( 0x42, "66" ) PORT_DIPSETTING( 0x43, "67" ) PORT_DIPSETTING( 0x44, "68" ) PORT_DIPSETTING( 0x45, "69" ) | |
523 | PORT_DIPSETTING( 0x46, "70" ) PORT_DIPSETTING( 0x47, "71" ) PORT_DIPSETTING( 0x48, "72" ) PORT_DIPSETTING( 0x49, "73" ) PORT_DIPSETTING( 0x4a, "74" ) | |
524 | PORT_DIPSETTING( 0x4b, "75" ) PORT_DIPSETTING( 0x4c, "76" ) PORT_DIPSETTING( 0x4d, "77" ) PORT_DIPSETTING( 0x4e, "78" ) PORT_DIPSETTING( 0x4f, "79" ) | |
525 | PORT_DIPSETTING( 0x50, "80" ) PORT_DIPSETTING( 0x51, "81" ) PORT_DIPSETTING( 0x52, "82" ) PORT_DIPSETTING( 0x53, "83" ) PORT_DIPSETTING( 0x54, "84" ) | |
526 | PORT_DIPSETTING( 0x55, "85" ) PORT_DIPSETTING( 0x56, "86" ) PORT_DIPSETTING( 0x57, "87" ) PORT_DIPSETTING( 0x58, "88" ) PORT_DIPSETTING( 0x59, "89" ) | |
527 | PORT_DIPSETTING( 0x5a, "90" ) PORT_DIPSETTING( 0x5b, "91" ) PORT_DIPSETTING( 0x5c, "92" ) PORT_DIPSETTING( 0x5d, "93" ) PORT_DIPSETTING( 0x5e, "94" ) | |
528 | PORT_DIPSETTING( 0x5f, "95" ) PORT_DIPSETTING( 0x60, "96" ) PORT_DIPSETTING( 0x61, "97" ) PORT_DIPSETTING( 0x62, "98" ) PORT_DIPSETTING( 0x63, "99" ) | |
529 | PORT_DIPSETTING( 0x64, "100" ) PORT_DIPSETTING( 0x65, "101" ) PORT_DIPSETTING( 0x66, "102" ) PORT_DIPSETTING( 0x67, "103" ) PORT_DIPSETTING( 0x68, "104" ) | |
530 | PORT_DIPSETTING( 0x69, "105" ) PORT_DIPSETTING( 0x6a, "106" ) PORT_DIPSETTING( 0x6b, "107" ) PORT_DIPSETTING( 0x6c, "108" ) PORT_DIPSETTING( 0x6d, "109" ) | |
531 | PORT_DIPSETTING( 0x6e, "110" ) PORT_DIPSETTING( 0x6f, "111" ) PORT_DIPSETTING( 0x70, "112" ) PORT_DIPSETTING( 0x71, "113" ) PORT_DIPSETTING( 0x72, "114" ) | |
532 | PORT_DIPSETTING( 0x73, "115" ) PORT_DIPSETTING( 0x74, "116" ) PORT_DIPSETTING( 0x75, "117" ) PORT_DIPSETTING( 0x76, "118" ) PORT_DIPSETTING( 0x77, "119" ) | |
533 | PORT_DIPSETTING( 0x78, "120" ) PORT_DIPSETTING( 0x79, "121" ) PORT_DIPSETTING( 0x7a, "122" ) PORT_DIPSETTING( 0x7b, "123" ) PORT_DIPSETTING( 0x7c, "124" ) | |
534 | PORT_DIPSETTING( 0x7d, "125" ) PORT_DIPSETTING( 0x7e, "126" ) PORT_DIPSETTING( 0x7f, "127" ) PORT_DIPSETTING( 0x80, "128" ) PORT_DIPSETTING( 0x81, "129" ) | |
535 | PORT_DIPSETTING( 0x82, "130" ) PORT_DIPSETTING( 0x83, "131" ) PORT_DIPSETTING( 0x84, "132" ) PORT_DIPSETTING( 0x85, "133" ) PORT_DIPSETTING( 0x86, "134" ) | |
536 | PORT_DIPSETTING( 0x87, "135" ) PORT_DIPSETTING( 0x88, "136" ) PORT_DIPSETTING( 0x89, "137" ) PORT_DIPSETTING( 0x8a, "138" ) PORT_DIPSETTING( 0x8b, "139" ) | |
537 | PORT_DIPSETTING( 0x8c, "140" ) PORT_DIPSETTING( 0x8d, "141" ) PORT_DIPSETTING( 0x8e, "142" ) PORT_DIPSETTING( 0x8f, "143" ) PORT_DIPSETTING( 0x90, "144" ) | |
538 | PORT_DIPSETTING( 0x91, "145" ) PORT_DIPSETTING( 0x92, "146" ) PORT_DIPSETTING( 0x93, "147" ) PORT_DIPSETTING( 0x94, "148" ) PORT_DIPSETTING( 0x95, "149" ) | |
539 | PORT_DIPSETTING( 0x96, "150" ) PORT_DIPSETTING( 0x97, "151" ) PORT_DIPSETTING( 0x98, "152" ) PORT_DIPSETTING( 0x99, "153" ) PORT_DIPSETTING( 0x9a, "154" ) | |
540 | PORT_DIPSETTING( 0x9b, "155" ) PORT_DIPSETTING( 0x9c, "156" ) PORT_DIPSETTING( 0x9d, "157" ) PORT_DIPSETTING( 0x9e, "158" ) PORT_DIPSETTING( 0x9f, "159" ) | |
541 | PORT_DIPSETTING( 0xa0, "160" ) PORT_DIPSETTING( 0xa1, "161" ) PORT_DIPSETTING( 0xa2, "162" ) PORT_DIPSETTING( 0xa3, "163" ) PORT_DIPSETTING( 0xa4, "164" ) | |
542 | PORT_DIPSETTING( 0xa5, "165" ) PORT_DIPSETTING( 0xa6, "166" ) PORT_DIPSETTING( 0xa7, "167" ) PORT_DIPSETTING( 0xa8, "168" ) PORT_DIPSETTING( 0xa9, "169" ) | |
543 | PORT_DIPSETTING( 0xaa, "170" ) PORT_DIPSETTING( 0xab, "171" ) PORT_DIPSETTING( 0xac, "172" ) PORT_DIPSETTING( 0xad, "173" ) PORT_DIPSETTING( 0xae, "174" ) | |
544 | PORT_DIPSETTING( 0xaf, "175" ) PORT_DIPSETTING( 0xb0, "176" ) PORT_DIPSETTING( 0xb1, "177" ) PORT_DIPSETTING( 0xb2, "178" ) PORT_DIPSETTING( 0xb3, "179" ) | |
545 | PORT_DIPSETTING( 0xb4, "180" ) PORT_DIPSETTING( 0xb5, "181" ) PORT_DIPSETTING( 0xb6, "182" ) PORT_DIPSETTING( 0xb7, "183" ) PORT_DIPSETTING( 0xb8, "184" ) | |
546 | PORT_DIPSETTING( 0xb9, "185" ) PORT_DIPSETTING( 0xba, "186" ) PORT_DIPSETTING( 0xbb, "187" ) PORT_DIPSETTING( 0xbc, "188" ) PORT_DIPSETTING( 0xbd, "189" ) | |
547 | PORT_DIPSETTING( 0xbe, "190" ) PORT_DIPSETTING( 0xbf, "191" ) PORT_DIPSETTING( 0xc0, "192" ) PORT_DIPSETTING( 0xc1, "193" ) PORT_DIPSETTING( 0xc2, "194" ) | |
548 | PORT_DIPSETTING( 0xc3, "195" ) PORT_DIPSETTING( 0xc4, "196" ) PORT_DIPSETTING( 0xc5, "197" ) PORT_DIPSETTING( 0xc6, "198" ) PORT_DIPSETTING( 0xc7, "199" ) | |
549 | PORT_DIPSETTING( 0xc8, "200" ) PORT_DIPSETTING( 0xc9, "201" ) PORT_DIPSETTING( 0xca, "202" ) PORT_DIPSETTING( 0xcb, "203" ) PORT_DIPSETTING( 0xcc, "204" ) | |
550 | PORT_DIPSETTING( 0xcd, "205" ) PORT_DIPSETTING( 0xce, "206" ) PORT_DIPSETTING( 0xcf, "207" ) PORT_DIPSETTING( 0xd0, "208" ) PORT_DIPSETTING( 0xd1, "209" ) | |
551 | PORT_DIPSETTING( 0xd2, "210" ) PORT_DIPSETTING( 0xd3, "211" ) PORT_DIPSETTING( 0xd4, "212" ) PORT_DIPSETTING( 0xd5, "213" ) PORT_DIPSETTING( 0xd6, "214" ) | |
552 | PORT_DIPSETTING( 0xd7, "215" ) PORT_DIPSETTING( 0xd8, "216" ) PORT_DIPSETTING( 0xd9, "217" ) PORT_DIPSETTING( 0xda, "218" ) PORT_DIPSETTING( 0xdb, "219" ) | |
553 | PORT_DIPSETTING( 0xdc, "220" ) PORT_DIPSETTING( 0xdd, "221" ) PORT_DIPSETTING( 0xde, "222" ) PORT_DIPSETTING( 0xdf, "223" ) PORT_DIPSETTING( 0xe0, "224" ) | |
554 | PORT_DIPSETTING( 0xe1, "225" ) PORT_DIPSETTING( 0xe2, "226" ) PORT_DIPSETTING( 0xe3, "227" ) PORT_DIPSETTING( 0xe4, "228" ) PORT_DIPSETTING( 0xe5, "229" ) | |
555 | PORT_DIPSETTING( 0xe6, "230" ) PORT_DIPSETTING( 0xe7, "231" ) PORT_DIPSETTING( 0xe8, "232" ) PORT_DIPSETTING( 0xe9, "233" ) PORT_DIPSETTING( 0xea, "234" ) | |
556 | PORT_DIPSETTING( 0xeb, "235" ) PORT_DIPSETTING( 0xec, "236" ) PORT_DIPSETTING( 0xed, "237" ) PORT_DIPSETTING( 0xee, "238" ) PORT_DIPSETTING( 0xef, "239" ) | |
557 | PORT_DIPSETTING( 0xf0, "240" ) PORT_DIPSETTING( 0xf1, "241" ) PORT_DIPSETTING( 0xf2, "242" ) PORT_DIPSETTING( 0xf3, "243" ) PORT_DIPSETTING( 0xf4, "244" ) | |
558 | PORT_DIPSETTING( 0xf5, "245" ) PORT_DIPSETTING( 0xf6, "246" ) PORT_DIPSETTING( 0xf7, "247" ) PORT_DIPSETTING( 0xf8, "248" ) PORT_DIPSETTING( 0xf9, "249" ) | |
559 | PORT_DIPSETTING( 0xfa, "250" ) PORT_DIPSETTING( 0xfb, "251" ) PORT_DIPSETTING( 0xfc, "252" ) PORT_DIPSETTING( 0xfd, "253" ) PORT_DIPSETTING( 0xfe, "254" ) | |
560 | PORT_DIPSETTING( 0xff, "255" ) | |
561 | INPUT_PORTS_END | |
562 | ||
563 | ||
508 | 564 | static INPUT_PORTS_START(bbc_joy) |
509 | 565 | PORT_START("JOY0") |
510 | 566 | PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_MINMAX(0x0,0xff ) PORT_PLAYER(1) |
r249189 | r249190 | |
523 | 579 | static INPUT_PORTS_START(bbc_config) |
524 | 580 | PORT_START("BBCCONFIG") |
525 | 581 | |
526 | // PORT_CONFNAME( 0x01, 0x00, "Speech Upgrade" ) | |
527 | // PORT_CONFSETTING( 0x00, DEF_STR( On ) ) | |
528 | // PORT_CONFSETTING( 0x01, DEF_STR( Off ) ) | |
582 | PORT_CONFNAME( 0x01, 0x00, "Speech Upgrade" ) | |
583 | PORT_CONFSETTING( 0x00, DEF_STR( On ) ) | |
584 | PORT_CONFSETTING( 0x01, DEF_STR( Off ) ) | |
529 | 585 | |
530 | PORT_CONFNAME( 0x07, 0x00, "DFS Select" ) | |
531 | PORT_CONFSETTING( 0x00, "Acorn DFS 0.90 (read only)" ) | |
532 | PORT_CONFSETTING( 0x01, "Acorn DNFS 1.20 (read only)" ) | |
533 | PORT_CONFSETTING( 0x02, "Watford DFS 1.44 (read only)" ) | |
534 | PORT_CONFSETTING( 0x03, "Acorn DFS E00 (hack / read only)" ) | |
535 | PORT_CONFSETTING( 0x04, "Acorn DDFS" ) | |
536 | PORT_CONFSETTING( 0x05, "Watford DDFS (not working)" ) | |
537 | PORT_CONFSETTING( 0x06, "Opus Challenger 512K (RAM drive only)" ) | |
538 | PORT_CONFSETTING( 0x07, DEF_STR( None ) ) | |
539 | ||
540 | 586 | PORT_CONFNAME( 0x18, 0x00, "Sideways RAM Type" ) |
541 | 587 | PORT_CONFSETTING( 0x00, DEF_STR( None ) ) |
542 | 588 | PORT_CONFSETTING( 0x08, "Solidisk 128K (fe62)" ) |
r249189 | r249190 | |
554 | 600 | PORT_INCLUDE(bbc_config) |
555 | 601 | PORT_INCLUDE(bbc_keyboard) |
556 | 602 | PORT_INCLUDE(bbc_dipswitch) |
603 | PORT_INCLUDE(bbc_links) | |
557 | 604 | PORT_INCLUDE(bbc_joy) |
558 | 605 | INPUT_PORTS_END |
559 | 606 | |
607 | static INPUT_PORTS_START(abc) | |
608 | PORT_INCLUDE(bbc_keyboard) | |
609 | PORT_INCLUDE(bbc_keypad) | |
610 | PORT_INCLUDE(bbc_dipswitch) | |
611 | PORT_INCLUDE(bbc_links) | |
612 | PORT_INCLUDE(bbc_joy) | |
613 | INPUT_PORTS_END | |
614 | ||
560 | 615 | static INPUT_PORTS_START(bbcm) |
561 | 616 | PORT_INCLUDE(bbc_keyboard) |
562 | 617 | PORT_INCLUDE(bbc_keypad) |
r249189 | r249190 | |
572 | 627 | } |
573 | 628 | |
574 | 629 | |
575 | //static const struct TMS5220interface tms5220_interface = | |
576 | //{ | |
577 | // 680000L, | |
578 | // 50, | |
579 | // bbc_TMSint | |
580 | //}; | |
581 | ||
582 | ||
583 | ||
584 | 630 | WRITE_LINE_MEMBER(bbc_state::bbcb_acia6850_irq_w) |
585 | 631 | { |
586 | 632 | m_acia_irq = state; |
r249189 | r249190 | |
588 | 634 | check_interrupts(); |
589 | 635 | } |
590 | 636 | |
591 | static LEGACY_FLOPPY_OPTIONS_START(bbc) | |
592 | LEGACY_FLOPPY_OPTION( ssd80, "bbc,img,ssd", "BBC SSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, | |
593 | HEADS([1]) | |
594 | TRACKS([80]) | |
595 | SECTORS([10]) | |
596 | SECTOR_LENGTH([256]) | |
597 | FIRST_SECTOR_ID([0])) | |
598 | LEGACY_FLOPPY_OPTION( dsd80, "dsd", "BBC DSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, | |
599 | HEADS([2]) | |
600 | TRACKS([80]) | |
601 | SECTORS([10]) | |
602 | SECTOR_LENGTH([256]) | |
603 | FIRST_SECTOR_ID([0])) | |
604 | LEGACY_FLOPPY_OPTIONS_END | |
605 | 637 | |
606 | 638 | static const floppy_interface bbc_floppy_interface = |
607 | 639 | { |
r249189 | r249190 | |
610 | 642 | "floppy_5_25" |
611 | 643 | }; |
612 | 644 | |
613 | FLOPPY_FORMATS_MEMBER( bbc_state::floppy_formats ) | |
614 | FLOPPY_BBC_FORMAT | |
645 | FLOPPY_FORMATS_MEMBER( bbc_state::floppy_formats_525sd ) | |
646 | FLOPPY_BBC_SSD_525_FORMAT, | |
647 | FLOPPY_BBC_DSD_525_FORMAT | |
615 | 648 | FLOPPY_FORMATS_END |
616 | 649 | |
617 | static SLOT_INTERFACE_START( bbc_floppies ) | |
650 | FLOPPY_FORMATS_MEMBER( bbc_state::floppy_formats_525dd ) | |
651 | FLOPPY_BBC_SSD_525_FORMAT, | |
652 | FLOPPY_BBC_DSD_525_FORMAT, | |
653 | FLOPPY_BBC_ADF_525_FORMAT | |
654 | FLOPPY_FORMATS_END | |
655 | ||
656 | FLOPPY_FORMATS_MEMBER( bbc_state::floppy_formats_35dd ) | |
657 | FLOPPY_BBC_ADF_35_FORMAT | |
658 | FLOPPY_FORMATS_END | |
659 | ||
660 | static SLOT_INTERFACE_START( bbc_floppies_525 ) | |
618 | 661 | SLOT_INTERFACE("sssd", FLOPPY_525_SSSD) |
619 | 662 | SLOT_INTERFACE("sd", FLOPPY_525_SD) |
620 | 663 | SLOT_INTERFACE("ssdd", FLOPPY_525_SSDD) |
r249189 | r249190 | |
623 | 666 | SLOT_INTERFACE("qd", FLOPPY_525_QD) |
624 | 667 | SLOT_INTERFACE_END |
625 | 668 | |
669 | static SLOT_INTERFACE_START( bbc_floppies_35 ) | |
670 | SLOT_INTERFACE("qd", FLOPPY_35_DD) | |
671 | SLOT_INTERFACE_END | |
672 | ||
626 | 673 | WRITE_LINE_MEMBER(bbc_state::econet_clk_w) |
627 | 674 | { |
628 | 675 | m_adlc->rxc_w(state); |
r249189 | r249190 | |
649 | 696 | MACHINE_CONFIG_END |
650 | 697 | |
651 | 698 | |
699 | /*************************************************************************** | |
700 | ||
701 | BBC Micro | |
702 | ||
703 | ****************************************************************************/ | |
704 | ||
705 | ||
652 | 706 | static MACHINE_CONFIG_START( bbca, bbc_state ) |
653 | 707 | /* basic machine hardware */ |
654 | 708 | MCFG_CPU_ADD("maincpu", M6502, 2000000) /* 2.00 MHz */ |
r249189 | r249190 | |
747 | 801 | MCFG_RAM_DEFAULT_VALUE(0x00) |
748 | 802 | |
749 | 803 | /* speech hardware */ |
750 | // MCFG_SOUND_ADD("tms5220", TMS5220, 640000) | |
751 | // MCFG_TMS52XX_SPEECHROM("vsm") | |
804 | MCFG_DEVICE_ADD("vsm", SPEECHROM, 0) | |
805 | MCFG_SOUND_ADD("tms5220", TMS5220, 640000) | |
806 | MCFG_TMS52XX_SPEECHROM("vsm") | |
752 | 807 | |
753 | 808 | /* user via */ |
754 | 809 | MCFG_DEVICE_ADD("via6522_1", VIA6522, 1000000) |
r249189 | r249190 | |
766 | 821 | /* printer */ |
767 | 822 | MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer") |
768 | 823 | MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("via6522_1", via6522_device, write_ca1)) MCFG_DEVCB_INVERT /* ack seems to be inverted? */ |
769 | ||
770 | 824 | MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") |
771 | 825 | |
772 | 826 | /* fdc */ |
r249189 | r249190 | |
776 | 830 | |
777 | 831 | MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface) |
778 | 832 | |
779 | MCFG_WD1770_ADD("wd177x", XTAL_16MHz / 2) | |
780 | MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w)) | |
781 | MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w)) | |
782 | ||
783 | MCFG_FLOPPY_DRIVE_ADD("wd177x:0", bbc_floppies, "qd", bbc_state::floppy_formats) | |
784 | MCFG_FLOPPY_DRIVE_ADD("wd177x:1", bbc_floppies, "qd", bbc_state::floppy_formats) | |
785 | ||
786 | 833 | /* software lists */ |
787 | 834 | MCFG_DEVICE_REMOVE("cass_ls_a") |
788 | 835 | MCFG_SOFTWARE_LIST_ADD("cass_ls_b", "bbcb_cass") |
r249189 | r249190 | |
790 | 837 | MACHINE_CONFIG_END |
791 | 838 | |
792 | 839 | |
793 | static MACHINE_CONFIG_DERIVED( | |
840 | static MACHINE_CONFIG_DERIVED(bbcb1770, bbcb) | |
794 | 841 | /* basic machine hardware */ |
795 | MCFG_CPU_MODIFY( "maincpu" ) | |
796 | MCFG_CPU_PROGRAM_MAP(bbcb_mem) | |
842 | MCFG_CPU_MODIFY("maincpu") | |
843 | MCFG_CPU_PROGRAM_MAP(bbcb1770_mem) | |
797 | 844 | |
798 | MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcb ) | |
799 | MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcb ) | |
800 | MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcb ) | |
845 | /* fdc */ | |
846 | MCFG_DEVICE_REMOVE("i8271") | |
847 | MCFG_DEVICE_REMOVE(FLOPPY_0) | |
848 | MCFG_DEVICE_REMOVE(FLOPPY_1) | |
801 | 849 | |
802 | /* internal ram */ | |
803 | MCFG_RAM_MODIFY(RAM_TAG) | |
804 | MCFG_RAM_DEFAULT_SIZE("32K") | |
805 | MCFG_RAM_DEFAULT_VALUE(0x00) | |
850 | MCFG_WD1770_ADD("wd1770", XTAL_16MHz / 2) | |
851 | MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w)) | |
852 | MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w)) | |
806 | 853 | |
807 | /* speech hardware */ | |
808 | // MCFG_SOUND_ADD("tms5220", TMS5220, 640000) | |
809 | // MCFG_TMS52XX_SPEECHROM("vsm") | |
854 | MCFG_FLOPPY_DRIVE_ADD("wd1770:0", bbc_floppies_525, "qd", bbc_state::floppy_formats_525dd) | |
855 | MCFG_FLOPPY_DRIVE_SOUND(true) | |
856 | MCFG_FLOPPY_DRIVE_ADD("wd1770:1", bbc_floppies_525, "qd", bbc_state::floppy_formats_525dd) | |
857 | MCFG_FLOPPY_DRIVE_SOUND(true) | |
858 | MACHINE_CONFIG_END | |
810 | 859 | |
860 | ||
861 | static MACHINE_CONFIG_DERIVED( bbcb_de, bbcb ) | |
862 | /* software lists */ | |
863 | MCFG_DEVICE_REMOVE("cass_ls_b") | |
864 | MCFG_SOFTWARE_LIST_ADD("flop_ls_b_de", "bbcb_de_cass") | |
865 | MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_b", "bbcb_cass") | |
866 | MACHINE_CONFIG_END | |
867 | ||
868 | ||
869 | static MACHINE_CONFIG_DERIVED( bbcb_us, bbcb ) | |
811 | 870 | /* video hardware */ |
812 | 871 | MCFG_SCREEN_MODIFY("screen") |
813 | 872 | MCFG_SCREEN_SIZE(640, 200) |
814 | 873 | MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) |
815 | 874 | MCFG_SCREEN_REFRESH_RATE(60) |
816 | 875 | |
817 | /* system via */ | |
818 | MCFG_DEVICE_ADD("via6522_1", VIA6522, 1000000) | |
819 | MCFG_VIA6522_READPB_HANDLER(READ8(bbc_state, bbcb_via_user_read_portb)) | |
820 | MCFG_VIA6522_WRITEPA_HANDLER(DEVWRITE8("cent_data_out", output_latch_device, write)) | |
821 | MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(bbc_state, bbcb_via_user_write_portb)) | |
822 | MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE("centronics", centronics_device, write_strobe)) | |
823 | MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_user_irq_w)) | |
824 | ||
825 | /* adc */ | |
826 | MCFG_DEVICE_ADD("upd7002", UPD7002, 0) | |
827 | MCFG_UPD7002_GET_ANALOGUE_CB(bbc_state, BBC_get_analogue_input) | |
828 | MCFG_UPD7002_EOC_CB(bbc_state, BBC_uPD7002_EOC) | |
829 | ||
830 | /* printer */ | |
831 | MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer") | |
832 | MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("via6522_1", via6522_device, write_ca1)) MCFG_DEVCB_INVERT /* ack seems to be inverted? */ | |
833 | ||
834 | MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") | |
835 | ||
836 | /* fdc */ | |
837 | MCFG_DEVICE_ADD("i8271", I8271, 0) | |
838 | MCFG_I8271_IRQ_CALLBACK(WRITELINE(bbc_state, bbc_i8271_interrupt)) | |
839 | MCFG_I8271_FLOPPIES(FLOPPY_0, FLOPPY_1) | |
840 | ||
841 | MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface) | |
842 | ||
843 | MCFG_WD1770_ADD("wd177x", XTAL_16MHz / 2) | |
844 | MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w)) | |
845 | MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w)) | |
846 | ||
847 | MCFG_FLOPPY_DRIVE_ADD("wd177x:0", bbc_floppies, "qd", bbc_state::floppy_formats) | |
848 | MCFG_FLOPPY_DRIVE_ADD("wd177x:1", bbc_floppies, "qd", bbc_state::floppy_formats) | |
849 | ||
850 | 876 | /* software lists */ |
851 | MCFG_DEVICE_REMOVE("cass_ls_a") | |
852 | MCFG_SOFTWARE_LIST_ADD("cass_ls_b", "bbcb_cass") | |
853 | MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_a", "bbca_cass") | |
877 | MCFG_DEVICE_REMOVE("cass_ls_b") | |
878 | MCFG_SOFTWARE_LIST_ADD("flop_ls_b_us", "bbcb_us_flop") | |
879 | MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_b", "bbcb_cass") | |
854 | 880 | MACHINE_CONFIG_END |
855 | 881 | |
856 | 882 | |
857 | static MACHINE_CONFIG_DERIVED( bbcbp, bbcb ) | |
883 | static MACHINE_CONFIG_DERIVED( bbcbp, bbcb1770 ) | |
858 | 884 | /* basic machine hardware */ |
859 | 885 | MCFG_CPU_MODIFY( "maincpu" ) /* M6512 */ |
860 | 886 | MCFG_CPU_PROGRAM_MAP(bbcbp_mem) |
r249189 | r249190 | |
867 | 893 | MCFG_RAM_MODIFY(RAM_TAG) |
868 | 894 | MCFG_RAM_DEFAULT_SIZE("64K") |
869 | 895 | MCFG_RAM_DEFAULT_VALUE(0x00) |
870 | ||
871 | /* fdc */ | |
872 | MCFG_DEVICE_REMOVE("i8271") | |
873 | MCFG_DEVICE_REMOVE(FLOPPY_0) | |
874 | MCFG_DEVICE_REMOVE(FLOPPY_1) | |
875 | 896 | MACHINE_CONFIG_END |
876 | 897 | |
877 | 898 | |
878 | static MACHINE_CONFIG_DERIVED( bbcbp128, bbcb | |
899 | static MACHINE_CONFIG_DERIVED( bbcbp128, bbcb1770 ) | |
879 | 900 | /* basic machine hardware */ |
880 | 901 | MCFG_CPU_MODIFY( "maincpu" ) /* M6512 */ |
881 | 902 | MCFG_CPU_PROGRAM_MAP(bbcbp128_mem) |
903 | ||
882 | 904 | MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcbp) |
883 | 905 | MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcbp) |
884 | 906 | MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcbp) |
r249189 | r249190 | |
890 | 912 | MACHINE_CONFIG_END |
891 | 913 | |
892 | 914 | |
893 | /* | |
915 | /*************************************************************************** | |
894 | 916 | |
917 | Acorn Business Computers | |
918 | ||
919 | ****************************************************************************/ | |
920 | ||
921 | ||
922 | static MACHINE_CONFIG_DERIVED( abc110, bbcbp ) | |
923 | /* fdc */ | |
924 | MCFG_DEVICE_REMOVE("wd1770:1") | |
925 | ||
926 | /* Add Z80 co-processor */ | |
927 | ||
928 | /* Add ADAPTEC ACB-4000 Winchester Disc Controller */ | |
929 | ||
930 | /* Add 10MB ST-412 Winchester */ | |
931 | ||
932 | MACHINE_CONFIG_END | |
933 | ||
934 | ||
935 | static MACHINE_CONFIG_DERIVED( abc210, bbcbp ) | |
936 | /* fdc */ | |
937 | MCFG_DEVICE_REMOVE("wd1770:1") | |
938 | ||
939 | /* Add 32016 co-processor */ | |
940 | ||
941 | /* Add ADAPTEC ACB-4000 Winchester Disc Controller */ | |
942 | ||
943 | /* Add 10MB ST-412 Winchester ABC210 */ | |
944 | ||
945 | /* Add 20MB ST-412 Winchester Cambridge */ | |
946 | ||
947 | MACHINE_CONFIG_END | |
948 | ||
949 | ||
950 | static MACHINE_CONFIG_DERIVED( abc310, bbcbp ) | |
951 | /* fdc */ | |
952 | MCFG_DEVICE_REMOVE("wd1770:1") | |
953 | ||
954 | /* Add 80286 co-processor */ | |
955 | ||
956 | /* Add ADAPTEC ACB-4000 Winchester Disc Controller */ | |
957 | ||
958 | /* Add 10MB ST-412 Winchester */ | |
959 | ||
960 | MACHINE_CONFIG_END | |
961 | ||
962 | ||
963 | /*************************************************************************** | |
964 | ||
965 | Reuters APM Board (Application Processor Module) | |
966 | ||
967 | ****************************************************************************/ | |
968 | ||
969 | ||
970 | static MACHINE_CONFIG_DERIVED( reutapm, bbcbp ) | |
971 | /* basic machine hardware */ | |
972 | MCFG_CPU_MODIFY( "maincpu" ) /* M6512 */ | |
973 | MCFG_CPU_PROGRAM_MAP(reutapm_mem) | |
974 | ||
975 | /* sound hardware */ | |
976 | MCFG_DEVICE_REMOVE("mono") | |
977 | MCFG_DEVICE_REMOVE("sn76489") | |
978 | MCFG_DEVICE_REMOVE("vsm") | |
979 | MCFG_DEVICE_REMOVE("tms5220") | |
980 | ||
981 | /* cassette */ | |
982 | MCFG_DEVICE_REMOVE( "cassette" ) | |
983 | ||
984 | /* fdc */ | |
985 | MCFG_DEVICE_REMOVE("wd1770") | |
986 | ||
987 | /* software lists */ | |
988 | MCFG_DEVICE_REMOVE("cass_ls_a") | |
989 | MCFG_DEVICE_REMOVE("cass_ls_b") | |
990 | MACHINE_CONFIG_END | |
991 | ||
992 | ||
993 | /*************************************************************************** | |
994 | ||
995 | BBC Master Series | |
996 | ||
997 | ****************************************************************************/ | |
998 | ||
999 | ||
895 | 1000 | static MACHINE_CONFIG_START( bbcm, bbc_state ) |
896 | 1001 | /* basic machine hardware */ |
897 | 1002 | MCFG_CPU_ADD("maincpu", M65SC02, 2000000) /* 2.00 MHz */ |
r249189 | r249190 | |
943 | 1048 | /* printer */ |
944 | 1049 | MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer") |
945 | 1050 | MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("via6522_1", via6522_device, write_ca1)) MCFG_DEVCB_INVERT /* ack seems to be inverted? */ |
946 | ||
947 | 1051 | MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") |
948 | 1052 | |
949 | 1053 | /* cassette */ |
r249189 | r249190 | |
1001 | 1105 | MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_user_irq_w)) |
1002 | 1106 | |
1003 | 1107 | /* fdc */ |
1004 | MCFG_WD1770_ADD("wd177 | |
1108 | MCFG_WD1770_ADD("wd1770", XTAL_16MHz / 2) | |
1005 | 1109 | MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w)) |
1006 | 1110 | MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w)) |
1007 | 1111 | |
1008 | MCFG_FLOPPY_DRIVE_ADD("wd177x:0", bbc_floppies, "qd", bbc_state::floppy_formats) | |
1009 | MCFG_FLOPPY_DRIVE_ADD("wd177x:1", bbc_floppies, "qd", bbc_state::floppy_formats) | |
1112 | MCFG_FLOPPY_DRIVE_ADD("wd1770:0", bbc_floppies_525, "qd", bbc_state::floppy_formats_525dd) | |
1113 | MCFG_FLOPPY_DRIVE_SOUND(true) | |
1114 | MCFG_FLOPPY_DRIVE_ADD("wd1770:1", bbc_floppies_525, "qd", bbc_state::floppy_formats_525dd) | |
1115 | MCFG_FLOPPY_DRIVE_SOUND(true) | |
1010 | 1116 | |
1011 | 1117 | /* econet */ |
1012 | 1118 | MCFG_DEVICE_ADD("mc6854", MC6854, 0) |
r249189 | r249190 | |
1037 | 1143 | |
1038 | 1144 | |
1039 | 1145 | static MACHINE_CONFIG_DERIVED( bbcmet, bbcm ) |
1040 | ||
1041 | /* Remove all devices not present in this model */ | |
1042 | ||
1043 | 1146 | /* sound hardware */ |
1044 | // MCFG_DEVICE_REMOVE("mono") | |
1045 | // MCFG_DEVICE_REMOVE("sn76489") | |
1147 | MCFG_DEVICE_REMOVE("mono") | |
1148 | MCFG_DEVICE_REMOVE("sn76489") | |
1046 | 1149 | |
1047 | 1150 | /* printer */ |
1048 | ||
1151 | MCFG_DEVICE_REMOVE("centronics") | |
1049 | 1152 | |
1050 | 1153 | /* cassette */ |
1051 | 1154 | MCFG_DEVICE_REMOVE("cassette") |
r249189 | r249190 | |
1056 | 1159 | MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b") |
1057 | 1160 | |
1058 | 1161 | /* acia */ |
1059 | ||
1162 | MCFG_DEVICE_REMOVE("acia6850") | |
1060 | 1163 | MCFG_DEVICE_REMOVE(RS232_TAG) |
1164 | MCFG_DEVICE_REMOVE("acia_clock") | |
1061 | 1165 | |
1062 | 1166 | /* devices */ |
1063 | // MCFG_DEVICE_REMOVE("upd7002") | |
1064 | // MCFG_DEVICE_REMOVE("via6522_1") | |
1167 | MCFG_DEVICE_REMOVE("upd7002") | |
1168 | MCFG_DEVICE_REMOVE("via6522_1") | |
1065 | 1169 | |
1066 | 1170 | /* fdc */ |
1067 | ||
1171 | MCFG_DEVICE_REMOVE("wd1770") | |
1068 | 1172 | MACHINE_CONFIG_END |
1069 | 1173 | |
1070 | 1174 | |
r249189 | r249190 | |
1082 | 1186 | MACHINE_CONFIG_END |
1083 | 1187 | |
1084 | 1188 | |
1189 | /*************************************************************************** | |
1190 | ||
1191 | BBC Master Compact | |
1192 | ||
1193 | ****************************************************************************/ | |
1194 | ||
1195 | ||
1085 | 1196 | static MACHINE_CONFIG_DERIVED( bbcmc, bbcm ) |
1197 | /* cassette */ | |
1198 | MCFG_DEVICE_REMOVE("cassette") | |
1086 | 1199 | |
1087 | // MCFG_DEVICE_REMOVE("rtc") | |
1088 | ||
1089 | 1200 | /* fdc */ |
1090 | MCFG_DEVICE_REMOVE("wd177 | |
1201 | MCFG_DEVICE_REMOVE("wd1770") | |
1091 | 1202 | |
1092 | // MCFG_WD1772_ADD("wd177x", XTAL_16MHz / 2) | |
1093 | MCFG_WD1770_ADD("wd177x", XTAL_16MHz / 2) | |
1203 | MCFG_WD1772_ADD("wd1772", XTAL_16MHz / 2) | |
1094 | 1204 | MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w)) |
1095 | 1205 | MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w)) |
1096 | 1206 | |
1097 | MCFG_FLOPPY_DRIVE_ADD("wd177x:0", bbc_floppies, "qd", bbc_state::floppy_formats) | |
1098 | MCFG_FLOPPY_DRIVE_ADD("wd177x:1", bbc_floppies, "qd", bbc_state::floppy_formats) | |
1207 | MCFG_FLOPPY_DRIVE_ADD("wd1772:0", bbc_floppies_35, "qd", bbc_state::floppy_formats_35dd) | |
1208 | MCFG_FLOPPY_DRIVE_SOUND(true) | |
1209 | MCFG_FLOPPY_DRIVE_ADD("wd1772:1", bbc_floppies_35, NULL, bbc_state::floppy_formats_35dd) | |
1210 | MCFG_FLOPPY_DRIVE_SOUND(true) | |
1099 | 1211 | |
1212 | /* eeprom pcd8572 */ | |
1213 | //MCFG_DEVICE_REMOVE("rtc") | |
1214 | ||
1100 | 1215 | /* software lists */ |
1216 | MCFG_SOFTWARE_LIST_REMOVE("cass_ls_m") | |
1217 | MCFG_SOFTWARE_LIST_REMOVE("cass_ls_a") | |
1218 | MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b") | |
1101 | 1219 | MCFG_SOFTWARE_LIST_REMOVE("cart_ls_m") |
1102 | 1220 | MCFG_SOFTWARE_LIST_ADD("flop_ls_mc", "bbcmc_flop") |
1103 | 1221 | MACHINE_CONFIG_END |
1104 | 1222 | |
1105 | 1223 | |
1224 | static MACHINE_CONFIG_DERIVED(pro128s, bbcmc) | |
1225 | /* software lists */ | |
1226 | MCFG_SOFTWARE_LIST_REMOVE("flop_ls_mc") | |
1227 | MCFG_SOFTWARE_LIST_ADD("flop_ls_pro128s", "pro128s_flop") | |
1228 | MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("flop_ls_mc", "bbcmc_flop") | |
1229 | MACHINE_CONFIG_END | |
1230 | ||
1231 | ||
1106 | 1232 | /* the BBC came with 4 rom sockets on the motherboard as shown in the model A driver */ |
1107 | 1233 | /* you could get a number of rom upgrade boards that took this up to 16 roms as in the */ |
1108 | 1234 | /* model B driver */ |
r249189 | r249190 | |
1111 | 1237 | ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */ |
1112 | 1238 | |
1113 | 1239 | ROM_REGION(0x14000,"option",0) /* ROM */ |
1114 | /* rom page 0 00000 */ | |
1115 | /* rom page 1 04000 */ | |
1116 | /* rom page 2 08000 */ | |
1240 | /* rom page 0 00000 SPARE SOCKET */ | |
1241 | /* rom page 1 04000 SPARE SOCKET */ | |
1242 | /* rom page 2 08000 SPARE SOCKET */ | |
1117 | 1243 | /* rom page 3 0c000 BASIC */ |
1118 | 1244 | ROM_DEFAULT_BIOS("os12b2") |
1119 | 1245 | ROM_SYSTEM_BIOS( 0, "os12b2", "OS 1.20 / BASIC2" ) |
r249189 | r249190 | |
1128 | 1254 | ROM_SYSTEM_BIOS( 3, "os10b1", "OS 1.00 / BASIC1" ) |
1129 | 1255 | ROMX_LOAD("os10.rom", 0x10000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(4)) /* os */ |
1130 | 1256 | ROMX_LOAD("basic1.rom", 0x0c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(4)) /* rom page 3 0c000 */ |
1257 | /* OS0.1 does not support rom paging, load BASIC into all pages */ | |
1131 | 1258 | ROM_SYSTEM_BIOS( 4, "os01b2", "OS 0.10 / BASIC2" ) |
1132 | 1259 | ROMX_LOAD("os01.rom", 0x10000, 0x4000, CRC(45ee0980) SHA1(4b0ece6dc139d5d3f4fabd023716fb6f25149b80), ROM_BIOS(5)) /* os */ |
1133 | 1260 | ROMX_LOAD("basic2.rom", 0x00000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(5)) /* rom page 0 00000 */ |
r249189 | r249190 | |
1146 | 1273 | ROM_END |
1147 | 1274 | |
1148 | 1275 | |
1149 | ||
1150 | 1276 | /* 0000- 7fff ram */ |
1151 | 1277 | /* 8000- bfff this area is mapped over with one of the roms from "option" region 0x00000-0x40000 */ |
1152 | 1278 | /* c000- ffff OS rom and memory mapped hardware at fc00-feff, from "option" region 0x40000-0x44000 */ |
r249189 | r249190 | |
1168 | 1294 | /* rom page 9 24000 */ |
1169 | 1295 | /* rom page 10 28000 */ |
1170 | 1296 | /* rom page 11 2c000 */ |
1171 | /* rom page 12 30000 */ | |
1172 | /* rom page 13 34000 */ | |
1173 | /* rom page 14 38000 */ | |
1297 | /* rom page 12 30000 SPARE SOCKET */ | |
1298 | /* rom page 13 34000 SPARE SOCKET */ | |
1299 | /* rom page 14 38000 DFS */ | |
1174 | 1300 | /* rom page 15 3c000 BASIC */ |
1175 | 1301 | ROM_DEFAULT_BIOS("os12b2") |
1176 | 1302 | ROM_SYSTEM_BIOS( 0, "os12b2", "OS 1.20 / BASIC2" ) |
r249189 | r249190 | |
1186 | 1312 | ROMX_LOAD("os10.rom", 0x40000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(4)) /* os */ |
1187 | 1313 | ROMX_LOAD("basic1.rom", 0x3c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(4)) /* rom page 15 3c000 */ |
1188 | 1314 | |
1315 | ROM_LOAD("dnfs.rom", 0x38000, 0x4000, CRC(8ccd2157) SHA1(7e3c536baeae84d6498a14e8405319e01ee78232)) | |
1316 | ||
1189 | 1317 | ROM_REGION(0x4000, "os", 0) |
1190 | 1318 | ROM_COPY("option", 0x40000, 0, 0x4000) |
1191 | 1319 | |
1192 | ROM_REGION(0x20000,"dfs",0) /* DFS ROMS */ | |
1193 | ROM_LOAD("dfs09.rom", 0x00000, 0x2000, CRC(3ce609cf) SHA1(5cc0f14b8f46855c70eaa653cca4ad079b458732)) | |
1194 | ROM_RELOAD( 0x02000, 0x2000 ) | |
1195 | ROM_LOAD("dnfs.rom", 0x04000, 0x4000, CRC(8ccd2157) SHA1(7e3c536baeae84d6498a14e8405319e01ee78232)) | |
1196 | ROM_LOAD("dfs144.rom", 0x08000, 0x4000, CRC(9fb8d13f) SHA1(387d2468c6e1360f5b531784ce95d5f71a50c2b5)) | |
1197 | ROM_LOAD("zdfs-0.90.rom",0x0C000, 0x2000, CRC(ea579d4d) SHA1(59ad2a8994f4bddad6687891f1a2bc29f2fd32b8)) | |
1198 | ROM_LOAD("ddfs223.rom", 0x10000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) | |
1199 | ROM_LOAD("ddfs-1.53.rom",0x14000, 0x4000, CRC(e1be4ee4) SHA1(6719dc958f2631e6dc8f045429797b289bfe649a)) | |
1200 | ROM_LOAD("ch103.rom", 0x18000, 0x4000, CRC(98367cf4) SHA1(eca3631aa420691f96b72bfdf2e9c2b613e1bf33)) | |
1201 | /*NONE*/ | |
1202 | ROM_REGION(0x80000, "disks", ROMREGION_ERASEFF) /* Opus Ram Disc Space */ | |
1320 | ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ | |
1321 | ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) | |
1322 | ROM_END | |
1203 | 1323 | |
1204 | //ROM_REGION(0x2000, "torch", 0) | |
1205 | //ROM_LOAD("torchz80_094.bin", 0x0000, 0x2000, CRC(49989bd4) SHA1(62b57c858a3baa4ff943c31f77d331c414772a61)) | |
1206 | //ROM_LOAD("torchz80_102.bin", 0x0000, 0x2000, CRC(2eb40a21) SHA1(e6ee738e5f2f8556002b79d18caa8ef21f14e08d)) | |
1207 | 1324 | |
1208 | //ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ | |
1209 | //ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) | |
1325 | ROM_START(bbcb1770) | |
1326 | ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */ | |
1327 | ||
1328 | ROM_REGION(0x44000,"option",0) /* ROM */ | |
1329 | /* rom page 0 00000 */ | |
1330 | /* rom page 1 04000 */ | |
1331 | /* rom page 2 08000 */ | |
1332 | /* rom page 3 0c000 */ | |
1333 | /* rom page 4 10000 */ | |
1334 | /* rom page 5 14000 */ | |
1335 | /* rom page 6 18000 */ | |
1336 | /* rom page 7 1c000 */ | |
1337 | /* rom page 8 20000 */ | |
1338 | /* rom page 9 24000 */ | |
1339 | /* rom page 10 28000 */ | |
1340 | /* rom page 11 2c000 */ | |
1341 | /* rom page 12 30000 SPARE SOCKET */ | |
1342 | /* rom page 13 34000 SPARE SOCKET */ | |
1343 | /* rom page 14 38000 DDFS */ | |
1344 | /* rom page 15 3c000 BASIC */ | |
1345 | ROM_DEFAULT_BIOS("os12b2") | |
1346 | ROM_SYSTEM_BIOS( 0, "os12b2", "OS 1.20 / BASIC2" ) | |
1347 | ROMX_LOAD("os12.rom", 0x40000, 0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d), ROM_BIOS(1)) /* os */ | |
1348 | ROMX_LOAD("basic2.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(1)) /* rom page 15 3c000 */ | |
1349 | ROM_SYSTEM_BIOS( 1, "os12b1", "OS 1.20 / BASIC1" ) | |
1350 | ROMX_LOAD("os12.rom", 0x40000, 0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d), ROM_BIOS(2)) /* os */ | |
1351 | ROMX_LOAD("basic1.rom", 0x3c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(2)) /* rom page 15 3c000 */ | |
1352 | ROM_SYSTEM_BIOS( 2, "os10b2", "OS 1.00 / BASIC2" ) | |
1353 | ROMX_LOAD("os10.rom", 0x40000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(3)) /* os */ | |
1354 | ROMX_LOAD("basic2.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(3)) /* rom page 15 3c000 */ | |
1355 | ROM_SYSTEM_BIOS( 3, "os10b1", "OS 1.00 / BASIC1" ) | |
1356 | ROMX_LOAD("os10.rom", 0x40000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(4)) /* os */ | |
1357 | ROMX_LOAD("basic1.rom", 0x3c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(4)) /* rom page 15 3c000 */ | |
1358 | ||
1359 | ROM_LOAD("ddfs223.rom", 0x38000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) | |
1360 | ||
1361 | ROM_REGION(0x4000, "os", 0) | |
1362 | ROM_COPY("option", 0x40000, 0, 0x4000) | |
1363 | ||
1364 | ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ | |
1365 | ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) | |
1210 | 1366 | ROM_END |
1211 | 1367 | |
1368 | ||
1212 | 1369 | ROM_START(bbcb_de) |
1213 | 1370 | ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */ |
1214 | 1371 | |
r249189 | r249190 | |
1225 | 1382 | /* rom page 9 24000 */ |
1226 | 1383 | /* rom page 10 28000 */ |
1227 | 1384 | /* rom page 11 2c000 */ |
1228 | /* rom page 12 30000 */ | |
1229 | /* rom page 13 34000 */ | |
1230 | /* rom page 14 38000 */ | |
1385 | /* rom page 12 30000 SPARE SOCKET */ | |
1386 | /* rom page 13 34000 SPARE SOCKET */ | |
1387 | /* rom page 14 38000 DFS */ | |
1231 | 1388 | /* rom page 15 3c000 BASIC */ |
1232 | 1389 | ROM_DEFAULT_BIOS("os12") |
1233 | 1390 | ROM_SYSTEM_BIOS( 0, "os12", "OS 1.20 / BASIC2" ) |
1234 | 1391 | ROMX_LOAD("os_de.rom", 0x40000, 0x4000, CRC(b7262caf) SHA1(aadf90338ee9d1c85dfa73beba50e930c2a38f10), ROM_BIOS(1)) |
1235 | 1392 | ROMX_LOAD("basic2.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(1)) /* rom page 15 3c000 */ |
1236 | 1393 | |
1394 | ROM_LOAD("dfs10.rom", 0x38000, 0x4000, CRC(7e367e8c) SHA1(161f585dc45665ea77433c84afd2f95049f7f5a0)) | |
1395 | ||
1237 | 1396 | ROM_REGION(0x4000, "os", 0) |
1238 | 1397 | ROM_COPY("option", 0x40000, 0, 0x4000) |
1239 | 1398 | |
1240 | ROM_REGION(0x20000,"dfs",0) /* DFS ROMS */ | |
1241 | ROM_LOAD("dfs09.rom", 0x00000, 0x2000, CRC(3ce609cf) SHA1(5cc0f14b8f46855c70eaa653cca4ad079b458732)) | |
1242 | ROM_RELOAD( 0x02000, 0x2000 ) | |
1243 | ||
1244 | ROM_LOAD("dnfs.rom", 0x04000, 0x4000, CRC(8ccd2157) SHA1(7e3c536baeae84d6498a14e8405319e01ee78232)) | |
1245 | ROM_LOAD("dfs144.rom", 0x08000, 0x4000, CRC(9fb8d13f) SHA1(387d2468c6e1360f5b531784ce95d5f71a50c2b5)) | |
1246 | ROM_LOAD("zdfs-0.90.rom",0x0C000, 0x2000, CRC(ea579d4d) SHA1(59ad2a8994f4bddad6687891f1a2bc29f2fd32b8)) | |
1247 | ROM_LOAD("ddfs223.rom", 0x10000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) | |
1248 | ROM_LOAD("ddfs-1.53.rom",0x14000, 0x4000, CRC(e1be4ee4) SHA1(6719dc958f2631e6dc8f045429797b289bfe649a)) | |
1249 | ROM_LOAD("ch103.rom", 0x18000, 0x4000, CRC(98367cf4) SHA1(eca3631aa420691f96b72bfdf2e9c2b613e1bf33)) | |
1250 | /*NONE*/ | |
1251 | ROM_REGION(0x80000, "disks", ROMREGION_ERASEFF) /* Opus Ram Disc Space */ | |
1399 | ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ | |
1400 | ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) | |
1252 | 1401 | ROM_END |
1253 | 1402 | |
1403 | ||
1254 | 1404 | ROM_START(bbcb_us) |
1255 | 1405 | ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */ |
1256 | 1406 | |
r249189 | r249190 | |
1267 | 1417 | /* rom page 9 24000 */ |
1268 | 1418 | /* rom page 10 28000 */ |
1269 | 1419 | /* rom page 11 2c000 */ |
1270 | /* rom page 12 30000 */ | |
1271 | /* rom page 13 34000 */ | |
1272 | /* rom page 14 38000 */ | |
1420 | /* rom page 12 30000 SPARE SOCKET */ | |
1421 | /* rom page 13 34000 SPARE SOCKET */ | |
1422 | /* rom page 14 38000 DFS */ | |
1273 | 1423 | /* rom page 15 3c000 BASIC */ |
1274 | 1424 | ROM_DEFAULT_BIOS("os10b3") |
1275 | 1425 | ROM_SYSTEM_BIOS( 0, "os10b3", "OS A1.0 / BASIC3" ) |
1276 | 1426 | ROMX_LOAD("os10_us.rom", 0x40000, 0x4000, CRC(c8e946a9) SHA1(83d91d089dca092d2c8b7c3650ff8143c9069b89), ROM_BIOS(1)) |
1277 | 1427 | ROMX_LOAD("basic3.rom", 0x3c000, 0x4000, CRC(161b9539) SHA1(b39014610a968789afd7695aa04d1277d874405c), ROM_BIOS(1)) /* rom page 15 3c000 */ |
1278 | 1428 | |
1429 | ROM_LOAD("dfs10.rom", 0x38000, 0x4000, CRC(7e367e8c) SHA1(161f585dc45665ea77433c84afd2f95049f7f5a0)) | |
1430 | ||
1279 | 1431 | ROM_REGION(0x4000, "os", 0) |
1280 | 1432 | ROM_COPY("option", 0x40000, 0, 0x4000) |
1281 | 1433 | |
1282 | ROM_REGION(0x20000,"dfs",0) /* DFS ROMS */ | |
1283 | ROM_LOAD("dfs09.rom", 0x00000, 0x2000, CRC(3ce609cf) SHA1(5cc0f14b8f46855c70eaa653cca4ad079b458732)) | |
1284 | ROM_RELOAD( 0x02000, 0x2000 ) | |
1285 | ||
1286 | ROM_LOAD("dnfs.rom", 0x04000, 0x4000, CRC(8ccd2157) SHA1(7e3c536baeae84d6498a14e8405319e01ee78232)) | |
1287 | ROM_LOAD("dfs144.rom", 0x08000, 0x4000, CRC(9fb8d13f) SHA1(387d2468c6e1360f5b531784ce95d5f71a50c2b5)) | |
1288 | ROM_LOAD("zdfs-0.90.rom",0x0C000, 0x2000, CRC(ea579d4d) SHA1(59ad2a8994f4bddad6687891f1a2bc29f2fd32b8)) | |
1289 | ROM_LOAD("ddfs223.rom", 0x10000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) | |
1290 | ROM_LOAD("ddfs-1.53.rom",0x14000, 0x4000, CRC(e1be4ee4) SHA1(6719dc958f2631e6dc8f045429797b289bfe649a)) | |
1291 | ROM_LOAD("ch103.rom", 0x18000, 0x4000, CRC(98367cf4) SHA1(eca3631aa420691f96b72bfdf2e9c2b613e1bf33)) | |
1292 | /*NONE*/ | |
1293 | ROM_REGION(0x80000, "disks", ROMREGION_ERASEFF) /* Opus Ram Disc Space */ | |
1294 | ||
1295 | 1434 | ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ |
1296 | 1435 | ROM_LOAD("phrom_us.bin", 0x0000, 0x4000, CRC(bf4b3b64) SHA1(66876702d1d95eecc034d20f25047f893a27cde5)) |
1297 | 1436 | ROM_END |
1298 | 1437 | |
1438 | ||
1299 | 1439 | ROM_START(bbcbp) |
1300 | 1440 | ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */ |
1301 | 1441 | |
r249189 | r249190 | |
1309 | 1449 | /* rom page 2 08000 32K IN PAGE 3 */ |
1310 | 1450 | /* rom page 3 0c000 SPARE SOCKET */ |
1311 | 1451 | /* rom page 4 10000 32K IN PAGE 5 */ |
1312 | /* rom page 5 14000 | |
1452 | /* rom page 5 14000 ADFS */ | |
1313 | 1453 | /* rom page 6 18000 32K IN PAGE 7 */ |
1314 | 1454 | /* rom page 7 1c000 DDFS */ |
1315 | 1455 | /* rom page 8 20000 32K IN PAGE 9 */ |
r249189 | r249190 | |
1320 | 1460 | /* rom page 13 34000 */ |
1321 | 1461 | /* rom page 14 38000 32K IN PAGE 15 */ |
1322 | 1462 | /* rom page 15 3C000 BASIC */ |
1323 | | |
1463 | ROM_LOAD("adfs130.rom", 0x14000, 0x4000, CRC(d3855588) SHA1(301fd05c475a629c4bec70510d4507256a5b00d8)) | |
1324 | 1464 | ROM_LOAD("ddfs223.rom", 0x1c000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) |
1325 | 1465 | |
1326 | 1466 | ROM_REGION(0x4000, "os", 0) |
1327 | 1467 | ROM_COPY("option", 0x40000, 0, 0x4000) |
1468 | ||
1469 | ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ | |
1470 | ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) | |
1328 | 1471 | ROM_END |
1329 | 1472 | |
1330 | 1473 | |
r249189 | r249190 | |
1341 | 1484 | /* rom page 2 08000 32K IN PAGE 3 */ |
1342 | 1485 | /* rom page 3 0c000 SPARE SOCKET */ |
1343 | 1486 | /* rom page 4 10000 32K IN PAGE 5 */ |
1344 | /* rom page 5 14000 | |
1487 | /* rom page 5 14000 ADFS */ | |
1345 | 1488 | /* rom page 6 18000 32K IN PAGE 7 */ |
1346 | 1489 | /* rom page 7 1c000 DDFS */ |
1347 | 1490 | /* rom page 8 20000 32K IN PAGE 9 */ |
r249189 | r249190 | |
1352 | 1495 | /* rom page 13 34000 */ |
1353 | 1496 | /* rom page 14 38000 32K IN PAGE 15 */ |
1354 | 1497 | /* rom page 15 3C000 BASIC */ |
1355 | | |
1498 | ROM_LOAD("adfs130.rom", 0x14000, 0x4000, CRC(d3855588) SHA1(301fd05c475a629c4bec70510d4507256a5b00d8)) | |
1356 | 1499 | ROM_LOAD("ddfs223.rom", 0x1c000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) |
1357 | 1500 | |
1358 | 1501 | ROM_REGION(0x4000, "os", 0) |
1359 | 1502 | ROM_COPY("option", 0x40000, 0, 0x4000) |
1503 | ||
1504 | ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ | |
1505 | ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) | |
1360 | 1506 | ROM_END |
1361 | 1507 | |
1362 | 1508 | |
1509 | ROM_START(abc110) | |
1510 | ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */ | |
1511 | ||
1512 | ROM_REGION(0x44000,"option",0) /* ROM */ | |
1513 | ROM_DEFAULT_BIOS("mos200") | |
1514 | ROM_SYSTEM_BIOS( 0, "mos200", "MOS2.00" ) | |
1515 | ROMX_LOAD("mos200.rom", 0x40000, 0x4000, CRC(5e88f994) SHA1(76235ff15d736f5def338f73ac7497c41b916505), ROM_BIOS(1)) | |
1516 | ROM_SYSTEM_BIOS( 1, "mos123", "MOS1.23" ) | |
1517 | ROMX_LOAD("mos123.rom", 0x40000, 0x4000, CRC(90d31d08) SHA1(42a01892cf8bd2ada4db1c8b36aff80c85eb5dcb), ROM_BIOS(2)) | |
1518 | ROM_SYSTEM_BIOS( 2, "mos120", "MOS1.20" ) | |
1519 | ROMX_LOAD("mos120.rom", 0x40000, 0x4000, CRC(0a1e83a0) SHA1(21dc3a94eef7c003b194686730fb461779f44925), ROM_BIOS(3)) | |
1520 | /* rom page 0 00000 */ | |
1521 | /* rom page 1 04000 */ | |
1522 | /* rom page 2 08000 32K IN PAGE 3 */ | |
1523 | /* rom page 3 0c000 SPARE SOCKET */ | |
1524 | /* rom page 4 10000 32K IN PAGE 5 */ | |
1525 | /* rom page 5 14000 DDFS */ | |
1526 | /* rom page 6 18000 32K IN PAGE 7 */ | |
1527 | /* rom page 7 1c000 ADFS */ | |
1528 | /* rom page 8 20000 32K IN PAGE 9 */ | |
1529 | /* rom page 9 24000 SPARE SOCKET */ | |
1530 | /* rom page 10 28000 32K IN PAGE 11 */ | |
1531 | /* rom page 11 2c000 SPARE SOCKET */ | |
1532 | /* rom page 12 30000 */ | |
1533 | /* rom page 13 34000 */ | |
1534 | /* rom page 14 38000 32K IN PAGE 15 */ | |
1535 | /* rom page 15 3C000 BASIC */ | |
1536 | ROM_LOAD("ddfs223.rom", 0x14000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) | |
1537 | ROM_LOAD("adfs130.rom", 0x1c000, 0x4000, CRC(d3855588) SHA1(301fd05c475a629c4bec70510d4507256a5b00d8)) | |
1538 | ROM_LOAD("basic200.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281)) | |
1539 | ||
1540 | ROM_REGION(0x4000, "os", 0) | |
1541 | ROM_COPY("option", 0x40000, 0, 0x4000) | |
1542 | ||
1543 | ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ | |
1544 | ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) | |
1545 | ROM_END | |
1546 | ||
1547 | ||
1548 | ROM_START(abc210) | |
1549 | ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */ | |
1550 | ||
1551 | ROM_REGION(0x44000,"option",0) /* ROM */ | |
1552 | ROM_DEFAULT_BIOS("mos200") | |
1553 | ROM_SYSTEM_BIOS( 0, "mos200", "MOS2.00" ) | |
1554 | ROMX_LOAD("mos200.rom", 0x40000, 0x4000, CRC(5e88f994) SHA1(76235ff15d736f5def338f73ac7497c41b916505), ROM_BIOS(1)) | |
1555 | ROM_SYSTEM_BIOS( 1, "mos123", "MOS1.23" ) | |
1556 | ROMX_LOAD("mos123.rom", 0x40000, 0x4000, CRC(90d31d08) SHA1(42a01892cf8bd2ada4db1c8b36aff80c85eb5dcb), ROM_BIOS(2)) | |
1557 | ROM_SYSTEM_BIOS( 2, "mos120", "MOS1.20" ) | |
1558 | ROMX_LOAD("mos120.rom", 0x40000, 0x4000, CRC(0a1e83a0) SHA1(21dc3a94eef7c003b194686730fb461779f44925), ROM_BIOS(3)) | |
1559 | /* rom page 0 00000 */ | |
1560 | /* rom page 1 04000 */ | |
1561 | /* rom page 2 08000 32K IN PAGE 3 */ | |
1562 | /* rom page 3 0c000 SPARE SOCKET */ | |
1563 | /* rom page 4 10000 32K IN PAGE 5 */ | |
1564 | /* rom page 5 14000 DDFS */ | |
1565 | /* rom page 6 18000 32K IN PAGE 7 */ | |
1566 | /* rom page 7 1c000 ADFS */ | |
1567 | /* rom page 8 20000 32K IN PAGE 9 */ | |
1568 | /* rom page 9 24000 SPARE SOCKET */ | |
1569 | /* rom page 10 28000 32K IN PAGE 11 */ | |
1570 | /* rom page 11 2c000 SPARE SOCKET */ | |
1571 | /* rom page 12 30000 */ | |
1572 | /* rom page 13 34000 */ | |
1573 | /* rom page 14 38000 32K IN PAGE 15 */ | |
1574 | /* rom page 15 3C000 BASIC */ | |
1575 | ROM_LOAD("ddfs223.rom", 0x14000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) | |
1576 | ROM_LOAD("adfs130.rom", 0x1c000, 0x4000, CRC(d3855588) SHA1(301fd05c475a629c4bec70510d4507256a5b00d8)) | |
1577 | ROM_LOAD("basic200.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281)) | |
1578 | ||
1579 | ROM_REGION(0x4000, "os", 0) | |
1580 | ROM_COPY("option", 0x40000, 0, 0x4000) | |
1581 | ||
1582 | ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ | |
1583 | ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) | |
1584 | ROM_END | |
1585 | ||
1586 | ||
1587 | ROM_START(abc310) | |
1588 | ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */ | |
1589 | ||
1590 | ROM_REGION(0x44000,"option",0) /* ROM */ | |
1591 | ROM_DEFAULT_BIOS("mos200") | |
1592 | ROM_SYSTEM_BIOS( 0, "mos200", "MOS2.00" ) | |
1593 | ROMX_LOAD("mos200.rom", 0x40000, 0x4000, CRC(5e88f994) SHA1(76235ff15d736f5def338f73ac7497c41b916505), ROM_BIOS(1)) | |
1594 | ROM_SYSTEM_BIOS( 1, "mos123", "MOS1.23" ) | |
1595 | ROMX_LOAD("mos123.rom", 0x40000, 0x4000, CRC(90d31d08) SHA1(42a01892cf8bd2ada4db1c8b36aff80c85eb5dcb), ROM_BIOS(2)) | |
1596 | ROM_SYSTEM_BIOS( 2, "mos120", "MOS1.20" ) | |
1597 | ROMX_LOAD("mos120.rom", 0x40000, 0x4000, CRC(0a1e83a0) SHA1(21dc3a94eef7c003b194686730fb461779f44925), ROM_BIOS(3)) | |
1598 | /* rom page 0 00000 */ | |
1599 | /* rom page 1 04000 */ | |
1600 | /* rom page 2 08000 32K IN PAGE 3 */ | |
1601 | /* rom page 3 0c000 SPARE SOCKET */ | |
1602 | /* rom page 4 10000 32K IN PAGE 5 */ | |
1603 | /* rom page 5 14000 DDFS */ | |
1604 | /* rom page 6 18000 32K IN PAGE 7 */ | |
1605 | /* rom page 7 1c000 ADFS */ | |
1606 | /* rom page 8 20000 32K IN PAGE 9 */ | |
1607 | /* rom page 9 24000 SPARE SOCKET */ | |
1608 | /* rom page 10 28000 32K IN PAGE 11 */ | |
1609 | /* rom page 11 2c000 SPARE SOCKET */ | |
1610 | /* rom page 12 30000 */ | |
1611 | /* rom page 13 34000 */ | |
1612 | /* rom page 14 38000 32K IN PAGE 15 */ | |
1613 | /* rom page 15 3C000 BASIC */ | |
1614 | ROM_LOAD("ddfs223.rom", 0x14000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) | |
1615 | ROM_LOAD("adfs130.rom", 0x1c000, 0x4000, CRC(d3855588) SHA1(301fd05c475a629c4bec70510d4507256a5b00d8)) | |
1616 | ROM_LOAD("basic200.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281)) | |
1617 | ||
1618 | ROM_REGION(0x4000, "os", 0) | |
1619 | ROM_COPY("option", 0x40000, 0, 0x4000) | |
1620 | ||
1621 | ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ | |
1622 | ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) | |
1623 | ROM_END | |
1624 | ||
1625 | ||
1626 | ROM_START(reutapm) | |
1627 | ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */ | |
1628 | ||
1629 | ROM_REGION(0x44000,"option",0) /* ROM */ | |
1630 | /* rom page 0 00000 */ | |
1631 | /* rom page 1 04000 */ | |
1632 | /* rom page 2 08000 32K IN PAGE 3 */ | |
1633 | /* rom page 3 0c000 SPARE SOCKET */ | |
1634 | /* rom page 4 10000 32K IN PAGE 5 */ | |
1635 | /* rom page 5 14000 SPARE SOCKET */ | |
1636 | /* rom page 6 18000 32K IN PAGE 7 */ | |
1637 | /* rom page 7 1c000 SPARE SOCKET */ | |
1638 | /* rom page 8 20000 32K IN PAGE 9 */ | |
1639 | /* rom page 9 24000 SPARE SOCKET */ | |
1640 | /* rom page 10 28000 32K IN PAGE 11 */ | |
1641 | /* rom page 11 2c000 SPARE SOCKET */ | |
1642 | /* rom page 12 30000 */ | |
1643 | /* rom page 13 34000 */ | |
1644 | /* rom page 14 38000 32K IN PAGE 15 */ | |
1645 | /* rom page 15 3C000 SPARE SOCKET */ | |
1646 | ROM_LOAD("reutera100.rom", 0x1c000, 0x4000, CRC(98ebabfb) SHA1(a7887e1e5c206203491e1e06682b9508b0fef49d)) | |
1647 | ROM_LOAD("reuterb.rom", 0x2c000, 0x4000, CRC(9e02f59b) SHA1(1e63aa3bf4b37bf9ba41e454f95db05c3d15bfbf)) | |
1648 | ||
1649 | ROM_REGION(0x4000, "os", 0) | |
1650 | ROM_LOAD("mos_r030.rom", 0x0000, 0x4000, CRC(8b652337) SHA1(6a5c7ace255c8ac96c983d5ba67084fbd71ff61e)) | |
1651 | ROM_END | |
1652 | ||
1653 | ||
1363 | 1654 | ROM_START(bbcm) |
1364 | 1655 | ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */ |
1365 | 1656 | |
r249189 | r249190 | |
1480 | 1771 | ROM_REGION(0x44000,"option",0) /* ROM */ |
1481 | 1772 | ROM_DEFAULT_BIOS("mos400") |
1482 | 1773 | ROM_SYSTEM_BIOS( 0, "mos400", "Econet MOS 4.00" ) |
1483 | ROMX_LOAD("mos400.ic24", 0x20000, 0x10000, BAD_DUMP CRC(81729034) SHA1(d4bc2c7f5e66b5298786138f395908e70c772971), ROM_BIOS(1)) /* Merged individual ROM bank dumps */ | |
1484 | ROM_COPY("option", 0x24000, 0x34000, 0xC000) /* Mirror */ | |
1485 | ROM_COPY("option", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */ | |
1486 | ROM_FILL(0x20000, 0x4000, 0xFFFF) | |
1774 | ROMX_LOAD("mos400.ic24", 0x30000, 0x10000, BAD_DUMP CRC(81729034) SHA1(d4bc2c7f5e66b5298786138f395908e70c772971), ROM_BIOS(1)) /* Merged individual ROM bank dumps */ | |
1775 | ROM_COPY("option", 0x34000, 0x24000, 0xC000) /* Mirror */ | |
1776 | ROM_COPY("option", 0x30000, 0x40000, 0x4000) /* Move loaded roms into place */ | |
1777 | ROM_FILL(0x30000, 0x4000, 0xFFFF) | |
1487 | 1778 | /* 00000 rom 0 Rear Cartridge bottom 16K */ |
1488 | 1779 | /* 04000 rom 1 Rear Cartridge top 16K */ |
1489 | 1780 | /* 08000 rom 2 Front Cartridge bottom 16K */ |
r249189 | r249190 | |
1659 | 1950 | ROM_END |
1660 | 1951 | |
1661 | 1952 | |
1662 | /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */ | |
1663 | COMP ( 1981, bbcb, 0, bbca, bbcb, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B", 0) | |
1664 | COMP ( 1981, bbca, bbcb, 0, bbca, bbca, bbc_state, bbc, "Acorn", "BBC Micro Model A", 0) | |
1665 | COMP ( 1981, bbcb_us, bbcb, 0, bbcb_us, bbcb, bbc_state, bbc, "Acorn", "Acorn Proton (US)", 0) | |
1666 | COMP ( 1981, bbcb_de, bbcb, 0, bbcb, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B (German)", 0) | |
1667 | COMP ( 1985, bbcbp, 0, bbcb, bbcbp, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B+ 64K", 0) | |
1668 | COMP ( 1985, bbcbp128, bbcbp, 0, bbcbp128, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B+ 128K", 0) | |
1669 | COMP ( 1986, bbcm, 0, bbcb, bbcm, bbcm, bbc_state, bbcm, "Acorn", "BBC Master 128", 0) | |
1670 | COMP ( 1986, bbcmt, bbcm, 0, bbcmt, bbcm, bbc_state, bbcm, "Acorn", "BBC Master Turbo", MACHINE_NOT_WORKING) | |
1671 | COMP ( 1986, bbcmaiv, bbcm, 0, bbcmaiv, bbcm, bbc_state, bbcm, "Acorn", "BBC Master AIV", MACHINE_NOT_WORKING) | |
1672 | COMP ( 1986, bbcmet, bbcm, 0, bbcmet, bbcm, bbc_state, bbcm, "Acorn", "BBC Master ET", 0) | |
1673 | COMP ( 1986, bbcm512, bbcm, 0, bbcm512, bbcm, bbc_state, bbcm, "Acorn", "BBC Master 512", MACHINE_NOT_WORKING) | |
1674 | COMP ( 1986, bbcmarm, bbcm, 0, bbcmarm, bbcm, bbc_state, bbcm, "Acorn", "ARM Evaluation System", MACHINE_NOT_WORKING) | |
1675 | COMP ( 1986, bbcmc, 0, bbcm, bbcmc, bbcm, bbc_state, bbcm, "Acorn", "BBC Master Compact", 0) | |
1676 | COMP ( 1986, bbcmc_ar, bbcmc, 0, bbcmc, bbcm, bbc_state, bbcm, "Acorn", "BBC Master Compact (Arabic)", 0) | |
1953 | ROM_START(pro128s) | |
1954 | ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF) /* ROM MEMORY */ | |
1955 | ||
1956 | ROM_REGION(0x44000, "option", 0) /* ROM */ | |
1957 | ROM_DEFAULT_BIOS("mos510o") | |
1958 | ROM_SYSTEM_BIOS(0, "mos510o", "Olivetti MOS 5.10") | |
1959 | ROMX_LOAD("mos510o.ic49", 0x30000, 0x10000, CRC(c16858d3) SHA1(ad231ed21a55e493b553703285530d1cacd3de7a), ROM_BIOS(1)) | |
1960 | ROM_COPY("option", 0x30000, 0x40000, 0x4000) /* Move loaded roms into place */ | |
1961 | ROM_FILL(0x30000, 0x4000, 0xFFFF) | |
1962 | /* 00000 rom 0 EXTERNAL */ | |
1963 | /* 04000 rom 1 EXTERNAL */ | |
1964 | /* 08000 rom 2 SPARE SOCKET */ | |
1965 | /* 0c000 rom 3 SPARE SOCKET */ | |
1966 | /* 10000 rom 4 SWRAM */ | |
1967 | /* 14000 rom 5 SWRAM */ | |
1968 | /* 18000 rom 6 SWRAM */ | |
1969 | /* 1c000 rom 7 SWRAM */ | |
1970 | /* 20000 rom 8 SPARE SOCKET */ | |
1971 | /* 24000 rom 9 UNUSED */ | |
1972 | /* 28000 rom 10 UNUSED */ | |
1973 | /* 2c000 rom 11 UNUSED */ | |
1974 | /* 30000 rom 12 UNUSED */ | |
1975 | /* 34000 rom 13 ADFS */ | |
1976 | /* 38000 rom 14 BASIC */ | |
1977 | /* 3c000 rom 15 Utils */ | |
1978 | ||
1979 | ROM_REGION(0x4000, "os", 0) | |
1980 | ROM_COPY("option", 0x40000, 0, 0x4000) | |
1981 | ||
1982 | // ROM_REGION(0x80,"eeprom",0) /* pcd8572 */ | |
1983 | /* Factory defaulted EEPROM, sets default language ROM, etc. */ | |
1984 | // ROM_LOAD("mos510o.epr", 0x00, 0x80, CRC(d8458039) SHA1(72c056d493e74ceca41f48936012b012b496a226)) | |
1985 | ROM_END | |
1986 | ||
1987 | /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ | |
1988 | COMP ( 1981, bbcb, 0, bbca, bbcb, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B w/8271 FDC", MACHINE_IMPERFECT_GRAPHICS) | |
1989 | COMP ( 1981, bbca, bbcb, 0, bbca, bbca, bbc_state, bbc, "Acorn", "BBC Micro Model A", MACHINE_IMPERFECT_GRAPHICS) | |
1990 | COMP ( 1981, bbcb_de, bbcb, 0, bbcb_de, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B (German)", MACHINE_IMPERFECT_GRAPHICS) | |
1991 | COMP ( 1983, bbcb_us, bbcb, 0, bbcb_us, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B (US)", MACHINE_IMPERFECT_GRAPHICS) | |
1992 | COMP ( 1985, bbcb1770, bbcb, 0, bbcb1770, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B w/1770 FDC", MACHINE_IMPERFECT_GRAPHICS) | |
1993 | COMP ( 1985, bbcbp, 0, bbcb, bbcbp, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B+ 64K", MACHINE_IMPERFECT_GRAPHICS) | |
1994 | COMP ( 1985, bbcbp128, bbcbp, 0, bbcbp128, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B+ 128K", MACHINE_IMPERFECT_GRAPHICS) | |
1995 | COMP ( 1985, abc110, abc210, 0, abc110, abc, bbc_state, bbc, "Acorn", "ABC 110", MACHINE_NOT_WORKING) | |
1996 | COMP ( 1985, abc210, 0, 0, abc210, abc, bbc_state, bbc, "Acorn", "ABC 210/Cambridge Workstation", MACHINE_NOT_WORKING) | |
1997 | COMP ( 1985, abc310, abc210, 0, abc310, abc, bbc_state, bbc, "Acorn", "ABC 310", MACHINE_NOT_WORKING) | |
1998 | COMP ( 1985, reutapm, 0, 0, reutapm, bbcb, bbc_state, bbc, "Acorn", "Reuters APM", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) | |
1999 | COMP ( 1986, bbcm, 0, bbcb, bbcm, bbcm, bbc_state, bbc, "Acorn", "BBC Master 128", MACHINE_IMPERFECT_GRAPHICS) | |
2000 | COMP ( 1986, bbcmt, bbcm, 0, bbcmt, bbcm, bbc_state, bbc, "Acorn", "BBC Master Turbo", MACHINE_NOT_WORKING) | |
2001 | COMP ( 1986, bbcmaiv, bbcm, 0, bbcmaiv, bbcm, bbc_state, bbc, "Acorn", "BBC Master AIV", MACHINE_NOT_WORKING) | |
2002 | COMP ( 1986, bbcmet, bbcm, 0, bbcmet, bbcm, bbc_state, bbc, "Acorn", "BBC Master ET", MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS) | |
2003 | COMP ( 1986, bbcm512, bbcm, 0, bbcm512, bbcm, bbc_state, bbc, "Acorn", "BBC Master 512", MACHINE_NOT_WORKING) | |
2004 | COMP ( 1986, bbcmarm, bbcm, 0, bbcmarm, bbcm, bbc_state, bbc, "Acorn", "ARM Evaluation System", MACHINE_NOT_WORKING) | |
2005 | COMP ( 1986, bbcmc, 0, bbcm, bbcmc, bbcm, bbc_state, bbc, "Acorn", "BBC Master Compact", MACHINE_IMPERFECT_GRAPHICS) | |
2006 | COMP ( 1986, bbcmc_ar, bbcmc, 0, bbcmc, bbcm, bbc_state, bbc, "Acorn", "BBC Master Compact (Arabic)", MACHINE_IMPERFECT_GRAPHICS) | |
2007 | COMP ( 1987, pro128s, bbcmc, 0, pro128s, bbcm, bbc_state, bbc, "Olivetti", "Prodest PC 128S", MACHINE_IMPERFECT_GRAPHICS) |
r249189 | r249190 | |
---|---|---|
414 | 414 | MCFG_SCREEN_REFRESH_RATE(60) |
415 | 415 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
416 | 416 | MCFG_SCREEN_SIZE(640, 525) |
417 | MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, | |
417 | MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 479) | |
418 | 418 | MCFG_SCREEN_UPDATE_DRIVER(n64_state, screen_update_n64) |
419 | 419 | MCFG_SCREEN_VBLANK_DRIVER(n64_state, screen_eof_n64) |
420 | 420 |
r249189 | r249190 | |
---|---|---|
17 | 17 | #include "machine/wd_fdc.h" |
18 | 18 | #include "machine/mc146818.h" |
19 | 19 | #include "machine/pcd_kbd.h" |
20 | #include " | |
20 | #include "video/pcd.h" | |
21 | 21 | #include "sound/speaker.h" |
22 | #include "video/scn2674.h" | |
23 | 22 | #include "formats/pc_dsk.h" |
24 | 23 | #include "bus/scsi/omti5100.h" |
25 | 24 | #include "bus/rs232/rs232.h" |
r249189 | r249190 | |
39 | 38 | m_speaker(*this, "speaker"), |
40 | 39 | m_fdc(*this, "fdc"), |
41 | 40 | m_rtc(*this, "rtc"), |
42 | m_crtc(*this, "crtc"), | |
43 | m_palette(*this, "palette"), | |
44 | m_gfxdecode(*this, "gfxdecode"), | |
45 | 41 | m_scsi(*this, "scsi"), |
46 | 42 | m_scsi_data_out(*this, "scsi_data_out"), |
47 | 43 | m_scsi_data_in(*this, "scsi_data_in"), |
48 | m_terminal(*this, "terminal"), | |
49 | m_ram(*this, "ram"), | |
50 | m_vram(*this, "vram"), | |
51 | m_charram(8*1024) | |
44 | m_ram(*this, "ram") | |
52 | 45 | { } |
53 | 46 | |
54 | 47 | DECLARE_READ8_MEMBER( irq_callback ); |
r249189 | r249190 | |
63 | 56 | DECLARE_WRITE8_MEMBER( stat_w ); |
64 | 57 | DECLARE_READ8_MEMBER( led_r ); |
65 | 58 | DECLARE_WRITE8_MEMBER( led_w ); |
66 | DECLARE_READ8_MEMBER( detect_r ); | |
67 | DECLARE_WRITE8_MEMBER( detect_w ); | |
68 | 59 | DECLARE_READ16_MEMBER( dskctl_r ); |
69 | 60 | DECLARE_WRITE16_MEMBER( dskctl_w ); |
70 | DECLARE_READ8_MEMBER( mcu_r ); | |
71 | DECLARE_WRITE8_MEMBER( mcu_w ); | |
61 | ||
72 | 62 | DECLARE_READ8_MEMBER( scsi_r ); |
73 | 63 | DECLARE_WRITE8_MEMBER( scsi_w ); |
74 | DECLARE_WRITE8_MEMBER( vram_sw_w ); | |
75 | DECLARE_WRITE16_MEMBER( vram_w ); | |
76 | 64 | DECLARE_READ16_MEMBER( mmu_r ); |
77 | 65 | DECLARE_WRITE16_MEMBER( mmu_w ); |
78 | 66 | DECLARE_READ16_MEMBER( mem_r ); |
79 | 67 | DECLARE_WRITE16_MEMBER( mem_w ); |
80 | DECLARE_READ8_MEMBER( exp_r ); | |
81 | DECLARE_WRITE8_MEMBER( exp_w ); | |
82 | DECLARE_WRITE8_MEMBER( term_key_w ); | |
83 | SCN2674_DRAW_CHARACTER_MEMBER(display_pixels); | |
68 | ||
84 | 69 | DECLARE_FLOPPY_FORMATS( floppy_formats ); |
85 | 70 | DECLARE_WRITE_LINE_MEMBER(write_scsi_bsy); |
86 | 71 | DECLARE_WRITE_LINE_MEMBER(write_scsi_cd); |
r249189 | r249190 | |
101 | 86 | required_device<speaker_sound_device> m_speaker; |
102 | 87 | required_device<wd2793_t> m_fdc; |
103 | 88 | required_device<mc146818_device> m_rtc; |
104 | required_device<scn2674_device> m_crtc; | |
105 | required_device<palette_device> m_palette; | |
106 | required_device<gfxdecode_device> m_gfxdecode; | |
107 | 89 | required_device<SCSI_PORT_DEVICE> m_scsi; |
108 | 90 | required_device<output_latch_device> m_scsi_data_out; |
109 | 91 | required_device<input_buffer_device> m_scsi_data_in; |
110 | optional_device<generic_terminal_device> m_terminal; | |
111 | 92 | required_device<ram_device> m_ram; |
112 | required_shared_ptr<UINT16> m_vram; | |
113 | dynamic_buffer m_charram; | |
114 | UINT8 m_stat, m_led, m_vram_sw, m_term_key; | |
93 | UINT8 m_stat, m_led; | |
115 | 94 | int m_msg, m_bsy, m_io, m_cd, m_req, m_rst; |
116 | 95 | emu_timer *m_req_hack; |
117 | 96 | UINT16 m_dskctl; |
r249189 | r249190 | |
128 | 107 | // MACHINE EMULATION |
129 | 108 | //************************************************************************** |
130 | 109 | |
131 | static const gfx_layout pcd_charlayout = | |
132 | { | |
133 | 8, 14, /* 8 x 14 characters */ | |
134 | 512, /* 512 characters */ | |
135 | 1, /* 1 bits per pixel */ | |
136 | { 0 }, /* no bitplanes */ | |
137 | /* x offsets */ | |
138 | { 0, 1, 2, 3, 4, 5, 6, 7 }, | |
139 | /* y offsets */ | |
140 | { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8 }, | |
141 | 8*16 | |
142 | }; | |
143 | ||
144 | 110 | void pcd_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) |
145 | 111 | { |
146 | 112 | // TODO: remove this hack |
r249189 | r249190 | |
150 | 116 | |
151 | 117 | void pcd_state::machine_start() |
152 | 118 | { |
153 | m_gfxdecode->set_gfx(0, global_alloc(gfx_element(machine().device<palette_device>("palette"), pcd_charlayout, &m_charram[0], 0, 1, 0))); | |
154 | 119 | m_req_hack = timer_alloc(); |
155 | 120 | save_item(NAME(m_mmu.ctl)); |
156 | 121 | save_item(NAME(m_mmu.regs)); |
r249189 | r249190 | |
161 | 126 | m_stat = 0; |
162 | 127 | m_led = 0; |
163 | 128 | m_dskctl = 0; |
164 | m_vram_sw = 1; | |
165 | 129 | m_rst = 0; |
166 | 130 | m_mmu.ctl = 0; |
167 | 131 | m_mmu.sc = false; |
168 | m_mmu.type = ioport("mmu")->read(); | |
169 | m_term_key = 0; | |
132 | if(ioport("mmu")) | |
133 | m_mmu.type = ioport("mmu")->read(); | |
134 | else | |
135 | m_mmu.type = 0; | |
170 | 136 | } |
171 | 137 | |
172 | 138 | READ8_MEMBER( pcd_state::irq_callback ) |
r249189 | r249190 | |
185 | 151 | m_speaker->level_w(state); |
186 | 152 | } |
187 | 153 | |
188 | WRITE16_MEMBER( pcd_state::vram_w ) | |
189 | { | |
190 | if(m_vram_sw) | |
191 | COMBINE_DATA(&m_vram[offset]); | |
192 | else if(mem_mask & 0xff) | |
193 | { | |
194 | m_charram[offset & 0x1fff] = data; | |
195 | m_gfxdecode->gfx(0)->mark_dirty(offset/16); | |
196 | } | |
197 | } | |
198 | ||
199 | WRITE8_MEMBER( pcd_state::vram_sw_w ) | |
200 | { | |
201 | m_vram_sw = data & 1; | |
202 | } | |
203 | ||
204 | 154 | READ8_MEMBER( pcd_state::nmi_io_r ) |
205 | 155 | { |
206 | 156 | if(space.debugger_access()) |
r249189 | r249190 | |
242 | 192 | m_stat &= ~data; |
243 | 193 | } |
244 | 194 | |
245 | READ8_MEMBER( pcd_state::detect_r ) | |
246 | { | |
247 | return 0; | |
248 | } | |
249 | ||
250 | WRITE8_MEMBER( pcd_state::detect_w ) | |
251 | { | |
252 | } | |
253 | ||
254 | READ8_MEMBER( pcd_state::mcu_r ) | |
255 | { | |
256 | return 0x20; | |
257 | } | |
258 | ||
259 | WRITE8_MEMBER( pcd_state::mcu_w ) | |
260 | { | |
261 | } | |
262 | ||
263 | 195 | READ16_MEMBER( pcd_state::dskctl_r ) |
264 | 196 | { |
265 | 197 | return m_dskctl; |
r249189 | r249190 | |
337 | 269 | } |
338 | 270 | } |
339 | 271 | |
340 | SCN2674_DRAW_CHARACTER_MEMBER(pcd_state::display_pixels) | |
341 | { | |
342 | if(lg) | |
343 | { | |
344 | UINT16 data = m_vram[address]; | |
345 | data = (data >> 8) | (data << 8); | |
346 | for(int i = 0; i < 16; i++) | |
347 | bitmap.pix32(y, x + i) = m_palette->pen((data & (1 << (15 - i))) ? 1 : 0); | |
348 | } | |
349 | else | |
350 | { | |
351 | UINT8 data = m_charram[(m_vram[address] & 0xff) * 16 + linecount]; | |
352 | if(cursor && blink) | |
353 | data = 0xff; | |
354 | for(int i = 0; i < 8; i++) | |
355 | bitmap.pix32(y, x + i) = m_palette->pen((data & (1 << (7 - i))) ? 1 : 0); | |
356 | } | |
357 | } | |
358 | ||
359 | 272 | READ8_MEMBER(pcd_state::scsi_r) |
360 | 273 | { |
361 | 274 | UINT8 ret = 0; |
r249189 | r249190 | |
495 | 408 | return ram[offset]; |
496 | 409 | } |
497 | 410 | |
498 | // The PC-X treats the graphics board as a serial port. Maybe the 8031 (instead of 8047) can | |
499 | // write directly to the video ram and there's a char ROM instead of RAM? | |
500 | READ8_MEMBER(pcd_state::exp_r) | |
501 | { | |
502 | if(m_dskctl & 0x40) | |
503 | { | |
504 | if(!offset) | |
505 | { | |
506 | UINT8 data = m_term_key; | |
507 | m_term_key = 0; | |
508 | return data; | |
509 | } | |
510 | else | |
511 | { | |
512 | m_pic2->ir0_w(CLEAR_LINE); | |
513 | return (m_term_key ? 1 : 0); | |
514 | } | |
515 | } | |
516 | else if(offset & 1) | |
517 | return m_crtc->read(space, offset/2); | |
518 | return 0xff; | |
519 | } | |
520 | ||
521 | WRITE8_MEMBER(pcd_state::exp_w) | |
522 | { | |
523 | if(m_dskctl & 0x40) | |
524 | { | |
525 | if(!offset) | |
526 | { | |
527 | m_pic2->ir0_w(ASSERT_LINE); | |
528 | m_terminal->write(space, 0, data); | |
529 | } | |
530 | } | |
531 | else if(!(offset & 1)) | |
532 | return m_crtc->write(space, offset/2, data); | |
533 | } | |
534 | ||
535 | WRITE8_MEMBER(pcd_state::term_key_w) | |
536 | { | |
537 | m_pic2->ir0_w(ASSERT_LINE); | |
538 | m_term_key = data; | |
539 | } | |
540 | ||
541 | 411 | //************************************************************************** |
542 | 412 | // ADDRESS MAPS |
543 | 413 | //************************************************************************** |
544 | 414 | |
545 | 415 | static ADDRESS_MAP_START( pcd_map, AS_PROGRAM, 16, pcd_state ) |
546 | 416 | AM_RANGE(0x00000, 0x7ffff) AM_READWRITE(mem_r, mem_w) |
547 | AM_RANGE(0xf0000, 0xf7fff) AM_READONLY AM_WRITE(vram_w) AM_SHARE("vram") | |
548 | 417 | AM_RANGE(0xfc000, 0xfffff) AM_ROM AM_REGION("bios", 0) |
549 | 418 | AM_RANGE(0x00000, 0xfffff) AM_READWRITE8(nmi_io_r, nmi_io_w, 0xffff) |
550 | 419 | ADDRESS_MAP_END |
551 | 420 | |
552 | 421 | static ADDRESS_MAP_START( pcd_io, AS_IO, 16, pcd_state ) |
553 | 422 | ADDRESS_MAP_UNMAP_HIGH |
554 | AM_RANGE(0x8000, 0x8fff) AM_READWRITE(mmu_r, mmu_w) | |
555 | 423 | AM_RANGE(0x0000, 0xefff) AM_READWRITE8(nmi_io_r, nmi_io_w, 0xffff) |
556 | 424 | AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_SHARE("nvram") |
557 | 425 | AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE8("pic1", pic8259_device, read, write, 0xffff) |
r249189 | r249190 | |
562 | 430 | AM_RANGE(0xf900, 0xf903) AM_DEVREADWRITE8("fdc", wd2793_t, read, write, 0xffff) |
563 | 431 | AM_RANGE(0xf904, 0xf905) AM_READWRITE(dskctl_r, dskctl_w) |
564 | 432 | AM_RANGE(0xf940, 0xf943) AM_READWRITE8(scsi_r, scsi_w, 0xffff) |
565 | AM_RANGE(0xf980, 0xf98f) AM_DEVWRITE8("crtc", scn2674_device, write, 0x00ff) | |
566 | AM_RANGE(0xf980, 0xf98f) AM_DEVREAD8("crtc", scn2674_device, read, 0xff00) | |
567 | AM_RANGE(0xf9a0, 0xf9a1) AM_WRITE8(vram_sw_w, 0x00ff) | |
568 | AM_RANGE(0xf9b0, 0xf9b3) AM_READWRITE8(mcu_r, mcu_w, 0x00ff) // 8741 comms | |
433 | AM_RANGE(0xf980, 0xf98f) AM_DEVICE("video", pcdx_video_device, map) | |
569 | 434 | AM_RANGE(0xf9c0, 0xf9c3) AM_DEVREADWRITE8("usart1",mc2661_device,read,write,0xffff) // UARTs |
570 | 435 | AM_RANGE(0xf9d0, 0xf9d3) AM_DEVREADWRITE8("usart2",mc2661_device,read,write,0xffff) |
571 | 436 | AM_RANGE(0xf9e0, 0xf9e3) AM_DEVREADWRITE8("usart3",mc2661_device,read,write,0xffff) |
572 | 437 | // AM_RANGE(0xfa00, 0xfa7f) // pcs4-n (peripheral chip select) |
573 | AM_RANGE(0xfb00, 0xfb01) AM_READWRITE8(detect_r, detect_w, 0xff00) // expansion card detection? | |
574 | 438 | AM_RANGE(0xfb00, 0xffff) AM_READWRITE8(nmi_io_r, nmi_io_w, 0xffff) |
575 | 439 | ADDRESS_MAP_END |
576 | 440 | |
577 | 441 | static ADDRESS_MAP_START( pcx_io, AS_IO, 16, pcd_state ) |
578 | 442 | ADDRESS_MAP_UNMAP_HIGH |
579 | AM_RANGE(0xf980, 0xf98f) AM_READWRITE8(exp_r, exp_w, 0xffff) | |
443 | AM_RANGE(0x8000, 0x8fff) AM_READWRITE(mmu_r, mmu_w) | |
444 | AM_RANGE(0xfb00, 0xfb01) AM_READWRITE8(nmi_io_r, nmi_io_w, 0xff00) | |
580 | 445 | AM_IMPORT_FROM(pcd_io) |
581 | 446 | ADDRESS_MAP_END |
582 | 447 | |
r249189 | r249190 | |
593 | 458 | FLOPPY_PC_FORMAT |
594 | 459 | FLOPPY_FORMATS_END |
595 | 460 | |
596 | static INPUT_PORTS_START(pc | |
461 | static INPUT_PORTS_START(pcx) | |
597 | 462 | PORT_START("mmu") |
598 | 463 | PORT_CONFNAME(0x03, 0x00, "MMU Type") |
599 | 464 | PORT_CONFSETTING(0x00, "None") |
r249189 | r249190 | |
608 | 473 | MCFG_80186_TMROUT1_HANDLER(WRITELINE(pcd_state, i186_timer1_w)) |
609 | 474 | MCFG_80186_IRQ_SLAVE_ACK(READ8(pcd_state, irq_callback)) |
610 | 475 | |
611 | MCFG_CPU_ADD("graphics", I8741, XTAL_16MHz/2) | |
612 | MCFG_DEVICE_DISABLE() | |
613 | ||
614 | 476 | MCFG_TIMER_DRIVER_ADD_PERIODIC("timer0_tick", pcd_state, timer0_tick, attotime::from_hz(XTAL_16MHz / 24)) // adjusted to pass post |
615 | 477 | |
616 | 478 | MCFG_PIC8259_ADD("pic1", DEVWRITELINE("maincpu", i80186_cpu_device, int0_w), VCC, NULL) |
617 | 479 | MCFG_PIC8259_ADD("pic2", DEVWRITELINE("maincpu", i80186_cpu_device, int1_w), VCC, NULL) |
618 | 480 | |
481 | MCFG_DEVICE_ADD("video", PCD_VIDEO, 0) | |
482 | ||
619 | 483 | MCFG_RAM_ADD(RAM_TAG) |
620 | 484 | MCFG_RAM_DEFAULT_SIZE("1M") |
621 | 485 | |
r249189 | r249190 | |
656 | 520 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
657 | 521 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) |
658 | 522 | |
659 | // video hardware | |
660 | MCFG_SCREEN_ADD("screen", RASTER) | |
661 | MCFG_SCREEN_SIZE(640, 350) | |
662 | MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 349) | |
663 | MCFG_SCREEN_REFRESH_RATE(50) | |
664 | MCFG_SCREEN_UPDATE_DEVICE("crtc", scn2674_device, screen_update) | |
665 | ||
666 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", empty) | |
667 | MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette") | |
668 | ||
669 | MCFG_SCN2674_VIDEO_ADD("crtc", 0, NULL); | |
670 | MCFG_SCN2674_TEXT_CHARACTER_WIDTH(8) | |
671 | MCFG_SCN2674_GFX_CHARACTER_WIDTH(16) | |
672 | MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(pcd_state, display_pixels) | |
673 | MCFG_VIDEO_SET_SCREEN("screen") | |
674 | ||
675 | 523 | // rtc |
676 | 524 | MCFG_MC146818_ADD("rtc", XTAL_32_768kHz) |
677 | 525 | MCFG_MC146818_IRQ_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir7_w)) |
r249189 | r249190 | |
696 | 544 | MCFG_CPU_MODIFY("maincpu") |
697 | 545 | MCFG_CPU_IO_MAP(pcx_io) |
698 | 546 | |
699 | // FIXME: temporary workaround | |
700 | MCFG_DEVICE_ADD("terminal", GENERIC_TERMINAL, 0) | |
701 | MCFG_GENERIC_TERMINAL_KEYBOARD_CB(WRITE8(pcd_state, term_key_w)) | |
547 | MCFG_DEVICE_REPLACE("video", PCX_VIDEO, 0) | |
548 | MCFG_PCX_VIDEO_TXD_HANDLER(DEVWRITELINE("keyboard", pcd_keyboard_device, t0_w)) | |
702 | 549 | |
703 | MCFG_DEVICE_REMOVE("graphics") | |
550 | MCFG_DEVICE_MODIFY("keyboard") | |
551 | MCFG_PCD_KEYBOARD_OUT_TX_HANDLER(DEVWRITELINE("video", pcx_video_device, rx_w)) | |
552 | ||
553 | MCFG_DEVICE_MODIFY("usart2") | |
554 | MCFG_MC2661_TXD_HANDLER(NULL) | |
704 | 555 | MACHINE_CONFIG_END |
705 | 556 | |
706 | 557 | //************************************************************************** |
r249189 | r249190 | |
715 | 566 | ROM_SYSTEM_BIOS(1, "v3", "V3 GS4") // from mainboard SYBAC S26361-D359 V3 GS4 |
716 | 567 | ROMX_LOAD("361d0359.d42", 0x0001, 0x2000, CRC(5b4461e4) SHA1(db6756aeabb2e6d3921dc7571a5bed3497b964bf), ROM_SKIP(1) | ROM_BIOS(2)) |
717 | 568 | ROMX_LOAD("361d0359.d43", 0x0000, 0x2000, CRC(71c3189d) SHA1(e8dd6c632bfc833074d3a833ea7f59bb5460f313), ROM_SKIP(1) | ROM_BIOS(2)) |
718 | ||
719 | // gfx card (scn2674 with 8741), to be moved | |
720 | ROM_REGION(0x400, "graphics", 0) | |
721 | ROM_LOAD("s36361-d321-v1.bin", 0x000, 0x400, CRC(69baeb2a) SHA1(98b9cd0f38c51b4988a3aed0efcf004bedd115ff)) | |
722 | 569 | ROM_END |
723 | 570 | |
724 | 571 | ROM_START( pcx ) |
r249189 | r249190 | |
735 | 582 | // GAME DRIVERS |
736 | 583 | //************************************************************************** |
737 | 584 | |
738 | COMP( 1984, pcd, 0, 0, pcd, pcd, driver_device, 0, "Siemens", "PC-D", MACHINE_NOT_WORKING ) | |
739 | COMP( 1984, pcx, pcd, 0, pcx, pcd, driver_device, 0, "Siemens", "PC-X", MACHINE_NOT_WORKING ) | |
585 | COMP( 1984, pcd, 0, 0, pcd, 0, driver_device, 0, "Siemens", "PC-D", MACHINE_NOT_WORKING ) | |
586 | COMP( 1984, pcx, pcd, 0, pcx, pcx, driver_device, 0, "Siemens", "PC-X", MACHINE_NOT_WORKING ) |
r249189 | r249190 | |
---|---|---|
119 | 119 | |
120 | 120 | #include "emu.h" |
121 | 121 | #include "includes/md_cons.h" |
122 | #include "sound/ | |
122 | #include "sound/315-5641.h" | |
123 | 123 | |
124 | 124 | |
125 | 125 | #define PICO_PENX 1 |
r249189 | r249190 | |
130 | 130 | public: |
131 | 131 | pico_base_state(const machine_config &mconfig, device_type type, const char *tag) |
132 | 132 | : md_cons_state(mconfig, type, tag), |
133 | m_ | |
133 | m_sega_315_5641_pcm(*this, "315_5641"), | |
134 | 134 | m_io_page(*this, "PAGE"), |
135 | 135 | m_io_pad(*this, "PAD"), |
136 | 136 | m_io_penx(*this, "PENX"), |
137 | 137 | m_io_peny(*this, "PENY") |
138 | 138 | { } |
139 | 139 | |
140 | optional_device< | |
140 | optional_device<sega_315_5641_pcm_device> m_sega_315_5641_pcm; | |
141 | 141 | |
142 | 142 | required_ioport m_io_page; |
143 | 143 | required_ioport m_io_pad; |
r249189 | r249190 | |
251 | 251 | |
252 | 252 | case 8: // toy story 2 checks this for 0x3f (is that 'empty'?) |
253 | 253 | /* Returns free bytes left in the PCM FIFO buffer */ |
254 | retdata = | |
254 | retdata = m_sega_315_5641_pcm->get_fifo_space(); | |
255 | 255 | break; |
256 | 256 | case 9: |
257 | 257 | /* |
258 | 258 | For reads, if bit 15 is cleared, it means PCM is 'busy' or |
259 | 259 | something like that, as games sometimes wait for it to become 1. |
260 | 260 | */ |
261 | return (m_upd7759->busy_r()^1) << 15; | |
261 | // return (m_upd7759->busy_r()^1) << 15; | |
262 | // The BUSY bit stays 1 as long as some PCM sound is playing. | |
263 | // SMPS drivers check 800012 [byte] and clear the "prevent music PCM" byte when the READY bit gets set. | |
264 | // If this is done incorrectly, the voices in Sonic Gameworld (J) are muted by the music's PCM drums. | |
265 | return m_sega_315_5641_pcm->busy_r() << 15; | |
262 | 266 | |
263 | 267 | |
264 | 268 | case 7: |
r249189 | r249190 | |
279 | 283 | WRITE_LINE_MEMBER(pico_base_state::sound_cause_irq) |
280 | 284 | { |
281 | 285 | // printf("sound irq\n"); |
282 | /* | |
286 | /* sega_315_5641_pcm callback */ | |
283 | 287 | m_maincpu->set_input_line(3, HOLD_LINE); |
284 | 288 | } |
285 | 289 | |
r249189 | r249190 | |
289 | 293 | |
290 | 294 | switch (offset) |
291 | 295 | { |
292 | case 0x12/2: // guess | |
293 | m_upd7759->reset_w(0); | |
294 | m_upd7759->start_w(0); | |
295 | m_upd7759->reset_w(1); | |
296 | m_upd7759->start_w(1); | |
296 | case 0x10/2: | |
297 | if (mem_mask & 0xFF00) | |
298 | m_sega_315_5641_pcm->port_w(space, 0, (data >> 8) & 0xFF); | |
299 | if (mem_mask & 0x00FF) | |
300 | m_sega_315_5641_pcm->port_w(space, 0, (data >> 0) & 0xFF); | |
301 | break; | |
302 | case 0x12/2: // guess | |
303 | // Note about uPD7759 lines: | |
304 | // reset line: 1 - normal, 1->0 - reset chip, 0 - playback disabled | |
305 | // start line: 0->1 - start playback | |
306 | if (mem_mask & 0xFF00) | |
307 | { | |
308 | // I assume that: | |
309 | // value 8000 resets the FIFO? (always used with low reset line) | |
310 | // value 0800 maps to the uPD7759's reset line (0 = reset, 1 = normal) | |
311 | // value 4000 maps to the uPD7759's start line (0->1 = start) | |
312 | m_sega_315_5641_pcm->reset_w((data >> 8) & 0x08); | |
313 | m_sega_315_5641_pcm->start_w((data >> 8) & 0x40); | |
314 | if (data & 0x4000) | |
315 | { | |
316 | // Somewhere between "Reset Off" and the first sample data, | |
317 | // we need to send a few commands to make the sample stream work. | |
318 | // Doing that when rising the "start" line seems to work fine. | |
319 | m_sega_315_5641_pcm->port_w(space, 0, 0xFF); // "Last Sample" value (must be >= 0x10) | |
320 | m_sega_315_5641_pcm->port_w(space, 0, 0x00); // Dummy 1 | |
321 | m_sega_315_5641_pcm->port_w(space, 0, 0x00); // Addr MSB | |
322 | m_sega_315_5641_pcm->port_w(space, 0, 0x00); // Addr LSB | |
323 | } | |
324 | } | |
325 | ||
326 | ||
327 | /*m_sega_315_5641_pcm->reset_w(0); | |
328 | m_sega_315_5641_pcm->start_w(0); | |
329 | m_sega_315_5641_pcm->reset_w(1); | |
330 | m_sega_315_5641_pcm->start_w(1); | |
297 | 331 | |
298 | if (mem_mask&0x00ff) m_upd7759->port_w(space,0,data&0xff); | |
299 | if (mem_mask&0xff00) m_upd7759->port_w(space,0,(data>>8)&0xff); | |
332 | if (mem_mask&0x00ff) m_sega_315_5641_pcm->port_w(space,0,data&0xff); | |
333 | if (mem_mask&0xff00) m_sega_315_5641_pcm->port_w(space,0,(data>>8)&0xff);*/ | |
300 | 334 | |
301 | 335 | break; |
302 | 336 | } |
r249189 | r249190 | |
356 | 390 | MCFG_CPU_PROGRAM_MAP(pico_mem) |
357 | 391 | |
358 | 392 | MCFG_DEVICE_REMOVE("genesis_snd_z80") |
393 | MCFG_DEVICE_REMOVE("ymsnd") | |
359 | 394 | |
360 | 395 | MCFG_MACHINE_START_OVERRIDE( pico_state, pico ) |
361 | 396 | MCFG_MACHINE_RESET_OVERRIDE( pico_base_state, ms_megadriv ) |
r249189 | r249190 | |
363 | 398 | MCFG_PICO_CARTRIDGE_ADD("picoslot", pico_cart, NULL) |
364 | 399 | MCFG_SOFTWARE_LIST_ADD("cart_list","pico") |
365 | 400 | |
366 | MCFG_SOUND_ADD(" | |
401 | MCFG_SOUND_ADD("315_5641", SEGA_315_5641_PCM, UPD7759_STANDARD_CLOCK*2) | |
367 | 402 | MCFG_UPD7759_DRQ_CALLBACK(WRITELINE(pico_state,sound_cause_irq)) |
368 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.48) | |
369 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.48) | |
403 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.16) | |
404 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.16) | |
370 | 405 | MACHINE_CONFIG_END |
371 | 406 | |
372 | 407 | static MACHINE_CONFIG_START( picopal, pico_state ) |
r249189 | r249190 | |
376 | 411 | MCFG_CPU_PROGRAM_MAP(pico_mem) |
377 | 412 | |
378 | 413 | MCFG_DEVICE_REMOVE("genesis_snd_z80") |
414 | MCFG_DEVICE_REMOVE("ymsnd") | |
379 | 415 | |
380 | 416 | MCFG_MACHINE_START_OVERRIDE( pico_state, pico ) |
381 | 417 | MCFG_MACHINE_RESET_OVERRIDE( pico_base_state, ms_megadriv ) |
r249189 | r249190 | |
383 | 419 | MCFG_PICO_CARTRIDGE_ADD("picoslot", pico_cart, NULL) |
384 | 420 | MCFG_SOFTWARE_LIST_ADD("cart_list","pico") |
385 | 421 | |
386 | MCFG_SOUND_ADD(" | |
422 | MCFG_SOUND_ADD("315_5641", SEGA_315_5641_PCM, UPD7759_STANDARD_CLOCK*2) | |
387 | 423 | MCFG_UPD7759_DRQ_CALLBACK(WRITELINE(pico_state,sound_cause_irq)) |
388 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.48) | |
389 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.48) | |
424 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.16) | |
425 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.16) | |
390 | 426 | MACHINE_CONFIG_END |
391 | 427 | |
392 | 428 | |
r249189 | r249190 | |
552 | 588 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa15000, 0xa150ff, read16_delegate(FUNC(base_md_cart_slot_device::read_a15),(base_md_cart_slot_device*)m_picocart), write16_delegate(FUNC(base_md_cart_slot_device::write_a15),(base_md_cart_slot_device*)m_picocart)); |
553 | 589 | m_maincpu->space(AS_PROGRAM).install_write_handler(0xa14000, 0xa14003, write16_delegate(FUNC(base_md_cart_slot_device::write_tmss_bank),(base_md_cart_slot_device*)m_picocart)); |
554 | 590 | |
555 | m_upd7759->reset_w(0); | |
556 | m_upd7759->start_w(0); | |
557 | m_upd7759->reset_w(1); | |
558 | m_upd7759->start_w(1); | |
591 | m_sega_315_5641_pcm->reset_w(0); | |
592 | m_sega_315_5641_pcm->start_w(0); | |
593 | m_sega_315_5641_pcm->reset_w(1); | |
594 | m_sega_315_5641_pcm->start_w(1); | |
559 | 595 | |
560 | 596 | } |
561 | 597 | |
r249189 | r249190 | |
566 | 602 | MCFG_CPU_PROGRAM_MAP(copera_mem) |
567 | 603 | |
568 | 604 | MCFG_DEVICE_REMOVE("genesis_snd_z80") |
605 | MCFG_DEVICE_REMOVE("ymsnd") | |
569 | 606 | |
570 | 607 | MCFG_MACHINE_START_OVERRIDE( copera_state, copera ) |
571 | 608 | MCFG_MACHINE_RESET_OVERRIDE( pico_base_state, ms_megadriv ) |
r249189 | r249190 | |
573 | 610 | MCFG_COPERA_CARTRIDGE_ADD("coperaslot", copera_cart, NULL) |
574 | 611 | MCFG_SOFTWARE_LIST_ADD("cart_list","copera") |
575 | 612 | |
576 | MCFG_SOUND_ADD(" | |
613 | MCFG_SOUND_ADD("315_5641", SEGA_315_5641_PCM, UPD7759_STANDARD_CLOCK) | |
577 | 614 | MCFG_UPD7759_DRQ_CALLBACK(WRITELINE(copera_state,sound_cause_irq)) |
578 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.48) | |
579 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.48) | |
615 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.16) | |
616 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.16) | |
580 | 617 | MACHINE_CONFIG_END |
581 | 618 | |
582 | 619 |
r249189 | r249190 | |
---|---|---|
122 | 122 | |
123 | 123 | void xbox_state::hack_eeprom() |
124 | 124 | { |
125 | // 8003b744,3b744=0x90 0x90 | |
126 | /*m_maincpu->space(0).write_byte(0x3b744, 0x90); | |
127 | m_maincpu->space(0).write_byte(0x3b745, 0x90); | |
128 | m_maincpu->space(0).write_byte(0x3b766, 0xc9); | |
129 | m_maincpu->space(0).write_byte(0x3b767, 0xc3);*/ | |
125 | // 8004e5da,4e5da=0xc3 | |
126 | m_maincpu->space(0).write_byte(0x4e5da, 0xc3); | |
130 | 127 | } |
131 | 128 | |
132 | 129 | /*static const struct { |
r249189 | r249190 | |
196 | 193 | ***************************************************************************/ |
197 | 194 | |
198 | 195 | ROM_START( xbox ) |
199 | ROM_REGION( 0x200, "mcpx", 0 ) | |
196 | ROM_REGION( 0x400, "mcpx", 0 ) | |
197 | // mcpx_1_0.bin is bad, first byte (0x7f) sould be removed and a byte with value 0xee added at the end | |
200 | 198 | ROM_LOAD( "mcpx_1_0.bin", 0, 0x200, CRC(f31429fc) SHA1(a9ecbf8896d10db81594923e485862aa3aac7b58) ) |
201 | ROM_LOAD( "mcpx_1_1.bin", 0, 0x200, CRC(94ce376b) SHA1(6c875f17f773aaec51eb434068bb6c657c4343c0) ) | |
199 | ROM_LOAD( "mcpx_1_1.bin", 0x200, 0x200, CRC(94ce376b) SHA1(6c875f17f773aaec51eb434068bb6c657c4343c0) ) | |
202 | 200 | |
203 | ROM_REGION( 0x80000, "bios", 0) | |
204 | ROM_LOAD( "xbox-5530.bin", 0x000000, 0x040000, CRC(9569c4d3) SHA1(40fa73277013be3168135e1768b09623a987ff63) ) | |
205 | ROM_LOAD( "xbox-5713.bin", 0x040000, 0x040000, CRC(58fd8173) SHA1(8b7ccc4648ccd78cdb7b65cfca09621eaf2d4238) ) | |
206 | ROM_COPY( "mcpx", 0, 0x7fe00, 0x200 ) | |
201 | ROM_REGION( 0x100000, "bios", 0) | |
202 | ROM_LOAD( "4134_1024k.bin", 0x000000, 0x100000, CRC(49d8055a) SHA1(d46cef771a63dc8024fe36d7ab5b959087ac999f) ) | |
203 | ROM_COPY( "mcpx", 1, 0x7fe00, 0x1ff) | |
207 | 204 | |
208 | 205 | |
209 | 206 | ROM_REGION( 0x1000000, "tbp", 0 ) // To Be Processed, of course |
210 | 207 | ROM_LOAD( "3944_1024k.bin", 0x000000, 0x100000, CRC(32a9ecb6) SHA1(67054fc88bda94e33e86f1b19be60efec0724fb6) ) |
211 | 208 | ROM_LOAD( "4034_1024k.bin", 0x000000, 0x100000, CRC(0d6fc88f) SHA1(ab676b712204fb1728bf89f9cd541a8f5a64ab97) ) |
212 | ROM_LOAD( "4134_1024k.bin", 0x000000, 0x100000, CRC(49d8055a) SHA1(d46cef771a63dc8024fe36d7ab5b959087ac999f) ) | |
213 | 209 | ROM_LOAD( "4817_1024k.bin", 0x000000, 0x100000, CRC(3f30863a) SHA1(dc955bd4d3ca71e01214a49e5d0aba615270c03c) ) |
214 | 210 | ROM_LOAD( "5101_256k.bin", 0x000000, 0x040000, CRC(e8a9224e) SHA1(5108e1025f48071c07a6823661d708c66dee97a9) ) |
211 | ROM_LOAD( "xbox-5530.bin", 0x000000, 0x040000, CRC(9569c4d3) SHA1(40fa73277013be3168135e1768b09623a987ff63) ) | |
212 | ROM_LOAD( "xbox-5713.bin", 0x040000, 0x040000, CRC(58fd8173) SHA1(8b7ccc4648ccd78cdb7b65cfca09621eaf2d4238) ) | |
215 | 213 | ROM_LOAD( "5838_256k.bin", 0x000000, 0x040000, CRC(5be2413d) SHA1(b9489e883c650b5e5fe2f83a32237dbf74f0e9f1) ) |
216 | 214 | ROM_END |
217 | 215 | // See src/emu/gamedrv.h for details |
r249189 | r249190 | |
---|---|---|
29 | 29 | #include "bus/cpc/smartwatch.h" |
30 | 30 | #include "bus/cpc/brunword4.h" |
31 | 31 | #include "bus/cpc/hd20.h" |
32 | #include "bus/cpc/magicsound.h" | |
32 | 33 | #include "machine/ram.h" |
33 | 34 | #include "imagedev/cassette.h" |
34 | 35 | #include "bus/centronics/ctronics.h" |
r249189 | r249190 | |
---|---|---|
22 | 22 | #include "machine/i8271.h" |
23 | 23 | #include "machine/wd_fdc.h" |
24 | 24 | #include "machine/upd7002.h" |
25 | #include "machine/mc146818.h" | |
25 | 26 | #include "video/mc6845.h" |
26 | 27 | #include "video/saa5050.h" |
27 | 28 | #include "sound/sn76496.h" |
r249189 | r249190 | |
52 | 53 | m_via6522_0(*this, "via6522_0"), |
53 | 54 | m_via6522_1(*this, "via6522_1"), |
54 | 55 | m_upd7002(*this, "upd7002"), |
56 | m_rtc(*this, "rtc"), | |
55 | 57 | m_i8271(*this, "i8271"), |
58 | m_wd1770(*this, "wd1770"), | |
59 | m_wd1772(*this, "wd1772"), | |
56 | 60 | m_exp1(*this, "exp_rom1"), |
57 | 61 | m_exp2(*this, "exp_rom2"), |
58 | 62 | m_exp3(*this, "exp_rom3"), |
r249189 | r249190 | |
64 | 68 | m_region_maincpu(*this, "maincpu"), |
65 | 69 | m_region_os(*this, "os"), |
66 | 70 | m_region_opt(*this, "option"), |
67 | m_region_dfs(*this, "dfs"), | |
68 | 71 | m_bank1(*this, "bank1"), |
69 | 72 | m_bank2(*this, "bank2"), |
70 | 73 | m_bank3(*this, "bank3"), |
r249189 | r249190 | |
80 | 83 | m_palette(*this, "palette") |
81 | 84 | { } |
82 | 85 | |
83 | DECLARE_FLOPPY_FORMATS(floppy_formats); | |
86 | DECLARE_FLOPPY_FORMATS(floppy_formats_525sd); | |
87 | DECLARE_FLOPPY_FORMATS(floppy_formats_525dd); | |
88 | DECLARE_FLOPPY_FORMATS(floppy_formats_35dd); | |
84 | 89 | |
85 | 90 | DECLARE_WRITE8_MEMBER(bbc_page_selecta_w); |
86 | 91 | DECLARE_WRITE8_MEMBER(bbc_memorya1_w); |
r249189 | r249190 | |
104 | 109 | DECLARE_READ8_MEMBER(bbcm_r); |
105 | 110 | DECLARE_WRITE8_MEMBER(bbcm_w); |
106 | 111 | DECLARE_WRITE8_MEMBER(bbc_SerialULA_w); |
107 | DECLARE_READ8_MEMBER(bbc_i8271_read); | |
108 | DECLARE_WRITE8_MEMBER(bbc_i8271_write); | |
109 | DECLARE_WRITE8_MEMBER(bbc_wd177x_status_w); | |
110 | DECLARE_READ8_MEMBER(bbc_wd1770_read); | |
111 | DECLARE_WRITE8_MEMBER(bbc_wd1770_write); | |
112 | DECLARE_WRITE8_MEMBER(bbc_opus_status_w); | |
113 | DECLARE_READ8_MEMBER(bbc_opus_read); | |
114 | DECLARE_WRITE8_MEMBER(bbc_opus_write); | |
115 | DECLARE_READ8_MEMBER(bbcm_wd1770_read); | |
116 | DECLARE_WRITE8_MEMBER(bbcm_wd1770_write); | |
117 | DECLARE_READ8_MEMBER(bbcm_wd1770l_read); | |
112 | ||
113 | DECLARE_WRITE8_MEMBER(bbc_wd1770_status_w); | |
114 | DECLARE_READ8_MEMBER(bbcm_wd177xl_read); | |
118 | 115 | DECLARE_WRITE8_MEMBER(bbcm_wd1770l_write); |
119 | DECLARE_READ8_MEMBER(bbc_disc_r); | |
120 | DECLARE_WRITE8_MEMBER(bbc_disc_w); | |
116 | DECLARE_WRITE8_MEMBER(bbcm_wd1772l_write); | |
121 | 117 | DECLARE_WRITE8_MEMBER(bbc_videoULA_w); |
122 | DECLARE_WRITE8_MEMBER(bbc_6845_w); | |
123 | DECLARE_READ8_MEMBER(bbc_6845_r); | |
124 | 118 | DECLARE_READ8_MEMBER(bbc_fe_r); |
125 | 119 | DECLARE_DIRECT_UPDATE_MEMBER(bbcbp_direct_handler); |
126 | 120 | DECLARE_DIRECT_UPDATE_MEMBER(bbcm_direct_handler); |
121 | ||
127 | 122 | DECLARE_DRIVER_INIT(bbc); |
128 | ||
123 | ||
129 | 124 | DECLARE_MACHINE_START(bbca); |
130 | 125 | DECLARE_MACHINE_RESET(bbca); |
131 | 126 | DECLARE_VIDEO_START(bbca); |
127 | ||
132 | 128 | DECLARE_MACHINE_START(bbcb); |
133 | 129 | DECLARE_MACHINE_RESET(bbcb); |
134 | 130 | DECLARE_VIDEO_START(bbcb); |
131 | ||
135 | 132 | DECLARE_MACHINE_START(bbcbp); |
136 | 133 | DECLARE_MACHINE_RESET(bbcbp); |
137 | 134 | DECLARE_VIDEO_START(bbcbp); |
135 | ||
138 | 136 | DECLARE_MACHINE_START(bbcm); |
139 | 137 | DECLARE_MACHINE_RESET(bbcm); |
140 | 138 | DECLARE_VIDEO_START(bbcm); |
139 | ||
141 | 140 | DECLARE_PALETTE_INIT(bbc); |
142 | 141 | UINT32 screen_update_bbc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
143 | 142 | INTERRUPT_GEN_MEMBER(bbcb_vsync); |
r249189 | r249190 | |
197 | 196 | optional_device<saa5050_device> m_trom; |
198 | 197 | optional_device<tms5220_device> m_tms; |
199 | 198 | optional_device<cassette_image_device> m_cassette; |
200 | required_device<acia6850_device> m_acia; | |
201 | required_device<clock_device> m_acia_clock; | |
199 | optional_device<acia6850_device> m_acia; | |
200 | optional_device<clock_device> m_acia_clock; | |
202 | 201 | optional_device<rs232_port_device> m_rs232; |
203 | 202 | required_device<via6522_device> m_via6522_0; |
204 | 203 | optional_device<via6522_device> m_via6522_1; |
205 | 204 | optional_device<upd7002_device> m_upd7002; |
205 | optional_device<mc146818_device> m_rtc; | |
206 | 206 | optional_device<i8271_device> m_i8271; |
207 | optional_device<wd1770_t> m_wd1770; | |
208 | optional_device<wd1772_t> m_wd1772; | |
207 | 209 | required_device<generic_slot_device> m_exp1; |
208 | 210 | required_device<generic_slot_device> m_exp2; |
209 | 211 | optional_device<generic_slot_device> m_exp3; |
r249189 | r249190 | |
213 | 215 | required_memory_region m_region_maincpu; |
214 | 216 | required_memory_region m_region_os; |
215 | 217 | required_memory_region m_region_opt; |
216 | optional_memory_region m_region_dfs; | |
217 | 218 | required_memory_bank m_bank1; // bbca bbcb bbcbp bbcbp128 bbcm |
218 | 219 | optional_memory_bank m_bank2; // bbcbp bbcbp128 bbcm |
219 | 220 | optional_memory_bank m_bank3; // bbca bbcb |
r249189 | r249190 | |
225 | 226 | |
226 | 227 | void check_interrupts(); |
227 | 228 | |
228 | int m_DFSType; // this stores the DIP switch setting for the DFS type being used | |
229 | 229 | int m_SWRAMtype; // this stores the DIP switch setting for the SWRAM type being used |
230 | 230 | int m_Speech; // this stores the CONF setting for Speech enabled/disabled |
231 | int m_Master; // if 0 then we are emulating a BBC B style machine | |
232 | // if 1 then we are emulating a BBC Master style machine | |
233 | 231 | |
234 | 232 | int m_ACCCON_IRR; // IRQ inputs |
235 | 233 | |
r249189 | r249190 | |
347 | 345 | i8271 disc control |
348 | 346 | ***************************************/ |
349 | 347 | |
350 | int m_previous_i8271_int_state; // 8271 interupt status | |
348 | int m_previous_i8271_int_state; // 8271 interrupt status | |
351 | 349 | |
352 | 350 | /************************************** |
353 | 351 | WD1770 disc control |
r249189 | r249190 | |
357 | 355 | int m_wd177x_irq_state; |
358 | 356 | int m_wd177x_drq_state; |
359 | 357 | int m_previous_wd177x_int_state; |
360 | int m_177 | |
358 | int m_177x_IntEnabled; | |
361 | 359 | |
362 | 360 | /************************************** |
363 | Opus Challenger Disc control | |
364 | ***************************************/ | |
365 | ||
366 | int m_opusbank; | |
367 | ||
368 | /************************************** | |
369 | 361 | Video Code |
370 | 362 | ***************************************/ |
371 | 363 |
r249189 | r249190 | |
---|---|---|
1694 | 1694 | WRITE8_MEMBER(amstrad_state::aleste_msx_mapper) |
1695 | 1695 | { |
1696 | 1696 | int page = (offset & 0x0300) >> 8; |
1697 | int ramptr = (data & 0x1f) * 0x4000; | |
1698 | int rampage = data & 0x1f; | |
1697 | int ramptr = (data & 0x3f) * 0x4000; | |
1698 | int rampage = data & 0x3f; | |
1699 | 1699 | int function = (data & 0xc0) >> 6; |
1700 | 1700 | UINT8 *ram = m_ram->pointer(); |
1701 | 1701 |
r249189 | r249190 | |
---|---|---|
51 | 51 | *************************/ |
52 | 52 | |
53 | 53 | /* the model B address all 16 of the ROM sockets */ |
54 | /* I have set bank 1 as a special case to load different DFS roms selectable from MESS's CONF settings var:bbc_DFSTypes */ | |
55 | 54 | WRITE8_MEMBER(bbc_state::bbc_page_selectb_w) |
56 | 55 | { |
57 | 56 | m_rombank = data & 0x0f; |
58 | if (m_rombank != 1) | |
59 | { | |
60 | m_bank4->set_entry(m_rombank); | |
61 | } | |
62 | else | |
63 | { | |
64 | m_bank4->set_entry(0x10 + m_DFSType); | |
65 | } | |
57 | m_bank4->set_entry(m_rombank); | |
66 | 58 | } |
67 | 59 | |
68 | 60 | |
r249189 | r249190 | |
80 | 72 | |
81 | 73 | /* I have setup 3 types of sideways ram: |
82 | 74 | 0: none |
83 | 1: 128K (bank 8 to 15) Solidisc sidewaysram userport bank latch | |
75 | 1: 128K (bank 8 to 15) Solidisc sideways ram userport bank latch | |
84 | 76 | 2: 64K (banks 4 to 7) for Acorn sideways ram FE30 bank latch |
85 | 77 | 3: 128K (banks 8 to 15) for Acown sideways ram FE30 bank latch |
86 | 78 | */ |
r249189 | r249190 | |
90 | 82 | |
91 | 83 | WRITE8_MEMBER(bbc_state::bbc_memoryb4_w) |
92 | 84 | { |
93 | i | |
85 | switch (m_SWRAMtype) | |
94 | 86 | { |
95 | // special DFS case for Acorn DFS E00 Hack that can write to the DFS RAM Bank; | |
96 | if (m_DFSType == 3) m_region_dfs->base()[((m_DFSType) << 14) + offset] = data; | |
87 | case 1: if (bbc_SWRAMtype1[m_userport]) m_region_opt->base()[(m_userport << 14) + offset] = data; | |
88 | case 2: if (bbc_SWRAMtype2[m_rombank]) m_region_opt->base()[(m_rombank << 14) + offset] = data; | |
89 | case 3: if (bbc_SWRAMtype3[m_rombank]) m_region_opt->base()[(m_rombank << 14) + offset] = data; | |
97 | 90 | } |
98 | else | |
99 | { | |
100 | switch (m_SWRAMtype) | |
101 | { | |
102 | case 1: if (bbc_SWRAMtype1[m_userport]) m_region_opt->base()[(m_userport << 14) + offset] = data; | |
103 | case 2: if (bbc_SWRAMtype2[m_rombank]) m_region_opt->base()[(m_rombank << 14) + offset] = data; | |
104 | case 3: if (bbc_SWRAMtype3[m_rombank]) m_region_opt->base()[(m_rombank << 14) + offset] = data; | |
105 | } | |
106 | } | |
107 | 91 | } |
108 | 92 | |
109 | 93 | /****************************************/ |
r249189 | r249190 | |
377 | 361 | m_bank2->set_base(m_region_maincpu->base() + 0x3000); |
378 | 362 | } |
379 | 363 | |
380 | /* ACCCON_TST controls paging of rom reads in the 0xFC00-0xFEFF re | |
364 | /* ACCCON_TST controls paging of rom reads in the 0xFC00-0xFEFF region */ | |
381 | 365 | /* if 0 the I/O is paged for both reads and writes */ |
382 | 366 | /* if 1 the ROM is paged in for reads but writes still go to I/O */ |
383 | 367 | if (m_ACCCON_TST) |
r249189 | r249190 | |
538 | 522 | &FE18-&FE1F uPD7002 A to D converter A to D converter 8 ( 4 bytes x 2 ) |
539 | 523 | &FE20-&FE23 Video ULA - Video system chip 4 ( 2 bytes x 2 ) |
540 | 524 | &FE24-&FE27 FDC Latch 1770 Control latch 1770 Control latch 4 ( 1 byte x 4 ) |
541 | &FE28-&FE2F 1770 registers 1770 Disc Controller 1 | |
525 | &FE28-&FE2F 1770 registers 1770 Disc Controller 1770 Disc Controller 8 ( 4 bytes x 2 ) | |
542 | 526 | &FE30-&FE33 ROMSEL - ROM Select 4 ( 1 byte x 4 ) |
543 | 527 | &FE34-&3FE7 ACCCON ACCCON select reg. ACCCON select reg 4 ( 1 byte x 4 ) |
544 | 528 | &FE38-&FE3F NC - - |
r249189 | r249190 | |
554 | 538 | { |
555 | 539 | long myo; |
556 | 540 | |
557 | /* Now handled in bbcm_ACCCON_write PHS - 2008-10-11 */ | |
558 | // if ( m_ACCCON_TST ) | |
559 | // { | |
560 | // return m_region_os->base()[offset + 0x3c00]; | |
561 | // }; | |
562 | ||
563 | 541 | if (offset<=0x0ff) /* FRED */ |
564 | 542 | { |
565 | 543 | return 0xff; |
r249189 | r249190 | |
573 | 551 | if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */ |
574 | 552 | { |
575 | 553 | myo = offset-0x200; |
576 | if ((myo>=0x00) && (myo<=0x07)) return bbc_6845_r(space, myo-0x00); /* Video Controller */ | |
577 | if ((myo>=0x08) && (myo<=0x0f)) | |
578 | { | |
579 | if ((myo - 0x08) & 1) | |
580 | return m_acia->status_r(space,0); | |
581 | else | |
582 | return m_acia->data_r(space,0); | |
583 | } | |
584 | if ((myo>=0x10) && (myo<=0x17)) return 0xfe; /* Serial System Chip */ | |
585 | if ((myo>=0x18) && (myo<=0x1f)) return m_upd7002->read(space, myo-0x18); /* A to D converter */ | |
586 | if ((myo>=0x20) && (myo<=0x23)) return 0xfe; /* VideoULA */ | |
587 | if ((myo>=0x24) && (myo<=0x27)) return bbcm_wd1770l_read(space, myo-0x24); /* 1770 */ | |
588 | if ((myo>=0x28) && (myo<=0x2f)) return bbcm_wd1770_read(space, myo-0x28); /* disc control latch */ | |
589 | if ((myo>=0x30) && (myo<=0x33)) return 0xfe; /* page select */ | |
590 | if ((myo>=0x34) && (myo<=0x37)) return bbcm_ACCCON_read(space, myo-0x34); /* ACCCON */ | |
591 | if ((myo>=0x38) && (myo<=0x3f)) return 0xfe; /* NC ?? */ | |
592 | if ((myo>=0x40) && (myo<=0x5f)) return m_via6522_0->read(space, myo-0x40); | |
593 | if ((myo>=0x60) && (myo<=0x7f)) return m_via6522_1->read(space, myo-0x60); | |
594 | if ((myo>=0x80) && (myo<=0x9f)) return 0xfe; | |
595 | if ((myo>=0xa0) && (myo<=0xbf)) return m_adlc->read(space, myo & 0x03); | |
596 | if ((myo>=0xc0) && (myo<=0xdf)) return 0xfe; | |
597 | if ((myo>=0xe0) && (myo<=0xff)) return 0xfe; | |
554 | if ((myo>=0x00) && (myo<=0x06) && (myo+0x01) & 1) return m_mc6845->status_r(space, myo-0x00); /* Video controller */ | |
555 | if ((myo>=0x01) && (myo<=0x07) && (myo & 1)) return m_mc6845->register_r(space, myo-0x01); | |
556 | if ((myo>=0x08) && (myo<=0x0e) && (myo+0x01) & 1) return m_acia ? m_acia->status_r(space, myo-0x08) : 0xfe; /* Serial controller */ | |
557 | if ((myo>=0x09) && (myo<=0x0f) && (myo & 1)) return m_acia ? m_acia->data_r(space, myo-0x09) : 0xfe; | |
558 | if ((myo>=0x10) && (myo<=0x17)) return 0xfe; /* Serial System Chip */ | |
559 | if ((myo>=0x18) && (myo<=0x1f)) return m_upd7002 ? m_upd7002->read(space, myo-0x18) : 0xfe; /* A to D converter */ | |
560 | if ((myo>=0x20) && (myo<=0x23)) return 0xfe; /* VideoULA */ | |
561 | if ((myo>=0x24) && (myo<=0x27)) return bbcm_wd177xl_read(space, myo - 0x24); /* 177x Control Latch */ | |
562 | if ((myo>=0x28) && (myo<=0x2f) && (m_wd1770)) return m_wd1770->read(space, myo-0x28); /* 1770 Controller */ | |
563 | if ((myo>=0x28) && (myo<=0x2f) && (m_wd1772)) return m_wd1772->read(space, myo-0x28); /* 1772 Controller */ | |
564 | if ((myo>=0x28) && (myo<=0x2f)) return 0xfe; /* No Controller */ | |
565 | if ((myo>=0x30) && (myo<=0x33)) return 0xfe; | |
566 | if ((myo>=0x34) && (myo<=0x37)) return bbcm_ACCCON_read(space, myo-0x34); /* ACCCON */ | |
567 | if ((myo>=0x38) && (myo<=0x3f)) return 0xfe; /* NC ?? */ | |
568 | if ((myo>=0x40) && (myo<=0x5f)) return m_via6522_0->read(space, myo-0x40); | |
569 | if ((myo>=0x60) && (myo<=0x7f)) return m_via6522_1 ? m_via6522_1->read(space, myo-0x60) : 0xfe; | |
570 | if ((myo>=0x80) && (myo<=0x9f)) return 0xfe; | |
571 | if ((myo>=0xa0) && (myo<=0xbf)) return m_adlc ? m_adlc->read(space, myo & 0x03) : 0xfe; | |
572 | if ((myo>=0xc0) && (myo<=0xdf)) return 0xfe; | |
573 | if ((myo>=0xe0) && (myo<=0xff)) return 0xfe; | |
598 | 574 | } |
599 | ||
600 | 575 | return 0xfe; |
601 | 576 | } |
602 | 577 | |
r249189 | r249190 | |
607 | 582 | if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */ |
608 | 583 | { |
609 | 584 | myo=offset-0x200; |
610 | if ((myo>=0x00) && (myo<=0x07)) bbc_6845_w(space, myo-0x00, data); /* Video Controller */ | |
611 | if ((myo>=0x08) && (myo<=0x0f)) | |
612 | { | |
613 | if ((myo - 0x08) & 1) | |
614 | m_acia->control_w(space, 0, data); | |
615 | else | |
616 | m_acia->data_w(space, 0, data); | |
617 | } | |
618 | if ((myo>=0x10) && (myo<=0x17)) bbc_SerialULA_w(space, myo-0x10, data); /* Serial System Chip */ | |
619 | if ((myo>=0x18) && (myo<=0x1f)) m_upd7002->write(space, myo-0x18, data); /* A to D converter */ | |
620 | if ((myo>=0x20) && (myo<=0x23)) bbc_videoULA_w(space, myo-0x20, data); /* VideoULA */ | |
621 | if ((myo>=0x24) && (myo<=0x27)) bbcm_wd1770l_write(space, myo-0x24, data); /* 1770 */ | |
622 | if ((myo>=0x28) && (myo<=0x2f)) bbcm_wd1770_write(space, myo-0x28, data); /* disc control latch */ | |
623 | if ((myo>=0x30) && (myo<=0x33)) page_selectbm_w(space, myo-0x30, data); /* page select */ | |
624 | if ((myo>=0x34) && (myo<=0x37)) bbcm_ACCCON_write(space, myo-0x34, data); /* ACCCON */ | |
625 | //if ((myo>=0x38) && (myo<=0x3f)) /* NC ?? */ | |
626 | if ((myo>=0x40) && (myo<=0x5f)) m_via6522_0->write(space, myo-0x40, data); | |
627 | if ((myo>=0x60) && (myo<=0x7f)) m_via6522_1->write(space, myo-0x60, data); | |
585 | if ((myo>=0x00) && (myo<=0x06) && (myo+0x01) & 1) m_mc6845->address_w(space, myo-0x00, data); /* Video Controller */ | |
586 | if ((myo>=0x01) && (myo<=0x07) && (myo & 1)) m_mc6845->register_w(space, myo-0x01, data); | |
587 | if ((myo>=0x08) && (myo<=0x0e) && (myo+0x01) & 1) if (m_acia) m_acia->control_w(space, myo-0x08, data); /* Serial controller */ | |
588 | if ((myo>=0x09) && (myo<=0x0f) && (myo & 1)) if (m_acia) m_acia->data_w(space, myo-0x09, data); | |
589 | if ((myo>=0x10) && (myo<=0x17)) bbc_SerialULA_w(space, myo-0x10, data); /* Serial System Chip */ | |
590 | if ((myo>=0x18) && (myo<=0x1f) && (m_upd7002)) m_upd7002->write(space, myo-0x18, data); /* A to D converter */ | |
591 | if ((myo>=0x20) && (myo<=0x23)) bbc_videoULA_w(space, myo-0x20, data); /* VideoULA */ | |
592 | if ((myo>=0x24) && (myo<=0x27) && (m_wd1770)) bbcm_wd1770l_write(space, myo-0x24, data); /* disc control latch */ | |
593 | if ((myo>=0x28) && (myo<=0x2f) && (m_wd1770)) m_wd1770->write(space, myo-0x28, data); /* 1770 Controller */ | |
594 | if ((myo>=0x24) && (myo<=0x27) && (m_wd1772)) bbcm_wd1772l_write(space, myo-0x24, data); /* disc control latch */ | |
595 | if ((myo>=0x28) && (myo<=0x2f) && (m_wd1772)) m_wd1772->write(space, myo-0x28, data); /* 1772 Controller */ | |
596 | if ((myo>=0x30) && (myo<=0x33)) page_selectbm_w(space, myo-0x30, data); /* ROMSEL */ | |
597 | if ((myo>=0x34) && (myo<=0x37)) bbcm_ACCCON_write(space, myo-0x34, data); /* ACCCON */ | |
598 | //if ((myo>=0x38) && (myo<=0x3f)) /* NC ?? */ | |
599 | if ((myo>=0x40) && (myo<=0x5f)) m_via6522_0->write(space, myo-0x40, data); | |
600 | if ((myo>=0x60) && (myo<=0x7f) && (m_via6522_1)) m_via6522_1->write(space, myo-0x60, data); | |
628 | 601 | //if ((myo>=0x80) && (myo<=0x9f)) |
629 | if ((myo>=0xa0) && (myo<=0xbf)) m_adlc->write(space, myo & 0x03, data); | |
602 | if ((myo>=0xa0) && (myo<=0xbf) && (m_adlc)) m_adlc->write(space, myo & 0x03, data); | |
630 | 603 | //if ((myo>=0xc0) && (myo<=0xdf)) |
631 | 604 | //if ((myo>=0xe0) && (myo<=0xff)) |
632 | 605 | } |
r249189 | r249190 | |
665 | 638 | normally at logic 1 with no button pressed and change to 0 |
666 | 639 | when a button is pressed. |
667 | 640 | |
668 | PB6 and PB7 inputs from the speech processor | |
669 | -------------------------------------------- | |
641 | PB6 and PB7 inputs from the speech processor (model B and B+) | |
642 | ------------------------------------------------------------- | |
670 | 643 | PB6 is the speech processor 'ready' output and PB7 is from the |
671 | 644 | speech processor 'interrupt' output. |
672 | 645 | |
646 | PB6 and PB7 outputs to Master CMOS RAM/RTC | |
647 | ------------------------------------------ | |
648 | PB6 operates the 146818 chip enable when set to '1'. PB7 operates | |
649 | the 146818 address strobe line. | |
650 | ||
673 | 651 | CA1 input |
674 | 652 | --------- |
675 | 653 | This is the vertical sync input from the 6845. CA1 is set up to |
676 | 654 | interrupt the 6502 every 20ms (50Hz) as a vertical sync from |
677 | the video circuity is detected. The operation system changes | |
678 | the flash colours on the display in this interrupt time so that | |
679 | they maintain synchronisation with the rest of the picture. | |
655 | the video circuitry is detected. The operation system changes | |
656 | the display flash colours on this interrupt so that they occur | |
657 | during the screen blanking period. | |
680 | 658 | ---------------------------------------------------------------- |
681 | 659 | This is required for a lot of time function within the machine |
682 | 660 | and must be triggered every 20ms. (Should check at some point |
r249189 | r249190 | |
830 | 808 | /* This the BBC Masters Real Time Clock and NVRAM IC */ |
831 | 809 | void bbc_state::MC146818_set(address_space &space) |
832 | 810 | { |
833 | logerror ("146181 WR=%d DS=%d AS=%d CE=%d \n",m_MC146818_WR,m_MC146818_DS,m_MC146818_AS,m_MC146818_CE); | |
834 | mc146818_device *rtc = space.machine().device<mc146818_device>("rtc"); | |
811 | //logerror ("146181 WR=%d DS=%d AS=%d CE=%d \n",m_MC146818_WR,m_MC146818_DS,m_MC146818_AS,m_MC146818_CE); | |
812 | //mc146818_device *rtc = space.machine().device<mc146818_device>("rtc"); | |
835 | 813 | |
836 | 814 | // if chip enabled |
837 | 815 | if (m_MC146818_CE) |
r249189 | r249190 | |
841 | 819 | { |
842 | 820 | if (m_MC146818_WR) |
843 | 821 | { |
844 | m_via_system_porta=rtc->read(space, 1); | |
822 | m_via_system_porta = m_rtc->read(space, 1); | |
845 | 823 | //logerror("read 146818 data %d \n",m_via_system_porta); |
846 | 824 | } |
847 | 825 | else |
848 | 826 | { |
849 | rtc->write(space, 1, m_via_system_porta); | |
827 | m_rtc->write(space, 1, m_via_system_porta); | |
850 | 828 | //logerror("write 146818 data %d \n",m_via_system_porta); |
851 | 829 | } |
852 | 830 | } |
r249189 | r249190 | |
854 | 832 | // if address select is set then set the address in the 146818 |
855 | 833 | if (m_MC146818_AS) |
856 | 834 | { |
857 | rtc->write(space, 0, m_via_system_porta); | |
835 | m_rtc->write(space, 0, m_via_system_porta); | |
858 | 836 | //logerror("write 146818 address %d \n",m_via_system_porta); |
859 | 837 | } |
860 | 838 | } |
r249189 | r249190 | |
869 | 847 | if (m_b0_sound == 0) |
870 | 848 | { |
871 | 849 | //logerror("Doing an unsafe write to the sound chip %d \n",data); |
872 | m_sn->write(space, 0, m_via_system_porta); | |
850 | if (m_sn) m_sn->write(space, 0, m_via_system_porta); | |
873 | 851 | } |
852 | if (m_b1_speech_read == 0) | |
853 | { | |
854 | if (m_tms) m_via_system_porta = m_tms->status_r(space, 0); | |
855 | //logerror("Doing an unsafe read to the speech chip %d \n",m_via_system_porta); | |
856 | } | |
857 | if (m_b2_speech_write == 0) | |
858 | { | |
859 | //logerror("Doing an unsafe write to the speech chip %d \n",data); | |
860 | if (m_tms) m_tms->data_w(space, 0, m_via_system_porta); | |
861 | } | |
874 | 862 | if (m_b3_keyboard == 0) |
875 | 863 | { |
876 | 864 | //logerror("Doing an unsafe write to the keyboard %d \n",data); |
877 | 865 | m_via_system_porta = bbc_keyboard(space, m_via_system_porta); |
878 | 866 | } |
879 | if (m_ | |
867 | if (m_rtc) MC146818_set(space); | |
880 | 868 | } |
881 | 869 | |
882 | 870 | |
r249189 | r249190 | |
899 | 887 | } |
900 | 888 | break; |
901 | 889 | case 1: |
902 | if (m_ | |
890 | if (m_rtc && m_MC146818_WR == 0) | |
903 | 891 | { |
904 | if (m_MC146818_WR == 0) | |
905 | { | |
906 | /* BBC MASTER has NVRAM Here */ | |
907 | m_MC146818_WR = 1; | |
908 | MC146818_set(space); | |
909 | } | |
892 | /* BBC Master has NVRAM Here */ | |
893 | m_MC146818_WR = 1; | |
894 | MC146818_set(space); | |
910 | 895 | } |
911 | 896 | else |
912 | 897 | { |
r249189 | r249190 | |
914 | 899 | { |
915 | 900 | /* VSP TMS 5220 */ |
916 | 901 | m_b1_speech_read = 1; |
902 | //logerror("Speech read select TRUE\n"); | |
903 | if (m_tms) m_tms->rsq_w(TRUE); | |
917 | 904 | } |
918 | 905 | } |
919 | 906 | break; |
920 | 907 | case 2: |
921 | if (m_ | |
908 | if (m_rtc && m_MC146818_DS == 0) | |
922 | 909 | { |
923 | if (m_MC146818_DS == 0) | |
924 | { | |
925 | /* BBC MASTER has NVRAM Here */ | |
926 | m_MC146818_DS = 1; | |
927 | MC146818_set(space); | |
928 | } | |
910 | /* BBC Master has NVRAM Here */ | |
911 | m_MC146818_DS = 1; | |
912 | MC146818_set(space); | |
929 | 913 | } |
930 | 914 | else |
931 | 915 | { |
r249189 | r249190 | |
933 | 917 | { |
934 | 918 | /* VSP TMS 5220 */ |
935 | 919 | m_b2_speech_write = 1; |
920 | //logerror("Speech write select TRUE\n"); | |
921 | if (m_tms) m_tms->wsq_w(TRUE); | |
936 | 922 | } |
937 | 923 | } |
938 | 924 | break; |
r249189 | r249190 | |
980 | 966 | if (m_b0_sound == 1) |
981 | 967 | { |
982 | 968 | m_b0_sound = 0; |
983 | m_sn->write(space, 0, m_via_system_porta); | |
969 | if (m_sn) m_sn->write(space, 0, m_via_system_porta); | |
984 | 970 | } |
985 | 971 | break; |
986 | 972 | case 1: |
987 | if (m_ | |
973 | if (m_rtc && m_MC146818_WR == 1) | |
988 | 974 | { |
989 | if (m_MC146818_WR == 1) | |
990 | { | |
991 | /* BBC MASTER has NV RAM Here */ | |
992 | m_MC146818_WR = 0; | |
993 | MC146818_set(space); | |
994 | } | |
975 | /* BBC Master has NVRAM Here */ | |
976 | m_MC146818_WR = 0; | |
977 | MC146818_set(space); | |
995 | 978 | } |
996 | 979 | else |
997 | 980 | { |
r249189 | r249190 | |
999 | 982 | { |
1000 | 983 | /* VSP TMS 5220 */ |
1001 | 984 | m_b1_speech_read = 0; |
985 | //logerror("Speech read select FALSE\n"); | |
986 | if (m_tms) m_tms->rsq_w(FALSE); | |
1002 | 987 | } |
1003 | 988 | } |
1004 | 989 | break; |
1005 | 990 | case 2: |
1006 | if (m_ | |
991 | if (m_rtc && m_MC146818_DS == 1) | |
1007 | 992 | { |
1008 | if (m_MC146818_DS == 1) | |
1009 | { | |
1010 | /* BBC MASTER has NV RAM Here */ | |
1011 | m_MC146818_DS = 0; | |
1012 | MC146818_set(space); | |
1013 | } | |
993 | /* BBC Master has NVRAM Here */ | |
994 | m_MC146818_DS = 0; | |
995 | MC146818_set(space); | |
1014 | 996 | } |
1015 | 997 | else |
1016 | 998 | { |
r249189 | r249190 | |
1018 | 1000 | { |
1019 | 1001 | /* VSP TMS 5220 */ |
1020 | 1002 | m_b2_speech_write = 0; |
1003 | //logerror("Speech write select FALSE\n"); | |
1004 | if (m_tms) m_tms->wsq_w(FALSE); | |
1021 | 1005 | } |
1022 | 1006 | } |
1023 | 1007 | break; |
r249189 | r249190 | |
1026 | 1010 | { |
1027 | 1011 | m_b3_keyboard = 0; |
1028 | 1012 | /* *** call keyboard enabled *** */ |
1029 | m_via_system_porta=bbc_keyboard(space, m_via_system_porta); | |
1013 | m_via_system_porta = bbc_keyboard(space, m_via_system_porta); | |
1030 | 1014 | } |
1031 | 1015 | break; |
1032 | 1016 | case 4: |
r249189 | r249190 | |
1061 | 1045 | } |
1062 | 1046 | |
1063 | 1047 | |
1064 | if (m_ | |
1048 | if (m_rtc) | |
1065 | 1049 | { |
1066 | 1050 | //set the Address Select |
1067 | 1051 | if (m_MC146818_AS != ((data>>7)&1)) |
r249189 | r249190 | |
1086 | 1070 | return m_via_system_porta; |
1087 | 1071 | } |
1088 | 1072 | |
1089 | // D4 of portb is joystick fire button 1 | |
1090 | // D5 of portb is joystick fire button 2 | |
1091 | // D6 VSPINT | |
1092 | // D7 VSPRDY | |
1093 | 1073 | |
1094 | /* this is the interupt and ready signal from the BBC B Speech processor */ | |
1095 | static const int TMSint=1; | |
1096 | static const int TMSrdy=1; | |
1097 | ||
1098 | #ifdef UNUSED_FUNCTION | |
1099 | void bbc_state::bbc_TMSint(int status) | |
1100 | { | |
1101 | TMSint=(!status)&1; | |
1102 | TMSrdy=(!tms5220_readyq_r())&1; | |
1103 | via_0_portb_w(0,(0xf | ioport("IN0")->read()|(TMSint<<6)|(TMSrdy<<7))); | |
1104 | } | |
1105 | #endif | |
1106 | ||
1107 | ||
1108 | 1074 | READ8_MEMBER(bbc_state::bbcb_via_system_read_portb) |
1109 | 1075 | { |
1110 | //TMSint=(!tms5220_int_r())&1; | |
1111 | //TMSrdy=(!tms5220_readyq_r())&1; | |
1112 | ||
1113 | //logerror("SYSTEM read portb %d\n",0xf | input_port(machine, "IN0") | (TMSint<<6)|(TMSrdy<<7)); | |
1114 | ||
1115 | return (0xf | ioport("IN0")->read() | (TMSint<<6)|(TMSrdy<<7)); | |
1076 | // D4 of portb is joystick fire button 1 | |
1077 | // D5 of portb is joystick fire button 2 | |
1078 | // D6 VSPINT | |
1079 | // D7 VSPRDY | |
1080 | int TMSint = m_tms ? m_tms->intq_r() : 0; | |
1081 | int TMSrdy = m_tms ? m_tms->readyq_r() : 0; | |
1082 | //logerror("TMSint %d\n",TMSint); | |
1083 | //logerror("TMSrdy %d\n",TMSrdy); | |
1084 | return (0xf | ioport("IN0")->read() | (!TMSrdy << 7) | (!TMSint << 6)); | |
1116 | 1085 | } |
1117 | 1086 | |
1118 | 1087 | |
r249189 | r249190 | |
1129 | 1098 | This means that they can only be operated as output lines. |
1130 | 1099 | CA1 is pulled high by a 4K7 resistor. CA1 normally acts as an acknowledge |
1131 | 1100 | line when a printer is used. CA2 is buffered so that it has become an open |
1132 | collector output only. It us | |
1101 | collector output only. It usually acts as the printer strobe line. | |
1133 | 1102 | ***********************************************************************/ |
1134 | 1103 | |
1135 | 1104 | /* USER VIA 6522 port B is connected to the BBC user port */ |
r249189 | r249190 | |
1430 | 1399 | update_acia_rxd(); |
1431 | 1400 | update_acia_dcd(); |
1432 | 1401 | update_acia_cts(); |
1433 | BBC_Cassette_motor(m_serproc_data & 0x80); | |
1402 | if (m_cassette) BBC_Cassette_motor(m_serproc_data & 0x80); | |
1434 | 1403 | |
1435 | 1404 | // Set transmit clock rate |
1436 | 1405 | m_acia_clock->set_clock_scale( (double) 1 / serial_clocks[ data & 0x07 ] ); |
r249189 | r249190 | |
1463 | 1432 | { |
1464 | 1433 | /* I'll pulse it because if I used hold-line I'm not sure |
1465 | 1434 | it would clear - to be checked */ |
1466 | m_maincpu->set_input_line(INPUT_LINE_NMI,PULSE_LINE); | |
1435 | m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); | |
1467 | 1436 | } |
1468 | 1437 | } |
1469 | 1438 | |
r249189 | r249190 | |
1471 | 1440 | } |
1472 | 1441 | |
1473 | 1442 | |
1474 | READ8_MEMBER(bbc_state::bbc_i8271_read) | |
1475 | { | |
1476 | int ret; | |
1477 | logerror("i8271 read %d ",offset); | |
1478 | switch (offset) | |
1479 | { | |
1480 | case 0: | |
1481 | case 1: | |
1482 | case 2: | |
1483 | case 3: | |
1484 | /* 8271 registers */ | |
1485 | ret=m_i8271->read(space, offset); | |
1486 | logerror(" %d\n",ret); | |
1487 | break; | |
1488 | case 4: | |
1489 | ret=m_i8271->data_r(space, offset); | |
1490 | logerror(" %d\n",ret); | |
1491 | break; | |
1492 | default: | |
1493 | ret=0x0ff; | |
1494 | break; | |
1495 | } | |
1496 | logerror(" void\n"); | |
1497 | return ret; | |
1498 | } | |
1499 | ||
1500 | WRITE8_MEMBER(bbc_state::bbc_i8271_write) | |
1501 | { | |
1502 | logerror("i8271 write %d %d\n",offset,data); | |
1503 | ||
1504 | switch (offset) | |
1505 | { | |
1506 | case 0: | |
1507 | case 1: | |
1508 | case 2: | |
1509 | case 3: | |
1510 | /* 8271 registers */ | |
1511 | m_i8271->write(space, offset, data); | |
1512 | return; | |
1513 | case 4: | |
1514 | m_i8271->data_w(space, offset, data); | |
1515 | return; | |
1516 | default: | |
1517 | break; | |
1518 | } | |
1519 | } | |
1520 | ||
1521 | ||
1522 | ||
1523 | 1443 | /************************************** |
1524 | 1444 | WD1770 disc control function |
1525 | 1445 | ***************************************/ |
r249189 | r249190 | |
1543 | 1463 | density select |
1544 | 1464 | single density is as the 8271 disc format |
1545 | 1465 | double density is as the 8271 disc format but with 16 sectors per track |
1546 | ||
1547 | At some point we need to check the size of the disc image to work out if it is a single or double | |
1548 | density disc image | |
1549 | 1466 | */ |
1550 | 1467 | |
1551 | 1468 | |
r249189 | r249190 | |
1566 | 1483 | int bbc_state; |
1567 | 1484 | |
1568 | 1485 | /* if drq or irq is set, and interrupt is enabled */ |
1569 | if ((m_wd177x_irq_state || m_wd177x_drq_state) && (m_177 | |
1486 | if ((m_wd177x_irq_state || m_wd177x_drq_state) && (m_177x_IntEnabled)) | |
1570 | 1487 | { |
1571 | 1488 | /* int trigger */ |
1572 | 1489 | bbc_state = 1; |
r249189 | r249190 | |
1576 | 1493 | /* do not trigger int */ |
1577 | 1494 | bbc_state = 0; |
1578 | 1495 | } |
1579 | //printf("bbc_state %d prev %d\n", bbc_state, m_previous_wd177x_int_state); | |
1580 | 1496 | /* nmi is edge triggered, and triggers when the state goes from clear->set. |
1581 | 1497 | Here we are checking this transition before triggering the nmi */ |
1582 | if (bbc_state!=m_previous_wd177x_int_state) | |
1498 | if (bbc_state != m_previous_wd177x_int_state) | |
1583 | 1499 | { |
1584 | 1500 | if (bbc_state) |
1585 | 1501 | { |
r249189 | r249190 | |
1594 | 1510 | |
1595 | 1511 | WRITE_LINE_MEMBER(bbc_state::bbc_wd177x_intrq_w) |
1596 | 1512 | { |
1597 | //printf("bbc_wd177x_intrq_w %d \n", state); | |
1598 | 1513 | m_wd177x_irq_state = state; |
1599 | 1514 | bbc_update_fdq_int(state); |
1600 | 1515 | } |
r249189 | r249190 | |
1605 | 1520 | bbc_update_fdq_int(state); |
1606 | 1521 | } |
1607 | 1522 | |
1608 | WRITE8_MEMBER(bbc_state::bbc_wd177 | |
1523 | WRITE8_MEMBER(bbc_state::bbc_wd1770_status_w) | |
1609 | 1524 | { |
1610 | wd1770_t *fdc = machine().device<wd1770_t>("wd177x"); | |
1611 | floppy_image_device *floppy0 = machine().device<floppy_connector>("wd177x:0")->get_device(); | |
1612 | floppy_image_device *floppy1 = machine().device<floppy_connector>("wd177x:1")->get_device(); | |
1613 | 1525 | floppy_image_device *floppy = NULL; |
1614 | 1526 | |
1615 | 1527 | m_drive_control = data; |
1528 | logerror("Drive control %d \n", data); | |
1616 | 1529 | |
1530 | // bit 5: reset | |
1531 | if (!BIT(data, 5)) m_wd1770->reset(); | |
1532 | ||
1617 | 1533 | // bit 0, 1: drive select |
1618 | if (BIT(data, 0)) floppy = floppy0; | |
1619 | if (BIT(data, 1)) floppy = floppy1; | |
1534 | if (BIT(data, 0)) floppy = m_wd1770->subdevice<floppy_connector>("0")->get_device(); | |
1535 | if (BIT(data, 1)) floppy = m_wd1770->subdevice<floppy_connector>("1")->get_device(); | |
1536 | m_wd1770->set_floppy(floppy); | |
1620 | 1537 | |
1621 | fdc->set_floppy(floppy); | |
1622 | ||
1623 | 1538 | // bit 2: side select |
1624 | 1539 | if (floppy) |
1625 | 1540 | floppy->ss_w(BIT(data, 2)); |
1626 | 1541 | |
1627 | 1542 | // bit 3: density |
1628 | | |
1543 | m_wd1770->dden_w(BIT(data, 3)); | |
1629 | 1544 | |
1630 | 1545 | // bit 4: interrupt enable |
1631 | m_177 | |
1546 | m_177x_IntEnabled = !BIT(data, 4); | |
1632 | 1547 | } |
1633 | 1548 | |
1549 | /*************************************** | |
1550 | BBC MASTER DISC SUPPORT | |
1551 | ***************************************/ | |
1634 | 1552 | |
1635 | ||
1636 | READ8_MEMBER(bbc_state::bbc_wd1770_read) | |
1553 | READ8_MEMBER(bbc_state::bbcm_wd177xl_read) | |
1637 | 1554 | { |
1638 | int retval=0xff; | |
1639 | wd1770_t *fdc = machine().device<wd1770_t>("wd177x"); | |
1640 | switch (offset) | |
1641 | { | |
1642 | case 4: | |
1643 | retval=fdc->status_r(space, 0); | |
1644 | break; | |
1645 | case 5: | |
1646 | retval=fdc->track_r(space, 0); | |
1647 | break; | |
1648 | case 6: | |
1649 | retval=fdc->sector_r(space, 0); | |
1650 | break; | |
1651 | case 7: | |
1652 | retval=fdc->data_r(space, 0); | |
1653 | break; | |
1654 | default: | |
1655 | break; | |
1656 | } | |
1657 | //logerror("wd177x read: $%02X $%02X\n", offset,retval); | |
1658 | ||
1659 | return retval; | |
1555 | return m_drive_control; | |
1660 | 1556 | } |
1661 | 1557 | |
1662 | WRITE8_MEMBER(bbc_state::bbc_wd1770_write) | |
1558 | WRITE8_MEMBER(bbc_state::bbcm_wd1770l_write) | |
1663 | 1559 | { |
1664 | wd1770_t *fdc = machine().device<wd1770_t>("wd177x"); | |
1665 | //logerror("wd177x write: $%02X $%02X\n", offset,data); | |
1666 | switch (offset) | |
1667 | { | |
1668 | case 0: | |
1669 | bbc_wd177x_status_w(space, 0, data); | |
1670 | break; | |
1671 | case 4: | |
1672 | fdc->cmd_w(space, 0, data); | |
1673 | break; | |
1674 | case 5: | |
1675 | fdc->track_w(space, 0, data); | |
1676 | break; | |
1677 | case 6: | |
1678 | fdc->sector_w(space, 0, data); | |
1679 | break; | |
1680 | case 7: | |
1681 | fdc->data_w(space, 0, data); | |
1682 | break; | |
1683 | default: | |
1684 | break; | |
1685 | } | |
1686 | } | |
1687 | ||
1688 | ||
1689 | /********************************************* | |
1690 | OPUS CHALLENGER MEMORY MAP | |
1691 | Read Write | |
1692 | ||
1693 | &FCF8 1770 Status register 1770 command register | |
1694 | &FCF9 1770 track register | |
1695 | &FCFA 1770 sector register | |
1696 | &FCFB 1770 data register | |
1697 | &FCFC 1770 drive control | |
1698 | ||
1699 | ||
1700 | drive control register bits | |
1701 | 0 select side 0= side 0 1= side 1 | |
1702 | 1 select drive 0 | |
1703 | 2 select drive 1 | |
1704 | 3 ?unused? | |
1705 | 4 ?Always Set | |
1706 | 5 Density Select 0=double, 1=single | |
1707 | 6 ?unused? | |
1708 | 7 ?unused? | |
1709 | ||
1710 | The RAM is accessible through JIM (page &FD). One page is visible in JIM at a time. | |
1711 | The selected page is controlled by the two paging registers: | |
1712 | ||
1713 | &FCFE Paging register MSB | |
1714 | &FCFF Paging register LSB | |
1715 | ||
1716 | 256K model has 1024 pages &000 to &3ff | |
1717 | 512K model has 2048 pages &000 to &7ff | |
1718 | ||
1719 | AM_RANGE(0xfc00, 0xfdff) AM_READWRITE(bbc_opus_read , bbc_opus_write ) | |
1720 | ||
1721 | ||
1722 | **********************************************/ | |
1723 | ||
1724 | ||
1725 | WRITE8_MEMBER(bbc_state::bbc_opus_status_w) | |
1726 | { | |
1727 | wd1770_t *fdc = machine().device<wd1770_t>("wd177x"); | |
1728 | floppy_image_device *floppy0 = machine().device<floppy_connector>("wd177x:0")->get_device(); | |
1729 | floppy_image_device *floppy1 = machine().device<floppy_connector>("wd177x:1")->get_device(); | |
1730 | 1560 | floppy_image_device *floppy = NULL; |
1731 | 1561 | |
1732 | 1562 | m_drive_control = data; |
1563 | //logerror("Drive control %d \n", data); | |
1733 | 1564 | |
1734 | // bit 1, 2: drive select | |
1735 | if (BIT(data, 1)) floppy = floppy0; | |
1736 | if (BIT(data, 2)) floppy = floppy1; | |
1565 | // bit 2: reset | |
1566 | if (!BIT(data, 2)) m_wd1770->reset(); | |
1737 | 1567 | |
1738 | fdc->set_floppy(floppy); | |
1568 | // bit 0, 1, 3: drive select | |
1569 | if (BIT(data, 0)) floppy = m_wd1770->subdevice<floppy_connector>("0")->get_device(); | |
1570 | if (BIT(data, 1)) floppy = m_wd1770->subdevice<floppy_connector>("1")->get_device(); | |
1571 | if (BIT(data, 3)) floppy = m_wd1770->subdevice<floppy_connector>("2")->get_device(); | |
1572 | m_wd1770->set_floppy(floppy); | |
1739 | 1573 | |
1740 | // bit | |
1574 | // bit 4: side select | |
1741 | 1575 | if (floppy) |
1742 | floppy->ss_w(BIT(data, | |
1576 | floppy->ss_w(BIT(data, 4)); | |
1743 | 1577 | |
1744 | 1578 | // bit 5: density |
1745 | | |
1579 | m_wd1770->dden_w(BIT(data, 5)); | |
1746 | 1580 | |
1747 | // bit 4: interrupt enable | |
1748 | m_1770_IntEnabled = BIT(data, 4); | |
1581 | m_177x_IntEnabled = 1; | |
1749 | 1582 | } |
1750 | 1583 | |
1751 | RE | |
1584 | WRITE8_MEMBER(bbc_state::bbcm_wd1772l_write) | |
1752 | 1585 | { |
1753 | wd1770_t *fdc = machine().device<wd1770_t>("wd177x"); | |
1754 | //logerror("wd177x read: $%02X\n", offset); | |
1755 | ||
1756 | if (m_DFSType==6) | |
1757 | { | |
1758 | if (offset<0x100) | |
1759 | { | |
1760 | switch (offset) | |
1761 | { | |
1762 | case 0xf8: | |
1763 | return fdc->status_r(space, 0); | |
1764 | case 0xf9: | |
1765 | return fdc->track_r(space, 0); | |
1766 | case 0xfa: | |
1767 | return fdc->sector_r(space, 0); | |
1768 | case 0xfb: | |
1769 | return fdc->data_r(space, 0); | |
1770 | } | |
1771 | } | |
1772 | else | |
1773 | { | |
1774 | return memregion("disks")->base()[offset + (m_opusbank << 8)]; | |
1775 | } | |
1776 | } | |
1777 | return 0xff; | |
1778 | } | |
1779 | ||
1780 | WRITE8_MEMBER(bbc_state::bbc_opus_write) | |
1781 | { | |
1782 | wd1770_t *fdc = machine().device<wd1770_t>("wd177x"); | |
1783 | //logerror("wd177x write: $%02X $%02X\n", offset,data); | |
1784 | ||
1785 | if (m_DFSType==6) | |
1786 | { | |
1787 | if (offset<0x100) | |
1788 | { | |
1789 | switch (offset) | |
1790 | { | |
1791 | case 0xf8: | |
1792 | fdc->cmd_w(space, 0, data); | |
1793 | break; | |
1794 | case 0xf9: | |
1795 | fdc->track_w(space, 0, data); | |
1796 | break; | |
1797 | case 0xfa: | |
1798 | fdc->sector_w(space, 0, data); | |
1799 | break; | |
1800 | case 0xfb: | |
1801 | fdc->data_w(space, 0, data); | |
1802 | break; | |
1803 | case 0xfc: | |
1804 | bbc_opus_status_w(space, 0,data); | |
1805 | break; | |
1806 | case 0xfe: | |
1807 | m_opusbank=(m_opusbank & 0xff) | (data<<8); | |
1808 | break; | |
1809 | case 0xff: | |
1810 | m_opusbank=(m_opusbank & 0xff00) | data; | |
1811 | break; | |
1812 | } | |
1813 | } | |
1814 | else | |
1815 | { | |
1816 | memregion("disks")->base()[offset + (m_opusbank << 8)] = data; | |
1817 | } | |
1818 | } | |
1819 | } | |
1820 | ||
1821 | ||
1822 | /*************************************** | |
1823 | BBC MASTER DISC SUPPORT | |
1824 | ***************************************/ | |
1825 | ||
1826 | ||
1827 | READ8_MEMBER(bbc_state::bbcm_wd1770_read) | |
1828 | { | |
1829 | int retval=0xff; | |
1830 | wd1770_t *fdc = machine().device<wd1770_t>("wd177x"); | |
1831 | switch (offset) | |
1832 | { | |
1833 | case 0: | |
1834 | retval=fdc->status_r(space, 0); | |
1835 | break; | |
1836 | case 1: | |
1837 | retval=fdc->track_r(space, 0); | |
1838 | break; | |
1839 | case 2: | |
1840 | retval=fdc->sector_r(space, 0); | |
1841 | break; | |
1842 | case 3: | |
1843 | retval=fdc->data_r(space, 0); | |
1844 | break; | |
1845 | default: | |
1846 | break; | |
1847 | } | |
1848 | return retval; | |
1849 | } | |
1850 | ||
1851 | ||
1852 | WRITE8_MEMBER(bbc_state::bbcm_wd1770_write) | |
1853 | { | |
1854 | wd1770_t *fdc = machine().device<wd1770_t>("wd177x"); | |
1855 | //logerror("wd177x write: $%02X $%02X\n", offset,data); | |
1856 | switch (offset) | |
1857 | { | |
1858 | case 0: | |
1859 | fdc->cmd_w(space, 0, data); | |
1860 | break; | |
1861 | case 1: | |
1862 | fdc->track_w(space, 0, data); | |
1863 | break; | |
1864 | case 2: | |
1865 | fdc->sector_w(space, 0, data); | |
1866 | break; | |
1867 | case 3: | |
1868 | fdc->data_w(space, 0, data); | |
1869 | break; | |
1870 | default: | |
1871 | break; | |
1872 | } | |
1873 | } | |
1874 | ||
1875 | ||
1876 | READ8_MEMBER(bbc_state::bbcm_wd1770l_read) | |
1877 | { | |
1878 | return m_drive_control; | |
1879 | } | |
1880 | ||
1881 | WRITE8_MEMBER(bbc_state::bbcm_wd1770l_write) | |
1882 | { | |
1883 | wd1770_t *fdc = machine().device<wd1770_t>("wd177x"); | |
1884 | floppy_image_device *floppy0 = machine().device<floppy_connector>("wd177x:0")->get_device(); | |
1885 | floppy_image_device *floppy1 = machine().device<floppy_connector>("wd177x:1")->get_device(); | |
1886 | 1586 | floppy_image_device *floppy = NULL; |
1887 | 1587 | |
1888 | 1588 | m_drive_control = data; |
1589 | //logerror("Drive control %d \n", data); | |
1889 | 1590 | |
1890 | // bit 0, 1: drive select | |
1891 | if (BIT(data, 0)) floppy = floppy0; | |
1892 | if (BIT(data, 1)) floppy = floppy1; | |
1591 | // bit 2: reset | |
1592 | if (!BIT(data, 2)) m_wd1772->reset(); | |
1893 | 1593 | |
1594 | // bit 0, 1, 3: drive select | |
1595 | if (BIT(data, 0)) floppy = m_wd1772->subdevice<floppy_connector>("0")->get_device(); | |
1596 | if (BIT(data, 1)) floppy = m_wd1772->subdevice<floppy_connector>("1")->get_device(); | |
1597 | if (BIT(data, 3)) floppy = m_wd1772->subdevice<floppy_connector>("2")->get_device(); | |
1598 | m_wd1772->set_floppy(floppy); | |
1599 | ||
1894 | 1600 | // bit 4: side select |
1895 | 1601 | if (floppy) |
1896 | 1602 | floppy->ss_w(BIT(data, 4)); |
1897 | 1603 | |
1898 | 1604 | // bit 5: density |
1899 | | |
1605 | m_wd1772->dden_w(BIT(data, 5)); | |
1900 | 1606 | |
1901 | // m_1770_IntEnabled=(((data>>4) & 0x01)==0); | |
1902 | m_1770_IntEnabled=1; | |
1607 | m_177x_IntEnabled = 1; | |
1903 | 1608 | } |
1904 | 1609 | |
1905 | ||
1906 | 1610 | /************************************** |
1907 | DFS Hardware mapping for different Disc Controller types | |
1908 | ***************************************/ | |
1909 | ||
1910 | READ8_MEMBER(bbc_state::bbc_disc_r) | |
1911 | { | |
1912 | switch (m_DFSType){ | |
1913 | /* case 0 to 3 are all standard 8271 interfaces */ | |
1914 | case 0: case 1: case 2: case 3: | |
1915 | return bbc_i8271_read(space, offset); | |
1916 | /* case 4 is the acorn 1770 interface */ | |
1917 | case 4: | |
1918 | return bbc_wd1770_read(space, offset); | |
1919 | /* case 5 is the watford 1770 interface */ | |
1920 | case 5: | |
1921 | return bbc_wd1770_read(space, offset); | |
1922 | /* case 6 is the Opus challenger interface */ | |
1923 | case 6: | |
1924 | /* not connected here, opus drive is connected via the 1MHz Bus */ | |
1925 | break; | |
1926 | /* case 7 in no disc controller */ | |
1927 | case 7: | |
1928 | break; | |
1929 | } | |
1930 | return 0x0ff; | |
1931 | } | |
1932 | ||
1933 | WRITE8_MEMBER(bbc_state::bbc_disc_w) | |
1934 | { | |
1935 | switch (m_DFSType){ | |
1936 | /* case 0 to 3 are all standard 8271 interfaces */ | |
1937 | case 0: case 1: case 2: case 3: | |
1938 | bbc_i8271_write(space, offset,data); | |
1939 | break; | |
1940 | /* case 4 is the acorn 1770 interface */ | |
1941 | case 4: | |
1942 | bbc_wd1770_write(space, offset,data); | |
1943 | break; | |
1944 | /* case 5 is the watford 1770 interface */ | |
1945 | case 5: | |
1946 | bbc_wd1770_write(space, offset,data); | |
1947 | break; | |
1948 | /* case 6 is the Opus challenger interface */ | |
1949 | case 6: | |
1950 | /* not connected here, opus drive is connected via the 1MHz Bus */ | |
1951 | break; | |
1952 | /* case 7 in no disc controller */ | |
1953 | case 7: | |
1954 | break; | |
1955 | } | |
1956 | } | |
1957 | ||
1958 | ||
1959 | ||
1960 | /************************************** | |
1961 | 1611 | BBC B Rom loading functions |
1962 | 1612 | ***************************************/ |
1963 | 1613 | |
r249189 | r249190 | |
2023 | 1673 | |
2024 | 1674 | DRIVER_INIT_MEMBER(bbc_state,bbc) |
2025 | 1675 | { |
2026 | m_Master=0; | |
2027 | 1676 | m_rxd_cass = 0; |
2028 | 1677 | m_nr_high_tones = 0; |
2029 | 1678 | m_serproc_data = 0; |
r249189 | r249190 | |
2037 | 1686 | m_via6522_0->write_cb2(1); |
2038 | 1687 | } |
2039 | 1688 | |
2040 | DRIVER_INIT_MEMBER(bbc_state,bbcm) | |
2041 | { | |
2042 | m_Master=1; | |
2043 | m_rxd_cass = 0; | |
2044 | m_nr_high_tones = 0; | |
2045 | m_serproc_data = 0; | |
2046 | m_cass_out_enabled = 0; | |
2047 | m_tape_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bbc_state::bbc_tape_timer_cb),this)); | |
2048 | ||
2049 | /* vertical sync pulse from video circuit */ | |
2050 | m_via6522_0->write_ca1(1); | |
2051 | ||
2052 | /* light pen strobe detect (not emulated) */ | |
2053 | m_via6522_0->write_cb2(1); | |
2054 | } | |
2055 | ||
2056 | 1689 | // setup pointers for optional EPROMs |
2057 | 1690 | void bbc_state::bbc_setup_banks(memory_bank *membank, int banks, UINT32 shift, UINT32 size) |
2058 | 1691 | { |
r249189 | r249190 | |
2076 | 1709 | else |
2077 | 1710 | eprom[3] = m_region_opt->base() + 0xc000 + shift; |
2078 | 1711 | |
2079 | membank->configure_entries(0, 1, eprom[0], size); | |
2080 | membank->configure_entries(1, 1, eprom[1], size); | |
2081 | membank->configure_entries(2, 1, eprom[2], size); | |
2082 | membank->configure_entries(3, 1, eprom[3], size); | |
1712 | membank->configure_entries(0, 1, eprom[0], size); | |
1713 | membank->configure_entries(1, 1, eprom[1], size); | |
1714 | membank->configure_entries(2, 1, eprom[2], size); | |
1715 | membank->configure_entries(3, 1, eprom[3], size); | |
2083 | 1716 | |
2084 | 1717 | if (banks > 4) |
2085 | 1718 | { |
r249189 | r249190 | |
2102 | 1735 | else |
2103 | 1736 | eprom[1] = m_region_opt->base() + 0x8000 + shift; |
2104 | 1737 | |
2105 | membank->configure_entries(0, 1, eprom[0], size); | |
2106 | membank->configure_entries(1, 1, eprom[0] + 0x4000, size); | |
2107 | membank->configure_entries(2, 1, eprom[1], size); | |
2108 | membank->configure_entries(3, 1, eprom[1] + 0x4000, size); | |
1738 | membank->configure_entries(0, 1, eprom[0], size); | |
1739 | membank->configure_entries(1, 1, eprom[0] + 0x4000, size); | |
1740 | membank->configure_entries(2, 1, eprom[1], size); | |
1741 | membank->configure_entries(3, 1, eprom[1] + 0x4000, size); | |
2109 | 1742 | |
2110 | 1743 | if (banks > 4) |
2111 | 1744 | { |
r249189 | r249190 | |
2149 | 1782 | m_previous_i8271_int_state=0; |
2150 | 1783 | m_previous_wd177x_int_state=1; |
2151 | 1784 | bbc_setup_banks(m_bank4, 16, 0, 0x4000); |
2152 | if (m_region_dfs) | |
2153 | m_bank4->configure_entries(16, 8, m_region_dfs->base(), 0x4000); // additional bank for paged ram | |
2154 | 1785 | } |
2155 | 1786 | |
2156 | 1787 | MACHINE_RESET_MEMBER(bbc_state, bbcb) |
2157 | 1788 | { |
2158 | 1789 | UINT8 *RAM = m_region_maincpu->base(); |
2159 | m_ | |
1790 | m_Speech = (ioport("BBCCONFIG")->read() >> 0) & 0x01; | |
2160 | 1791 | m_SWRAMtype = (ioport("BBCCONFIG")->read() >> 3) & 0x03; |
2161 | 1792 | m_bank1->set_base(RAM); |
2162 | 1793 | m_bank3->set_base(RAM + 0x4000); |
r249189 | r249190 | |
2166 | 1797 | m_bank7->set_base(m_region_os->base()); /* bank 7 points at the OS rom from c000 to ffff */ |
2167 | 1798 | |
2168 | 1799 | bbcb_IC32_initialise(this); |
2169 | ||
2170 | m_opusbank = 0; | |
2171 | 1800 | } |
2172 | 1801 | |
2173 | 1802 | |
r249189 | r249190 | |
2184 | 1813 | |
2185 | 1814 | MACHINE_RESET_MEMBER(bbc_state, bbcbp) |
2186 | 1815 | { |
1816 | m_Speech = 1; | |
2187 | 1817 | m_bank1->set_base(m_region_maincpu->base()); |
2188 | 1818 | m_bank2->set_base(m_region_maincpu->base() + 0x03000); /* bank 2 screen/shadow ram from 3000 to 7fff */ |
2189 | 1819 | m_bank4->set_entry(0); |
2190 | 1820 | m_bank6->set_entry(0); |
2191 | m_bank7->set_base(m_region_os->base()); /* bank 7 points at the OS rom from c000 to ffff */ | |
1821 | m_bank7->set_base(m_region_os->base()); /* bank 7 points at the OS rom from c000 to ffff */ | |
2192 | 1822 | |
2193 | 1823 | bbcb_IC32_initialise(this); |
2194 | 1824 | |
r249189 | r249190 | |
2217 | 1847 | m_bank2->set_base(m_region_maincpu->base() + 0x3000); /* bank 2 screen/shadow ram from 3000 to 7fff */ |
2218 | 1848 | m_bank4->set_entry(0); |
2219 | 1849 | m_bank5->set_entry(0); |
2220 | m_bank7->set_base(m_region_os->base()); /* bank 6 OS rom of RAM from c000 to dfff */ | |
1850 | m_bank7->set_base(m_region_os->base()); /* bank 6 OS rom of RAM from c000 to dfff */ | |
2221 | 1851 | |
2222 | 1852 | bbcb_IC32_initialise(this); |
2223 | 1853 |
r249189 | r249190 | |
---|---|---|
7 | 7 | ROM_START( pcd_keyboard ) |
8 | 8 | ROM_REGION(0x1000, "mcu", 0) |
9 | 9 | ROM_LOAD("pcd_keyboard.bin", 0x0000, 0x1000, CRC(d227d6cb) SHA1(3d6140764d3d043428c941826370ebf1597c63bd)) |
10 | ROM_FILL(0x526,1,0x03) // make the PCX video happy, TODO: figure out what's really happening | |
11 | ROM_FILL(0x1e1,1,0x50) // fix csum | |
10 | 12 | ROM_END |
11 | 13 | |
12 | 14 |
r249189 | r249190 | |
---|---|---|
99 | 99 | this is used by the palette lookup in the video ULA */ |
100 | 100 | void bbc_state::set_pixel_lookup() |
101 | 101 | { |
102 | int i; | |
103 | for (i=0; i<256; i++) | |
102 | for (int i=0; i<256; i++) | |
104 | 103 | { |
105 | 104 | m_pixel_bits[i] = (((i>>7)&1)<<3) | (((i>>5)&1)<<2) | (((i>>3)&1)<<1) | (((i>>1)&1)<<0); |
106 | 105 | } |
r249189 | r249190 | |
254 | 253 | m_trom->dew_w(state); |
255 | 254 | } |
256 | 255 | |
257 | /************************************************************************ | |
258 | * memory interface to BBC's 6845 | |
259 | ************************************************************************/ | |
260 | 256 | |
261 | WRITE8_MEMBER(bbc_state::bbc_6845_w) | |
262 | { | |
263 | switch(offset & 1) | |
264 | { | |
265 | case 0 : | |
266 | m_mc6845->address_w(space,0,data); | |
267 | break; | |
268 | case 1 : | |
269 | m_mc6845->register_w(space,0,data); | |
270 | break; | |
271 | } | |
272 | return; | |
273 | } | |
274 | ||
275 | READ8_MEMBER(bbc_state::bbc_6845_r) | |
276 | { | |
277 | switch (offset&1) | |
278 | { | |
279 | case 0: return m_mc6845->status_r(space,0); | |
280 | case 1: return m_mc6845->register_r(space,0); | |
281 | } | |
282 | return 0; | |
283 | } | |
284 | ||
285 | ||
286 | ||
287 | ||
288 | ||
289 | 257 | /**** BBC B+ Shadow Ram change ****/ |
290 | 258 | |
291 | 259 | void bbc_state::bbcbp_setvideoshadow(int vdusel) |
r249189 | r249190 | |
319 | 287 | |
320 | 288 | VIDEO_START_MEMBER(bbc_state,bbca) |
321 | 289 | { |
322 | common_init(1 | |
290 | common_init(m_ram->size()/1024); | |
323 | 291 | } |
324 | 292 | |
325 | 293 | VIDEO_START_MEMBER(bbc_state,bbcb) |
r0 | r249190 | |
---|---|---|
1 | // license:BSD-3-Clause | |
2 | // copyright-holders:Carl | |
3 | ||
4 | #include "pcd.h" | |
5 | #include "cpu/mcs51/mcs51.h" | |
6 | #include "cpu/mcs48/mcs48.h" | |
7 | ||
8 | const device_type PCD_VIDEO = &device_creator<pcd_video_device>; | |
9 | const device_type PCX_VIDEO = &device_creator<pcx_video_device>; | |
10 | ||
11 | pcdx_video_device::pcdx_video_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : | |
12 | device_t(mconfig, type, name, tag, owner, clock, shortname, source), | |
13 | m_maincpu(*this, ":maincpu"), | |
14 | m_mcu(*this, "graphics"), | |
15 | m_crtc(*this, "crtc"), | |
16 | m_palette(*this, "palette"), | |
17 | m_gfxdecode(*this, "gfxdecode") | |
18 | { | |
19 | } | |
20 | ||
21 | pcd_video_device::pcd_video_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : | |
22 | pcdx_video_device(mconfig, PCD_VIDEO, "Siemens PC-D Video", tag, owner, clock, "pcd_video", __FILE__), | |
23 | m_vram(32*1024), | |
24 | m_charram(8*1024) | |
25 | { | |
26 | } | |
27 | ||
28 | pcx_video_device::pcx_video_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : | |
29 | pcdx_video_device(mconfig, PCX_VIDEO, "Siemens PC-X Video", tag, owner, clock, "pcx_video", __FILE__), | |
30 | device_serial_interface(mconfig, *this), | |
31 | m_vram(4*1024), | |
32 | m_charrom(*this, "char"), | |
33 | m_pic2(*this, ":pic2"), | |
34 | m_txd_handler(*this) | |
35 | { | |
36 | } | |
37 | ||
38 | ROM_START( pcd_video ) | |
39 | ROM_REGION(0x400, "graphics", 0) | |
40 | ROM_LOAD("s36361-d321-v1.bin", 0x000, 0x400, CRC(69baeb2a) SHA1(98b9cd0f38c51b4988a3aed0efcf004bedd115ff)) | |
41 | ROM_END | |
42 | ||
43 | const rom_entry *pcd_video_device::device_rom_region() const | |
44 | { | |
45 | return ROM_NAME( pcd_video ); | |
46 | } | |
47 | ||
48 | ROM_START( pcx_video ) | |
49 | ROM_REGION(0x2000, "char", 0) | |
50 | ROM_LOAD("d12-graka.bin", 0x0000, 0x2000, CRC(e4933c16) SHA1(932ae1f0cd2b029b7f5fc3d2d1679e70b25c0828)) | |
51 | ||
52 | ROM_REGION(0x6000, "graphics", 0) | |
53 | ROM_LOAD("d40-graka.bin", 0x0000, 0x2000, CRC(dce48252) SHA1(0d9a575b2d001168a36864d7bd5db1c3aca5fb8d)) | |
54 | ROM_LOAD("d39-graka.bin", 0x4000, 0x2000, CRC(02920e25) SHA1(145a6648d75c1dc4788f9bc7790281ef7e8f8426)) | |
55 | ROM_END | |
56 | ||
57 | const rom_entry *pcx_video_device::device_rom_region() const | |
58 | { | |
59 | return ROM_NAME( pcx_video ); | |
60 | } | |
61 | ||
62 | static const gfx_layout pcd_charlayout = | |
63 | { | |
64 | 8, 14, /* 8 x 14 characters */ | |
65 | 512, /* 512 characters */ | |
66 | 1, /* 1 bits per pixel */ | |
67 | { 0 }, /* no bitplanes */ | |
68 | /* x offsets */ | |
69 | { 0, 1, 2, 3, 4, 5, 6, 7 }, | |
70 | /* y offsets */ | |
71 | { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8 }, | |
72 | 8*16 | |
73 | }; | |
74 | ||
75 | static GFXDECODE_START( pcx ) | |
76 | GFXDECODE_ENTRY( "char", 0x0000, pcd_charlayout, 0, 1 ) | |
77 | GFXDECODE_END | |
78 | ||
79 | static MACHINE_CONFIG_FRAGMENT( pcd_video ) | |
80 | MCFG_CPU_ADD("graphics", I8741, XTAL_16MHz/2) | |
81 | MCFG_DEVICE_DISABLE() | |
82 | ||
83 | // video hardware | |
84 | MCFG_SCREEN_ADD("screen", RASTER) | |
85 | MCFG_SCREEN_SIZE(640, 350) | |
86 | MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 349) | |
87 | MCFG_SCREEN_REFRESH_RATE(50) | |
88 | MCFG_SCREEN_UPDATE_DEVICE("crtc", scn2674_device, screen_update) | |
89 | ||
90 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", empty) | |
91 | MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette") | |
92 | ||
93 | MCFG_SCN2674_VIDEO_ADD("crtc", 0, NULL); | |
94 | MCFG_SCN2674_TEXT_CHARACTER_WIDTH(8) | |
95 | MCFG_SCN2674_GFX_CHARACTER_WIDTH(16) | |
96 | MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(pcd_video_device, display_pixels) | |
97 | MCFG_VIDEO_SET_SCREEN("screen") | |
98 | MACHINE_CONFIG_END | |
99 | ||
100 | machine_config_constructor pcd_video_device::device_mconfig_additions() const | |
101 | { | |
102 | return MACHINE_CONFIG_NAME( pcd_video ); | |
103 | } | |
104 | ||
105 | static ADDRESS_MAP_START( pcx_vid_map, AS_PROGRAM, 8, pcx_video_device ) | |
106 | AM_RANGE(0x0000, 0x5fff) AM_ROM AM_REGION("graphics", 0) | |
107 | ADDRESS_MAP_END | |
108 | ||
109 | static ADDRESS_MAP_START( pcx_vid_io, AS_IO, 8, pcx_video_device ) | |
110 | AM_RANGE(0x8000, 0x8007) AM_DEVREADWRITE("crtc", scn2674_device, read, write) | |
111 | AM_RANGE(0x8008, 0x8008) AM_READ(unk_r) | |
112 | AM_RANGE(0xa000, 0xa001) AM_READWRITE(vram_latch_r, vram_latch_w) | |
113 | AM_RANGE(0xa002, 0xa003) AM_READWRITE(term_mcu_r, term_mcu_w) | |
114 | AM_RANGE(0xc000, 0xc7ff) AM_RAM | |
115 | ADDRESS_MAP_END | |
116 | ||
117 | static ADDRESS_MAP_START( pcx_vram, AS_0, 8, pcx_video_device ) | |
118 | AM_RANGE(0x0000, 0x07ff) AM_READWRITE(vram_r, vram_w) | |
119 | ADDRESS_MAP_END | |
120 | ||
121 | static MACHINE_CONFIG_FRAGMENT( pcx_video ) | |
122 | MCFG_CPU_ADD("graphics", I8031, XTAL_24MHz/2) | |
123 | MCFG_CPU_PROGRAM_MAP(pcx_vid_map) | |
124 | MCFG_CPU_IO_MAP(pcx_vid_io) | |
125 | ||
126 | // video hardware | |
127 | MCFG_SCREEN_ADD("screen", RASTER) | |
128 | MCFG_SCREEN_SIZE(640, 350) | |
129 | MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 349) | |
130 | MCFG_SCREEN_REFRESH_RATE(50) | |
131 | MCFG_SCREEN_UPDATE_DEVICE("crtc", scn2674_device, screen_update) | |
132 | ||
133 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", pcx) | |
134 | MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette") | |
135 | ||
136 | MCFG_SCN2674_VIDEO_ADD("crtc", 0, INPUTLINE("graphics", MCS51_INT0_LINE)); | |
137 | MCFG_SCN2674_TEXT_CHARACTER_WIDTH(8) | |
138 | MCFG_SCN2674_GFX_CHARACTER_WIDTH(16) | |
139 | MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(pcx_video_device, display_pixels) | |
140 | MCFG_VIDEO_SET_SCREEN("screen") | |
141 | MCFG_DEVICE_ADDRESS_MAP(AS_0, pcx_vram) | |
142 | MACHINE_CONFIG_END | |
143 | ||
144 | machine_config_constructor pcx_video_device::device_mconfig_additions() const | |
145 | { | |
146 | return MACHINE_CONFIG_NAME( pcx_video ); | |
147 | } | |
148 | ||
149 | SCN2674_DRAW_CHARACTER_MEMBER(pcd_video_device::display_pixels) | |
150 | { | |
151 | address <<= 1; | |
152 | if(lg) | |
153 | { | |
154 | UINT16 data = m_vram[address + 1] | (m_vram[address] << 8); | |
155 | for(int i = 0; i < 16; i++) | |
156 | bitmap.pix32(y, x + i) = m_palette->pen((data & (1 << (15 - i))) ? 1 : 0); | |
157 | } | |
158 | else | |
159 | { | |
160 | UINT8 data; | |
161 | data = m_charram[m_vram[address] * 16 + linecount]; | |
162 | if(cursor && blink) | |
163 | data = 0xff; | |
164 | for(int i = 0; i < 8; i++) | |
165 | bitmap.pix32(y, x + i) = m_palette->pen((data & (1 << (7 - i))) ? 1 : 0); | |
166 | } | |
167 | } | |
168 | ||
169 | SCN2674_DRAW_CHARACTER_MEMBER(pcx_video_device::display_pixels) | |
170 | { | |
171 | UINT8 data; | |
172 | address <<= 1; | |
173 | data = m_charrom[m_vram[address] * 16 + linecount + (m_vram[address + 1] & 0x20 ? 4096 : 0)]; | |
174 | if(cursor && blink) | |
175 | data = 0xff; | |
176 | for(int i = 0; i < 8; i++) | |
177 | bitmap.pix32(y, x + i) = m_palette->pen((data & (1 << (7 - i))) ? 1 : 0); | |
178 | } | |
179 | ||
180 | WRITE8_MEMBER(pcd_video_device::vram_w) | |
181 | { | |
182 | if(m_vram_sw) | |
183 | m_vram[offset] = data; | |
184 | else if(!(offset & 1)) | |
185 | { | |
186 | offset >>= 1; | |
187 | m_charram[offset & 0x1fff] = data; | |
188 | m_gfxdecode->gfx(0)->mark_dirty(offset/16); | |
189 | } | |
190 | } | |
191 | ||
192 | READ8_MEMBER(pcd_video_device::vram_r) | |
193 | { | |
194 | return m_vram[offset]; | |
195 | } | |
196 | ||
197 | WRITE8_MEMBER(pcd_video_device::vram_sw_w) | |
198 | { | |
199 | m_vram_sw = data & 1; | |
200 | } | |
201 | ||
202 | ||
203 | READ8_MEMBER(pcd_video_device::mcu_r) | |
204 | { | |
205 | return 0x20; | |
206 | } | |
207 | ||
208 | WRITE8_MEMBER(pcd_video_device::mcu_w) | |
209 | { | |
210 | } | |
211 | ||
212 | READ8_MEMBER(pcx_video_device::term_r) | |
213 | { | |
214 | switch(offset) | |
215 | { | |
216 | case 0: | |
217 | m_pic2->ir0_w(CLEAR_LINE); | |
218 | m_term_stat &= ~2; | |
219 | return m_term_key; | |
220 | case 1: | |
221 | m_pic2->ir0_w(CLEAR_LINE); | |
222 | return m_term_stat >> 1; | |
223 | } | |
224 | return 0xff; | |
225 | } | |
226 | ||
227 | WRITE8_MEMBER(pcx_video_device::term_w) | |
228 | { | |
229 | if(!offset) | |
230 | { | |
231 | m_mcu->set_input_line(MCS51_INT1_LINE, ASSERT_LINE); | |
232 | m_term_char = data; | |
233 | m_term_stat |= 4; | |
234 | } | |
235 | } | |
236 | ||
237 | READ8_MEMBER(pcx_video_device::term_mcu_r) | |
238 | { | |
239 | switch(offset) | |
240 | { | |
241 | case 0: | |
242 | m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); | |
243 | m_pic2->ir0_w(ASSERT_LINE); | |
244 | m_term_stat &= ~4; | |
245 | return m_term_char; | |
246 | case 1: | |
247 | return m_term_stat; | |
248 | } | |
249 | return 0; | |
250 | } | |
251 | ||
252 | WRITE8_MEMBER(pcx_video_device::term_mcu_w) | |
253 | { | |
254 | if(!offset) | |
255 | { | |
256 | m_term_key = data; | |
257 | m_pic2->ir0_w(ASSERT_LINE); | |
258 | m_term_stat |= 2; | |
259 | } | |
260 | } | |
261 | ||
262 | WRITE8_MEMBER(pcx_video_device::vram_w) | |
263 | { | |
264 | offset <<= 1; | |
265 | m_vram[offset] = m_vram_latch_w[0]; | |
266 | m_vram[offset+1] = m_vram_latch_w[1]; | |
267 | } | |
268 | ||
269 | READ8_MEMBER(pcx_video_device::vram_r) | |
270 | { | |
271 | offset <<= 1; | |
272 | m_vram_latch_r[0] = m_vram[offset]; | |
273 | m_vram_latch_r[1] = m_vram[offset+1]; | |
274 | return m_vram[offset]; | |
275 | } | |
276 | ||
277 | WRITE8_MEMBER(pcx_video_device::vram_latch_w) | |
278 | { | |
279 | m_vram_latch_w[offset] = data; | |
280 | } | |
281 | ||
282 | READ8_MEMBER(pcx_video_device::vram_latch_r) | |
283 | { | |
284 | return m_vram_latch_r[offset]; | |
285 | } | |
286 | ||
287 | READ8_MEMBER(pcdx_video_device::detect_r) | |
288 | { | |
289 | return 0; | |
290 | } | |
291 | ||
292 | WRITE8_MEMBER(pcdx_video_device::detect_w) | |
293 | { | |
294 | } | |
295 | ||
296 | READ8_MEMBER(pcx_video_device::unk_r) | |
297 | { | |
298 | return 0x80; | |
299 | } | |
300 | ||
301 | void pcd_video_device::device_start() | |
302 | { | |
303 | m_maincpu->space(AS_IO).install_write_handler(0xf9a0, 0xf9a1, 0, 0, write8_delegate(FUNC(pcd_video_device::vram_sw_w), this), 0x00ff); | |
304 | m_maincpu->space(AS_IO).install_readwrite_handler(0xf9b0, 0xf9b3, 0, 0, read8_delegate(FUNC(pcd_video_device::mcu_r), this), write8_delegate(FUNC(pcd_video_device::mcu_w), this), 0x00ff); | |
305 | m_maincpu->space(AS_IO).install_readwrite_handler(0xfb00, 0xfb01, 0, 0, read8_delegate(FUNC(pcdx_video_device::detect_r), this), write8_delegate(FUNC(pcdx_video_device::detect_w), this), 0xff00); | |
306 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf0000, 0xf7fff, 0, 0, read8_delegate(FUNC(pcd_video_device::vram_r), this), write8_delegate(FUNC(pcd_video_device::vram_w), this), 0xffff); | |
307 | m_gfxdecode->set_gfx(0, global_alloc(gfx_element(machine().device<palette_device>("palette"), pcd_charlayout, &m_charram[0], 0, 1, 0))); | |
308 | } | |
309 | ||
310 | void pcd_video_device::device_reset() | |
311 | { | |
312 | m_vram_sw = 1; | |
313 | } | |
314 | ||
315 | ||
316 | DEVICE_ADDRESS_MAP_START(map, 16, pcd_video_device) | |
317 | AM_RANGE(0x0, 0xf) AM_DEVWRITE8("crtc", scn2674_device, write, 0x00ff) | |
318 | AM_RANGE(0x0, 0xf) AM_DEVREAD8("crtc", scn2674_device, read, 0xff00) | |
319 | ADDRESS_MAP_END | |
320 | ||
321 | void pcx_video_device::device_start() | |
322 | { | |
323 | mcs51_cpu_device *mcu = downcast<mcs51_cpu_device *>(m_mcu.target()); | |
324 | m_maincpu->space(AS_IO).install_readwrite_handler(0xfb00, 0xfb01, 0, 0, read8_delegate(FUNC(pcdx_video_device::detect_r), this), write8_delegate(FUNC(pcdx_video_device::detect_w), this), 0x00ff); | |
325 | m_txd_handler.resolve_safe(); | |
326 | ||
327 | // set serial callbacks | |
328 | mcu->i8051_set_serial_tx_callback(WRITE8_DELEGATE(pcx_video_device, tx_callback)); | |
329 | mcu->i8051_set_serial_rx_callback(READ8_DELEGATE(pcx_video_device, rx_callback)); | |
330 | set_data_frame(1, 8, PARITY_NONE, STOP_BITS_1); | |
331 | set_rate(600*2); // FIXME: fix the keyboard when the mc2661 baud rate calc is fixed | |
332 | } | |
333 | ||
334 | void pcx_video_device::device_reset() | |
335 | { | |
336 | m_term_key = 0; | |
337 | m_term_stat = 0; | |
338 | transmit_register_reset(); | |
339 | receive_register_reset(); | |
340 | ||
341 | m_txd_handler(1); | |
342 | } | |
343 | ||
344 | DEVICE_ADDRESS_MAP_START(map, 16, pcx_video_device) | |
345 | AM_RANGE(0x0, 0xf) AM_READWRITE8(term_r, term_w, 0xffff) | |
346 | ADDRESS_MAP_END | |
347 | ||
348 | READ8_MEMBER(pcx_video_device::rx_callback) | |
349 | { | |
350 | return get_received_char(); | |
351 | } | |
352 | ||
353 | WRITE8_MEMBER(pcx_video_device::tx_callback) | |
354 | { | |
355 | transmit_register_setup(data); | |
356 | } | |
357 | ||
358 | void pcx_video_device::tra_callback() | |
359 | { | |
360 | m_txd_handler(transmit_register_get_data_bit()); | |
361 | } | |
362 | ||
363 | void pcx_video_device::rcv_complete() | |
364 | { | |
365 | receive_register_extract(); | |
366 | m_mcu->set_input_line(MCS51_RX_LINE, ASSERT_LINE); | |
367 | m_mcu->set_input_line(MCS51_RX_LINE, CLEAR_LINE); | |
368 | } | |
369 | ||
370 | void pcx_video_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) | |
371 | { | |
372 | device_serial_interface::device_timer(timer, id, param, ptr); | |
373 | } |
r0 | r249190 | |
---|---|---|
1 | // license:BSD-3-Clause | |
2 | // copyright-holders:Carl | |
3 | ||
4 | #ifndef _PCD_H_ | |
5 | #define _PCD_H_ | |
6 | ||
7 | #include "emu.h" | |
8 | #include "machine/pic8259.h" | |
9 | #include "video/scn2674.h" | |
10 | ||
11 | #define MCFG_PCX_VIDEO_TXD_HANDLER(_devcb) \ | |
12 | devcb = &pcx_video_device::set_txd_handler(*device, DEVCB_##_devcb); | |
13 | ||
14 | class pcdx_video_device : public device_t | |
15 | { | |
16 | public: | |
17 | pcdx_video_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); | |
18 | ||
19 | virtual DECLARE_ADDRESS_MAP(map, 16) = 0; | |
20 | DECLARE_READ8_MEMBER(detect_r); | |
21 | DECLARE_WRITE8_MEMBER(detect_w); | |
22 | protected: | |
23 | required_device<cpu_device> m_maincpu; | |
24 | required_device<cpu_device> m_mcu; | |
25 | required_device<scn2674_device> m_crtc; | |
26 | required_device<palette_device> m_palette; | |
27 | required_device<gfxdecode_device> m_gfxdecode; | |
28 | }; | |
29 | ||
30 | class pcd_video_device : public pcdx_video_device | |
31 | { | |
32 | public: | |
33 | pcd_video_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
34 | ||
35 | DECLARE_ADDRESS_MAP(map, 16); | |
36 | DECLARE_ADDRESS_MAP(vram_map, 8); | |
37 | DECLARE_READ8_MEMBER(mcu_r); | |
38 | DECLARE_WRITE8_MEMBER(mcu_w); | |
39 | DECLARE_WRITE8_MEMBER(vram_sw_w); | |
40 | DECLARE_READ8_MEMBER(vram_r); | |
41 | DECLARE_WRITE8_MEMBER(vram_w); | |
42 | ||
43 | virtual const rom_entry *device_rom_region() const; | |
44 | virtual machine_config_constructor device_mconfig_additions() const; | |
45 | SCN2674_DRAW_CHARACTER_MEMBER(display_pixels); | |
46 | protected: | |
47 | void device_start(); | |
48 | void device_reset(); | |
49 | private: | |
50 | dynamic_buffer m_vram; | |
51 | dynamic_buffer m_charram; | |
52 | UINT8 m_vram_sw; | |
53 | }; | |
54 | ||
55 | class pcx_video_device : public pcdx_video_device, | |
56 | public device_serial_interface | |
57 | { | |
58 | public: | |
59 | pcx_video_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
60 | template<class _Object> static devcb_base &set_txd_handler(device_t &device, _Object object) { return downcast<pcx_video_device &>(device).m_txd_handler.set_callback(object); } | |
61 | ||
62 | DECLARE_ADDRESS_MAP(map, 16); | |
63 | DECLARE_READ8_MEMBER(term_r); | |
64 | DECLARE_WRITE8_MEMBER(term_w); | |
65 | DECLARE_READ8_MEMBER(term_mcu_r); | |
66 | DECLARE_WRITE8_MEMBER(term_mcu_w); | |
67 | DECLARE_READ8_MEMBER(rx_callback); | |
68 | DECLARE_WRITE8_MEMBER(tx_callback); | |
69 | DECLARE_READ8_MEMBER(vram_r); | |
70 | DECLARE_WRITE8_MEMBER(vram_w); | |
71 | DECLARE_READ8_MEMBER(vram_latch_r); | |
72 | DECLARE_WRITE8_MEMBER(vram_latch_w); | |
73 | DECLARE_READ8_MEMBER(unk_r); | |
74 | ||
75 | virtual const rom_entry *device_rom_region() const; | |
76 | virtual machine_config_constructor device_mconfig_additions() const; | |
77 | SCN2674_DRAW_CHARACTER_MEMBER(display_pixels); | |
78 | protected: | |
79 | void device_start(); | |
80 | void device_reset(); | |
81 | void tra_callback(); | |
82 | void rcv_complete(); | |
83 | void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); | |
84 | private: | |
85 | dynamic_buffer m_vram; | |
86 | required_region_ptr<UINT8> m_charrom; | |
87 | required_device<pic8259_device> m_pic2; | |
88 | devcb_write_line m_txd_handler; | |
89 | UINT8 m_term_key, m_term_char, m_term_stat, m_vram_latch_r[2], m_vram_latch_w[2]; | |
90 | }; | |
91 | ||
92 | extern const device_type PCD_VIDEO; | |
93 | extern const device_type PCX_VIDEO; | |
94 | ||
95 | #endif |
r249189 | r249190 | |
---|---|---|
125 | 125 | static void netdev_pcap_handler(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes) { |
126 | 126 | struct netdev_pcap_context *ctx = (struct netdev_pcap_context*)user; |
127 | 127 | |
128 | if(!ctx->p) return; | |
129 | ||
128 | 130 | if(OSAtomicCompareAndSwapInt((ctx->head+1) & 0x1F, ctx->tail, &ctx->tail)) { |
129 | 131 | printf("buffer full, dropping packet\n"); |
130 | 132 | return; |
r249189 | r249190 | |
137 | 139 | static void *netdev_pcap_blocker(void *arg) { |
138 | 140 | struct netdev_pcap_context *ctx = (struct netdev_pcap_context*)arg; |
139 | 141 | |
140 | while( | |
142 | while(ctx && ctx->p) { | |
141 | 143 | pcap_dispatch_dl(ctx->p, 1, netdev_pcap_handler, (u_char*)ctx); |
142 | 144 | } |
143 | 145 | |
r249189 | r249190 | |
232 | 234 | |
233 | 235 | netdev_pcap::~netdev_pcap() |
234 | 236 | { |
237 | #ifdef SDLMAME_MACOSX | |
238 | m_ctx.p = NULL; | |
239 | pthread_cancel(m_thread); | |
240 | pthread_join(m_thread, NULL); | |
241 | #endif | |
235 | 242 | if(m_p) pcap_close_dl(m_p); |
236 | 243 | m_p = NULL; |
237 | 244 | } |
https://github.com/mamedev/mame/commit/3b06958425e57409cb7185f8f3f45b69d2447988 |
Previous | 199869 Revisions | Next |