(MESS) converted vectrex and crvision to use slot devices for

their carts. nw.

(with these, we are done for the moment with new slot devices for carts...)
This commit is contained in:
Fabio Priuli 2014-10-10 15:28:46 +00:00
parent 4de494250b
commit f0fad04eb6
20 changed files with 1424 additions and 222 deletions

8
.gitattributes vendored
View File

@ -850,6 +850,10 @@ src/emu/bus/cpc/mface2.c svneol=native#text/plain
src/emu/bus/cpc/mface2.h svneol=native#text/plain
src/emu/bus/cpc/symbfac2.c svneol=native#text/plain
src/emu/bus/cpc/symbfac2.h svneol=native#text/plain
src/emu/bus/crvision/rom.c svneol=native#text/plain
src/emu/bus/crvision/rom.h svneol=native#text/plain
src/emu/bus/crvision/slot.c svneol=native#text/plain
src/emu/bus/crvision/slot.h svneol=native#text/plain
src/emu/bus/dmv/dmvbus.c svneol=native#text/plain
src/emu/bus/dmv/dmvbus.h svneol=native#text/plain
src/emu/bus/dmv/k220.c svneol=native#text/plain
@ -1649,6 +1653,10 @@ src/emu/bus/vcs_ctrl/paddles.c svneol=native#text/plain
src/emu/bus/vcs_ctrl/paddles.h svneol=native#text/plain
src/emu/bus/vcs_ctrl/wheel.c svneol=native#text/plain
src/emu/bus/vcs_ctrl/wheel.h svneol=native#text/plain
src/emu/bus/vectrex/rom.c svneol=native#text/plain
src/emu/bus/vectrex/rom.h svneol=native#text/plain
src/emu/bus/vectrex/slot.c svneol=native#text/plain
src/emu/bus/vectrex/slot.h svneol=native#text/plain
src/emu/bus/vic10/exp.c svneol=native#text/plain
src/emu/bus/vic10/exp.h svneol=native#text/plain
src/emu/bus/vic10/std.c svneol=native#text/plain

View File

@ -37,6 +37,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8008" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom4k" />
<dataarea name="rom" size="4096">
<rom name="airsea.bin" size="4096" crc="81a9257d" sha1="1fbc52f335c0d8bb96578a6ba764f5631c41fd36" offset="000000" />
</dataarea>
@ -49,6 +50,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8014" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="astropin.bin" size="8192" crc="d03c0603" sha1="e7cb096d4d16fd8193f7e39c2f73bdf0930c9654" offset="000000" />
</dataarea>
@ -61,6 +63,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8014" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="astropina_01.bin" size="4096" crc="93794d02" sha1="922152e70d614180d7e5614d61c5ced913ecfcd3" offset="0x0000" />
<rom name="astropina_02.bin" size="4096" crc="aacba2e2" sha1="cf2fffe9ca93e1935efba5d264471b1a0b792971" offset="0x1000" />
@ -77,6 +80,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8014" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="astropinb.bin" size="8192" crc="cf7bdfc2" sha1="38bcc856d604567dc6453205a8f858bdf2000330" offset="000000" />
</dataarea>
@ -89,6 +93,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8006" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="autochas.bin" size="8192" crc="bd091ee0" sha1="369dc9aa55dd2c09376be840f8ebeca450db8b9c" offset="000000" />
</dataarea>
@ -101,6 +106,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8006" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="autochas_01.bin" size="4096" crc="fad237b9" sha1="7762d1b5e12bdc5f32157e6ea820da3566b2c3cd" offset="0x0000" />
<rom name="autochas_02.bin" size="4096" crc="bebde090" sha1="b8af1085bdb47bcc8cf9e667313ab3bcf4cc99ea" offset="0x1000" />
@ -115,6 +121,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8011" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom12k" />
<dataarea name="rom" size="12288">
<rom name="basic82a_01.bin" size="4096" crc="9b2aeef8" sha1="73950bf03abc8f6646a8d283e12760de453eddf2" offset="0x0000" />
<rom name="basic82a_02.bin" size="4096" crc="d713b2d1" sha1="e1af1debb8a05f38aaf14dc79cacbc713f02e6fd" offset="0x1000" />
@ -129,6 +136,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8011" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom12k" />
<dataarea name="rom" size="12288">
<rom name="basic82b_01.bin" size="4096" crc="5ee092d0" sha1="c02b0a7e81a2f43a704376381c167b7c6632119c" offset="0x0000" />
<rom name="basic82b_02.bin" size="4096" crc="19a12d7e" sha1="181c27465e7e2da58e7432eaa0ae03e186b6c365" offset="0x1000" />
@ -143,6 +151,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8011" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom12k" />
<dataarea name="rom" size="12288">
<rom name="basic83_01.bin" size="8192" crc="3ce2a7ca" sha1="f2171867767d0b658eea0b072aa1891869073bb9" offset="0x0000" />
<rom name="basic83_02.bin" size="4096" crc="40f388b9" sha1="989a54e92768baae81cd179808adf1f9943212ee" offset="0x2000" />
@ -156,6 +165,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8011" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom12k" />
<dataarea name="rom" size="12288">
<rom name="basicram_01.bin" size="4096" crc="5ee092d0" sha1="c02b0a7e81a2f43a704376381c167b7c6632119c" offset="0x0000" />
<rom name="basicram_02.bin" size="4096" crc="76e661db" sha1="ad0aff12c7bee9dd4f256942614b7e99586698f5" offset="0x1000" />
@ -170,6 +180,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8021" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom18k" />
<dataarea name="rom" size="18432">
<rom name="chopper_01.bin" size="8192" crc="23a6bb47" sha1="748e4c98ed419999063edfe98f26f9e86c877962" offset="0x0000" />
<rom name="chopper_02.bin" size="8192" crc="3980d7ed" sha1="abac0f2a0b73ab5c45e1a617f7c862408086eb66" offset="0x2000" />
@ -184,6 +195,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8001" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom4k" />
<dataarea name="rom" size="4096">
<rom name="crazych.bin" size="4096" crc="b1b5bfe5" sha1="c0eed370267644d142a42de6201f7ac6d275104d" offset="000000" />
</dataarea>
@ -196,6 +208,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8001" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom4k" />
<dataarea name="rom" size="4096">
<rom name="crazypuc.bin" size="4096" crc="c673be37" sha1="0762ba98e9a08b7e6063e2a54734becd83df6eb3" offset="000000" />
</dataarea>
@ -208,6 +221,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8013" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom6k" />
<dataarea name="rom" size="6144">
<rom name="deeps6k_01.bin" size="4096" crc="5112b792" sha1="af917b6ab438b87cde5325d27ccf94c4544c4c9e" offset="0x0000" />
<rom name="deeps6k_02.bin" size="2048" crc="2410042a" sha1="e3813c79b8e504f10d6bfc8a6d39ea284fbc26b6" offset="0x1000" />
@ -221,6 +235,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8013" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="deeps8k.bin" size="8192" crc="2e0ddd86" sha1="d25f82aab473d4c7850ab626ae92d1eac69dbb32" offset="000000" />
</dataarea>
@ -233,6 +248,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8020" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom10k" />
<dataarea name="rom" size="10240">
<rom name="locom10k_01.bin" size="8192" crc="5d2e1c6e" sha1="f327434889ac91397c61cdacb88d21cd0df256ce" offset="0x0000" />
<rom name="locom10k_02.bin" size="2048" crc="a4e5c224" sha1="ffa0fcb1fa524ee51e63017412007881a50b8971" offset="0x2000" />
@ -246,6 +262,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8020" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom12k" />
<dataarea name="rom" size="12288">
<rom name="locom12k_01.bin" size="8192" crc="5d2e1c6e" sha1="f327434889ac91397c61cdacb88d21cd0df256ce" offset="0x0000" />
<rom name="locom12k_02.bin" size="4096" crc="62c6b8e0" sha1="2ebf87eaf6a60bc0d79020a20360916a2c1f0f80" offset="0x2000" />
@ -259,6 +276,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8015" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="mousepuz.bin" size="8192" crc="e954c46b" sha1="c3aa8077756a6101009645711687edd59bf90a98" offset="000000" />
</dataarea>
@ -271,6 +289,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8015" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="mousepuza_01.bin" size="4096" crc="42fa1f8b" sha1="d8da4361cd2c3eb87abb41c4a05ee5136ac1b8b0" offset="0x0000" />
<rom name="mousepuza_02.bin" size="4096" crc="09f79bd9" sha1="8325d9b017eab11e24c637599961736b6c25e24e" offset="0x1000" />
@ -284,6 +303,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8016" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom12k" />
<dataarea name="rom" size="12288">
<rom name="musicmak_01.bin" size="8192" crc="47ac1882" sha1="bdf343bff5436a4b91ffad20971c3b1c05711307" offset="0x0000" />
<rom name="musicmak_02.bin" size="4096" crc="e8caa6d2" sha1="9d3d95e18416fbe0ab30b7d5e3e2518b6a520323" offset="0x2000" />
@ -297,6 +317,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8005" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom6k" />
<dataarea name="rom" size="6144">
<rom name="planetd_01.bin" size="4096" crc="71cffcdd" sha1="cd72a22d44c9a4be2346847b8ef6e32d929533ae" offset="0x0000" />
<rom name="planetd_02.bin" size="2048" crc="734528a9" sha1="39772785538bb7ee061c9bcaa14768328d45674d" offset="0x1000" />
@ -310,6 +331,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8005" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="planet8k.bin" size="8192" crc="4457c7b3" sha1="0be7935db55ecf3e70b96e071ecbc489bd22dc73" offset="000000" />
</dataarea>
@ -321,6 +343,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<year>1981</year>
<publisher>Video Technology Ltd.</publisher>
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="planetd2.bin" size="8192" crc="4b463c18" sha1="1fd80a3921f2487d9eee2b6d8bb3955d22857d0e" offset="000000" />
</dataarea>
@ -333,6 +356,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8009" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="policej.bin" size="8192" crc="db3d50b2" sha1="0fe6d15c973c73b53c33945e213bc2671ff5d7df" offset="000000" />
</dataarea>
@ -345,6 +369,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8009" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="policej_01.bin" size="4096" crc="c6c4e3f4" sha1="8d4f056f77d79b0a9a76d14772f76a0b81b526c6" offset="0x0000" />
<rom name="policej_02.bin" size="4096" crc="bd48d4dc" sha1="20e11659285172e6579d57d6a1a769818762c856" offset="0x1000" />
@ -358,6 +383,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8009" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<!-- Apparently, even internally to V-Tech this Donkey Kong clone was acknowledged as such ;-) -->
<rom name="dk a.bin" size="4096" crc="3033cafe" sha1="a626fd7e1e117d4dba8770f7ac3f85886a6d7022" offset="0x0000" />
@ -372,6 +398,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8017" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom12k" />
<dataarea name="rom" size="12288">
<rom name="soccer_01.bin" size="8192" crc="9247087c" sha1="3fe1364024895f8f0e83235a429f884a8831553e" offset="0x0000" />
<rom name="soccer_02.bin" size="4096" crc="de284150" sha1="a07befd3a2b1689b2d493ab84928d3aa109f88e6" offset="0x2000" />
@ -385,6 +412,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8003" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom4k" />
<dataarea name="rom" size="4096">
<rom name="sonicinv.bin" size="4096" crc="767a1f38" sha1="d77f49bfa951ce0ba505ad4f05f3d0adb697811f" offset="000000" />
</dataarea>
@ -396,6 +424,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<year>1984</year>
<publisher>Video Technology Ltd.</publisher>
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="stoneage.bin" size="8192" crc="74365e94" sha1="dafe57b0ea5da7431bd5b0393bae7cf256c9a562" offset="000000" />
</dataarea>
@ -408,6 +437,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8002" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom6k" />
<dataarea name="rom" size="6144">
<rom name="tankatk_01.bin" size="4096" crc="3bd183ff" sha1="c5b7c59ea282238550acd5055fb197aa83163eea" offset="0x0000" />
<rom name="tankatk_02.bin" size="2048" crc="114a3a00" sha1="54a7ae46ab79109cbda7401204e3cec13a0b6152" offset="0x1000" />
@ -421,6 +451,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8002" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="tankat8k.bin" size="8192" crc="2621ffca" sha1="f3c69a848f1246faf6f9558c0badddd3db626e5f" offset="000000" />
</dataarea>
@ -433,6 +464,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8004" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom6k" />
<dataarea name="rom" size="6144">
<rom name="tens6k_01.bin" size="4096" crc="42d5be57" sha1="e8ddc68c418f43dacc9170c335bd66bd7802821c" offset="0x0000" />
<rom name="tens6k_02.bin" size="2048" crc="9fac0db1" sha1="ecfb92eb58f916d5b5520bb351c71fc78837a165" offset="0x1000" />
@ -447,6 +479,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8004" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="tens8k.bin" size="8192" crc="8bed8745" sha1="690a4dcb412e517b172ec5b44c86863ef63b1246" offset="000000" />
</dataarea>
@ -459,6 +492,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8004" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="tens8k_01.bin" size="4096" crc="bfa874cd" sha1="91d1f66ac850728b65045c61b403fb52557336be" offset="0x0000" />
<rom name="tens8k_02.bin" size="4096" crc="42d5be57" sha1="e8ddc68c418f43dacc9170c335bd66bd7802821c" offset="0x1000" />
@ -472,6 +506,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="8004" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="tenscs8k.bin" size="8192" crc="098d1cbb" sha1="7ea0c5aa6072e2c9eab711f278fd939986a92602" offset="000000" />
</dataarea>
@ -484,6 +519,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="Y-1620" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom6k" />
<dataarea name="rom" size="6144">
<rom name="tensds6k_01.bin" size="4096" crc="97ab341a" sha1="7cf7ea8a2f70bdbd165a9a523fe50f15b36c9a0e" offset="0x0000" />
<rom name="tensds6k_02.bin" size="2048" crc="d669020b" sha1="523bf43e6c237d04e9649bf7beb1da278a346752" offset="0x1000" />
@ -498,6 +534,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<publisher>Video Technology Ltd.</publisher>
<info name="serial" value="Y-1620" />
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom8k" />
<dataarea name="rom" size="8192">
<rom name="tensds8k.bin" size="8192" crc="c914c092" sha1="7b64efddb590332c192f6c4a6accce85a6d402c3" offset="000000" />
</dataarea>
@ -512,6 +549,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<year>198?</year>
<publisher>Richard Hayter</publisher>
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom4k" />
<dataarea name="rom" size="4096">
<rom name="hapmon.bin" size="4096" crc="15d07b96" sha1="89359dca952bc90644dfd7f546c184a8165faa14" offset="000000" />
</dataarea>
@ -524,6 +562,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<year>1983</year>
<publisher>Video Technology Ltd.</publisher>
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom18k">
<dataarea name="rom" size="18432">
<rom name="chopper rescue (alt).rom" size="18432" crc="48e7e8b8" sha1="037088f15830fdd43081edddc5d683318d67ee01" offset="000000" />
</dataarea>
@ -535,6 +574,7 @@ time! Hence, this is not a situation of usage of "Alt PCB" for these carts.
<year>1983</year>
<publisher>Video Technology Ltd.</publisher>
<part name="cart" interface="crvision_cart">
<feature name="slot" value="crv_rom18k">
<dataarea name="rom" size="18432">
<rom name="chopper rescue.rom" size="18432" crc="14179570" sha1="fde339c8dbd44b3332e888cd24d3d492cf066b94" offset="000000" />
</dataarea>

