summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2021-10-26 18:11:54 +1100
committer Robbbert <Robbbert@users.noreply.github.com>2021-10-26 18:11:54 +1100
commit94b51d9776fe0f3bdd0878b710d4b6bccf17cd47 (patch)
tree4d42f07b61bc66486974429071dc73c1346b2dc5
parent71537cb4dd2edb4e460b8e1517948a72b6b6d84b (diff)
parent60706c1e933d8533232157241a576f96a229380e (diff)
Merge remote-tracking branch 'upstream/master'
-rw-r--r--hash/apple2_flop_clcracked.xml24
-rw-r--r--hash/apple2_flop_orig.xml48
-rw-r--r--hash/apple2gs_flop_orig.xml23
-rw-r--r--hash/nes.xml130
-rw-r--r--src/devices/cpu/powerpc/ppc_dasm.cpp2
-rw-r--r--src/devices/cpu/powerpc/ppc_dasm.h11
-rw-r--r--src/mame/drivers/djmain.cpp24
-rw-r--r--src/mame/drivers/facit4440.cpp101
-rw-r--r--src/mame/drivers/macp.cpp386
-rw-r--r--src/mame/drivers/pce.cpp12
-rw-r--r--src/mame/layout/macp.lay134
-rw-r--r--src/mame/mame.lst3
12 files changed, 788 insertions, 110 deletions
diff --git a/hash/apple2_flop_clcracked.xml b/hash/apple2_flop_clcracked.xml
index 9bc531a6c43..7571dcd34c8 100644
--- a/hash/apple2_flop_clcracked.xml
+++ b/hash/apple2_flop_clcracked.xml
@@ -46372,4 +46372,28 @@ license:CC0
</part>
</software>
+ <software name="wntgames">
+ <description>Winter Games (cleanly cracked)</description>
+ <year>1984</year>
+ <publisher>Epyx</publisher>
+ <info name="release" value="2016-07-26"/>
+ <!-- "Winter Games" is a 1985 sports game developed by Action Graphics. -->
+ <!-- Disks re-cracked on August 28th, 2021 due to subtle
+ timing difference between Disk II and IWM hardware that resulted
+ in the previous version not working on some machines. -->
+
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="Side A"/>
+ <dataarea name="flop" size="143360">
+ <rom name="winter games (4am crack) side a.dsk" size="143360" crc="ad1360c5" sha1="d7c3b67d3ed5336f68a232eaa84a2766eabc4c1e" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_5_25">
+ <feature name="part_id" value="Side B"/>
+ <dataarea name="flop" size="143360">
+ <rom name="winter games (4am crack) side b.dsk" size="143360" crc="b8d713fd" sha1="e2c6b9b0dfdf2f23c59c03ec803b0ffb79135482" />
+ </dataarea>
+ </part>
+ </software>
+
</softwarelist>
diff --git a/hash/apple2_flop_orig.xml b/hash/apple2_flop_orig.xml
index 349709b58c2..c4a84947f91 100644
--- a/hash/apple2_flop_orig.xml
+++ b/hash/apple2_flop_orig.xml
@@ -17932,4 +17932,52 @@ license:CC0
</part>
</software>
+ <software name="rboots4035">
+ <description>Rocky's Boots (Version 4.1) (800K 3.5")</description>
+ <year>1988</year>
+ <publisher>The Learning Company</publisher>
+ <info name="release" value="2021-10-10"/>
+ <sharedfeat name="compatibility" value="A2E,A2EE,A2C,A2GS"/>
+ <!-- It requires a Apple IIgs, //c+, or //e or 64K ][+ with a compatible drive controller card. -->
+ <!--"Rocky's Boots" is a 1988 educational game developed by Warren Robinett and Leslie Grimm, and distributed by The Learning Company. It requires a Apple IIgs, //c+, or //e or 64K ][+ with a compatible drive controller card.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296202">
+ <rom name="rocky's boots v4.1 800k.woz" size="1296202" crc="9547ceae" sha1="9ed4042968ce40c1d5049befe27ecc74d81e4aea"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="brdstale3">
+ <description>The Bard's Tale III: Thief of Fate (800K 3.5")</description>
+ <year>1988</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="release" value="2021-10-12"/>
+ <sharedfeat name="compatibility" value="A2E,A2EE,A2C,A2GS"/>
+ <!-- It requires a Apple IIgs, //c+, or //e or 64K ][+ with a compatible drive controller card. -->
+ <!--"The Bard's Tale III: Thief of Fate" is a 1988 roleplaying game developed by Rebecca Heineman and distributed by Electronic Arts. It requires a Apple IIgs, //c+, or //e or 64K ][+ with a compatible drive controller card.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296176">
+ <rom name="the bard's tale iii 800k.woz" size="1296176" crc="d388b56d" sha1="7e45ae4673d40093f535606d13d032cadaa410ac"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="newprntshop">
+ <description>The New Print Shop (800K 3.5")</description>
+ <year>1990</year>
+ <publisher>Broderbund Software</publisher>
+ <info name="release" value="2021-10-12"/>
+ <sharedfeat name="compatibility" value="A2E,A2EE,A2C,A2GS"/>
+ <!-- It requires a Apple IIgs, //c+, or 128K //e with a compatible drive controller card. -->
+ <!--"The New Print Shop" is a 1990 graphics program developed by Don Lloyd and distributed by Broderbund Software. It requires a Apple IIgs, //c+, or 128K //e with a compatible drive controller card.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296152">
+ <rom name="the new print shop 800k.woz" size="1296152" crc="df2c9138" sha1="d5f690d14861672cbefb9ab9a1ad275a087979e2"/>
+ </dataarea>
+ </part>
+ </software>
+
</softwarelist>
diff --git a/hash/apple2gs_flop_orig.xml b/hash/apple2gs_flop_orig.xml
index fd0170e8f25..169964ef020 100644
--- a/hash/apple2gs_flop_orig.xml
+++ b/hash/apple2gs_flop_orig.xml
@@ -3459,4 +3459,27 @@ license:CC0
</part>
</software>
+ <software name="kingqst">
+ <description>King's Quest: Quest for the Crown</description>
+ <year>1987</year>
+ <publisher>Sierra On-Line</publisher>
+ <info name="release" value="2021-10-09"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"King's Quest" is a 1987 adventure game designed and written by Roberta Williams; developed by Charles Tingley, Ken MacNeill, and Chris Iden; with graphics by Doug MacNeill, Greg Rowland, and Chris Iden; ported to the Apple IIgs by Carlos Escobar; with music by Al Lowe; distributed by Sierra On-Line. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296282">
+ <rom name="king's quest iigs - disk 1.woz" size="1296282" crc="813e5b11" sha1="8e61a96821460da26d8e9c567e358ec18d15c535"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1298330">
+ <rom name="king's quest iigs - disk 2.woz" size="1298330" crc="832a3043" sha1="7fe827331b55408b478ffb45330a09de73234ebb"/>
+ </dataarea>
+ </part>
+ </software>
+
</softwarelist>
diff --git a/hash/nes.xml b/hash/nes.xml
index 7720e769665..0c8d0d7f7e5 100644
--- a/hash/nes.xml
+++ b/hash/nes.xml
@@ -4526,7 +4526,7 @@ license:CC0
</part>
</software>
- <software name="blackbas" supported="partial">
+ <software name="blackbas" supported="no">
<description>The Black Bass (USA)</description>
<year>1989</year>
<publisher>Hot-B</publisher>
@@ -4535,7 +4535,7 @@ license:CC0
<part name="cart" interface="nes_cart">
<feature name="slot" value="uxrom" />
<feature name="pcb" value="NES-UNROM" />
- <feature name="mirroring" value="horizontal" /> <!-- CHECK! vertical according to bootgod... -->
+ <feature name="mirroring" value="vertical" />
<dataarea name="prg" size="131072">
<rom name="nes-bo-0 prg" size="131072" crc="1d0f4d6b" sha1="9c3bcd2bf8224b158b6ff2e47b67cda66cb4ac39" offset="00000" />
</dataarea>
@@ -25159,6 +25159,7 @@ license:CC0
</part>
</software>
+<!-- FIXME: This game works, but it depends on RAM at byte 0x11 being non-zero at power-up -->
<software name="minnatab" supported="no">
<description>Minna no Taabou no Nakayoshi Daisakusen (Jpn)</description>
<year>1991</year>
@@ -45185,7 +45186,7 @@ Also notice that VRAM, WRAM & mirror are probably incorrect for some of these se
</part>
</software>
- <software name="blackbs2" cloneof="blackbas" supported="partial">
+ <software name="blackbs2" cloneof="blackbas" supported="no">
<description>The Black Bass II (Jpn)</description>
<year>1988</year>
<publisher>Hot-B</publisher>
@@ -45195,7 +45196,7 @@ Also notice that VRAM, WRAM & mirror are probably incorrect for some of these se
<part name="cart" interface="nes_cart">
<feature name="slot" value="uxrom" />
<feature name="pcb" value="NES-UNROM" />
- <feature name="mirroring" value="horizontal" />
+ <feature name="mirroring" value="vertical" />
<dataarea name="prg" size="131072">
<rom name="black bass 2, the (japan).prg" size="131072" crc="99a62e47" sha1="7a7a71a08b19d3357ac59187eb108887831752b4" offset="00000" status="baddump" />
</dataarea>
@@ -45326,9 +45327,8 @@ Also notice that VRAM, WRAM & mirror are probably incorrect for some of these se
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
- <!-- 8k WRAM on cartridge, battery backed up -->
- <dataarea name="bwram" size="8192">
- <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ <!-- 8k WRAM on cartridge -->
+ <dataarea name="wram" size="8192">
</dataarea>
</part>
</software>
@@ -45605,6 +45605,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
+ <!-- 8k WRAM on cartridge -->
+ <dataarea name="wram" size="8192">
+ </dataarea>
</part>
</software>
@@ -45701,8 +45704,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
- <!-- 8k WRAM on cartridge -->
- <dataarea name="wram" size="8192">
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
</dataarea>
</part>
</software>
@@ -45740,6 +45744,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="131072">
<rom name="columbus - ougon no yoake (japan).prg" size="131072" crc="6c5dbedf" sha1="826629943ea71c7a4a38bd2e4d94f8d942214aff" offset="00000" status="baddump" />
</dataarea>
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ </dataarea>
</part>
</software>
@@ -45756,6 +45764,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="131072">
<rom name="columbus - ougon no yoake (japan) (sample).prg" size="131072" crc="fa186bd9" sha1="0f3e785ffae083ad6232c9e2df293f7f8000deae" offset="00000" status="baddump" />
</dataarea>
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ </dataarea>
</part>
</software>
@@ -45801,7 +45813,7 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="131072">
<rom name="cosmo police galivan (japan).prg" size="131072" crc="720fff06" sha1="03d6d18ea4e7d3ac087dc51e7aba4ca4730714cf" offset="00000" status="baddump" />
</dataarea>
- <dataarea name="bwram" size="8192"> <!-- TODO: verify on cart, but without it game doesn't start or continue after title screen -->
+ <dataarea name="bwram" size="8192">
<rom value="0x00" size="8192" offset="0" loadflag="fill" />
</dataarea>
</part>
@@ -46232,6 +46244,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="262144">
<rom name="dragon wars (japan).prg" size="262144" crc="615d0a50" sha1="a56fe4ae5ec14e65acfd8223885b7781c1a74b39" offset="00000" status="baddump" />
</dataarea>
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ </dataarea>
</part>
</software>
@@ -46248,6 +46264,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="262144">
<rom name="dragon wars (usa) (proto).prg" size="262144" crc="f667898b" sha1="c04a7e95565388267ea7aa3e0c1f6de7ecb50ba9" offset="00000" status="baddump" />
</dataarea>
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ </dataarea>
</part>
</software>
@@ -46338,6 +46358,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="262144">
<rom name="earthbound (usa) (proto).prg" size="262144" crc="f85bbf3e" sha1="f2b545345af20b1df338c46ac3c7de2ffd1eaf69" offset="00000" status="baddump" />
</dataarea>
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ </dataarea>
</part>
</software>
@@ -46509,8 +46533,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="131072">
<rom name="famicom igo nyuumon (japan).prg" size="131072" crc="831f8294" sha1="01bad3a8c278c2f9aee8a561a917dd61883a2069" offset="00000" status="baddump" />
</dataarea>
- <!-- 8k WRAM on cartridge -->
- <dataarea name="wram" size="8192">
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
</dataarea>
</part>
</software>
@@ -47448,8 +47473,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="131072">
<rom name="j.league fighting soccer - the king of ace strikers (japan).prg" size="131072" crc="1f2f4861" sha1="74000b4f3363527f7023202211632974157097e6" offset="00000" status="baddump" />
</dataarea>
- <!-- 8k WRAM on cartridge -->
- <dataarea name="wram" size="8192">
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
</dataarea>
</part>
</software>
@@ -47492,6 +47518,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ </dataarea>
</part>
</software>
@@ -47613,6 +47643,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ </dataarea>
</part>
</software>
@@ -48062,6 +48096,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="131072">
<rom name="magician (usa) (beta2).prg" size="131072" crc="4424d54f" sha1="f4581608792b1afe6805df3d17670734b93dd0f6" offset="00000" status="baddump" />
</dataarea>
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ </dataarea>
</part>
</software>
@@ -48318,6 +48356,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ </dataarea>
</part>
</software>
@@ -48410,6 +48452,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="131072">
<rom name="mickey mouse - dream balloon (usa) (proto).prg" size="131072" crc="bd5b170a" sha1="d90e6ac71823cc8bc337efcfafe37b2cb7178025" offset="00000" status="baddump" />
</dataarea>
+ <!-- 8k WRAM on cartridge -->
+ <dataarea name="wram" size="8192">
+ </dataarea>
</part>
</software>
@@ -48503,6 +48548,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="262144">
<rom name="miracle piano teaching system, the (germany).prg" size="262144" crc="c19b77f5" sha1="ed961fe21ecce26b15c2722a91080da39f4e394d" offset="00000" status="baddump" />
</dataarea>
+ <!-- 8k WRAM on cartridge -->
+ <dataarea name="wram" size="8192">
+ </dataarea>
</part>
</software>
@@ -48642,8 +48690,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
- <!-- 8k WRAM on cartridge -->
- <dataarea name="wram" size="8192">
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
</dataarea>
</part>
</software>
@@ -48756,6 +48805,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="131072">
<rom name="nakayoshi to issho (japan).prg" size="131072" crc="8ab9e1ea" sha1="a88bd4956d45b99a4dfd9fd1ea8d78031974372a" offset="00000" status="baddump" />
</dataarea>
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ </dataarea>
</part>
</software>
@@ -48814,8 +48867,8 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
</part>
</software>
- <software name="nihonmk">
- <description>Nihonichi no Mei Kantoku (Jpn)</description>
+ <software name="nipponmk">
+ <description>Nippon'ichi no Meikantoku (Jpn)</description>
<year>1990</year>
<publisher>Asmik</publisher>
<info name="serial" value="ASM-N8"/>
@@ -48830,6 +48883,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ </dataarea>
</part>
</software>
@@ -49207,6 +49264,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="131072">
<rom name="pirates (europe).prg" size="131072" crc="ddad2460" sha1="63df8b410ce3af69e3f6c6c78671533863736954" offset="00000" status="baddump" />
</dataarea>
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ </dataarea>
</part>
</software>
@@ -49224,6 +49285,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="131072">
<rom name="pirates (germany).prg" size="131072" crc="d3d1b86c" sha1="befc9fb1e862e95b3c6face3c4d3925b242b30ef" offset="00000" status="baddump" />
</dataarea>
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ </dataarea>
</part>
</software>
@@ -49275,6 +49340,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ </dataarea>
</part>
</software>
@@ -49774,6 +49843,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="131072">
<rom name="scarabeus (usa) (sample).prg" size="131072" crc="6caea8e8" sha1="6f653eadd2360fc764b0997486b4c95b3ad80c06" offset="00000" status="baddump" />
</dataarea>
+ <!-- 8k WRAM on cartridge -->
+ <dataarea name="wram" size="8192">
+ </dataarea>
</part>
</software>
@@ -49867,6 +49939,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
+ <!-- 8k WRAM on cartridge -->
+ <dataarea name="wram" size="8192">
+ </dataarea>
</part>
</software>
@@ -49886,6 +49961,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
+ <!-- 8k WRAM on cartridge -->
+ <dataarea name="wram" size="8192">
+ </dataarea>
</part>
</software>
@@ -50305,6 +50383,9 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
+ <!-- 8k WRAM on cartridge -->
+ <dataarea name="wram" size="8192">
+ </dataarea>
</part>
</software>
@@ -50407,6 +50488,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
</dataarea>
+ <!-- 8k WRAM on cartridge, battery backed up -->
+ <dataarea name="bwram" size="8192">
+ <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ </dataarea>
</part>
</software>
@@ -51078,7 +51163,7 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
</software>
<software name="ushio">
- <description>Ushio to Tora - Shinen no Daiyou (Jpn)</description>
+ <description>Ushio to Tora - Shin'en no Taiyou (Jpn)</description>
<year>1993</year>
<publisher>Yutaka</publisher>
<info name="serial" value="SHI-RA"/>
@@ -51088,10 +51173,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<feature name="slot" value="txrom" />
<feature name="pcb" value="NES-TLROM" />
<dataarea name="chr" size="262144">
- <rom name="ushio to tora - shinen no daiyou (japan).chr" size="262144" crc="3acfae6e" sha1="322b691efa23db0b18eb9052499a5aaa2b30e38c" offset="00000" status="baddump" />
+ <rom name="ushio to tora - shinen no taiyou (japan).chr" size="262144" crc="3acfae6e" sha1="322b691efa23db0b18eb9052499a5aaa2b30e38c" offset="00000" status="baddump" />
</dataarea>
<dataarea name="prg" size="131072">
- <rom name="ushio to tora - shinen no daiyou (japan).prg" size="131072" crc="fe4e5b11" sha1="2a7691e9b7f1b3c31dfbaba8756208d8d8882828" offset="00000" status="baddump" />
+ <rom name="ushio to tora - shinen no taiyou (japan).prg" size="131072" crc="fe4e5b11" sha1="2a7691e9b7f1b3c31dfbaba8756208d8d8882828" offset="00000" status="baddump" />
</dataarea>
<!-- 8k WRAM on cartridge, battery backed up -->
<dataarea name="bwram" size="8192">
@@ -81746,6 +81831,9 @@ be better to redump them properly. -->
<dataarea name="prg" size="524288">
<rom name="7-in-1 (k7603)[p1].prg" size="524288" crc="d34a7815" sha1="5bdaa47849484ecb14d2fb1889db94f9133812d6" offset="00000" status="baddump" />
</dataarea>
+ <!-- 8k WRAM on cartridge -->
+ <dataarea name="wram" size="8192">
+ </dataarea>
</part>
</software>
diff --git a/src/devices/cpu/powerpc/ppc_dasm.cpp b/src/devices/cpu/powerpc/ppc_dasm.cpp
index bdebe0b428b..d43f00cbb21 100644
--- a/src/devices/cpu/powerpc/ppc_dasm.cpp
+++ b/src/devices/cpu/powerpc/ppc_dasm.cpp
@@ -28,7 +28,7 @@
* and print instructions.
*/
-constexpr int I_COMMON = I_POWER | I_POWERPC;
+constexpr int I_COMMON = powerpc_disassembler::I_POWER | powerpc_disassembler::I_POWERPC;
const powerpc_disassembler::IDESCR powerpc_disassembler::itab[] =
{
diff --git a/src/devices/cpu/powerpc/ppc_dasm.h b/src/devices/cpu/powerpc/ppc_dasm.h
index cdf9c7e6720..c837089319f 100644
--- a/src/devices/cpu/powerpc/ppc_dasm.h
+++ b/src/devices/cpu/powerpc/ppc_dasm.h
@@ -20,15 +20,16 @@
#pragma once
-enum implementation : int
-{
- I_POWER = 1 << 0,
- I_POWERPC = 1 << 1,
-};
class powerpc_disassembler : public util::disasm_interface
{
public:
+ enum implementation : int
+ {
+ I_POWER = 1 << 0,
+ I_POWERPC = 1 << 1,
+ };
+
powerpc_disassembler(bool powerpc = true)
: m_implementation(powerpc ? I_POWERPC : I_POWER)
{
diff --git a/src/mame/drivers/djmain.cpp b/src/mame/drivers/djmain.cpp
index 6a253a3de70..4613b9f2c18 100644
--- a/src/mame/drivers/djmain.cpp
+++ b/src/mame/drivers/djmain.cpp
@@ -1832,6 +1832,27 @@ ROM_END
ROM_START( popn1 )
ROM_REGION( 0x100000, "maincpu", 0 ) /* MC68EC020FG25 MPU */
+ ROM_LOAD16_BYTE( "803t_a01.6a", 0x000000, 0x80000, CRC(e85032bc) SHA1(625ac755a77a861ecede766d77fbecb29683844b) )
+ ROM_LOAD16_BYTE( "803j_a02.8a", 0x000001, 0x80000, CRC(17e90be0) SHA1(8857d46d63b7cd97aed5c7a5cf804fe5311255ac) )
+
+ ROM_REGION( 0x200000, "gfx1", 0) /* SPRITE */
+ ROM_LOAD16_BYTE( "803t_a03.19a", 0x000000, 0x80000, CRC(a0970b32) SHA1(4bf06f977f67f13d0994e80021faaefed015ca1c) )
+ ROM_LOAD16_BYTE( "803t_a04.20a", 0x000001, 0x80000, CRC(a158b950) SHA1(535d994a68fe56c8a93d460e5272b1a0b081383d) )
+ ROM_LOAD16_BYTE( "803t_a05.22a", 0x100000, 0x80000, CRC(8a23c18d) SHA1(714b68a3112dff52feba6a50ae15c02d041b1def) )
+ ROM_LOAD16_BYTE( "803t_a06.24a", 0x100001, 0x80000, CRC(bd6450ff) SHA1(bb89c65d1b0e38c0a26ec4cccd35103583efff45) )
+
+ ROM_REGION( 0x200000, "k056832", 0 ) /* TILEMAP */
+ ROM_LOAD16_BYTE( "803t_a07.22d", 0x000000, 0x80000, CRC(4c97dbf0) SHA1(c33f84e2c1a59294413163a5546cb2fe092e42d1) )
+ ROM_LOAD16_BYTE( "803t_a08.23d", 0x000001, 0x80000, CRC(cc6b21d3) SHA1(eac3b92bc392265df08b0311320c4e23f257c58b) )
+ ROM_LOAD16_BYTE( "803t_a09.25d", 0x100000, 0x80000, CRC(45ab3978) SHA1(c34b800dfb14affcb705dffa566d046a6d1e7c7c) )
+ ROM_LOAD16_BYTE( "803t_a10.27d", 0x100001, 0x80000, CRC(a487ad02) SHA1(ca9edb611ddf2f1e7d42b049ce867b173fce3634) )
+
+ DISK_REGION( "ata:0:hdd:image" ) /* IDE HARD DRIVE */
+ DISK_IMAGE( "803_ta_hdd", 0, SHA1(be833a3c0f1e5953271fa7d8d6e81211fbe9710f) ) /* GQ803AA pop'n music ver1.01 1998/10/14 (C) KONAMI */
+ROM_END
+
+ROM_START( popn1a )
+ ROM_REGION( 0x100000, "maincpu", 0 ) /* MC68EC020FG25 MPU */
ROM_LOAD16_BYTE( "803aaa01.6a", 0x000000, 0x80000, CRC(70466eff) SHA1(d59f97a6882ad65afa3b5de491d44bb4d839d286) )
ROM_LOAD16_BYTE( "803aaa02.8a", 0x000001, 0x80000, CRC(c102c909) SHA1(630a74ccec78d36adaba38a85ed6a0e45dca96a4) )
@@ -2237,7 +2258,8 @@ GAME( 2001, bm6thmix, 0, djmainj, bm6thmix, djmain_state, init_bm6thmix,
GAME( 2001, bm7thmix, 0, djmainj, bm6thmix, djmain_state, init_bm7thmix, ROT0, "Konami", "beatmania 7th MIX (ver JA-B)", 0 )
GAME( 2002, bmfinal, 0, djmainj, bm6thmix, djmain_state, init_bmfinal, ROT0, "Konami", "beatmania THE FINAL (ver JA-A)", 0 )
-GAME( 1998, popn1, 0, djmaina, popn1, djmain_state, init_beatmania, ROT0, "Konami", "Pop'n Music 1 (ver AA-A, HDD 1.00)", 0 )
+GAME( 1998, popn1, 0, djmaina, popn1, djmain_state, init_beatmania, ROT0, "Konami", "Pop'n Music 1 (ver TA-A, HDD 1.01)", 0 )
+GAME( 1998, popn1a, popn1, djmaina, popn1, djmain_state, init_beatmania, ROT0, "Konami", "Pop'n Music 1 (ver AA-A, HDD 1.00)", 0 )
GAME( 1998, popn1k, popn1, djmaina, popn1, djmain_state, init_beatmania, ROT0, "Konami", "Pop'n Music 1 (ver KA-A, HDD 1.01)", 0 ) // KA-A based on filenames provided, no warning message
GAME( 1998, popn1j, popn1, djmainj, popn1, djmain_state, init_beatmania, ROT0, "Konami", "Pop'n Music 1 (ver JA-A, HDD 1.00)", 0 )
GAME( 1999, popn2, 0, djmainj, popn2, djmain_state, init_beatmania, ROT0, "Konami", "Pop'n Music 2 (ver JA-A)", 0 )
diff --git a/src/mame/drivers/facit4440.cpp b/src/mame/drivers/facit4440.cpp
index 84c6d8cc8db..d203d085319 100644
--- a/src/mame/drivers/facit4440.cpp
+++ b/src/mame/drivers/facit4440.cpp
@@ -16,25 +16,31 @@
Several non-ANSI emulation modes are also available.
An OEM customized version was sold by Norsk Data AS as the ND 319 Twist.
+ Micro-Term apparently distributed this terminal in the US.
The timing of the display circuit seems a bit uncertain. Promotional
information claims that it has a 40 MHz bandwidth, but this may be only
a nominal maximum rating since the only high-frequency oscillator seen
- on the PCB is 32 MHz. It is unclear how the CRTC parameters and this
- value can produce the documented 65 Hz refresh rate. The actual circuit
- also generates alarming levels of electromagnetic radiation.
+ on the PCB is 32 MHz, and schematics label this as 30 MHz. It is unclear
+ how the CRTC parameters and this value can produce the documented 65 Hz
+ refresh rate. The actual circuit also generates alarming levels of
+ electromagnetic radiation.
****************************************************************************/
#include "emu.h"
-//#include "bus/rs232/rs232.h"
+#include "bus/rs232/rs232.h"
#include "cpu/z80/z80.h"
+#include "cpu/m6800/m6801.h"
#include "machine/clock.h"
#include "machine/er1400.h"
+#include "machine/ripple_counter.h"
#include "machine/z80ctc.h"
#include "machine/z80sio.h"
+#include "sound/spkrdev.h"
#include "video/mc6845.h"
#include "screen.h"
+#include "speaker.h"
class facit4440_state : public driver_device
{
@@ -42,8 +48,11 @@ public:
facit4440_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
- , m_earom(*this, "earom%u", 0U)
+ , m_earom(*this, "earom%u", 1U)
, m_crtc(*this, "crtc")
+ , m_bellctr(*this, "bellctr")
+ , m_rs232(*this, "rs232")
+ , m_printer(*this, "printer")
, m_test(*this, "TEST")
, m_orientation(*this, "ORIENTATION")
, m_chargen(*this, "chargen")
@@ -74,6 +83,9 @@ private:
required_device<z80_device> m_maincpu;
required_device_array<er1400_device, 2> m_earom;
required_device<mc6845_device> m_crtc;
+ required_device<ripple_counter_device> m_bellctr;
+ required_device<rs232_port_device> m_rs232;
+ required_device<rs232_port_device> m_printer;
required_ioport m_test;
required_ioport m_orientation;
@@ -97,8 +109,8 @@ void facit4440_state::earom_latch_w(u8 data)
m_earom[0]->clock_w(BIT(data, 5));
m_earom[1]->clock_w(BIT(data, 5));
- m_earom[0]->data_w(BIT(data, 1));
- m_earom[1]->data_w(BIT(data, 0));
+ m_earom[0]->data_w(BIT(data, 0));
+ m_earom[1]->data_w(BIT(data, 1));
for (auto &earom : m_earom)
{
@@ -112,7 +124,8 @@ void facit4440_state::control_2000_w(u8 data)
{
m_control_latch[0] = data;
- if (!BIT(m_control_latch[0], 5))
+ m_bellctr->reset_w(BIT(data, 5));
+ if (!BIT(m_control_latch[0], 6))
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
}
@@ -130,9 +143,10 @@ u8 facit4440_state::misc_status_r()
{
u8 status = m_test->read() << 6;
- status |= m_earom[0]->data_r() << 4;
- status |= m_earom[1]->data_r() << 3;
+ status |= m_earom[1]->data_r() << 4;
+ status |= m_earom[0]->data_r() << 3;
+ status |= m_crtc->hsync_r() << 2;
status |= m_crtc->vsync_r() << 1;
status |= m_orientation->read();
@@ -147,6 +161,7 @@ WRITE_LINE_MEMBER(facit4440_state::vsync_w)
MC6845_UPDATE_ROW(facit4440_state::update_row)
{
+ // FIXME: MA does not determine video addressing at all here
offs_t base = ma / 5 * 6;
u32 *px = &bitmap.pix(y);
@@ -191,6 +206,8 @@ void facit4440_state::io_map(address_map &map)
void facit4440_state::machine_start()
{
+ subdevice<z80dart_device>("kbdart")->rxb_w(0);
+
m_control_latch[0] = m_control_latch[1] = m_control_latch[2] = 0;
save_item(NAME(m_control_latch));
@@ -198,10 +215,10 @@ void facit4440_state::machine_start()
static INPUT_PORTS_START(facit4440)
PORT_START("TEST")
- PORT_CONFNAME(3, 0, "Test Mode")
- PORT_CONFSETTING(0, DEF_STR(Off))
- PORT_CONFSETTING(3, DEF_STR(On))
- PORT_CONFSETTING(2, "Burn In")
+ PORT_DIPNAME(3, 0, "Test Mode") PORT_DIPLOCATION("W7/W4:1,2")
+ PORT_DIPSETTING(0, DEF_STR(Off))
+ PORT_DIPSETTING(3, DEF_STR(On))
+ PORT_DIPSETTING(2, "Burn In")
PORT_START("ORIENTATION")
PORT_CONFNAME(1, 1, "Orientation")
@@ -219,16 +236,15 @@ static const z80_daisy_config daisy_chain[] =
void facit4440_state::facit4440(machine_config &config)
{
- constexpr u32 CH_WIDTH = 8;
- constexpr u32 FAKE_DOT_CLOCK = 65 * 103 * 621 * CH_WIDTH;
+ constexpr XTAL DOT_CLOCK = 32_MHz_XTAL; // XTAL is 30 MHz according to schematics
- Z80(config, m_maincpu, 32_MHz_XTAL / 8); // clock unknown
+ Z80(config, m_maincpu, 32_MHz_XTAL / 8); // divider confirmed from schematics
m_maincpu->set_addrmap(AS_PROGRAM, &facit4440_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &facit4440_state::io_map);
m_maincpu->set_daisy_config(daisy_chain);
- ER1400(config, m_earom[0]); // M5G1400P
- ER1400(config, m_earom[1]); // M5G1400P
+ ER1400(config, m_earom[0]); // M5G1400P @ D65
+ ER1400(config, m_earom[1]); // M5G1400P @ D64
z80ctc_device &ctc(Z80CTC(config, "ctc", 32_MHz_XTAL / 8));
ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
@@ -240,33 +256,51 @@ void facit4440_state::facit4440(machine_config &config)
ctc.zc_callback<2>().set("iodart", FUNC(z80dart_device::txcb_w));
ctc.zc_callback<2>().append("iodart", FUNC(z80dart_device::rxcb_w));
- clock_device &keybclk(CLOCK(config, "keybclk", 2.4576_MHz_XTAL / 32)); // unclear
+ clock_device &keybclk(CLOCK(config, "kbdclk", 2.4576_MHz_XTAL / 32)); // divider confirmed from schematics
keybclk.signal_handler().set("kbdart", FUNC(z80dart_device::txca_w));
keybclk.signal_handler().append("kbdart", FUNC(z80dart_device::rxca_w));
- z80dart_device &iodart(Z80DART(config, "iodart", 32_MHz_XTAL / 8)); // Z80ADART
+ z80dart_device &iodart(Z80DART(config, "iodart", 32_MHz_XTAL / 8)); // Z80ADART @ D83
iodart.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
- iodart.out_txda_callback().set("iodart", FUNC(z80dart_device::rxa_w)); // temporary loopback for testing
- iodart.out_rtsa_callback().set("iodart", FUNC(z80dart_device::ctsa_w)); // temporary loopback for testing
- iodart.out_dtra_callback().set("iodart", FUNC(z80dart_device::dcdb_w)); // temporary loopback for testing
- iodart.out_txdb_callback().set("iodart", FUNC(z80dart_device::rxb_w)); // temporary loopback for testing
+ iodart.out_txda_callback().set(m_rs232, FUNC(rs232_port_device::write_txd));
+ iodart.out_rtsa_callback().set(m_rs232, FUNC(rs232_port_device::write_rts));
+ iodart.out_dtra_callback().set(m_printer, FUNC(rs232_port_device::write_dtr)); // not correct according to schematics, but needed to pass burn-in test
+ iodart.out_txdb_callback().set(m_printer, FUNC(rs232_port_device::write_txd));
- z80dart_device &kbdart(Z80DART(config, "kbdart", 32_MHz_XTAL / 8)); // Z80ADART
+ z80dart_device &kbdart(Z80DART(config, "kbdart", 32_MHz_XTAL / 8)); // Z80ADART @ D82
kbdart.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
kbdart.out_txda_callback().set("kbdart", FUNC(z80dart_device::rxa_w)); // FIXME: serial keyboard needed here
- // Channel B is not used
+ // Channel B is not used (though schematics show 307.2 kHz provided for RxTxCB)
+
+ M6801(config, "kbdmcu", 2.4576_MHz_XTAL).set_disable(); // exact type unknown
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_raw(FAKE_DOT_CLOCK, 103 * CH_WIDTH, 0, 80 * CH_WIDTH, 621, 0, 500);
- //screen.set_raw(FAKE_DOT_CLOCK, 103 * CH_WIDTH, 0, 80 * CH_WIDTH, 621, 0, 560);
+ screen.set_raw(DOT_CLOCK, 103 * 8, 0, 80 * 8, 621, 0, 500);
+ //screen.set_raw(DOT_CLOCK, 103 * 8, 0, 80 * 8, 621, 0, 560);
screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
- MC6845(config, m_crtc, FAKE_DOT_CLOCK / CH_WIDTH); // HD46505SP-2
- m_crtc->set_char_width(CH_WIDTH);
+ MC6845(config, m_crtc, DOT_CLOCK / 8); // HD46505SP-2
+ m_crtc->set_char_width(8);
m_crtc->set_show_border_area(false);
m_crtc->set_update_row_callback(FUNC(facit4440_state::update_row));
m_crtc->out_hsync_callback().set("ctc", FUNC(z80ctc_device::trg3));
+ m_crtc->out_hsync_callback().append(m_bellctr, FUNC(ripple_counter_device::clock_w));
m_crtc->out_vsync_callback().set(FUNC(facit4440_state::vsync_w));
+
+ RIPPLE_COUNTER(config, m_bellctr).set_stages(12); // HEF4040BP
+ m_bellctr->count_out_cb().set("speaker", FUNC(speaker_sound_device::level_w)).bit(5);
+
+ SPEAKER(config, "mono").front_center();
+ SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.5);
+
+ RS232_PORT(config, m_rs232, default_rs232_devices, "loopback"); // temporary loopback for testing
+ m_rs232->rxd_handler().set("iodart", FUNC(z80dart_device::rxa_w));
+ m_rs232->cts_handler().set("iodart", FUNC(z80dart_device::ctsa_w));
+ m_rs232->dcd_handler().set("iodart", FUNC(z80dart_device::dcda_w));
+
+ RS232_PORT(config, m_printer, default_rs232_devices, "loopback"); // temporary loopback for testing
+ m_printer->rxd_handler().set("iodart", FUNC(z80dart_device::rxb_w));
+ m_printer->dcd_handler().set("iodart", FUNC(z80dart_device::dcdb_w));
}
@@ -275,6 +309,9 @@ ROM_START(facit4440)
ROM_LOAD("rom7.bin", 0x0000, 0x4000, CRC(a8da2b11) SHA1(4436ef14c29ae299f7bc338748158771c02d02a9))
ROM_LOAD("rom6.bin", 0x4000, 0x4000, CRC(790b7642) SHA1(688a80cbf011e5c14f501e11fe0e3bf64a85bbd7))
+ ROM_REGION(0x1000, "kbdmcu", 0)
+ ROM_LOAD("6801.bin", 0x0000, 0x1000, NO_DUMP)
+
ROM_REGION(0x2000, "testprg", 0)
ROM_LOAD("rom5.bin", 0x0000, 0x2000, CRC(715d02b6) SHA1(e304718dbdc8867ac01909fd2d027e5014a8c4f9))
@@ -287,4 +324,4 @@ ROM_START(facit4440)
ROM_LOAD("rom2.bin", 0x0000, 0x0800, CRC(9e1a190c) SHA1(fb08ee806f1056bcdfb5b08ea85995e1d3d01298))
ROM_END
-COMP(1984, facit4440, 0, 0, facit4440, facit4440, facit4440_state, empty_init, "Facit", "4440 Twist (30M-F1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND)
+COMP(1984, facit4440, 0, 0, facit4440, facit4440, facit4440_state, empty_init, "Facit", "4440 Twist (30M-F1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS)
diff --git a/src/mame/drivers/macp.cpp b/src/mame/drivers/macp.cpp
index 25f3546a8a4..17c35b56454 100644
--- a/src/mame/drivers/macp.cpp
+++ b/src/mame/drivers/macp.cpp
@@ -1,84 +1,386 @@
// license:BSD-3-Clause
-// copyright-holders:Ivan Vangelista
+// copyright-holders:Robbbert
// PINBALL
-// Skeleton driver for MAC S.A. and CICPlay pinballs. ROM definitions taken from PinMAME.
+/***************************************************************************************************************
+Skeleton driver for MAC S.A. and CICPlay pinballs. ROM definitions taken from PinMAME.
+
+There's a number of undumped PAL-type devices, so had to guess a few things.
+Unknown chips: SIVP47, MAC P01, MAC D01, MAC A01 (=MAC A.A4, MAC A.A5).
+Schematic has errors and omissions (no input or output matrix, no wiring between boards).
+Although the coin slots are not working, you can add credits by changing 0xC011 in the memory view.
+
+Status:
+- Some games are playable
+-- macgalxy (Outhole is Z and X)
+-- macjungl (Outhole is E)
+-- glxplay2 (Outhole unknown)
+- Other machines can generally accept credits and start, but then cannot score.
+- Display has intolerable flicker.
+
+ToDo
+- MSM sound
+- Inputs not responding
+- DIPs to be checked
+- Fix flicker on displays
+- CIC games need a different layout
+
+***************************************************************************************************************/
#include "emu.h"
#include "machine/genpin.h"
#include "cpu/z80/z80.h"
+#include "machine/clock.h"
#include "machine/i8279.h"
#include "sound/ay8910.h"
#include "sound/msm5205.h"
+#include "speaker.h"
+#include "macp.lh"
+
+namespace {
class macp_state : public genpin_class
{
public:
macp_state(const machine_config &mconfig, device_type type, const char *tag)
: genpin_class(mconfig, type, tag)
- , m_maincpu(*this, "maincpu") { }
-
- void macp(machine_config &config);
- void macpmsm(machine_config &config);
- void macp0(machine_config &config);
- void macp0_map(address_map &map);
- void macp_io(address_map &map);
- void macp_map(address_map &map);
+ , m_maincpu(*this, "maincpu")
+ , m_ay8910(*this, "ay%u", 0U)
+ , m_io_keyboard(*this, "X%u", 0)
+ , m_digits(*this, "digit%u", 0U)
+ , m_io_outputs(*this, "out%u", 0U)
+ { }
+
+ void mac16k(machine_config &config);
+ void mac32k(machine_config &config);
+ void mem16k_map(address_map &map);
+ void io16k_map(address_map &map);
+ void mem32k_map(address_map &map);
+ void io32k_map(address_map &map);
+
private:
- required_device<cpu_device> m_maincpu;
+ DECLARE_WRITE_LINE_MEMBER(clock_tick);
+ DECLARE_WRITE_LINE_MEMBER(irq_w);
+ void scanlines_w(u8);
+ void digit_w(u8);
+ void ay0_a_w(u8);
+ void ay0_b_w(u8);
+ void ay1_a_w(u8);
+ void ay1_b_w(u8);
+ u8 ay1_b_r();
+ u8 kbd_r();
+ u8 m_t_c = 0;
+ u8 m_digit = 0;
+ u8 m_ay1_b = 0;
+ u8 m_ay1_a = 0;
+ u8 m_relay_ctrl = 0;
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ required_device<z80_device> m_maincpu;
+ required_device_array<ay8910_device, 2> m_ay8910;
+ required_ioport_array<8> m_io_keyboard;
+ output_finder<40> m_digits;
+ output_finder<85> m_io_outputs; // 12+4+1 solenoids + 48+16 lamps
};
-void macp_state::macp_map(address_map &map)
+void macp_state::mem16k_map(address_map &map)
+{
+ map.unmap_value_high();
+ map.global_mask(0x7fff); // A15 only goes to the expansion socket and a PAL
+ map(0x0000, 0x3fff).rom();
+ map(0x4000, 0x47ff).ram().share("nvram"); // 6116
+ map(0x6000, 0x6001).rw("i8279", FUNC(i8279_device::read), FUNC(i8279_device::write));
+}
+
+void macp_state::mem32k_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x7fff).rom();
- map(0xc000, 0xc7ff).ram();
+ map(0xc000, 0xdfff).ram().share("nvram"); // DS1225 (8k RAM with inbuilt battery), only first 2k used.
}
-void macp_state::macp0_map(address_map &map)
+void macp_state::io16k_map(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0x3fff).rom();
- map(0x4000, 0x47ff).ram();
+ map.global_mask(0xff);
+ map(0x08, 0x08).w(m_ay8910[0], FUNC(ay8910_device::address_w));
+ map(0x0a, 0x0a).w(m_ay8910[0], FUNC(ay8910_device::data_w));
+ map(0x18, 0x18).w(m_ay8910[1], FUNC(ay8910_device::address_w));
+ map(0x19, 0x19).r(m_ay8910[1], FUNC(ay8910_device::data_r));
+ map(0x1a, 0x1a).w(m_ay8910[1], FUNC(ay8910_device::data_w));
}
-void macp_state::macp_io(address_map &map)
+void macp_state::io32k_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
+ map(0x08, 0x08).w(m_ay8910[0], FUNC(ay8910_device::address_w));
+ map(0x0a, 0x0a).w(m_ay8910[0], FUNC(ay8910_device::data_w));
+ map(0x28, 0x28).w(m_ay8910[1], FUNC(ay8910_device::address_w));
+ map(0x29, 0x29).r(m_ay8910[1], FUNC(ay8910_device::data_r));
+ map(0x2a, 0x2a).w(m_ay8910[1], FUNC(ay8910_device::data_w));
+ map(0x40, 0x41).rw("i8279", FUNC(i8279_device::read), FUNC(i8279_device::write));
}
static INPUT_PORTS_START( macp )
+ PORT_START("X0")
+ PORT_DIPNAME( 0x01, 0x01, "DIP A1")
+ PORT_DIPSETTING( 0x00, DEF_STR(On))
+ PORT_DIPSETTING( 0x01, DEF_STR(Off))
+ PORT_DIPNAME( 0x02, 0x02, "DIP A2")
+ PORT_DIPSETTING( 0x00, DEF_STR(On))
+ PORT_DIPSETTING( 0x02, DEF_STR(Off))
+ PORT_DIPNAME( 0x04, 0x04, "DIP A3")
+ PORT_DIPSETTING( 0x00, DEF_STR(On))
+ PORT_DIPSETTING( 0x04, DEF_STR(Off))
+ PORT_DIPNAME( 0x08, 0x08, "DIP A4")
+ PORT_DIPSETTING( 0x00, DEF_STR(On))
+ PORT_DIPSETTING( 0x08, DEF_STR(Off))
+ PORT_DIPNAME( 0x10, 0x10, "DIP A5")
+ PORT_DIPSETTING( 0x00, DEF_STR(On))
+ PORT_DIPSETTING( 0x10, DEF_STR(Off))
+ PORT_DIPNAME( 0x20, 0x20, "DIP A6")
+ PORT_DIPSETTING( 0x00, DEF_STR(On))
+ PORT_DIPSETTING( 0x20, DEF_STR(Off))
+ PORT_DIPNAME( 0x40, 0x40, "DIP A7")
+ PORT_DIPSETTING( 0x00, DEF_STR(On))
+ PORT_DIPSETTING( 0x40, DEF_STR(Off))
+
+ PORT_START("X1")
+ PORT_DIPNAME( 0x01, 0x01, "DIP B1")
+ PORT_DIPSETTING( 0x00, DEF_STR(On))
+ PORT_DIPSETTING( 0x01, DEF_STR(Off))
+ PORT_DIPNAME( 0x02, 0x02, "DIP B2")
+ PORT_DIPSETTING( 0x00, DEF_STR(On))
+ PORT_DIPSETTING( 0x02, DEF_STR(Off))
+ PORT_DIPNAME( 0x04, 0x04, "DIP B3")
+ PORT_DIPSETTING( 0x00, DEF_STR(On))
+ PORT_DIPSETTING( 0x04, DEF_STR(Off))
+ PORT_DIPNAME( 0x08, 0x08, "DIP B4")
+ PORT_DIPSETTING( 0x00, DEF_STR(On))
+ PORT_DIPSETTING( 0x08, DEF_STR(Off))
+ PORT_DIPNAME( 0x10, 0x10, "DIP B5")
+ PORT_DIPSETTING( 0x00, DEF_STR(On))
+ PORT_DIPSETTING( 0x10, DEF_STR(Off))
+ PORT_DIPNAME( 0x20, 0x20, "DIP B6")
+ PORT_DIPSETTING( 0x00, DEF_STR(On))
+ PORT_DIPSETTING( 0x20, DEF_STR(Off))
+ PORT_DIPNAME( 0x40, 0x40, "DIP B7")
+ PORT_DIPSETTING( 0x00, DEF_STR(On))
+ PORT_DIPSETTING( 0x40, DEF_STR(Off))
+
+ PORT_START("X2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_NAME("Tilt")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_NAME("Slam Tilt")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Reset RAM")
+
+ PORT_START("X3")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("INP30")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("INP31")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("INP32")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("INP33")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("INP34")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("INP35")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_G) PORT_NAME("INP36")
+
+ PORT_START("X4")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_H) PORT_NAME("INP40")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_I) PORT_NAME("INP41")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_J) PORT_NAME("INP42")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_K) PORT_NAME("INP43")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_L) PORT_NAME("INP44")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_M) PORT_NAME("INP45")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("INP46")
+
+ PORT_START("X5")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_O) PORT_NAME("INP50")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_P) PORT_NAME("INP51")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("INP52")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("INP53")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("INP54")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("INP55")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_U) PORT_NAME("INP56")
+
+ PORT_START("X6")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_V) PORT_NAME("INP60")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("INP61")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("INP62")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_Y) PORT_NAME("INP63")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("INP64")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_COMMA) PORT_NAME("INP65")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_STOP) PORT_NAME("INP66")
+
+ PORT_START("X7")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("INP70")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_COLON) PORT_NAME("INP71")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_QUOTE) PORT_NAME("INP72")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("INP73")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("INP74")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("INP75")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_NAME("INP76")
INPUT_PORTS_END
static INPUT_PORTS_START( cicplay )
+ PORT_INCLUDE( macp )
INPUT_PORTS_END
-void macp_state::macp(machine_config &config)
+void macp_state::scanlines_w(u8 data)
+{
+ m_digit = data & 15;
+}
+
+void macp_state::digit_w(u8 data)
+{
+ static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // guess, because custom PAL
+ m_digits[m_digit] = patterns[BIT(data, 0, 4)];
+ m_digits[m_digit+20] = patterns[BIT(data, 4, 4)];
+ // This isn't right obviously, but if score > 999999 and bit 7 of PAL, then illuminate some extra lamps on the backboard
+ u8 i,j = BIT(data, 0, 4);
+ if (j > 9)
+ for (i = 0; i < 8; i++)
+ m_io_outputs[69+i] = BIT(data, i);
+ j = BIT(data, 4, 4);
+ if (j > 9)
+ for (i = 0; i < 8; i++)
+ m_io_outputs[77+i] = BIT(data, i);
+}
+
+u8 macp_state::kbd_r()
+{
+ return (m_io_keyboard[m_digit & 7]->read() & 0x7f )| (BIT(m_ay1_b, 4) ? 0x80 : 0);
+}
+
+void macp_state::ay0_a_w(u8 data)
+{
+ // d4-7 solenoids
+ for (u8 i = 4; i < 8; i++)
+ m_io_outputs[4+i] = BIT(data, i);
+
+ // d0-3 lamps
+ data &= 15;
+ if (data < 6)
+ for (u8 i = 0; i < 8; i++)
+ m_io_outputs[17+data*8+i] = BIT(m_ay1_a, i);
+}
+
+void macp_state::ay0_b_w(u8 data)
+{
+ // d0-7 solenoids
+ for (u8 i = 0; i < 8; i++)
+ m_io_outputs[i] = BIT(data, i);
+}
+
+void macp_state::ay1_a_w(u8 data)
+{
+ m_ay1_a = data;
+}
+
+void macp_state::ay1_b_w(u8 data)
+{
+ m_ay1_b = data;
+ // d0-3 solenoids: Coin Lock (probably lockout), Coin In (probably coin counter), Ext Play, Ext Ball.
+ for (u8 i = 0; i < 4; i++)
+ m_io_outputs[12+i] = BIT(data, i);
+ // d4 goes to RL7 (kbd_r)
+ // d5 another solenoid
+ m_io_outputs[16] = BIT(data, 5);
+ // Relay control: 0 = not set; 1 = K1 relay enables 12v supply; 2 = K2 relay enables 40v supply; 3= normal operation
+ // K2 is pulsed by a watchdog circuit. The K2 relay needs both bits enabled before it will turn on.
+ m_relay_ctrl = BIT(data, 5, 2);
+}
+
+u8 macp_state::ay1_b_r()
+{
+ //return 0x7f | ((m_relay_ctrl == 3) ? 0 : 0x80); // BIT 7 low indicates 40volt supply is available
+ return 0x7f | (m_relay_ctrl ? 0 : 0x80); // Temporary for testing
+}
+
+WRITE_LINE_MEMBER( macp_state::irq_w )
+{
+ m_maincpu->set_input_line(INPUT_LINE_IRQ0, state ? ASSERT_LINE : CLEAR_LINE);
+}
+
+WRITE_LINE_MEMBER( macp_state::clock_tick )
+{
+ if (state)
+ {
+ if (m_t_c > 0xf0)
+ m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
+ else
+ m_t_c++;
+ }
+}
+
+void macp_state::machine_start()
+{
+ genpin_class::machine_start();
+
+ m_digits.resolve();
+ m_io_outputs.resolve();
+
+ save_item(NAME(m_digit));
+ save_item(NAME(m_t_c));
+ save_item(NAME(m_ay1_a));
+ save_item(NAME(m_ay1_b));
+}
+
+void macp_state::machine_reset()
+{
+ genpin_class::machine_reset();
+ m_t_c = 0;
+ m_relay_ctrl = 0;
+}
+
+void macp_state::mac16k(machine_config &config)
{
/* basic machine hardware */
- Z80(config, m_maincpu, 2500000);
- m_maincpu->set_addrmap(AS_PROGRAM, &macp_state::macp_map);
- m_maincpu->set_addrmap(AS_IO, &macp_state::macp_io);
+ Z80(config, m_maincpu, 3'800'000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &macp_state::mem16k_map);
+ m_maincpu->set_addrmap(AS_IO, &macp_state::io16k_map);
+
+ clock_device &cpoint_clock(CLOCK(config, "cpoint_clock", 50)); // crosspoint detector
+ cpoint_clock.signal_handler().set(FUNC(macp_state::clock_tick));
+
+ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* video hardware */
- //config.set_default_layout();
+ config.set_default_layout(layout_macp);
//I8279
+ i8279_device &kbdc(I8279(config, "i8279", 3'800'000)); // based on divider
+ kbdc.out_sl_callback().set(FUNC(macp_state::scanlines_w)); // scan SL lines
+ kbdc.out_disp_callback().set(FUNC(macp_state::digit_w)); // display A&B
+ kbdc.in_rl_callback().set(FUNC(macp_state::kbd_r)); // kbd RL lines
+ kbdc.out_irq_callback().set(FUNC(macp_state::irq_w));
/* sound hardware */
- //2x AY8910
genpin_audio(config);
-}
-void macp_state::macp0(machine_config &config)
-{
- macp(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &macp_state::macp0_map);
+ //2x AY8910
+ SPEAKER(config, "lspkr").front_left();
+ AY8910(config, m_ay8910[0], 3'800'000/2);
+ m_ay8910[0]->set_resistors_load(10e3,10e3,10e3);
+ m_ay8910[0]->port_a_write_callback().set(FUNC(macp_state::ay0_a_w));
+ m_ay8910[0]->port_b_write_callback().set(FUNC(macp_state::ay0_b_w));
+ m_ay8910[0]->add_route(ALL_OUTPUTS, "lspkr", 0.50);
+
+ SPEAKER(config, "rspkr").front_right();
+ AY8910(config, m_ay8910[1], 3'800'000/2);
+ m_ay8910[1]->set_resistors_load(10e3,10e3,10e3);
+ m_ay8910[1]->port_a_write_callback().set(FUNC(macp_state::ay1_a_w));
+ m_ay8910[1]->port_b_write_callback().set(FUNC(macp_state::ay1_b_w));
+ m_ay8910[1]->port_b_read_callback().set(FUNC(macp_state::ay1_b_r));
+ m_ay8910[1]->add_route(ALL_OUTPUTS, "rspkr", 0.50);
}
-void macp_state::macpmsm(machine_config &config)
+void macp_state::mac32k(machine_config &config)
{
- macp(config);
+ mac16k(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &macp_state::mem32k_map);
+ m_maincpu->set_addrmap(AS_IO, &macp_state::io32k_map);
// MSM5205
}
@@ -155,17 +457,19 @@ ROM_START(glxplay2)
ROM_LOAD("1382-2.cpu", 0x2000, 0x2000, CRC(945c90fd) SHA1(8367992f8db8b402d82e4a3f02a35b796756ce0f))
ROM_END
+} // Anonymous namespace
+
// MAC S.A. pinballs
-GAME( 1986, macgalxy, 0, macp0, macp, macp_state, empty_init, ROT0, "MAC S.A.", "MAC's Galaxy", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1987, macjungl, 0, macp0, macp, macp_state, empty_init, ROT0, "MAC S.A.", "MAC Jungle", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1987, spctrain, 0, macp, macp, macp_state, empty_init, ROT0, "MAC S.A.", "Space Train (Pinball)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1987, spctraino, spctrain, macp0, macp, macp_state, empty_init, ROT0, "MAC S.A.", "Space Train (Pinball, old hardware)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1988, spcpnthr, 0, macpmsm, macp, macp_state, empty_init, ROT0, "MAC S.A.", "Space Panther", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 19??, mac_1808, 0, macpmsm, macp, macp_state, empty_init, ROT0, "MAC S.A.", "unknown game (MAC #1808)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1995, macjungn, 0, macpmsm, macp, macp_state, empty_init, ROT0, "MAC S.A.", "MAC Jungle (New version)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1996, nbamac, 0, macpmsm, macp, macp_state, empty_init, ROT0, "MAC S.A.", "NBA MAC", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1986, macgalxy, 0, mac16k, macp, macp_state, empty_init, ROT0, "MAC S.A.", "MAC's Galaxy", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1987, macjungl, 0, mac16k, macp, macp_state, empty_init, ROT0, "MAC S.A.", "MAC Jungle", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1987, spctrain, 0, mac32k, macp, macp_state, empty_init, ROT0, "MAC S.A.", "Space Train (Pinball)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1987, spctraino, spctrain, mac16k, macp, macp_state, empty_init, ROT0, "MAC S.A.", "Space Train (Pinball, old hardware)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1988, spcpnthr, 0, mac32k, macp, macp_state, empty_init, ROT0, "MAC S.A.", "Space Panther", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 19??, mac_1808, 0, mac32k, macp, macp_state, empty_init, ROT0, "MAC S.A.", "unknown game (MAC #1808)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1995, macjungn, 0, mac32k, macp, macp_state, empty_init, ROT0, "MAC S.A.", "MAC Jungle (New version)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1996, nbamac, 0, mac32k, macp, macp_state, empty_init, ROT0, "MAC S.A.", "NBA MAC", MACHINE_IS_SKELETON_MECHANICAL )
// CICPlay pinballs
-GAME( 1985, glxplay, 0, macp0, cicplay, macp_state, empty_init, ROT0, "CICPlay", "Galaxy Play", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1986, kidnap, 0, macp0, cicplay, macp_state, empty_init, ROT0, "CICPlay", "Kidnap", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1987, glxplay2, 0, macp0, cicplay, macp_state, empty_init, ROT0, "CICPlay", "Galaxy Play 2", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1985, glxplay, 0, mac16k, cicplay, macp_state, empty_init, ROT0, "CICPlay", "Galaxy Play", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1986, kidnap, 0, mac16k, cicplay, macp_state, empty_init, ROT0, "CICPlay", "Kidnap", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1987, glxplay2, 0, mac16k, cicplay, macp_state, empty_init, ROT0, "CICPlay", "Galaxy Play 2", MACHINE_IS_SKELETON_MECHANICAL )
diff --git a/src/mame/drivers/pce.cpp b/src/mame/drivers/pce.cpp
index cfb152a93d9..15bfe8a26ae 100644
--- a/src/mame/drivers/pce.cpp
+++ b/src/mame/drivers/pce.cpp
@@ -16,7 +16,6 @@
- test sprite collision and overflow interrupts
- sprite precaching
- rewrite the base renderer loop
-- Add CD support
- Add expansion port support
- Add 263 line mode
- Sprite DMA should use vdc VRAM functions
@@ -49,11 +48,8 @@ Super System Card:
/**********************************************************************
Known Bugs
***********************************************************************
-- Benkei Gaiden: hangs after a few Sunsoft logo spins.
-- Busou Keiji Cyber Cross: hangs on attract mode
- Cadash: After choosing character and name, the game starts and the display 'jiggles' like tracking if off a VCR
- Fighting Run: has color and sprite issues during gameplay;
-- Hisou Kihei - Xserd: black screen;
**********************************************************************/
#include "emu.h"
@@ -147,7 +143,7 @@ static void pce_cart(device_slot_interface &device)
void pce_state::pce_common(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
H6280(config, m_maincpu, MAIN_CLOCK/3);
m_maincpu->set_addrmap(AS_PROGRAM, &pce_state::pce_mem);
m_maincpu->set_addrmap(AS_IO, &pce_state::pce_io);
@@ -158,7 +154,7 @@ void pce_state::pce_common(machine_config &config)
config.set_maximum_quantum(attotime::from_hz(60));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(MAIN_CLOCK, huc6260_device::WPF, 64, 64 + 1024 + 64, huc6260_device::LPF, 18, 18 + 242);
screen.set_screen_update(FUNC(pce_state::screen_update));
@@ -209,7 +205,7 @@ void pce_state::tg16(machine_config &config)
void pce_state::sgx(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
H6280(config, m_maincpu, MAIN_CLOCK/3);
m_maincpu->set_addrmap(AS_PROGRAM, &pce_state::sgx_mem);
m_maincpu->set_addrmap(AS_IO, &pce_state::sgx_io);
@@ -220,7 +216,7 @@ void pce_state::sgx(machine_config &config)
config.set_maximum_quantum(attotime::from_hz(60));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(MAIN_CLOCK, huc6260_device::WPF, 64, 64 + 1024 + 64, huc6260_device::LPF, 18, 18 + 242);
screen.set_screen_update(FUNC(pce_state::screen_update));
diff --git a/src/mame/layout/macp.lay b/src/mame/layout/macp.lay
new file mode 100644
index 00000000000..ff29b4396c7
--- /dev/null
+++ b/src/mame/layout/macp.lay
@@ -0,0 +1,134 @@
+<?xml version="1.0"?>
+<!--
+license:CC0
+-->
+
+<mamelayout version="2">
+
+ <element name="digit7" defstate="0">
+ <led7seg>
+ <color red="0.0" green="0.75" blue="1.0" />
+ </led7seg>
+ </element>
+
+ <view name="Default Layout">
+ <bounds left="0" top="25" right="325" bottom="205" />
+
+ <!-- Top Row -->
+ <element name="digit0" ref="digit7">
+ <bounds left="10" top="45" right="30" bottom="84" />
+ </element>
+ <element name="digit1" ref="digit7">
+ <bounds left="34" top="45" right="54" bottom="84" />
+ </element>
+ <element name="digit2" ref="digit7">
+ <bounds left="58" top="45" right="78" bottom="84" />
+ </element>
+ <element name="digit3" ref="digit7">
+ <bounds left="87" top="45" right="107" bottom="84" />
+ </element>
+ <element name="digit4" ref="digit7">
+ <bounds left="111" top="45" right="131" bottom="84" />
+ </element>
+ <element name="digit5" ref="digit7">
+ <bounds left="135" top="45" right="155" bottom="84" />
+ </element>
+
+ <element name="digit20" ref="digit7">
+ <bounds left="170" top="45" right="190" bottom="84" />
+ </element>
+ <element name="digit21" ref="digit7">
+ <bounds left="194" top="45" right="214" bottom="84" />
+ </element>
+ <element name="digit22" ref="digit7">
+ <bounds left="218" top="45" right="238" bottom="84" />
+ </element>
+ <element name="digit23" ref="digit7">
+ <bounds left="247" top="45" right="267" bottom="84" />
+ </element>
+ <element name="digit24" ref="digit7">
+ <bounds left="271" top="45" right="291" bottom="84" />
+ </element>
+ <element name="digit25" ref="digit7">
+ <bounds left="295" top="45" right="315" bottom="84" />
+ </element>
+
+ <!-- Middle Row -->
+ <element name="digit6" ref="digit7">
+ <bounds left="10" top="100" right="30" bottom="139" />
+ </element>
+ <element name="digit7" ref="digit7">
+ <bounds left="34" top="100" right="54" bottom="139" />
+ </element>
+ <element name="digit8" ref="digit7">
+ <bounds left="58" top="100" right="78" bottom="139" />
+ </element>
+ <element name="digit9" ref="digit7">
+ <bounds left="87" top="100" right="107" bottom="139" />
+ </element>
+ <element name="digit10" ref="digit7">
+ <bounds left="111" top="100" right="131" bottom="139" />
+ </element>
+ <element name="digit11" ref="digit7">
+ <bounds left="135" top="100" right="155" bottom="139" />
+ </element>
+
+ <element name="digit26" ref="digit7">
+ <bounds left="170" top="100" right="190" bottom="139" />
+ </element>
+ <element name="digit27" ref="digit7">
+ <bounds left="194" top="100" right="214" bottom="139" />
+ </element>
+ <element name="digit28" ref="digit7">
+ <bounds left="218" top="100" right="238" bottom="139" />
+ </element>
+ <element name="digit29" ref="digit7">
+ <bounds left="247" top="100" right="267" bottom="139" />
+ </element>
+ <element name="digit30" ref="digit7">
+ <bounds left="271" top="100" right="291" bottom="139" />
+ </element>
+ <element name="digit31" ref="digit7">
+ <bounds left="295" top="100" right="315" bottom="139" />
+ </element>
+
+ <!-- Bottom Row -->
+ <element name="digit15" ref="digit7">
+ <bounds left="10" top="155" right="30" bottom="194" />
+ </element>
+ <element name="unused1" ref="digit7">
+ <bounds left="34" top="155" right="54" bottom="194" />
+ </element>
+ <element name="digit14" ref="digit7">
+ <bounds left="58" top="155" right="78" bottom="194" />
+ </element>
+ <element name="unused2" ref="digit7">
+ <bounds left="87" top="155" right="107" bottom="194" />
+ </element>
+ <element name="digit13" ref="digit7">
+ <bounds left="111" top="155" right="131" bottom="194" />
+ </element>
+ <element name="digit12" ref="digit7">
+ <bounds left="135" top="155" right="155" bottom="194" />
+ </element>
+
+ <element name="digit32" ref="digit7">
+ <bounds left="170" top="155" right="190" bottom="194" />
+ </element>
+ <element name="digit33" ref="digit7">
+ <bounds left="194" top="155" right="214" bottom="194" />
+ </element>
+ <element name="digit34" ref="digit7">
+ <bounds left="218" top="155" right="238" bottom="194" />
+ </element>
+ <element name="digit35" ref="digit7">
+ <bounds left="247" top="155" right="267" bottom="194" />
+ </element>
+ <element name="digit35" ref="digit7">
+ <bounds left="271" top="155" right="291" bottom="194" />
+ </element>
+ <element name="digit35" ref="digit7">
+ <bounds left="295" top="155" right="315" bottom="194" />
+ </element>
+ </view>
+</mamelayout>
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index ea7595c616d..f66abe8e238 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -12405,7 +12405,8 @@ bmdct // GX995 (c) 2000 (Japan)
bmfinal // GXC01 (c) 2002 (Japan)
hmcompm2 // GX988 (c) 2000
hmcompmx // GX858 (c) 1999
-popn1 // GX803 (c) 1998 (Asia)
+popn1 // GX803 (c) 1998 (Export)
+popn1a // GX803 (c) 1998 (Asia)
popn1k // GX803 (c) 1998 (Korea)
popn1j // GX803 (c) 1998 (Japan)
popn2 // GX831 (c) 1998 (Japan)