View File

@ -18,6 +18,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="3dmnstrm.bin" size="8192" crc="b2313487" sha1="1731e892da8945fe4945b43847d23960c581682a" offset="0" />
</dataarea>
@ -29,6 +30,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="animactn.bin" size="8192" crc="9f62e167" sha1="71946be47debae89ad191ac382c2015d6a862072" offset="0" />
</dataarea>
@ -40,6 +42,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="armora.bin" size="4096" crc="b7510971" sha1="eb76f860130f8cc87826fa931350467760511213" offset="0" />
</dataarea>
@ -51,6 +54,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="artmastr.bin" size="4096" crc="c8e2f247" sha1="8f35bac5e8e0fc4ad7291bbfe5ae6e693272de06" offset="0" />
</dataarea>
@ -62,6 +66,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="bedlam.bin" size="4096" crc="a2fa649b" sha1="3ff3fa4feda6d562dedff2a10cfa8679d8318044" offset="0" />
</dataarea>
@ -73,6 +78,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="berzerk.bin" size="4096" crc="eafe2455" sha1="e4badd494ed548721328ef869d33ad70e3e522c9" offset="0" />
</dataarea>
@ -84,6 +90,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="blitz.bin" size="8192" crc="0f11ce0c" sha1="60893dfada42cf50c94083d45ad5bd14d0c031c8" offset="0" />
</dataarea>
@ -95,6 +102,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="blitza.bin" size="8192" crc="881b27c5" sha1="aa1aa811c9ce5e19f43b78a6531cdd0e707337bd" offset="0" />
</dataarea>
@ -106,6 +114,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="cleanswp.bin" size="4096" crc="f1b1de78" sha1="67f8513958c04e936b135740ed4ec6e6fa1763d5" offset="0" />
</dataarea>
@ -117,6 +126,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="mrboston.bin" size="8192" crc="bd4da4c2" sha1="299841a116e59399af4e74ccae23ddfc078e007b" offset="0" />
</dataarea>
@ -128,6 +138,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="cchasm.bin" size="4096" crc="6c1afa52" sha1="56a7f277bf09f94461dda542c04c36266d838b86" offset="0" />
</dataarea>
@ -139,6 +150,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="crzycstr.bin" size="8192" crc="92709b11" sha1="4a833e4869221f832dacb7ef0fb2997c870b7d7f" offset="0" />
</dataarea>
@ -150,6 +162,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="12288">
<rom name="darktwer.bin" size="12288" crc="9dcfd5b7" sha1="dbb0b378aacc2a18dfb476aa99ab00d6ab395205" offset="0" />
</dataarea>
@ -161,6 +174,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="enginean.bin" size="4096" crc="fe9a501a" sha1="c226d78301dbe40f2194c165f2124d5afa885be4" offset="0" />
</dataarea>
@ -172,6 +186,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="fnarzod.bin" size="8192" crc="13a35c8a" sha1="286e061331289b031de33725a4966c379c1df47f" offset="0" />
</dataarea>
@ -183,6 +198,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="headsup.bin" size="8192" crc="e61a7de3" sha1="0406c13952fb0bd6adc68298ae163ebc6160484c" offset="0" />
</dataarea>
@ -194,6 +210,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="hyprchse.bin" size="4096" crc="4bb13472" sha1="a246f1d94a5b062b60784787a1d6d499b21c10cd" offset="0" />
</dataarea>
@ -205,6 +222,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="mail_plane.bin" size="8192" crc="da1ac0db" sha1="05f56e708f752ca801f8013c7da9b0db01508ba5" offset="0" />
</dataarea>
@ -217,6 +235,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="mailplne.bin" size="8192" crc="05838962" sha1="969d5ec7d7aba9ac25e54069149d9586217ab63d" offset="0" />
</dataarea>
@ -228,6 +247,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="mldymstr.bin" size="8192" crc="afefa29c" sha1="58aecc7fb1d26a22b09e9a13d845e4ed12e2449d" offset="0" />
</dataarea>
@ -239,6 +259,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="minestrm.bin" size="4096" crc="6d509566" sha1="5f00ed35f189357b4a16a190520166371ca57906" offset="0" />
</dataarea>
@ -250,6 +271,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="minestr2.bin" size="4096" crc="f5b3b374" sha1="1fdcc6e54ae5177bc9cdc79ce616ae3401e5c229" offset="0" />
</dataarea>
@ -261,6 +283,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="nrrwescp.bin" size="8192" crc="050bd949" sha1="9e5d23cb7ef111394e1804e105b6dd277c062df6" offset="0" />
</dataarea>
@ -272,6 +295,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="ptchduel.bin" size="8192" crc="c25f2e0e" sha1="f6f26beb20bb364761a9466ff4087c7b9713d048" offset="0" />
</dataarea>
@ -283,6 +307,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="polarres.bin" size="8192" crc="a7471784" sha1="87248dcd3db51c1ebf3f8e07e21ec021eec0b9be" offset="0" />
</dataarea>
@ -294,6 +319,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="polarrsb.bin" size="8192" crc="ad844645" sha1="b7bd8c8003c60535e1e776758f5c289aa9a77e81" offset="0" />
</dataarea>
@ -305,6 +331,7 @@ guys
<year>1983</year>
<publisher>GCE / Namco Ltd.</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="polepos.bin" size="8192" crc="a00ed3d6" sha1="8454d472435e7a6a4ca5fe129162480ca6e84b87" offset="0" />
</dataarea>
@ -316,6 +343,7 @@ guys
<year>1983</year>
<publisher>GCE / Namco Ltd.</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="poleposa.bin" size="8192" crc="c10f37d8" sha1="9f5b0b5e6caf6d887d3637ace70ad6a6258b999d" offset="0" />
</dataarea>
@ -327,6 +355,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="ripoff.bin" size="4096" crc="34a98132" sha1="22f7a490f6f7aaa31e892b03a85178af211f62e3" offset="0" />
</dataarea>
@ -338,6 +367,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="3671">
<rom name="rcktsldg.bin" size="3671" crc="863b89e8" sha1="526b347bc02a47c8bda326b1f6da50284127f038" offset="0" />
</dataarea>
@ -349,6 +379,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="scramble.bin" size="4096" crc="707c8ffe" sha1="38e38b5c60466146d4648f8929b5ce3a08dcbe0d" offset="0" />
</dataarea>
@ -360,6 +391,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="solarq.bin" size="4096" crc="5c4611c8" sha1="38072dc491d5c729c06f4c50bc310d361e0ff62a" offset="0" />
</dataarea>
@ -371,6 +403,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="spacewar.bin" size="4096" crc="a3be5aff" sha1="0c229dd12a55044681585f7fdabd37dbc1243b59" offset="0" />
</dataarea>
@ -382,6 +415,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="spike.bin" size="8192" crc="62a61843" sha1="8bba6705e6f69f55ab6d105eac2fd5b0c0d16d9f" offset="0" />
</dataarea>
@ -393,6 +427,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="spinball.bin" size="8192" crc="02f41733" sha1="2e8285061530ccadfa2d8d11c374ae244449ebfa" offset="0" />
</dataarea>
@ -404,6 +439,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="starcas.bin" size="4096" crc="c9039623" sha1="c9b79f1ba30dcbce5a068b606a97775cf863fe0a" offset="0" />
</dataarea>
@ -415,6 +451,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="starship.bin" size="4096" crc="7967a8cb" sha1="d182eac5a54ffc642fcbe4a495c7c09f87b43585" offset="0" />
</dataarea>
@ -426,6 +463,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="startrek.bin" size="4096" crc="3768d8c3" sha1="3a2ee61316fb316d9e9efdf5ee405e813475b466" offset="0" />
</dataarea>
@ -437,6 +475,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="starhawk.bin" size="4096" crc="4de1f06b" sha1="d6b388b3951e34971c1b00c7fdf8dd00ad52df09" offset="0" />
</dataarea>
@ -448,6 +487,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="testrev4.bin" size="4096" crc="7297e815" sha1="e3418055f1e79a2300572c557e71bf2ce8badbfa" offset="0" />
</dataarea>
@ -459,6 +499,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="tourdefr.bin" size="8192" crc="bb4791f1" sha1="4f461b0b51c82433e70130eac5494f26239b4453" offset="0" />
</dataarea>
@ -470,6 +511,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="webwarp.bin" size="8192" crc="521107c3" sha1="9681dc5d38a31cb0d0c6c3bd0fc76bfdde531cce" offset="0" />
</dataarea>
@ -481,6 +523,7 @@ guys
<year>1983</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="8192">
<rom name="webwars.bin" size="8192" crc="2ee20103" sha1="08e2df9f7769c16a4d730adf8d659f8ea4be7f9d" offset="0" />
</dataarea>
@ -495,6 +538,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="32768">
<rom name="berzerkd.bin" size="32768" crc="2adc4eaa" sha1="88031823ed2af95e8a7a6239cd83b158f9b7c16a" offset="0" />
</dataarea>
@ -506,6 +550,7 @@ guys
<year>1982</year>
<publisher>GCE</publisher>
<part name="cart" interface="vectrex_cart">
<feature name="slot" value="vec_rom" />
<dataarea name="rom" size="4096">
<rom name="startrekp.bin" size="4096" crc="563f846b" sha1="21707811e544edae66ca076351bf0743842b46e5" offset="0" />
</dataarea>

View File

@ -296,6 +296,18 @@ BUSOBJS += $(BUSOBJ)/coleco/std.o
endif
#-------------------------------------------------
#
#@src/emu/bus/crvision/slot.h,BUSES += CRVISION
#-------------------------------------------------
ifneq ($(filter CRVISION,$(BUSES)),)
OBJDIRS += $(BUSOBJ)/crvision
BUSOBJS += $(BUSOBJ)/crvision/slot.o
BUSOBJS += $(BUSOBJ)/crvision/rom.o
endif
#-------------------------------------------------
#
#@src/emu/bus/dmv/dmv.h,BUSES += DMV
@ -714,6 +726,18 @@ BUSOBJS += $(BUSOBJ)/vcs_ctrl/wheel.o
endif
#-------------------------------------------------
#
#@src/emu/bus/vectrex/slot.h,BUSES += VECTREX
#-------------------------------------------------
ifneq ($(filter VECTREX,$(BUSES)),)
OBJDIRS += $(BUSOBJ)/vectrex
BUSOBJS += $(BUSOBJ)/vectrex/slot.o
BUSOBJS += $(BUSOBJ)/vectrex/rom.o
endif
#-------------------------------------------------
#
#@src/emu/bus/vic10/exp.h,BUSES += VIC10

138
src/emu/bus/crvision/rom.c Normal file
View File

@ -0,0 +1,138 @@
/***********************************************************************************************************
V-Tech CreatiVision cart emulation
***********************************************************************************************************/
#include "emu.h"
#include "rom.h"
//-------------------------------------------------
// crvision_rom_device - constructor
//-------------------------------------------------
const device_type CRVISION_ROM_4K = &device_creator<crvision_rom_device>;
const device_type CRVISION_ROM_6K = &device_creator<crvision_rom6k_device>;
const device_type CRVISION_ROM_8K = &device_creator<crvision_rom8k_device>;
const device_type CRVISION_ROM_10K = &device_creator<crvision_rom10k_device>;
const device_type CRVISION_ROM_12K = &device_creator<crvision_rom12k_device>;
const device_type CRVISION_ROM_16K = &device_creator<crvision_rom16k_device>;
const device_type CRVISION_ROM_18K = &device_creator<crvision_rom18k_device>;
crvision_rom_device::crvision_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
: device_t(mconfig, type, name, tag, owner, clock, shortname, source),
device_crvision_cart_interface(mconfig, *this)
{
}
crvision_rom_device::crvision_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, CRVISION_ROM_4K, "CreatiVision 4K Carts", tag, owner, clock, "crvision_4k", __FILE__),
device_crvision_cart_interface(mconfig, *this)
{
}
crvision_rom6k_device::crvision_rom6k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: crvision_rom_device(mconfig, CRVISION_ROM_6K, "CreatiVision 6K Carts", tag, owner, clock, "crvision_6k", __FILE__)
{
}
crvision_rom8k_device::crvision_rom8k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: crvision_rom_device(mconfig, CRVISION_ROM_8K, "CreatiVision 8K Carts", tag, owner, clock, "crvision_8k", __FILE__)
{
}
crvision_rom10k_device::crvision_rom10k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: crvision_rom_device(mconfig, CRVISION_ROM_10K, "CreatiVision 10K Carts", tag, owner, clock, "crvision_10k", __FILE__)
{
}
crvision_rom12k_device::crvision_rom12k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: crvision_rom_device(mconfig, CRVISION_ROM_12K, "CreatiVision 12K Carts", tag, owner, clock, "crvision_12k", __FILE__)
{
}
crvision_rom16k_device::crvision_rom16k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: crvision_rom_device(mconfig, CRVISION_ROM_16K, "CreatiVision 16K Carts", tag, owner, clock, "crvision_16k", __FILE__)
{
}
crvision_rom18k_device::crvision_rom18k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: crvision_rom_device(mconfig, CRVISION_ROM_18K, "CreatiVision 18K Carts", tag, owner, clock, "crvision_18k", __FILE__)
{
}
/*-------------------------------------------------
mapper specific handlers
-------------------------------------------------*/
READ8_MEMBER(crvision_rom_device::read_rom80)
{
offset &= 0x1fff;
if (offset < 0x1000)
return 0xff;
return m_rom[offset & 0xfff];
}
READ8_MEMBER(crvision_rom6k_device::read_rom80)
{
offset &= 0x1fff;
if (offset < 0x1000)
return m_rom[0x1000 + (offset & 0x7ff)];
return m_rom[offset & 0xfff];
}
READ8_MEMBER(crvision_rom8k_device::read_rom80)
{
return m_rom[offset & 0x1fff];
}
READ8_MEMBER(crvision_rom10k_device::read_rom80)
{
return m_rom[offset & 0x1fff];
}
READ8_MEMBER(crvision_rom10k_device::read_rom40)
{
return m_rom[0x2000 + (offset & 0x7ff)];
}
READ8_MEMBER(crvision_rom12k_device::read_rom80)
{
return m_rom[offset & 0x1fff];
}
READ8_MEMBER(crvision_rom12k_device::read_rom40)
{
return m_rom[0x2000 + (offset & 0xfff)];
}
READ8_MEMBER(crvision_rom16k_device::read_rom80)
{
// lower 8K in 0xa000-0xbfff, higher 8K in 0x8000-0x9fff
return m_rom[offset ^ 0x2000];
}
READ8_MEMBER(crvision_rom18k_device::read_rom80)
{
// lower 8K in 0xa000-0xbfff, higher 8K in 0x8000-0x9fff
return m_rom[offset ^ 0x2000];
}
READ8_MEMBER(crvision_rom18k_device::read_rom40)
{
return m_rom[0x4000 + (offset & 0x7ff)];
}

114
src/emu/bus/crvision/rom.h Normal file
View File

@ -0,0 +1,114 @@
#ifndef __CRVISION_ROM_H
#define __CRVISION_ROM_H
#include "slot.h"
// ======================> crvision_rom_device
class crvision_rom_device : public device_t,
public device_crvision_cart_interface
{
public:
// construction/destruction
crvision_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
crvision_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start() {}
virtual void device_reset() {}
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom80);
};
// ======================> crvision_rom6k_device
class crvision_rom6k_device : public crvision_rom_device
{
public:
// construction/destruction
crvision_rom6k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom80);
};
// ======================> crvision_rom8k_device
class crvision_rom8k_device : public crvision_rom_device
{
public:
// construction/destruction
crvision_rom8k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom80);
};
// ======================> crvision_rom10k_device
class crvision_rom10k_device : public crvision_rom_device
{
public:
// construction/destruction
crvision_rom10k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom40);
virtual DECLARE_READ8_MEMBER(read_rom80);
};
// ======================> crvision_rom12k_device
class crvision_rom12k_device : public crvision_rom_device
{
public:
// construction/destruction
crvision_rom12k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom40);
virtual DECLARE_READ8_MEMBER(read_rom80);
};
// ======================> crvision_rom16k_device
class crvision_rom16k_device : public crvision_rom_device
{
public:
// construction/destruction
crvision_rom16k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom80);
};
// ======================> crvision_rom18k_device
class crvision_rom18k_device : public crvision_rom_device
{
public:
// construction/destruction
crvision_rom18k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom40);
virtual DECLARE_READ8_MEMBER(read_rom80);
};
// device type definition
extern const device_type CRVISION_ROM_4K;
extern const device_type CRVISION_ROM_6K;
extern const device_type CRVISION_ROM_8K;
extern const device_type CRVISION_ROM_10K;
extern const device_type CRVISION_ROM_12K;
extern const device_type CRVISION_ROM_16K;
extern const device_type CRVISION_ROM_18K;
#endif

296
src/emu/bus/crvision/slot.c Normal file
View File

@ -0,0 +1,296 @@
/***********************************************************************************************************
V-Tech CreatiVision cart emulation
(through slot devices)
***********************************************************************************************************/
#include "emu.h"
#include "slot.h"
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
const device_type CRVISION_CART_SLOT = &device_creator<crvision_cart_slot_device>;
//**************************************************************************
// CreatiVision Cartridges Interface
//**************************************************************************
//-------------------------------------------------
// device_crvision_cart_interface - constructor
//-------------------------------------------------
device_crvision_cart_interface::device_crvision_cart_interface(const machine_config &mconfig, device_t &device)
: device_slot_card_interface(mconfig, device),
m_rom(NULL),
m_rom_size(0)
{
}
//-------------------------------------------------
// ~device_crvision_cart_interface - destructor
//-------------------------------------------------
device_crvision_cart_interface::~device_crvision_cart_interface()
{
}
//-------------------------------------------------
// rom_alloc - alloc the space for the cart
//-------------------------------------------------
void device_crvision_cart_interface::rom_alloc(UINT32 size, const char *tag)
{
if (m_rom == NULL)
{
astring tempstring(tag);
tempstring.cat(CRVSLOT_ROM_REGION_TAG);
m_rom = device().machine().memory().region_alloc(tempstring, size, 1, ENDIANNESS_LITTLE)->base();
m_rom_size = size;
}
}
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// crvision_cart_slot_device - constructor
//-------------------------------------------------
crvision_cart_slot_device::crvision_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, CRVISION_CART_SLOT, "APF Cartridge Slot", tag, owner, clock, "crvision_cart_slot", __FILE__),
device_image_interface(mconfig, *this),
device_slot_interface(mconfig, *this),
m_type(CRV_4K)
{
}
//-------------------------------------------------
// crvision_cart_slot_device - destructor
//-------------------------------------------------
crvision_cart_slot_device::~crvision_cart_slot_device()
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void crvision_cart_slot_device::device_start()
{
m_cart = dynamic_cast<device_crvision_cart_interface *>(get_card_device());
}
//-------------------------------------------------
// device_config_complete - perform any
// operations now that the configuration is
// complete
//-------------------------------------------------
void crvision_cart_slot_device::device_config_complete()
{
// set brief and instance name
update_names();
}
//-------------------------------------------------
// APF PCB
//-------------------------------------------------
struct crvision_slot
{
int pcb_id;
const char *slot_option;
};
// Here, we take the feature attribute from .xml (i.e. the PCB name) and we assign a unique ID to it
static const crvision_slot slot_list[] =
{
{ CRV_4K, "crv_rom4k" },
{ CRV_6K, "crv_rom6k" },
{ CRV_8K, "crv_rom8k" },
{ CRV_10K, "crv_rom10k" },
{ CRV_12K, "crv_rom12k" },
{ CRV_16K, "crv_rom16k" },
{ CRV_18K, "crv_rom18k" }
};
static int crvision_get_pcb_id(const char *slot)
{
for (int i = 0; i < ARRAY_LENGTH(slot_list); i++)
{
if (!core_stricmp(slot_list[i].slot_option, slot))
return slot_list[i].pcb_id;
}
return 0;
}
static const char *crvision_get_slot(int type)
{
for (int i = 0; i < ARRAY_LENGTH(slot_list); i++)
{
if (slot_list[i].pcb_id == type)
return slot_list[i].slot_option;
}
return "crv_rom4k";
}
/*-------------------------------------------------
call load
-------------------------------------------------*/
bool crvision_cart_slot_device::call_load()
{
if (m_cart)
{
UINT32 size = (software_entry() == NULL) ? length() : get_software_region_length("rom");
if (size > 0x4800)
{
seterror(IMAGE_ERROR_UNSPECIFIED, "Image extends beyond the expected size for an APF cart");
return IMAGE_INIT_FAIL;
}
m_cart->rom_alloc(size, tag());
if (software_entry() == NULL)
fread(m_cart->get_rom_base(), size);
else
memcpy(m_cart->get_rom_base(), get_software_region("rom"), size);
if (software_entry() == NULL)
{
m_type = CRV_4K;
switch (size)
{
case 0x4800:
m_type = CRV_18K;
break;
case 0x4000:
m_type = CRV_16K;
break;
case 0x3000:
m_type = CRV_12K;
break;
case 0x2800:
m_type = CRV_10K;
break;
case 0x2000:
m_type = CRV_8K;
break;
case 0x1800:
m_type = CRV_6K;
break;
case 0x1000:
default:
break;
}
}
else
{
const char *pcb_name = get_feature("slot");
if (pcb_name)
m_type = crvision_get_pcb_id(pcb_name);
}
printf("Type: %s\n", crvision_get_slot(m_type));
return IMAGE_INIT_PASS;
}
return IMAGE_INIT_PASS;
}
/*-------------------------------------------------
call softlist load
-------------------------------------------------*/
bool crvision_cart_slot_device::call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry)
{
load_software_part_region(*this, swlist, swname, start_entry);
return TRUE;
}
/*-------------------------------------------------
get default card software
-------------------------------------------------*/
void crvision_cart_slot_device::get_default_card_software(astring &result)
{
if (open_image_file(mconfig().options()))
{
const char *slot_string = "crv_rom4k";
UINT32 size = core_fsize(m_file);
int type = CRV_4K;
switch (size)
{
case 0x4800:
type = CRV_18K;
break;
case 0x4000:
type = CRV_16K;
break;
case 0x3000:
type = CRV_12K;
break;
case 0x2800:
type = CRV_10K;
break;
case 0x2000:
type = CRV_8K;
break;
case 0x1800:
type = CRV_6K;
break;
case 0x1000:
default:
break;
}
slot_string = crvision_get_slot(type);
//printf("type: %s\n", slot_string);
clear();
result.cpy(slot_string);
return;
}
software_get_default_slot(result, "crv_rom4k");
}
/*-------------------------------------------------
read_rom
-------------------------------------------------*/
READ8_MEMBER(crvision_cart_slot_device::read_rom40)
{
if (m_cart)
return m_cart->read_rom40(space, offset);
else
return 0xff;
}
READ8_MEMBER(crvision_cart_slot_device::read_rom80)
{
if (m_cart)
return m_cart->read_rom80(space, offset);
else
return 0xff;
}

107
src/emu/bus/crvision/slot.h Normal file
View File

@ -0,0 +1,107 @@
#ifndef __CRVISION_SLOT_H
#define __CRVISION_SLOT_H
/***************************************************************************
TYPE DEFINITIONS
***************************************************************************/
/* PCB */
enum
{
CRV_4K = 0,
CRV_6K,
CRV_8K,
CRV_10K,
CRV_12K,
CRV_16K,
CRV_18K
};
// ======================> device_crvision_cart_interface
class device_crvision_cart_interface : public device_slot_card_interface
{
public:
// construction/destruction
device_crvision_cart_interface(const machine_config &mconfig, device_t &device);
virtual ~device_crvision_cart_interface();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom40) { return 0xff; }
virtual DECLARE_READ8_MEMBER(read_rom80) { return 0xff; }
void rom_alloc(UINT32 size, const char *tag);
UINT8* get_rom_base() { return m_rom; }
UINT32 get_rom_size() { return m_rom_size; }
protected:
// internal state
UINT8 *m_rom;
UINT32 m_rom_size;
};
// ======================> crvision_cart_slot_device
class crvision_cart_slot_device : public device_t,
public device_image_interface,
public device_slot_interface
{
public:
// construction/destruction
crvision_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual ~crvision_cart_slot_device();
// device-level overrides
virtual void device_start();
virtual void device_config_complete();
// image-level overrides
virtual bool call_load();
virtual void call_unload() {}
virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry);
int get_type() { return m_type; }
virtual iodevice_t image_type() const { return IO_CARTSLOT; }
virtual bool is_readable() const { return 1; }
virtual bool is_writeable() const { return 0; }
virtual bool is_creatable() const { return 0; }
virtual bool must_be_loaded() const { return 0; }
virtual bool is_reset_on_load() const { return 1; }
virtual const option_guide *create_option_guide() const { return NULL; }
virtual const char *image_interface() const { return "crvision_cart"; }
virtual const char *file_extensions() const { return "bin,rom"; }
// slot interface overrides
virtual void get_default_card_software(astring &result);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom40);
virtual DECLARE_READ8_MEMBER(read_rom80);
protected:
int m_type;
device_crvision_cart_interface* m_cart;
};
// device type definition
extern const device_type CRVISION_CART_SLOT;
/***************************************************************************
DEVICE CONFIGURATION MACROS
***************************************************************************/
#define CRVSLOT_ROM_REGION_TAG ":cart:rom"
#define MCFG_CRVISION_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
MCFG_DEVICE_ADD(_tag, CRVISION_CART_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
#endif

86
src/emu/bus/vectrex/rom.c Normal file
View File

@ -0,0 +1,86 @@
/***********************************************************************************************************
GCE Vectrex cart emulation
TODO:
- better understand how much SRAM is expected to be present by the homebrew using
this cart type and use a RAM array instead of the ROM region for writes
***********************************************************************************************************/
#include "emu.h"
#include "rom.h"
//-------------------------------------------------
// vectrex_rom_device - constructor
//-------------------------------------------------
const device_type VECTREX_ROM_STD = &device_creator<vectrex_rom_device>;
const device_type VECTREX_ROM_64K = &device_creator<vectrex_rom64k_device>;
const device_type VECTREX_ROM_SRAM = &device_creator<vectrex_sram_device>;
vectrex_rom_device::vectrex_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
: device_t(mconfig, type, name, tag, owner, clock, shortname, source),
device_vectrex_cart_interface(mconfig, *this)
{
}
vectrex_rom_device::vectrex_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, VECTREX_ROM_STD, "Vectrex Standard Carts", tag, owner, clock, "vectrex_rom", __FILE__),
device_vectrex_cart_interface(mconfig, *this)
{
}
vectrex_rom64k_device::vectrex_rom64k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: vectrex_rom_device(mconfig, VECTREX_ROM_64K, "Vectrex Carts w/ Bankswitch", tag, owner, clock, "vectrex_64k", __FILE__)
{
}
vectrex_sram_device::vectrex_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: vectrex_rom_device(mconfig, VECTREX_ROM_SRAM, "Vectrex Carts w/ SRAM", tag, owner, clock, "vectrex_sram", __FILE__)
{
}
void vectrex_rom64k_device::device_start()
{
save_item(NAME(m_bank));
}
void vectrex_rom64k_device::device_reset()
{
m_bank = 0;
}
/*-------------------------------------------------
mapper specific handlers
-------------------------------------------------*/
READ8_MEMBER(vectrex_rom_device::read_rom)
{
if (offset < m_rom_size)
return m_rom[offset];
else
return 0xff;
}
READ8_MEMBER(vectrex_rom64k_device::read_rom)
{
return m_rom[(offset + m_bank * 0x8000) & (m_rom_size - 1)];
}
WRITE8_MEMBER(vectrex_rom64k_device::write_bank)
{
m_bank = data >> 6;
}
WRITE8_MEMBER(vectrex_sram_device::write_ram)
{
m_rom[offset & (m_rom_size - 1)] = data;
}

65
src/emu/bus/vectrex/rom.h Normal file
View File

@ -0,0 +1,65 @@
#ifndef __VECTREX_ROM_H
#define __VECTREX_ROM_H
#include "slot.h"
// ======================> vectrex_rom_device
class vectrex_rom_device : public device_t,
public device_vectrex_cart_interface
{
public:
// construction/destruction
vectrex_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
vectrex_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start() {}
virtual void device_reset() {}
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom);
};
// ======================> vectrex_rom64k_device
class vectrex_rom64k_device : public vectrex_rom_device
{
public:
// construction/destruction
vectrex_rom64k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom);
virtual DECLARE_WRITE8_MEMBER(write_bank);
private:
int m_bank;
};
// ======================> vectrex_sram_device
class vectrex_sram_device : public vectrex_rom_device
{
public:
// construction/destruction
vectrex_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// reading and writing
virtual DECLARE_WRITE8_MEMBER(write_ram);
};
// device type definition
extern const device_type VECTREX_ROM_STD;
extern const device_type VECTREX_ROM_64K;
extern const device_type VECTREX_ROM_SRAM;
#endif

280
src/emu/bus/vectrex/slot.c Normal file
View File

@ -0,0 +1,280 @@
/***********************************************************************************************************
GCE Vectrex cart emulation
(through slot devices)
***********************************************************************************************************/
#include "emu.h"
#include "slot.h"
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
const device_type VECTREX_CART_SLOT = &device_creator<vectrex_cart_slot_device>;
//**************************************************************************
// Vectrex Cartridges Interface
//**************************************************************************
//-------------------------------------------------
// device_vectrex_cart_interface - constructor
//-------------------------------------------------
device_vectrex_cart_interface::device_vectrex_cart_interface(const machine_config &mconfig, device_t &device)
: device_slot_card_interface(mconfig, device),
m_rom(NULL),
m_rom_size(0)
{
}
//-------------------------------------------------
// ~device_vectrex_cart_interface - destructor
//-------------------------------------------------
device_vectrex_cart_interface::~device_vectrex_cart_interface()
{
}
//-------------------------------------------------
// rom_alloc - alloc the space for the cart
//-------------------------------------------------
void device_vectrex_cart_interface::rom_alloc(UINT32 size, const char *tag)
{
if (m_rom == NULL)
{
astring tempstring(tag);
tempstring.cat(VECSLOT_ROM_REGION_TAG);
m_rom = device().machine().memory().region_alloc(tempstring, size, 1, ENDIANNESS_LITTLE)->base();
m_rom_size = size;
}
}
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// vectrex_cart_slot_device - constructor
//-------------------------------------------------
vectrex_cart_slot_device::vectrex_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, VECTREX_CART_SLOT, "GCE Vectrex Cartridge Slot", tag, owner, clock, "vectrex_cart_slot", __FILE__),
device_image_interface(mconfig, *this),
device_slot_interface(mconfig, *this),
m_type(VECTREX_STD),
m_vec3d(VEC3D_NONE)
{
}
//-------------------------------------------------
// vectrex_cart_slot_device - destructor
//-------------------------------------------------
vectrex_cart_slot_device::~vectrex_cart_slot_device()
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void vectrex_cart_slot_device::device_start()
{
m_cart = dynamic_cast<device_vectrex_cart_interface *>(get_card_device());
}
//-------------------------------------------------
// device_config_complete - perform any
// operations now that the configuration is
// complete
//-------------------------------------------------
void vectrex_cart_slot_device::device_config_complete()
{
// set brief and instance name
update_names();
}
//-------------------------------------------------
// Vectrex PCB
//-------------------------------------------------
struct vectrex_slot
{
int pcb_id;
const char *slot_option;
};
// Here, we take the feature attribute from .xml (i.e. the PCB name) and we assign a unique ID to it
static const vectrex_slot slot_list[] =
{
{ VECTREX_STD, "vec_rom" },
{ VECTREX_64K, "vec_rom64k" },
{ VECTREX_SRAM, "vec_sram" }
};
#if 0
static int vectrex_get_pcb_id(const char *slot)
{
for (int i = 0; i < ARRAY_LENGTH(slot_list); i++)
{
if (!core_stricmp(slot_list[i].slot_option, slot))
return slot_list[i].pcb_id;
}
return 0;
}
#endif
static const char *vectrex_get_slot(int type)
{
for (int i = 0; i < ARRAY_LENGTH(slot_list); i++)
{
if (slot_list[i].pcb_id == type)
return slot_list[i].slot_option;
}
return "vec_rom";
}
/*-------------------------------------------------
call load
-------------------------------------------------*/
bool vectrex_cart_slot_device::call_load()
{
if (m_cart)
{
UINT32 size = (software_entry() == NULL) ? length() : get_software_region_length("rom");
UINT8 *ROM;
if (size > 0x10000)
{
seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported cartridge size");
return IMAGE_INIT_FAIL;
}
m_cart->rom_alloc((size < 0x1000) ? 0x1000 : size, tag());
ROM = m_cart->get_rom_base();
if (software_entry() == NULL)
fread(ROM, size);
else
memcpy(ROM, get_software_region("rom"), size);
// Verify the file is accepted by the Vectrex bios
if (memcmp(ROM, "g GCE", 5))
{
seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid image");
return IMAGE_INIT_FAIL;
}
// determine type
m_type = VECTREX_STD;
if (!memcmp(ROM + 0x06, "SRAM", 4))
m_type = VECTREX_SRAM;
if (size > 0x8000)
m_type = VECTREX_64K;
//printf("Type: %s\n", vectrex_get_slot(m_type));
// determine 3D setup (to help video setup at machine_start)
if (!memcmp(ROM + 0x11, "NARROW", 6) && (ROM[0x39] == 0x0c))
m_vec3d = VEC3D_NARROW;
if (!memcmp(ROM + 0x11, "CRAZY COASTER", 13))
m_vec3d = VEC3D_CCOAST;
if (!memcmp(ROM + 0x11, "3D MINE STORM", 13))
m_vec3d = VEC3D_MINEST;
return IMAGE_INIT_PASS;
}
return IMAGE_INIT_PASS;
}
/*-------------------------------------------------
call softlist load
-------------------------------------------------*/
bool vectrex_cart_slot_device::call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry)
{
load_software_part_region(*this, swlist, swname, start_entry);
return TRUE;
}
/*-------------------------------------------------
get default card software
-------------------------------------------------*/
void vectrex_cart_slot_device::get_default_card_software(astring &result)
{
if (open_image_file(mconfig().options()))
{
const char *slot_string = "vec_rom";
UINT32 size = core_fsize(m_file);
dynamic_buffer rom(size);
int type = VECTREX_STD;
core_fread(m_file, rom, size);
if (!memcmp(rom + 0x06, "SRAM", 4))
type = VECTREX_SRAM;
if (size > 0x8000)
type = VECTREX_64K;
slot_string = vectrex_get_slot(type);
//printf("type: %s\n", slot_string);
clear();
result.cpy(slot_string);
return;
}
software_get_default_slot(result, "vec_rom");
}
/*-------------------------------------------------
read_rom
-------------------------------------------------*/
READ8_MEMBER(vectrex_cart_slot_device::read_rom)
{
if (m_cart)
return m_cart->read_rom(space, offset);
else
return 0xff;
}
/*-------------------------------------------------
write_ram
-------------------------------------------------*/
WRITE8_MEMBER(vectrex_cart_slot_device::write_ram)
{
if (m_cart)
m_cart->write_ram(space, offset, data);
}
/*-------------------------------------------------
write_bank
-------------------------------------------------*/
WRITE8_MEMBER(vectrex_cart_slot_device::write_bank)
{
if (m_cart)
m_cart->write_bank(space, offset, data);
}

114
src/emu/bus/vectrex/slot.h Normal file
View File

@ -0,0 +1,114 @@
#ifndef __VECTREX_SLOT_H
#define __VECTREX_SLOT_H
/***************************************************************************
TYPE DEFINITIONS
***************************************************************************/
/* PCB */
enum
{
VECTREX_STD = 0,
VECTREX_64K,
VECTREX_SRAM
};
// 3D setup
enum
{
VEC3D_NONE = 0,
VEC3D_MINEST,
VEC3D_CCOAST,
VEC3D_NARROW
};
// ======================> device_vectrex_cart_interface
class device_vectrex_cart_interface : public device_slot_card_interface
{
public:
// construction/destruction
device_vectrex_cart_interface(const machine_config &mconfig, device_t &device);
virtual ~device_vectrex_cart_interface();
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom) { return 0xff; }
virtual DECLARE_WRITE8_MEMBER(write_ram) {}
virtual DECLARE_WRITE8_MEMBER(write_bank) {}
void rom_alloc(UINT32 size, const char *tag);
UINT8* get_rom_base() { return m_rom; }
UINT32 get_rom_size() { return m_rom_size; }
protected:
// internal state
UINT8 *m_rom;
UINT32 m_rom_size;
};
// ======================> vectrex_cart_slot_device
class vectrex_cart_slot_device : public device_t,
public device_image_interface,
public device_slot_interface
{
public:
// construction/destruction
vectrex_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual ~vectrex_cart_slot_device();
// device-level overrides
virtual void device_start();
virtual void device_config_complete();
// image-level overrides
virtual bool call_load();
virtual void call_unload() {}
virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry);
int get_type() { return m_type; }
int get_vec3d() { return m_vec3d; }
virtual iodevice_t image_type() const { return IO_CARTSLOT; }
virtual bool is_readable() const { return 1; }
virtual bool is_writeable() const { return 0; }
virtual bool is_creatable() const { return 0; }
virtual bool must_be_loaded() const { return 0; }
virtual bool is_reset_on_load() const { return 1; }
virtual const option_guide *create_option_guide() const { return NULL; }
virtual const char *image_interface() const { return "vectrex_cart"; }
virtual const char *file_extensions() const { return "bin,gam,vec"; }
// slot interface overrides
virtual void get_default_card_software(astring &result);
// reading and writing
virtual DECLARE_READ8_MEMBER(read_rom);
virtual DECLARE_WRITE8_MEMBER(write_ram);
virtual DECLARE_WRITE8_MEMBER(write_bank);
protected:
int m_type, m_vec3d;
device_vectrex_cart_interface* m_cart;
};
// device type definition
extern const device_type VECTREX_CART_SLOT;
/***************************************************************************
DEVICE CONFIGURATION MACROS
***************************************************************************/
#define VECSLOT_ROM_REGION_TAG ":cart:rom"
#define MCFG_VECTREX_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
MCFG_DEVICE_ADD(_tag, VECTREX_CART_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
#endif

View File

@ -13,17 +13,16 @@ Bruce Tomlin (hardware info)
#include "video/vector.h"
#include "machine/6522via.h"
#include "includes/vectrex.h"
#include "imagedev/cartslot.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
#include "machine/nvram.h"
static ADDRESS_MAP_START(vectrex_map, AS_PROGRAM, 8, vectrex_state )
AM_RANGE(0x0000, 0x7fff) AM_RAMBANK("bank1") AM_REGION("maincpu", 0)
AM_RANGE(0x0000, 0x7fff) AM_NOP // cart area, handled at machine_start
AM_RANGE(0xc800, 0xcbff) AM_RAM AM_MIRROR(0x0400) AM_SHARE("gce_vectorram")
AM_RANGE(0xd000, 0xd7ff) AM_READWRITE(vectrex_via_r, vectrex_via_w)
AM_RANGE(0xe000, 0xffff) AM_ROM
AM_RANGE(0xe000, 0xffff) AM_ROM AM_REGION("maincpu", 0)
ADDRESS_MAP_END
static INPUT_PORTS_START(vectrex)
@ -84,6 +83,12 @@ static INPUT_PORTS_START(vectrex)
INPUT_PORTS_END
static SLOT_INTERFACE_START(vectrex_cart)
SLOT_INTERFACE_INTERNAL("vec_rom", VECTREX_ROM_STD)
SLOT_INTERFACE_INTERNAL("vec_rom64k", VECTREX_ROM_64K)
SLOT_INTERFACE_INTERNAL("vec_sram", VECTREX_ROM_SRAM)
SLOT_INTERFACE_END
static MACHINE_CONFIG_START( vectrex, vectrex_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809, XTAL_6MHz / 4)
@ -97,7 +102,6 @@ static MACHINE_CONFIG_START( vectrex, vectrex_state )
MCFG_SCREEN_VISIBLE_AREA(0, 399, 0, 299)
MCFG_SCREEN_UPDATE_DRIVER(vectrex_state, screen_update_vectrex)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_DAC_ADD("dac")
@ -118,28 +122,24 @@ static MACHINE_CONFIG_START( vectrex, vectrex_state )
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(vectrex_state, vectrex_via_irq))
/* cartridge */
MCFG_CARTSLOT_ADD("cart")
MCFG_CARTSLOT_EXTENSION_LIST("bin,gam,vec")
MCFG_CARTSLOT_NOT_MANDATORY
MCFG_CARTSLOT_LOAD(vectrex_state,vectrex_cart)
MCFG_CARTSLOT_INTERFACE("vectrex_cart")
MCFG_VECTREX_CARTRIDGE_ADD("cartslot", vectrex_cart, NULL)
/* software lists */
MCFG_SOFTWARE_LIST_ADD("cart_list","vectrex")
MACHINE_CONFIG_END
ROM_START(vectrex)
ROM_REGION(0x18000,"maincpu", 0)
ROM_REGION(0x2000,"maincpu", 0)
ROM_SYSTEM_BIOS(0, "bios0", "exec rom")
ROMX_LOAD("exec_rom.bin", 0xe000, 0x2000, CRC(ba13fb57) SHA1(65d07426b520ddd3115d40f255511e0fd2e20ae7), ROM_BIOS(1) )
ROMX_LOAD("exec_rom.bin", 0x0000, 0x2000, CRC(ba13fb57) SHA1(65d07426b520ddd3115d40f255511e0fd2e20ae7), ROM_BIOS(1) )
ROM_SYSTEM_BIOS(1, "bios1", "exec rom intl 284001-1")
ROMX_LOAD("exec_rom_intl_284001-1.bin", 0xe000, 0x2000, CRC(6d2bd167) SHA1(77a220d5d98846b606dff608f7b5d00183ec3bab), ROM_BIOS(2) )
ROMX_LOAD("exec_rom_intl_284001-1.bin", 0x0000, 0x2000, CRC(6d2bd167) SHA1(77a220d5d98846b606dff608f7b5d00183ec3bab), ROM_BIOS(2) )
// The following fastboots are listed here for reference and documentation
// ROM_SYSTEM_BIOS(2, "bios2", "us-fastboot hack")
// ROMX_LOAD("us-fastboot.bin", 0xe000, 0x2000, CRa6e4dac4) SHA1(e0900be6d6858b985fd7f0999d864b2fceaf01a1), ROM_BIOS(3) )
// ROMX_LOAD("us-fastboot.bin", 0x0000, 0x2000, CRa6e4dac4) SHA1(e0900be6d6858b985fd7f0999d864b2fceaf01a1), ROM_BIOS(3) )
// ROM_SYSTEM_BIOS(3, "bios3", "intl-fastboot hack")
// ROMX_LOAD("intl-fastboot.bin", 0xe000, 0x2000, CRC(71dcf0f4) SHA1(2a257c5111f5cee841bd14acaa9df6496aaf3d8b), ROM_BIOS(4) )
// ROMX_LOAD("intl-fastboot.bin", 0x0000, 0x2000, CRC(71dcf0f4) SHA1(2a257c5111f5cee841bd14acaa9df6496aaf3d8b), ROM_BIOS(4) )
ROM_END
@ -218,7 +218,7 @@ static MACHINE_CONFIG_DERIVED( raaspec, vectrex )
MCFG_DEVICE_MODIFY("via6522_0")
MCFG_VIA6522_READPB_HANDLER(READ8(vectrex_state, vectrex_s1_via_pb_r))
MCFG_DEVICE_REMOVE("cart")
MCFG_DEVICE_REMOVE("cartslot")
MACHINE_CONFIG_END
ROM_START(raaspec)

View File

@ -12,6 +12,8 @@
#include "sound/ay8910.h"
#include "video/vector.h"
#include "bus/vectrex/slot.h"
#include "bus/vectrex/rom.h"
#define NVECT 10000
@ -44,6 +46,7 @@ public:
m_dac(*this, "dac"),
m_ay8912(*this, "ay8912"),
m_vector(*this, "vector"),
m_cart(*this, "cartslot"),
m_io_contr1x(*this, "CONTR1X"),
m_io_contr1y(*this, "CONTR1Y"),
m_io_contr2x(*this, "CONTR2X"),
@ -54,10 +57,10 @@ public:
m_io_lpenx(*this, "LPENX"),
m_io_lpeny(*this, "LPENY"),
m_io_coin(*this, "COIN"),
m_screen(*this, "screen") { }
m_screen(*this, "screen")
{ }
required_shared_ptr<UINT8> m_gce_vectorram;
int m_64k_cart;
int m_imager_status;
UINT32 m_beam_color;
unsigned char m_via_out[2];
@ -99,6 +102,7 @@ public:
DECLARE_WRITE8_MEMBER(raaspec_led_w);
DECLARE_DRIVER_INIT(vectrex);
virtual void video_start();
virtual void machine_start();
DECLARE_VIDEO_START(raaspec);
UINT32 screen_update_vectrex(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
TIMER_CALLBACK_MEMBER(vectrex_imager_change_color);
@ -126,6 +130,7 @@ protected:
required_device<dac_device> m_dac;
required_device<ay8910_device> m_ay8912;
required_device<vector_device> m_vector;
optional_device<vectrex_cart_slot_device> m_cart;
optional_ioport m_io_contr1x;
optional_ioport m_io_contr1y;
optional_ioport m_io_contr2x;
@ -142,7 +147,6 @@ protected:
void vectrex_multiplexer(int mux);
void vectrex_add_point(int x, int y, rgb_t color, int intensity);
void vectrex_add_point_stereo(int x, int y, rgb_t color, int intensity);
int vectrex_verify_cart(char *data);
};
#endif /* VECTREX_H_ */

View File

@ -42,19 +42,9 @@ static const double minestorm_3d_angles[3] = {0, 0.1692, 0.2086};
static const double narrow_escape_angles[3] = {0, 0.1631, 0.3305};
static const double crazy_coaster_angles[3] = {0, 0.1631, 0.3305};
static const double unknown_game_angles[3] = {0,0.16666666, 0.33333333};
int vectrex_state::vectrex_verify_cart(char *data)
{
/* Verify the file is accepted by the Vectrex bios */
if (!memcmp(data,"g GCE", 5))
return IMAGE_VERIFY_PASS;
else
return IMAGE_VERIFY_FAIL;
}
void vectrex_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
@ -87,71 +77,6 @@ void vectrex_state::device_timer(emu_timer &timer, device_timer_id id, int param
}
/*********************************************************************
ROM load and id functions
*********************************************************************/
DEVICE_IMAGE_LOAD_MEMBER(vectrex_state,vectrex_cart)
{
UINT8 *mem = memregion("maincpu")->base();
if (image.software_entry() == NULL)
{
image.fread( mem, 0x8000);
if (image.length() > 0x8000)
{
image.fread( mem+0x10000, 0x8000);
m_64k_cart = 1;
}
} else {
int size = image.get_software_region_length("rom");
memcpy(mem, image.get_software_region("rom"), size);
}
/* check image! */
if (vectrex_verify_cart((char*)mem) == IMAGE_VERIFY_FAIL)
{
logerror("Invalid image!\n");
return IMAGE_INIT_FAIL;
}
if (memcmp(mem + 0x06,"SRAM",4)) {
m_maincpu->space(AS_PROGRAM).unmap_write(0x0000, 0x7fff);
}
/* If VIA T2 starts, reset refresh timer.
This is the best strategy for most games. */
m_reset_refresh = 1;
m_imager_angles = narrow_escape_angles;
/* let's do this 3D detection with a strcmp using data inside the cart images */
/* slightly prettier than having to hardcode CRCs */
/* handle 3D Narrow Escape but skip the 2-d hack of it from Fred Taft */
if (!memcmp(mem + 0x11,"NARROW",6) && (((char*)mem)[0x39] == 0x0c))
{
m_imager_angles = narrow_escape_angles;
}
if (!memcmp(mem + 0x11,"CRAZY COASTER", 13))
{
m_imager_angles = crazy_coaster_angles;
}
if (!memcmp(mem + 0x11,"3D MINE STORM", 13))
{
m_imager_angles = minestorm_3d_angles;
/* Don't reset T2 each time it's written.
This would cause jerking in mine3. */
m_reset_refresh = 0;
}
return IMAGE_INIT_PASS;
}
/*********************************************************************
@ -377,12 +302,9 @@ WRITE8_MEMBER(vectrex_state::vectrex_psg_port_w)
DRIVER_INIT_MEMBER(vectrex_state,vectrex)
{
int i;
m_64k_cart = 0;
m_imager_angles = unknown_game_angles;
m_beam_color = rgb_t::white;
for (i=0; i<ARRAY_LENGTH(m_imager_colors); i++)
for (int i = 0; i < ARRAY_LENGTH(m_imager_colors); i++)
m_imager_colors[i] = rgb_t::white;
/*
@ -394,3 +316,39 @@ DRIVER_INIT_MEMBER(vectrex_state,vectrex)
m_gce_vectorram[0x7e] = machine().rand() | 1;
m_gce_vectorram[0x7f] = machine().rand() | 1;
}
void vectrex_state::machine_start()
{
if (m_cart && m_cart->exists())
{
// install cart accesses
if (m_cart->get_type() == VECTREX_SRAM)
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x0000, 0x7fff, read8_delegate(FUNC(vectrex_cart_slot_device::read_rom),(vectrex_cart_slot_device*)m_cart), write8_delegate(FUNC(vectrex_cart_slot_device::write_ram),(vectrex_cart_slot_device*)m_cart));
else
m_maincpu->space(AS_PROGRAM).install_read_handler(0x0000, 0x7fff, read8_delegate(FUNC(vectrex_cart_slot_device::read_rom),(vectrex_cart_slot_device*)m_cart));
// setup 3d imager and refresh timer
// If VIA T2 starts, reset refresh timer. This is the best strategy for most games.
m_reset_refresh = 1;
m_imager_angles = narrow_escape_angles;
// let's do this 3D detection
switch (m_cart->get_vec3d())
{
case VEC3D_MINEST:
m_imager_angles = minestorm_3d_angles;
// Don't reset T2 each time it's written. This would cause jerking in mine3.
m_reset_refresh = 0;
break;
case VEC3D_CCOAST:
m_imager_angles = crazy_coaster_angles;
break;
case VEC3D_NARROW:
m_imager_angles = narrow_escape_angles;
break;
default:
break;
}
}
}

View File

@ -575,17 +575,21 @@ MACHINES += PCCARD
#BUSES += ABCKB
#BUSES += ADAM
#BUSES += ADAMNET
#BUSES += APF
#BUSES += ARCADIA
#BUSES += BML3
#BUSES += BW2
#BUSES += C64
#BUSES += CBM2
#BUSES += CBMIEC
BUSES += CENTRONICS
#BUSES += CHANNELF
#BUSES += COCO
#BUSES += COLECO
#BUSES += COMPUCOLOR
#BUSES += COMX35
#BUSES += CPC
#BUSES += CRVISION
#BUSES += DMV
#BUSES += ECBBUS
#BUSES += ECONET
@ -596,6 +600,7 @@ BUSES += CENTRONICS
BUSES += GENERIC
#BUSES += IEEE488
#BUSES += IMI7000
#BUSES += INTV
#BUSES += IQ151
BUSES += ISA
#BUSES += ISBX
@ -607,6 +612,7 @@ BUSES += ISA
BUSES += NEOGEO
#BUSES += NES
#BUSES += NUBUS
#BUSES += O2
#BUSES += ORICEXT
#BUSES += PCE
#BUSES += PCI
@ -627,8 +633,10 @@ BUSES += SCSI
#BUSES += TI99PEB
#BUSES += TVC
#BUSES += VBOY
#BUSES += VC4000
#BUSES += VCS
#BUSES += VCS_CTRL
BUSES += VECTREX
#BUSES += VIC10
#BUSES += VIC20
#BUSES += VIDBRAIN
@ -636,6 +644,7 @@ BUSES += SCSI
#BUSES += VTECH_IOEXP
#BUSES += VTECH_MEMEXP
#BUSES += WANGPC
#BUSES += WSWAN
#BUSES += X68K
#BUSES += Z88
#BUSES += ZORRO

View File

@ -330,10 +330,8 @@ WRITE8_MEMBER(vectrex_state::v_via_pb_w)
}
/* Cartridge bank-switching */
if (m_64k_cart && ((data ^ m_via_out[PORTB]) & 0x40))
{
membank("bank1")->set_base(memregion("maincpu")->base() + ((data & 0x40) ? 0x10000 : 0x0000));
}
if (m_cart && ((data ^ m_via_out[PORTB]) & 0x40))
m_cart->write_bank(space, 0, data);
/* Sound */
if (data & 0x10)

View File

@ -699,6 +699,12 @@ void crvision_state::machine_start()
// state saving
save_item(NAME(m_keylatch));
save_item(NAME(m_joylatch));
if (m_cart->exists())
{
m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0x7fff, read8_delegate(FUNC(crvision_cart_slot_device::read_rom40),(crvision_cart_slot_device*)m_cart));
m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(crvision_cart_slot_device::read_rom80),(crvision_cart_slot_device*)m_cart));
}
}
void crvision_pal_state::machine_start()
@ -706,6 +712,12 @@ void crvision_pal_state::machine_start()
// state saving
save_item(NAME(m_keylatch));
save_item(NAME(m_joylatch));
if (m_cart->exists())
{
m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0x7fff, read8_delegate(FUNC(crvision_cart_slot_device::read_rom40),(crvision_cart_slot_device*)m_cart));
m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(crvision_cart_slot_device::read_rom80),(crvision_cart_slot_device*)m_cart));
}
}
/*-------------------------------------------------
@ -717,122 +729,29 @@ void laser2001_state::machine_start()
// state saving
save_item(NAME(m_keylatch));
save_item(NAME(m_joylatch));
if (m_cart->exists())
{
m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0x7fff, read8_delegate(FUNC(crvision_cart_slot_device::read_rom40),(crvision_cart_slot_device*)m_cart));
m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(crvision_cart_slot_device::read_rom80),(crvision_cart_slot_device*)m_cart));
}
}
/***************************************************************************
CARTRIDGE
***************************************************************************/
DEVICE_IMAGE_LOAD_MEMBER( crvision_state, crvision_cart )
{
UINT32 size;
dynamic_buffer temp_copy;
UINT8 *mem = memregion(M6502_TAG)->base();
address_space &program = m_maincpu->space(AS_PROGRAM);
if (image.software_entry() == NULL)
{
size = image.length();
temp_copy.resize(size);
image.fread( temp_copy, size);
}
else
{
size= image.get_software_region_length("rom");
temp_copy.resize(size);
memcpy(temp_copy, image.get_software_region("rom"), size);
}
switch (size)
{
case 0x1000: // 4K
memcpy(mem + 0x9000, temp_copy, 0x1000); // load 4KB at 0x9000
memcpy(mem + 0xb000, mem + 0x9000, 0x1000); // mirror 4KB at 0xb000
program.install_read_bank(0x8000, 0xbfff, 0, 0x2000, BANK_ROM1);
break;
case 0x1800: // 6K
memcpy(mem + 0x9000, temp_copy, 0x1000); // load lower 4KB at 0x9000
memcpy(mem + 0xb000, mem + 0x9000, 0x1000); // mirror lower 4KB at 0xb000
memcpy(mem + 0x8000, temp_copy + 0x1000, 0x0800); // load higher 2KB at 0x8000
memcpy(mem + 0x8800, mem + 0x8000, 0x0800); // mirror higher 2KB at 0x8800
memcpy(mem + 0xa000, mem + 0x8000, 0x0800); // mirror higher 2KB at 0xa000
memcpy(mem + 0xa800, mem + 0x8000, 0x0800); // mirror higher 2KB at 0xa800
program.install_read_bank(0x8000, 0xbfff, 0, 0x2000, BANK_ROM1);
break;
case 0x2000: // 8K
memcpy(mem + 0x8000, temp_copy, 0x2000); // load 8KB at 0x8000
memcpy(mem + 0xa000, mem + 0x8000, 0x2000); // mirror 8KB at 0xa000
program.install_read_bank(0x8000, 0xbfff, 0, 0x2000, BANK_ROM1);
break;
case 0x2800: // 10K
memcpy(mem + 0x8000, temp_copy, 0x2000); // load lower 8KB at 0x8000
memcpy(mem + 0xa000, mem + 0x8000, 0x2000); // mirror lower 8KB at 0xa000
memcpy(mem + 0x4000, temp_copy + 0x2000, 0x0800); // load higher 2KB at 0x4000
memcpy(mem + 0x4800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x4800
memcpy(mem + 0x5000, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x5000
memcpy(mem + 0x5800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x5800
memcpy(mem + 0x6000, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x6000
memcpy(mem + 0x6800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x6800
memcpy(mem + 0x7000, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x7000
memcpy(mem + 0x7800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x7800
program.install_read_bank(0x8000, 0xbfff, BANK_ROM1);
program.install_read_bank(0x4000, 0x7fff, BANK_ROM2);
break;
case 0x3000: // 12K
memcpy(mem + 0x8000, temp_copy, 0x2000); // load lower 8KB at 0x8000
memcpy(mem + 0xa000, mem + 0x8000, 0x2000); // mirror lower 8KB at 0xa000
memcpy(mem + 0x4000, temp_copy + 0x2000, 0x1000); // load higher 4KB at 0x4000
memcpy(mem + 0x5000, mem + 0x4000, 0x1000); // mirror higher 4KB at 0x5000
memcpy(mem + 0x6000, mem + 0x4000, 0x1000); // mirror higher 4KB at 0x6000
memcpy(mem + 0x7000, mem + 0x4000, 0x1000); // mirror higher 4KB at 0x7000
program.install_read_bank(0x8000, 0xbfff, BANK_ROM1);
program.install_read_bank(0x4000, 0x7fff, BANK_ROM2);
break;
case 0x4000: // 16K
memcpy(mem + 0xa000, temp_copy, 0x2000); // load lower 8KB at 0xa000
memcpy(mem + 0x8000, temp_copy + 0x2000, 0x2000); // load higher 8KB at 0x8000
program.install_read_bank(0x8000, 0xbfff, BANK_ROM1);
program.install_read_bank(0x4000, 0x7fff, BANK_ROM2);
break;
case 0x4800: // 18K
memcpy(mem + 0xa000, temp_copy, 0x2000); // load lower 8KB at 0xa000
memcpy(mem + 0x8000, temp_copy + 0x2000, 0x2000); // load higher 8KB at 0x8000
memcpy(mem + 0x4000, temp_copy + 0x4000, 0x0800); // load higher 2KB at 0x4000
memcpy(mem + 0x4800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x4800
memcpy(mem + 0x5000, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x5000
memcpy(mem + 0x5800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x5800
memcpy(mem + 0x6000, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x6000
memcpy(mem + 0x6800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x6800
memcpy(mem + 0x7000, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x7000
memcpy(mem + 0x7800, mem + 0x4000, 0x0800); // mirror higher 2KB at 0x7800
program.install_read_bank(0x8000, 0xbfff, BANK_ROM1);
program.install_read_bank(0x4000, 0x7fff, BANK_ROM2);
break;
default:
auto_free(machine(), temp_copy);
return IMAGE_INIT_FAIL;
}
membank(BANK_ROM1)->configure_entry(0, mem + 0x8000);
membank(BANK_ROM1)->set_entry(0);
membank(BANK_ROM2)->configure_entry(0, mem + 0x4000);
membank(BANK_ROM2)->set_entry(0);
return IMAGE_INIT_PASS;
}
/***************************************************************************
MACHINE DRIVERS
***************************************************************************/
static SLOT_INTERFACE_START(crvision_cart)
SLOT_INTERFACE_INTERNAL("crv_rom4k", CRVISION_ROM_4K)
SLOT_INTERFACE_INTERNAL("crv_rom6k", CRVISION_ROM_6K)
SLOT_INTERFACE_INTERNAL("crv_rom8k", CRVISION_ROM_8K)
SLOT_INTERFACE_INTERNAL("crv_rom10k", CRVISION_ROM_10K)
SLOT_INTERFACE_INTERNAL("crv_rom12k", CRVISION_ROM_12K)
SLOT_INTERFACE_INTERNAL("crv_rom16k", CRVISION_ROM_16K)
SLOT_INTERFACE_INTERNAL("crv_rom18k", CRVISION_ROM_18K)
SLOT_INTERFACE_END
/*-------------------------------------------------
MACHINE_CONFIG_START( creativision, crvision_state )
-------------------------------------------------*/
@ -872,11 +791,7 @@ static MACHINE_CONFIG_START( creativision, crvision_state )
MCFG_SOUND_ROUTE(1, "mono", 0.25)
// cartridge
MCFG_CARTSLOT_ADD("cart")
MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
MCFG_CARTSLOT_MANDATORY
MCFG_CARTSLOT_INTERFACE("crvision_cart")
MCFG_CARTSLOT_LOAD(crvision_state, crvision_cart)
MCFG_CRVISION_CARTRIDGE_ADD("cartslot", crvision_cart, NULL)
// internal ram
MCFG_RAM_ADD(RAM_TAG)
@ -884,7 +799,7 @@ static MACHINE_CONFIG_START( creativision, crvision_state )
MCFG_RAM_EXTRA_OPTIONS("15K") // 16K expansion (lower 14K available only, upper 2K shared with BIOS ROM)
// software lists
MCFG_SOFTWARE_LIST_ADD("cart_list","crvision")
MCFG_SOFTWARE_LIST_ADD("cart_list", "crvision")
MACHINE_CONFIG_END
/*-------------------------------------------------
@ -958,10 +873,7 @@ static MACHINE_CONFIG_START( lasr2001, laser2001_state )
MCFG_SOUND_ROUTE(1, "mono", 0.25)
// cartridge
MCFG_CARTSLOT_ADD("cart")
MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
MCFG_CARTSLOT_INTERFACE("crvision_cart")
MCFG_CARTSLOT_LOAD(crvision_state, crvision_cart)
MCFG_CRVISION_CARTRIDGE_ADD("cartslot", crvision_cart, NULL)
// internal ram
MCFG_RAM_ADD(RAM_TAG)

View File

@ -6,11 +6,12 @@
#include "emu.h"
#include "cpu/m6502/m6502.h"
#include "imagedev/cartslot.h"
#include "imagedev/cassette.h"
#include "machine/6821pia.h"
#include "machine/buffer.h"
#include "bus/centronics/ctronics.h"
#include "bus/crvision/slot.h"
#include "bus/crvision/rom.h"
#include "machine/ram.h"
#include "sound/sn76496.h"
#include "sound/wave.h"
@ -35,6 +36,7 @@ public:
m_pia(*this, PIA6821_TAG),
m_psg(*this, SN76489_TAG),
m_cassette(*this, "cassette"),
m_cart(*this, "cartslot"),
m_cent_data_out(*this, "cent_data_out"),
m_ram(*this, RAM_TAG)
{
@ -44,6 +46,7 @@ public:
required_device<pia6821_device> m_pia;
required_device<sn76496_base_device> m_psg;
required_device<cassette_image_device> m_cassette;
required_device<crvision_cart_slot_device> m_cart;
required_device<output_latch_device> m_cent_data_out;
required_device<ram_device> m_ram;
@ -53,7 +56,6 @@ public:
DECLARE_READ8_MEMBER( pia_pa_r );
DECLARE_READ8_MEMBER( pia_pb_r );
DECLARE_INPUT_CHANGED_MEMBER( trigger_nmi );
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( crvision_cart );
UINT8 read_keyboard(int pa);

View File

@ -582,6 +582,7 @@ BUSES += COLECO
BUSES += COMPUCOLOR
BUSES += COMX35
BUSES += CPC
BUSES += CRVISION
BUSES += DMV
BUSES += ECBBUS
BUSES += ECONET
@ -628,6 +629,7 @@ BUSES += VBOY
BUSES += VC4000
BUSES += VCS
BUSES += VCS_CTRL
BUSES += VECTREX
BUSES += VIC10
BUSES += VIC20
BUSES += VIDBRAIN