Merge branch 'master' of https://github.com/mamedev/mame into 101217

This commit is contained in:
David Haywood 2017-12-10 23:50:29 +00:00
commit f9b7e3e60c
30 changed files with 1147 additions and 225 deletions

View File

@ -15,7 +15,7 @@ as rom. In the region/block cases, banking is automatically handled.
2. Setup
--------
| **device_rom_interface**\ (const machine_config &mconfig, device_t &device, UINT8 addrwidth, endianness_t endian = ENDIANNESS_LITTLE, UINT8 datawidth = 8)
| **device_rom_interface**\ (const machine_config &mconfig, device_t &device, u8 addrwidth, endianness_t endian = ENDIANNESS_LITTLE, u8 datawidth = 8)
The constructor of the interface wants, in addition to the standard
parameters, the address bus width of the dedicated bus. In addition
@ -41,7 +41,16 @@ rom description for the system, it will be automatically picked up as
the connected rom. An address map has priority over the region if
present in the machine config.
| void **set_rom**\ (const void \*base, UINT32 size);
| void **set_rom_endianness**\ (endianness_t endian)
| void **set_rom_data_width**\ (u8 width)
| void **set_rom_addr_width**\ (u8 width)
These methods, intended for generic devices with indefinite hardware
specifications, override the endianness, data bus width and address
bus width assigned through the constructor. They must be called from
within the device before **config_complete** time.
| void **set_rom**\ (const void \*base, u32 size);
At any time post- **interface_pre_start**, a memory block can be
setup as the connected rom with that method. It overrides any
@ -51,10 +60,10 @@ times.
3. Rom access
-------------
| UINT8 **read_byte**\ (offs_t byteaddress)
| UINT16 **read_word**\ (offs_t byteaddress)
| UINT32 **read_dword**\ (offs_t byteaddress)
| UINT64 **read_qword**\ (offs_t byteaddress)
| u8 **read_byte**\ (offs_t byteaddress)
| u16 **read_word**\ (offs_t byteaddress)
| u32 **read_dword**\ (offs_t byteaddress)
| u64 **read_qword**\ (offs_t byteaddress)
These methods provide read access to the connected rom. Out-of-bounds
access results in standard unmapped read logerror messages.
@ -76,3 +85,8 @@ Using that interface makes the device derive from
**device_memory_interface**. If the device wants to actually use the
memory interface for itself, remember that AS_0/AS_PROGRAM is used by
the rom interface, and don't forget to upcall **memory_space_config**.
For devices which have outputs that can be used to address ROMs but
only to forward the data to another device for processing, it may be
helpful to disable the interface when it is not required. This can be
done by overriding **memory_space_config** to return an empty vector.

View File

@ -42805,6 +42805,21 @@ The entries in this section are intended to replace the existing "low-grade" Jap
</part>
</software>
<software name="fireprog">
<!-- Original images (Redump)
<rom name="Fire Pro Wrestling G (Japan) (v1.1).cue" size="101" crc="235169a5" sha1="8d8e7d6247ba63290b18224639ef7f97e89121d1"/>
<rom name="Fire Pro Wrestling G (Japan) (v1.1).bin" size="303358608" crc="8ddb5a09" sha1="26c1da5e5b64d162e9f85c285ffaf2cf2d82214a"/>
-->
<description>Fire Pro Wrestling G (Japan) (v1.1)</description>
<year>2000</year>
<publisher>Spike</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="fire pro wrestling g (japan (v1.1)" sha1="5b0792750443a320ce4e62e2f01da8d721a2686e"/>
</diskarea>
</part>
</software>
<software name="firewomn" supported="no">
<!-- Unknown source
<rom name="Fire Woman Matoigumi (Japan) [SLPS-01315].bin" size="710339280" crc="b3526c6a" sha1="2dd364f28f82774e3a4ce73e06c8197c29514df0"/>
@ -44046,6 +44061,21 @@ The entries in this section are intended to replace the existing "low-grade" Jap
</part>
</software>
<software name="gradiusg">
<!-- Original images (Redump)
<rom name="Gradius Gaiden (Japan) (v1.1).cue" size="95" crc="2a2a5d50" sha1="2e638e4f7e1e11e14cf121a14dc5a6835b808579"/>
<rom name="Gradius Gaiden (Japan) (v1.1).bin" size="589716960" crc="8ddb5a09" sha1="5c4794957782bed1ec79851c3ac40d673495b2be"/>
-->
<description>Gradius Gaiden (Japan) (v1.1)</description>
<year>1997</year>
<publisher>Konami</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="gradius gaiden (japan) (v1.1)" sha1="587c2314833c127d1fd4b94ea6d3535537b62146"/>
</diskarea>
</part>
</software>
<software name="grandoll" supported="no">
<!-- Unknown source
<rom name="Chou-Kousoku Gran Doll (Japan) [SLPS-00935].bin" size="558237792" crc="d66949aa" sha1="4e81d144625673671ee8c345eca0dbad0c3f6e59"/>
@ -44188,6 +44218,21 @@ The entries in this section are intended to replace the existing "low-grade" Jap
</part>
</software>
<software name="gunnersh">
<!-- Original images (Redump)
<rom name="Gunners Heaven (Japan).cue" size="88" crc="6c5136cc" sha1="44136d13f418a67d8342f07d0d3fac2f165ee039"/>
<rom name="Gunners Heaven (Japan).bin" size="398306496" crc="4ff1d1aa" sha1="82bc08baacad979beea29cea702c2c9d85a7c206"/>
-->
<description>Gunners Heaven (Japan)</description>
<year>1995</year>
<publisher>Media Vision</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="gunners heaven (japan)" sha1="06106575688eaeebf0cf5aac6ddc51403dcdcc28"/>
</diskarea>
</part>
</software>
<software name="gunparad" supported="no">
<!-- Unknown source
<rom name="Gunparade March (Japan) [SCPS-10136].bin" size="440372016" crc="ad1c014f" sha1="58e06a00eaa400f129a5191ed080888350adf201"/>
@ -44971,6 +45016,22 @@ The entries in this section are intended to replace the existing "low-grade" Jap
</part>
</software>
<software name="hokutosk" supported="partially">
<!-- Original images (Redump)
<rom name="Hokuto no Ken - Seikimatsu Kyuuseishu Densetsu (Japan).cue" size="278" crc="736b61a5" sha1="7c318db42827e230c7766972759654c266c0ba65"/>
<rom name="Hokuto no Ken - Seikimatsu Kyuuseishu Densetsu (Japan) (Track 1).bin" size="659056272" crc="79e9fc16" sha1="1f9b064ceafef91641bb3bbcc075a604f478489e"/>
<rom name="Hokuto no Ken - Seikimatsu Kyuuseishu Densetsu (Japan) (Track 2).bin" size="37396800" crc="7976083e" sha1="d9f92af296360772e62caa4cb276de3fa74f5538"/>
-->
<description>Hokuto no Ken - Seikimatsu Kyuuseishu Densetsu (Japan)</description>
<year>2000</year>
<publisher>Bandai</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="hokuto no ken - seikimatsu kyuuseishu densetsu (japan)" sha1="bd52aeec9c61c52b4e7a5391e1a4bd56fe453cdd"/>
</diskarea>
</part>
</software>
<software name="hooockey" supported="no">
<!-- Unknown source
<rom name="Hooockey!! (Japan) [SLPM-86488].bin" size="156692592" crc="032f439f" sha1="ac67eb197a3b761e46679135a0f6e30957617a58"/>
@ -45522,6 +45583,21 @@ The entries in this section are intended to replace the existing "low-grade" Jap
</part>
</software>
<software name="jikkparo" supported="no">
<!-- Original images (Redump)
<rom name="Jikkyou Oshaberi Parodius - Forever with Me (Japan).cue" size="117" crc="5a953380" sha1="c00f3a13075a1fa66c451a7427a12354ee9855b6"/>
<rom name="Jikkyou Oshaberi Parodius - Forever with Me (Japan).bin" size="236070240" crc="6818a16d" sha1="b133e7d7ab6679e742b9c29053fba239d948287e"/>
-->
<description>Jikkyou Oshaberi Parodius - Forever with Me (Japan)</description>
<year>1996</year>
<publisher>Konami</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="jikkyou oshaberi parodius - forever with me (japan)" sha1="2ccce47c444030d1ec6751ec54e943f80fbf9164"/>
</diskarea>
</part>
</software>
<software name="jounetsu" supported="no">
<!-- Unknown source
<rom name="Jounetsu Nekketsu - Athletes (Japan) [SLPS-00936].bin" size="141261120" crc="52cfcc5a" sha1="f6d92cc35c615dbad1fe8ace5d38bcb1b14c8875"/>
@ -47290,6 +47366,39 @@ The entries in this section are intended to replace the existing "low-grade" Jap
</part>
</software>
<software name="macrovfx">
<!-- Original images (Redump)
<rom name="Macross Digital Mission VF-X (Japan) (v1.1).cue" size="256" crc="4ff1d1aa" sha1="fd92d61ea6dd653e34d73cf87aa984226437cd92"/>
<rom name="Macross Digital Mission VF-X (Japan) (v1.1) (Track 1).bin" size="650036352" crc="a8eead5b" sha1="732bb1fb49b6822d960d8b1cfd3e8e44e15d5195"/>
<rom name="Macross Digital Mission VF-X (Japan) (v1.1) (Track 2).bin" size="1712256" crc="c9cc476e" sha1="4f9f15c5f519429eccb33d5ceebf18cdf681849c"/>
-->
<description>Macross Digital Mission VF-X (Japan)</description>
<year>1997</year>
<publisher>Bandai</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="macross digital mission vf-x (japan) (v1.1)" sha1="d6cc4f5cacf2877560a692b45788f61f71a18873"/>
</diskarea>
</part>
</software>
<software name="macrvfx2">
<!-- Original images (Redump)
<rom name="Macross VF-X2 (Japan).cue" size="327" crc="0f83c2d4" sha1="735b4ddcefe82825f69d265b8975d6d4bb929d80"/>
<rom name="Macross VF-X2 (Japan) (Track 1).bin" size="430867584" crc="9696eadb" sha1="f7e0d5b2175850b77d5bd8e2efd2123d74240af9"/>
<rom name="Macross VF-X2 (Japan) (Track 2).bin" size="47451600" crc="2e07f6eb" sha1="68f587366f2ad490fe47d9c14056cb087ab47c46"/>
<rom name="Macross VF-X2 (Japan) (Track 3).bin" size="37573200" crc="b65806d8" sha1="4bda128d58304d25207af2ffa564fd2493771db8"/>
-->
<description>Macross VF-X2 (Japan)</description>
<year>1999</year>
<publisher>Bandai</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="macross vf-x2 (japan)" sha1="2cb788b175f9dccdd1c491e7f054048534593040"/>
</diskarea>
</part>
</software>
<!-- boot OK -->
<software name="madpanic" supported="no">
<!-- Unknown source
@ -53515,6 +53624,106 @@ The entries in this section are intended to replace the existing "low-grade" Jap
</part>
</software>
<software name="srobota">
<!-- Original images (Redump)
<rom name="Super Robot Taisen Alpha (Japan) (v1.1).cue" size="105" crc="a64072b6" sha1="e48e50c8dd42eb4ec94eac0b124606d9f19484b5"/>
<rom name="Super Robot Taisen Alpha (Japan) (v1.1).bin" size="646374288" crc="b6550e08" sha1="914a07e58ed4b68ea7a2b732372a565f532fab0d"/>
-->
<description>Super Robot Taisen Alpha (Japan) (v1.1)</description>
<year>2000</year>
<publisher>Banpresto</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="super robot taisen alpha (japan) (v1.1)" sha1="55891934c6f643bad499999e441d019c9a14f478" />
</diskarea>
</part>
</software>
<software name="srobotagp">
<!-- Original images (Redump)
<rom name="Super Robot Taisen Alpha Gaiden (Japan) (Premium Edition).cue" size="123" crc="ee787a65" sha1="5877e52eafb38b0cec2fb888ecba26aaa1e02d28"/>
<rom name="Super Robot Taisen Alpha Gaiden (Japan) (Premium Edition).bin" size="718310208" crc="366c1cf1" sha1="b0d87ae8cf6434e2cb5c47d03812e0c0874a874c"/>
-->
<description>Super Robot Taisen Alpha Gaiden - Premium Edition (Japan)</description>
<year>2001</year>
<publisher>Banpresto</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="super robot taisen alpha gaiden - premium edition (japan)" sha1="6d1c0aadeb797702d8de68b1d96b0c62ae84cf77" />
</diskarea>
</part>
</software>
<software name="srobotags">
<!-- Original images (Redump)
<rom name="Super Robot Taisen Alpha Gaiden (Japan) (Shokai Genteiban).cue" size="124" crc="8715a811" sha1="e8e634d9b85372ec0169cbffe47cac88b060eb90"/>
<rom name="Super Robot Taisen Alpha Gaiden (Japan) (Shokai Genteiban).bin" size="718310208" crc="b9bef60c" sha1="546675f35773bdf68a5b24a0fe429443a175cc44"/>
-->
<description>Super Robot Taisen Alpha Gaiden - Shokai Genteiban (Japan)</description>
<year>2001</year>
<publisher>Banpresto</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="super robot taisen alpha gaiden - shokai genteiban (japan)" sha1="104390ee61a56baf4902f45a945cb588d3b7c795" />
</diskarea>
</part>
</software>
<software name="srobotcb">
<!-- Original images (Redump)
<rom name="Super Robot Taisen - Complete Box (Japan) (Disc 1) (Super Robot Wars Complete Box).cue" size="334" crc="c68361e4" sha1="3b5e4cc51caa48bc6982d56d1f478accfb009791"/>
<rom name="Super Robot Taisen - Complete Box (Japan) (Disc 1) (Super Robot Wars Complete Box) (Track 1).bin" size="565543104" crc="597ac371" sha1="14017a7ccc3b92e9483085fc744da414a721b68e"/>
<rom name="Super Robot Taisen - Complete Box (Japan) (Disc 1) (Super Robot Wars Complete Box) (Track 2).bin" size="32104800" crc="9b94ea54" sha1="bd1fde88c2b79e3cf8821c969373460d51f3155a"/>
<rom name="Super Robot Taisen - Complete Box (Japan) (Disc 2) (History of Super Robot Wars).cue" size="146" crc="50c54b6d" sha1="990fb4f7d6563eacc9b7ee425a4c34105d2404c6"/>
<rom name="Super Robot Taisen - Complete Box (Japan) (Disc 2) (History of Super Robot Wars).bin" size="642105408" crc="bef35311" sha1="65ffad2101381dbc4821ef1d152029e99d9f0996"/>
-->
<description>Super Robot Taisen Complete Box (Japan)</description>
<year>1999</year>
<publisher>Banpresto</publisher>
<part name="cdrom1" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="super robot taisen - complete box (japan) (disc 1)" sha1="624cc4b224cb211199095a6c2daad947c9d4c6de" />
</diskarea>
</part>
<part name="cdrom2" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="super robot taisen - complete box (japan) (disc 2) (history of super robot wars)" sha1="9ec3ef55ff9ac2c5f94990c74271f6bbb365d3da"/>
</diskarea>
</part>
</software>
<software name="srobotf">
<!-- Original images (Redump)
<rom name="Super Robot Taisen F (Japan).cue" size="" crc="1b9c1216" sha1="d397125bf25c42d3edbb2dd12b8e936a5a77c464"/>
<rom name="Super Robot Taisen F (Japan) (Track 1).bin" size="" crc="c9d941ba" sha1="582019486fa0288100086d3a1866b9b91031c8f7"/>
<rom name="Super Robot Taisen F (Japan) (Track 2).bin" size="" crc="9b94ea54" sha1="bd1fde88c2b79e3cf8821c969373460d51f3155a"/>
-->
<description>Super Robot Taisen F (Japan)</description>
<year>1998</year>
<publisher>Banpresto</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="super robot taisen f (japan)" sha1="3b86350787d8d9512e276f646a6ef7d8fe2191d4" />
</diskarea>
</part>
</software>
<software name="srobotfk">
<!-- Original images (Redump)
<rom name="Super Robot Taisen F Kanketsuhen (Japan).cue" size="" crc="f40ace20" sha1="af84071adadb4c8eb8020b95e1064729cfeb1426"/>
<rom name="Super Robot Taisen F Kanketsuhen (Japan) (Track 1).bin" size="" crc="a04ec282" sha1="28b3988d5e405f5bd602ed42113c709b4bc4e0d4"/>
<rom name="Super Robot Taisen F Kanketsuhen (Japan) (Track 2).bin" size="" crc="9b94ea54" sha1="bd1fde88c2b79e3cf8821c969373460d51f3155a"/>
-->
<description>Super Robot Taisen F Kanketsuhen (Japan)</description>
<year>1999</year>
<publisher>Banpresto</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="super robot taisen f kanketsuhen (japan)" sha1="f2587e200ebb55eee1dcd7092b2e745102d5db3a" />
</diskarea>
</part>
</software>
<software name="ss037pzl" supported="no">
<!-- Unknown source
<rom name="Simple 1500 Series Vol.037 - The Illustration Puzzle &amp; Slide Puzzle (Japan) [SLPS-02958].bin" size="78610896" crc="8d1cf9e1" sha1="051d05d76e349f5a01f1db9c541ac799272d250c"/>
@ -58282,4 +58491,19 @@ use an alternate design found on the demo disk... It might be possible to enable
</part>
</software>
<software name="zanacx">
<!-- Original images (Redump)
<rom name="Zanac x Zanac (Japan).cue" size="87" crc="bf9b92c3" sha1="6a6d9eccb0e4c5d7443e616b0591de3df8643709"/>
<rom name="Zanac x Zanac (Japan).bin" size="379659840" crc="cf5625d4" sha1="8d8e7d6247ba63290b18224639ef7f97e89121d1"/>
-->
<description>Zanac X Zanac (Japan)</description>
<year>2001</year>
<publisher>Compile</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="zanac x zanac (japan)" sha1="93d215a0de3ac5a16b4bc58a058f01f084ada63a" />
</diskarea>
</part>
</software>
</softwarelist>

View File

@ -2196,6 +2196,18 @@ if (MACHINES["RF5C296"]~=null) then
}
end
---------------------------------------------------
--
--@src/devices/machine/ripple_counter.h,MACHINES["RIPPLE_COUNTER"] = true
---------------------------------------------------
if (MACHINES["RIPPLE_COUNTER"]~=null) then
files {
MAME_DIR .. "src/devices/machine/ripple_counter.cpp",
MAME_DIR .. "src/devices/machine/ripple_counter.h",
}
end
---------------------------------------------------
--
--@src/devices/machine/roc10937.h,MACHINES["ROC10937"] = true

View File

@ -535,6 +535,7 @@ MACHINES["RA17XX"] = true
--MACHINES["R64H156"] = true
MACHINES["RF5C296"] = true
--MACHINES["RIOT6532"] = true
MACHINES["RIPPLE_COUNTER"] = true
MACHINES["ROC10937"] = true
MACHINES["RP5C01"] = true
MACHINES["RP5C15"] = true

View File

@ -524,6 +524,7 @@ MACHINES["PROM82S129"] = true
MACHINES["R64H156"] = true
MACHINES["RF5C296"] = true
MACHINES["RIOT6532"] = true
MACHINES["RIPPLE_COUNTER"] = true
MACHINES["ROC10937"] = true
MACHINES["RP5C01"] = true
MACHINES["RP5C15"] = true

View File

@ -13,6 +13,7 @@
#include "bus/rs232/rs232.h"
#include "machine/6821pia.h"
#include "machine/input_merger.h"
#include "machine/ripple_counter.h"
//**************************************************************************
// TYPE DEFINITIONS
@ -29,10 +30,8 @@ public:
ss50_card_interface(mconfig, *this),
m_pia(*this, "pia"),
m_loopback(*this, "loopback"),
m_counter(*this, "counter"),
m_baud_jumper(*this, "BAUD"),
m_cd4024ae_count(0),
m_cd4024ae_clock(false),
m_cd4024ae_reset(true),
m_count_select(false)
{
}
@ -53,17 +52,13 @@ private:
DECLARE_WRITE_LINE_MEMBER(serial_input_w);
DECLARE_WRITE_LINE_MEMBER(reader_control_w);
DECLARE_READ_LINE_MEMBER(count_r);
DECLARE_WRITE_LINE_MEMBER(count_reset_w);
DECLARE_WRITE_LINE_MEMBER(count_select_w);
DECLARE_WRITE_LINE_MEMBER(clock_input_w);
required_device<pia6821_device> m_pia;
required_device<input_merger_device> m_loopback;
required_device<ripple_counter_device> m_counter;
required_ioport m_baud_jumper;
u8 m_cd4024ae_count;
bool m_cd4024ae_clock;
bool m_cd4024ae_reset;
bool m_count_select;
};
@ -113,7 +108,7 @@ MACHINE_CONFIG_MEMBER(ss50_mpc_device::device_add_mconfig)
MCFG_PIA_READPB_HANDLER(IOPORT("STOP")) MCFG_DEVCB_BIT(6)
MCFG_DEVCB_CHAIN_INPUT(READLINE(ss50_mpc_device, count_r)) MCFG_DEVCB_BIT(7)
MCFG_PIA_WRITEPB_HANDLER(WRITELINE(ss50_mpc_device, count_select_w)) MCFG_DEVCB_BIT(2)
MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(ss50_mpc_device, count_reset_w)) MCFG_DEVCB_BIT(0)
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("counter", ripple_counter_device, reset_w)) MCFG_DEVCB_BIT(0)
//MCFG_PIA_IRQA_HANDLER(WRITELINE(ss50_mpc_device, pia_irq_w))
//MCFG_PIA_IRQB_HANDLER(WRITELINE(ss50_mpc_device, pia_irq_w))
@ -126,6 +121,9 @@ MACHINE_CONFIG_MEMBER(ss50_mpc_device::device_add_mconfig)
MCFG_INPUT_MERGER_ANY_HIGH("loopback")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(DEVWRITELINE("outgate", input_merger_device, in_w<1>))
MCFG_DEVICE_ADD("counter", RIPPLE_COUNTER, 0) // CD4024AE (IC3)
MCFG_RIPPLE_COUNTER_STAGES(7) // only Q5 (÷32) and Q4 (÷16) are actually used
MACHINE_CONFIG_END
@ -135,9 +133,6 @@ MACHINE_CONFIG_END
void ss50_mpc_device::device_start()
{
save_item(NAME(m_cd4024ae_count));
save_item(NAME(m_cd4024ae_clock));
save_item(NAME(m_cd4024ae_reset));
save_item(NAME(m_count_select));
}
@ -155,14 +150,7 @@ WRITE_LINE_MEMBER(ss50_mpc_device::reader_control_w)
READ_LINE_MEMBER(ss50_mpc_device::count_r)
{
return BIT(m_cd4024ae_count, m_count_select ? 4 : 3);
}
WRITE_LINE_MEMBER(ss50_mpc_device::count_reset_w)
{
m_cd4024ae_reset = bool(state);
if (state)
m_cd4024ae_count = 0;
return BIT(m_counter->count(), m_count_select ? 4 : 3);
}
WRITE_LINE_MEMBER(ss50_mpc_device::count_select_w)
@ -170,16 +158,6 @@ WRITE_LINE_MEMBER(ss50_mpc_device::count_select_w)
m_count_select = bool(state);
}
WRITE_LINE_MEMBER(ss50_mpc_device::clock_input_w)
{
if (m_cd4024ae_clock != bool(state))
{
m_cd4024ae_clock = bool(state);
if (!state && !m_cd4024ae_reset)
m_cd4024ae_count++;
}
}
//-------------------------------------------------
// register_read - read from a port register
@ -202,13 +180,13 @@ WRITE8_MEMBER(ss50_mpc_device::register_write)
WRITE_LINE_MEMBER(ss50_mpc_device::f110_w)
{
if (m_baud_jumper->read())
clock_input_w(state);
m_counter->clock_w(state);
}
WRITE_LINE_MEMBER(ss50_mpc_device::f300_w)
{
if (!m_baud_jumper->read())
clock_input_w(state);
m_counter->clock_w(state);
}

View File

@ -3788,59 +3788,59 @@ void i386_device::pentium_smi()
m_smi_latched = false;
// save state
WRITE32(m_cr[4], smram_state+SMRAM_IP5_CR4);
WRITE32(m_sreg[ES].limit, smram_state+SMRAM_IP5_ESLIM);
WRITE32(m_sreg[ES].base, smram_state+SMRAM_IP5_ESBASE);
WRITE32(m_sreg[ES].flags, smram_state+SMRAM_IP5_ESACC);
WRITE32(m_sreg[CS].limit, smram_state+SMRAM_IP5_CSLIM);
WRITE32(m_sreg[CS].base, smram_state+SMRAM_IP5_CSBASE);
WRITE32(m_sreg[CS].flags, smram_state+SMRAM_IP5_CSACC);
WRITE32(m_sreg[SS].limit, smram_state+SMRAM_IP5_SSLIM);
WRITE32(m_sreg[SS].base, smram_state+SMRAM_IP5_SSBASE);
WRITE32(m_sreg[SS].flags, smram_state+SMRAM_IP5_SSACC);
WRITE32(m_sreg[DS].limit, smram_state+SMRAM_IP5_DSLIM);
WRITE32(m_sreg[DS].base, smram_state+SMRAM_IP5_DSBASE);
WRITE32(m_sreg[DS].flags, smram_state+SMRAM_IP5_DSACC);
WRITE32(m_sreg[FS].limit, smram_state+SMRAM_IP5_FSLIM);
WRITE32(m_sreg[FS].base, smram_state+SMRAM_IP5_FSBASE);
WRITE32(m_sreg[FS].flags, smram_state+SMRAM_IP5_FSACC);
WRITE32(m_sreg[GS].limit, smram_state+SMRAM_IP5_GSLIM);
WRITE32(m_sreg[GS].base, smram_state+SMRAM_IP5_GSBASE);
WRITE32(m_sreg[GS].flags, smram_state+SMRAM_IP5_GSACC);
WRITE32(m_ldtr.flags, smram_state+SMRAM_IP5_LDTACC);
WRITE32(m_ldtr.limit, smram_state+SMRAM_IP5_LDTLIM);
WRITE32(m_ldtr.base, smram_state+SMRAM_IP5_LDTBASE);
WRITE32(m_gdtr.limit, smram_state+SMRAM_IP5_GDTLIM);
WRITE32(m_gdtr.base, smram_state+SMRAM_IP5_GDTBASE);
WRITE32(m_idtr.limit, smram_state+SMRAM_IP5_IDTLIM);
WRITE32(m_idtr.base, smram_state+SMRAM_IP5_IDTBASE);
WRITE32(m_task.limit, smram_state+SMRAM_IP5_TRLIM);
WRITE32(m_task.base, smram_state+SMRAM_IP5_TRBASE);
WRITE32(m_task.flags, smram_state+SMRAM_IP5_TRACC);
WRITE32(smram_state + SMRAM_IP5_CR4, m_cr[4]);
WRITE32(smram_state + SMRAM_IP5_ESLIM, m_sreg[ES].limit);
WRITE32(smram_state + SMRAM_IP5_ESBASE, m_sreg[ES].base);
WRITE32(smram_state + SMRAM_IP5_ESACC, m_sreg[ES].flags);
WRITE32(smram_state + SMRAM_IP5_CSLIM, m_sreg[CS].limit);
WRITE32(smram_state + SMRAM_IP5_CSBASE, m_sreg[CS].base);
WRITE32(smram_state + SMRAM_IP5_CSACC, m_sreg[CS].flags);
WRITE32(smram_state + SMRAM_IP5_SSLIM, m_sreg[SS].limit);
WRITE32(smram_state + SMRAM_IP5_SSBASE, m_sreg[SS].base);
WRITE32(smram_state + SMRAM_IP5_SSACC, m_sreg[SS].flags);
WRITE32(smram_state + SMRAM_IP5_DSLIM, m_sreg[DS].limit);
WRITE32(smram_state + SMRAM_IP5_DSBASE, m_sreg[DS].base);
WRITE32(smram_state + SMRAM_IP5_DSACC, m_sreg[DS].flags);
WRITE32(smram_state + SMRAM_IP5_FSLIM, m_sreg[FS].limit);
WRITE32(smram_state + SMRAM_IP5_FSBASE, m_sreg[FS].base);
WRITE32(smram_state + SMRAM_IP5_FSACC, m_sreg[FS].flags);
WRITE32(smram_state + SMRAM_IP5_GSLIM, m_sreg[GS].limit);
WRITE32(smram_state + SMRAM_IP5_GSBASE, m_sreg[GS].base);
WRITE32(smram_state + SMRAM_IP5_GSACC, m_sreg[GS].flags);
WRITE32(smram_state + SMRAM_IP5_LDTACC, m_ldtr.flags);
WRITE32(smram_state + SMRAM_IP5_LDTLIM, m_ldtr.limit);
WRITE32(smram_state + SMRAM_IP5_LDTBASE, m_ldtr.base);
WRITE32(smram_state + SMRAM_IP5_GDTLIM, m_gdtr.limit);
WRITE32(smram_state + SMRAM_IP5_GDTBASE, m_gdtr.base);
WRITE32(smram_state + SMRAM_IP5_IDTLIM, m_idtr.limit);
WRITE32(smram_state + SMRAM_IP5_IDTBASE, m_idtr.base);
WRITE32(smram_state + SMRAM_IP5_TRLIM, m_task.limit);
WRITE32(smram_state + SMRAM_IP5_TRBASE, m_task.base);
WRITE32(smram_state + SMRAM_IP5_TRACC, m_task.flags);
WRITE32(m_sreg[ES].selector, smram_state+SMRAM_ES);
WRITE32(m_sreg[CS].selector, smram_state+SMRAM_CS);
WRITE32(m_sreg[SS].selector, smram_state+SMRAM_SS);
WRITE32(m_sreg[DS].selector, smram_state+SMRAM_DS);
WRITE32(m_sreg[FS].selector, smram_state+SMRAM_FS);
WRITE32(m_sreg[GS].selector, smram_state+SMRAM_GS);
WRITE32(m_ldtr.segment, smram_state+SMRAM_LDTR);
WRITE32(m_task.segment, smram_state+SMRAM_TR);
WRITE32(smram_state + SMRAM_ES, m_sreg[ES].selector);
WRITE32(smram_state + SMRAM_CS, m_sreg[CS].selector);
WRITE32(smram_state + SMRAM_SS, m_sreg[SS].selector);
WRITE32(smram_state + SMRAM_DS, m_sreg[DS].selector);
WRITE32(smram_state + SMRAM_FS, m_sreg[FS].selector);
WRITE32(smram_state + SMRAM_GS, m_sreg[GS].selector);
WRITE32(smram_state + SMRAM_LDTR, m_ldtr.segment);
WRITE32(smram_state + SMRAM_TR, m_task.segment);
WRITE32(m_dr[7], smram_state+SMRAM_DR7);
WRITE32(m_dr[6], smram_state+SMRAM_DR6);
WRITE32(REG32(EAX), smram_state+SMRAM_EAX);
WRITE32(REG32(ECX), smram_state+SMRAM_ECX);
WRITE32(REG32(EDX), smram_state+SMRAM_EDX);
WRITE32(REG32(EBX), smram_state+SMRAM_EBX);
WRITE32(REG32(ESP), smram_state+SMRAM_ESP);
WRITE32(REG32(EBP), smram_state+SMRAM_EBP);
WRITE32(REG32(ESI), smram_state+SMRAM_ESI);
WRITE32(REG32(EDI), smram_state+SMRAM_EDI);
WRITE32(m_eip, smram_state+SMRAM_EIP);
WRITE32(old_flags, smram_state+SMRAM_EFLAGS);
WRITE32(m_cr[3], smram_state+SMRAM_CR3);
WRITE32(old_cr0, smram_state+SMRAM_CR0);
WRITE32(smram_state + SMRAM_DR7, m_dr[7]);
WRITE32(smram_state + SMRAM_DR6, m_dr[6]);
WRITE32(smram_state + SMRAM_EAX, REG32(EAX));
WRITE32(smram_state + SMRAM_ECX, REG32(ECX));
WRITE32(smram_state + SMRAM_EDX, REG32(EDX));
WRITE32(smram_state + SMRAM_EBX, REG32(EBX));
WRITE32(smram_state + SMRAM_ESP, REG32(ESP));
WRITE32(smram_state + SMRAM_EBP, REG32(EBP));
WRITE32(smram_state + SMRAM_ESI, REG32(ESI));
WRITE32(smram_state + SMRAM_EDI, REG32(EDI));
WRITE32(smram_state + SMRAM_EIP, m_eip);
WRITE32(smram_state + SMRAM_EFLAGS, old_flags);
WRITE32(smram_state + SMRAM_CR3, m_cr[3]);
WRITE32(smram_state + SMRAM_CR0, old_cr0);
m_sreg[DS].selector = m_sreg[ES].selector = m_sreg[FS].selector = m_sreg[GS].selector = m_sreg[SS].selector = 0;
m_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;

View File

@ -92,6 +92,15 @@ March 2013 NPW:
divider to the MC6809E and not to the MC6809; the confusion resulting
from this error is in the process of being straightened out.
Maximum clock ratings:
Q & E EXTAL
MC6809(E) 1.0 MHz 4.0 MHz
MC68A09(E) 1.5 MHz 6.0 MHz
MC68B09(E) 2.0 MHz 8.0 MHz
HD63B09(E) 2.0 MHz 8.0 MHz
HD63C09(E) 3.0 MHz 12.0 MHz
*****************************************************************************/
#include "emu.h"

View File

@ -0,0 +1,202 @@
// license:BSD-3-Clause
// copyright-holders:AJR
/**********************************************************************
Generic binary ripple counter emulation
This device emulates basic ripple counter logic ICs with falling-
edge clocks and a synchronous reset inputs such as CD4040 and
74LS393.
The optional 8-bit ROM interface is intended to help stream ROM
data to sound chips that lack memory interfaces of their own
(e.g. MSM5205, TMS5110).
**********************************************************************/
#include "emu.h"
#include "machine/ripple_counter.h"
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
// device type definition
DEFINE_DEVICE_TYPE(RIPPLE_COUNTER, ripple_counter_device, "ripple_counter", "Generic ripple counter")
//**************************************************************************
// RIPPLE COUNTER DEVICE
//**************************************************************************
//-------------------------------------------------
// ripple_counter_device - constructor
//-------------------------------------------------
ripple_counter_device::ripple_counter_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, RIPPLE_COUNTER, tag, owner, clock),
device_rom_interface(mconfig, *this, 0, ENDIANNESS_LITTLE, 8),
m_count_out_cb(*this),
m_rom_out_cb(*this),
m_count_timer(nullptr),
m_count_mask(0),
m_count(1),
m_clk(false),
m_reset(false)
{
}
//-------------------------------------------------
// static_set_stages - configure the number of
// stages used to count
//-------------------------------------------------
void ripple_counter_device::static_set_stages(device_t &device, u8 stages)
{
auto &dev = downcast<ripple_counter_device &>(device);
dev.m_count_mask = (1U << stages) - 1;
dev.set_rom_addr_width(stages);
}
//-------------------------------------------------
// memory_space_config - return a description of
// any address spaces owned by this device
//-------------------------------------------------
device_memory_interface::space_config_vector ripple_counter_device::memory_space_config() const
{
if (m_rom_out_cb.isnull())
return space_config_vector();
else
return device_rom_interface::memory_space_config();
}
//-------------------------------------------------
// device_validity_check - validate a device after
// the configuration has been constructed
//-------------------------------------------------
void ripple_counter_device::device_validity_check(validity_checker &valid) const
{
if (m_count_mask == 0)
osd_printf_error("No counting stages configured\n");
}
//-------------------------------------------------
// device_resolve_objects - resolve objects that
// may be needed for other devices to set
// initial conditions at start time
//-------------------------------------------------
void ripple_counter_device::device_resolve_objects()
{
// resolve callbacks
m_count_out_cb.resolve_safe();
m_rom_out_cb.resolve();
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void ripple_counter_device::device_start()
{
// initialize timers
m_count_timer = timer_alloc(TIMER_COUNT);
// register internal state
save_item(NAME(m_count));
save_item(NAME(m_clk));
save_item(NAME(m_reset));
}
//-------------------------------------------------
// device_clock_changed - called when the
// device clock is altered in any way
//-------------------------------------------------
void ripple_counter_device::device_clock_changed()
{
attotime freq = m_reset ? attotime::never : clocks_to_attotime(1);
m_count_timer->adjust(freq, 0, freq);
}
//-------------------------------------------------
// rom_bank_updated - called when the ROM bank
// is changed
//-------------------------------------------------
void ripple_counter_device::rom_bank_updated()
{
m_rom_out_cb(read_byte(m_count));
}
//-------------------------------------------------
// set_count - update the count and associated
// outputs
//-------------------------------------------------
void ripple_counter_device::set_count(u32 count)
{
m_count = count;
m_count_out_cb(count);
if (!m_rom_out_cb.isnull())
m_rom_out_cb(read_byte(count));
}
//-------------------------------------------------
// clock_w - handle falling-edge clock input
//-------------------------------------------------
WRITE_LINE_MEMBER(ripple_counter_device::clock_w)
{
if (m_clk != bool(state))
{
m_clk = bool(state);
if (!state && !m_reset)
set_count((m_count + 1) & m_count_mask);
}
}
//-------------------------------------------------
// reset_w - handle active-high reset input
//-------------------------------------------------
WRITE_LINE_MEMBER(ripple_counter_device::reset_w)
{
if (m_reset != bool(state))
{
m_reset = bool(state);
if (state && m_count != 0)
set_count(0);
// stop or start the count timer as required
notify_clock_changed();
}
}
//-------------------------------------------------
// device_timer - called whenever a device timer
// fires
//-------------------------------------------------
void ripple_counter_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
switch (id)
{
case TIMER_COUNT:
set_count((m_count + 1) & m_count_mask);
break;
}
}

View File

@ -0,0 +1,92 @@
// license:BSD-3-Clause
// copyright-holders:AJR
/**********************************************************************
Generic binary ripple counter emulation
**********************************************************************/
#ifndef MAME_MACHINE_RIPPLE_COUNTER_H
#define MAME_MACHINE_RIPPLE_COUNTER_H
#pragma once
//**************************************************************************
// CONFIGURATION MACROS
//**************************************************************************
#define MCFG_RIPPLE_COUNTER_STAGES(_stages) \
ripple_counter_device::static_set_stages(*device, _stages);
// output callbacks
#define MCFG_RIPPLE_COUNTER_COUNT_OUT_CB(_devcb) \
devcb = &ripple_counter_device::static_set_count_out_cb(*device, DEVCB_##_devcb);
#define MCFG_RIPPLE_COUNTER_ROM_OUT_CB(_devcb) \
devcb = &ripple_counter_device::static_set_rom_out_cb(*device, DEVCB_##_devcb);
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// ======================> ripple_counter_device
class ripple_counter_device : public device_t, public device_rom_interface
{
public:
// construction/destruction
ripple_counter_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
// static configuration
static void static_set_stages(device_t &device, u8 stages);
template<class Object> static devcb_base &static_set_count_out_cb(device_t &device, Object &&cb)
{ return downcast<ripple_counter_device &>(device).m_count_out_cb.set_callback(std::forward<Object>(cb)); }
template<class Object> static devcb_base &static_set_rom_out_cb(device_t &device, Object &&cb)
{ return downcast<ripple_counter_device &>(device).m_rom_out_cb.set_callback(std::forward<Object>(cb)); }
// control line handlers
DECLARE_WRITE_LINE_MEMBER(clock_w);
DECLARE_WRITE_LINE_MEMBER(reset_w);
// getters
u32 count() const { return m_count; }
protected:
// device-level overrides
virtual void device_validity_check(validity_checker &valid) const override;
virtual void device_resolve_objects() override;
virtual void device_start() override;
virtual void device_clock_changed() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// device_rom_interface overrides
virtual space_config_vector memory_space_config() const override;
virtual void rom_bank_updated() override;
private:
// internal helpers
void set_count(u32 count);
// device callbacks
devcb_write32 m_count_out_cb;
devcb_write8 m_rom_out_cb;
// device timers
enum
{
TIMER_COUNT
};
emu_timer *m_count_timer;
// configuration parameters
u32 m_count_mask;
// running state
u32 m_count;
bool m_clk;
bool m_reset;
};
// device type definition
DECLARE_DEVICE_TYPE(RIPPLE_COUNTER, ripple_counter_device)
#endif // MAME_MACHINE_RIPPLE_COUNTER_H

View File

@ -236,7 +236,7 @@ void vrc5074_device::device_start()
// Save states
// m_sdram
save_item(NAME(m_sdram[0]));
save_item(NAME(m_sdram[1]));
if (m_sdram_size[1]) save_item(NAME(m_sdram[1]));
save_item(NAME(m_cpu_regs));
save_item(NAME(m_nile_irq_state));
save_item(NAME(m_sdram_addr));

View File

@ -4,7 +4,9 @@
device_rom_interface::device_rom_interface(const machine_config &mconfig, device_t &device, u8 addrwidth, endianness_t endian, u8 datawidth) :
device_memory_interface(mconfig, device),
m_rom_tag(device.basetag()),
m_rom_config("rom", endian, datawidth, addrwidth)
m_rom_config("rom", endian, datawidth, addrwidth),
m_bank(nullptr),
m_cur_bank(-1)
{
}
@ -42,12 +44,14 @@ void device_rom_interface::set_rom_bank(int bank)
bank = bank % m_bank_count;
}
m_cur_bank = bank;
m_bank->set_entry(bank);
rom_bank_updated();
if (m_cur_bank != bank) {
m_cur_bank = bank;
m_bank->set_entry(bank);
rom_bank_updated();
}
}
void device_rom_interface::reset_bank()
void device_rom_interface::interface_post_load()
{
if(m_bank)
m_bank->set_entry(m_cur_bank);
@ -85,12 +89,12 @@ void device_rom_interface::set_rom(const void *base, u32 size)
void device_rom_interface::interface_pre_start()
{
if(!has_space(0))
return;
m_rom_direct = space().direct<0>();
m_bank = nullptr;
m_cur_bank = -1;
device().save_item(NAME(m_cur_bank));
device().save_item(NAME(m_bank_count));
device().machine().save().register_postload(save_prepost_delegate(FUNC(device_rom_interface::reset_bank), this));
if(!has_configured_map(0)) {
memory_region *reg = device().owner()->memregion(m_rom_tag);

View File

@ -38,24 +38,22 @@ public:
protected:
virtual void rom_bank_updated() = 0;
virtual space_config_vector memory_space_config() const override;
void set_rom_endianness(endianness_t endian) { assert(!device().configured()); m_rom_config.m_endianness = endian; }
void set_rom_data_width(u8 width) { assert(!device().configured()); m_rom_config.m_data_width = width; }
void set_rom_addr_width(u8 width) { assert(!device().configured()); m_rom_config.m_addr_width = m_rom_config.m_logaddr_width = width; }
private:
const char *m_rom_tag;
const address_space_config m_rom_config;
address_space_config m_rom_config;
direct_read_data<0> *m_rom_direct;
memory_bank *m_bank;
int m_cur_bank, m_bank_count;
virtual space_config_vector memory_space_config() const override;
virtual void interface_pre_start() override;
DECLARE_READ8_MEMBER(z8_r);
DECLARE_READ16_MEMBER(z16_r);
DECLARE_READ32_MEMBER(z32_r);
DECLARE_READ64_MEMBER(z64_r);
void reset_bank();
virtual void interface_post_load() override;
};
#endif // MAME_EMU_DIROM_H

View File

@ -16,21 +16,24 @@ of another TI or the Geneve.
Chips:
TMS9995 - CPU
TMS9929 - Video
TMS9911 - DMA to floppy (not emulated)
TMS9909 - Floppy Disk Controller (not emulated)
TMS9902 - UART (x2) (not usable with rs232.h)
TMS9911 - DMA to floppy (unemulated device)
TMS9909 - Floppy Disk Controller (unemulated device)
TMS9902 - UART (x2) (device not usable with rs232.h)
AY-5-2376 - Keyboard controller
All input to be in uppercase. Note that "lowercase" is just smaller uppercase,
and is not acceptable as input.
There's no option in BASIC to produce sound. It will beep if an invalid key
(usually a control key) is pressed.
To clear the screen press Ctrl L.
ToDo:
- Screen corrupts when scrolling
- Unemulated devices
- Cassette
- Keyboard to use AY device
- Banking
- Memory manager device
- Memory mapping unit (74LS610)
- Various CRU I/O
Note that the MAME implementation of CRU addresses is not the same as real
@ -48,6 +51,8 @@ packed into a single address-byte (CRU 0 = bit 0, etc). So the address is
#include "video/tms9928a.h"
//#include "machine/tms9902.h"
#include "machine/keyboard.h"
#include "sound/beep.h"
#include "speaker.h"
class cortex_state : public driver_device
{
@ -55,27 +60,34 @@ public:
cortex_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_p_ram(*this, "ram")
, m_beep(*this, "beeper")
, m_io_dsw(*this, "DSW")
{ }
void kbd_put(u8 data);
DECLARE_WRITE_LINE_MEMBER(keyboard_ack_w);
DECLARE_WRITE_LINE_MEMBER(romsw_w);
DECLARE_WRITE_LINE_MEMBER(vdp_int_w);
DECLARE_READ8_MEMBER(pio_r);
DECLARE_READ8_MEMBER(keyboard_r);
DECLARE_DRIVER_INIT(init);
private:
bool m_cru0005;
bool m_kbd_ack;
bool m_vdp_int;
uint8_t m_term_data;
virtual void machine_reset() override;
required_device<tms9995_device> m_maincpu;
required_shared_ptr<uint8_t> m_p_ram;
required_device<beep_device> m_beep;
required_ioport m_io_dsw;
};
static ADDRESS_MAP_START( mem_map, AS_PROGRAM, 8, cortex_state )
AM_RANGE(0x0000, 0xefff) AM_RAM AM_SHARE("ram")
AM_RANGE(0x0000, 0x7fff) AM_READ_BANK("bankr0") AM_WRITE_BANK("bankw0")
AM_RANGE(0x8000, 0xefff) AM_RAM
AM_RANGE(0xf100, 0xf11f) AM_RAM // memory mapping unit
AM_RANGE(0xf120, 0xf120) AM_DEVREADWRITE("tms9928a", tms9928a_device, vram_read, vram_write)
AM_RANGE(0xf121, 0xf121) AM_DEVREADWRITE("tms9928a", tms9928a_device, register_read, register_write)
AM_RANGE(0xf120, 0xf120) AM_DEVREADWRITE("crtc", tms9928a_device, vram_read, vram_write)
AM_RANGE(0xf121, 0xf121) AM_DEVREADWRITE("crtc", tms9928a_device, register_read, register_write)
//AM_RANGE(0xf140, 0xf147) // fdc tms9909
ADDRESS_MAP_END
@ -84,24 +96,31 @@ static ADDRESS_MAP_START( io_map, AS_IO, 8, cortex_state )
AM_RANGE(0x0000, 0x0007) AM_MIRROR(0x18) AM_DEVWRITE("control", ls259_device, write_d0)
AM_RANGE(0x0000, 0x0000) AM_READ(pio_r)
AM_RANGE(0x0001, 0x0001) AM_READ(keyboard_r)
// read ranges are incorrect - should be 1/8th of current values.
//AM_RANGE(0x0080, 0x00bf) AM_DEVREADWRITE("uart1", tms9902_device, cruread, cruwrite) // RS232
//AM_RANGE(0x0180, 0x01bf) AM_DEVREADWRITE("uart2", tms9902_device, cruread, cruwrite) // Cassette
//AM_RANGE(0x01c0, 0x01ff) // DMA controller - TMS9911
//AM_RANGE(0x0800, 0x080f) AM_WRITE(cent_data_w)
//AM_RANGE(0x0810, 0x0811) AM_WRITE(cent_strobe_w)
//AM_RANGE(0x0812, 0x0813) AM_READ(cent_stat_r)
//AM_RANGE(0x1ee0, 0x1eef) AM_READWRITE(cpu_int_r,cpu_int_w)
//AM_RANGE(0x1fda, 0x1fdb) AM_READWRITE(cpu_int1_r,cpu_int1_w)
//AM_RANGE(0x0040, 0x005f) AM_DEVWRITE("uart1", tms9902_device, cruwrite) // RS232 (r12 = 80-bf)
//AM_RANGE(0x0008, 0x000b) AM_DEVREAD("uart1", tms9902_device, cruread) // RS232
//AM_RANGE(0x00c0, 0x00df) AM_DEVWRITE("uart2", tms9902_device, cruwrite) // Cassette (r12 = 180-1bf)
//AM_RANGE(0x0018, 0x001b) AM_DEVREAD("uart2", tms9902_device, cruread) // Cassette
//AM_RANGE(0x00e0, 0x00ff) AM_WRITE("dma", tms9911_device, write) // r12 = 1c0-1fe
//AM_RANGE(0x001c, 0x001f) AM_READ("dma", tms9911_device, read) // if reading is needed
//AM_RANGE(0x0400, 0x0407) AM_WRITE(cent_data_w) // r12 = 800-80e
//AM_RANGE(0x0408, 0x0408) AM_WRITE(cent_strobe_w) // r12 = 810
//AM_RANGE(0x0081, 0x0081) AM_READ(cent_stat_r) // CRU 409 (r12 = 812)
ADDRESS_MAP_END
/* Input ports */
static INPUT_PORTS_START( cortex )
PORT_START("DSW")
PORT_DIPNAME( 0x04, 0x00, "DISK SIZE")
PORT_DIPSETTING( 0x04, "20cm")
PORT_DIPSETTING( 0x00, "13cm")
PORT_DIPNAME( 0x08, 0x08, "DISK DENSITY")
PORT_DIPSETTING( 0x08, "Double")
PORT_DIPSETTING( 0x00, "Single")
INPUT_PORTS_END
READ8_MEMBER( cortex_state::pio_r )
{
return (m_cru0005 ? 0x20 : 0) | 0xdf;
return (m_kbd_ack ? 0x20 : 0) | (m_vdp_int ? 0x40 : 0) | m_io_dsw->read() | 0x93;
}
READ8_MEMBER( cortex_state::keyboard_r )
@ -114,25 +133,46 @@ WRITE_LINE_MEMBER( cortex_state::keyboard_ack_w )
if (!state)
{
m_maincpu->set_input_line(INT_9995_INT4, CLEAR_LINE);
m_cru0005 = 1;
m_kbd_ack = 1;
}
}
WRITE_LINE_MEMBER( cortex_state::romsw_w )
{
membank("bankr0")->set_entry(state ? 0 : 1);
}
WRITE_LINE_MEMBER( cortex_state::vdp_int_w )
{
m_vdp_int = state ? 0 : 1; // change polarity to match mame
}
void cortex_state::kbd_put(u8 data)
{
m_term_data = data;
m_cru0005 = 0;
m_kbd_ack = 0;
m_maincpu->set_input_line(INT_9995_INT4, ASSERT_LINE);
}
void cortex_state::machine_reset()
{
m_cru0005 = 1;
uint8_t* ROM = memregion("maincpu")->base();
memcpy(m_p_ram, ROM, 0x6000);
m_kbd_ack = 1;
m_vdp_int = 0;
m_beep->set_state(0);
membank("bankr0")->set_entry(1); // point at rom
membank("bankw0")->set_entry(0); // always write to ram
m_maincpu->ready_line(ASSERT_LINE);
}
DRIVER_INIT_MEMBER( cortex_state, init )
{
uint8_t *main = memregion("maincpu")->base();
membank("bankr0")->configure_entry(1, &main[0x10000]);
membank("bankr0")->configure_entry(0, &main[0x00000]);
membank("bankw0")->configure_entry(0, &main[0x00000]);
}
static MACHINE_CONFIG_START( cortex )
/* basic machine hardware */
/* TMS9995 CPU @ 12.0 MHz */
@ -146,35 +186,42 @@ static MACHINE_CONFIG_START( cortex )
//MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cortex_state, ebus_int_ack_w))
//MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cortex_state, ebus_to_en_w))
//MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cortex_state, disk_size_w))
//MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(cortex_state, eprom_on_off_w))
//MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(cortex_state, bell_en_w))
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(cortex_state, romsw_w))
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("beeper", beep_device, set_state))
/* video hardware */
MCFG_DEVICE_ADD( "tms9928a", TMS9929A, XTAL_10_738635MHz / 2 )
MCFG_DEVICE_ADD( "crtc", TMS9929A, XTAL_10_738635MHz / 2 )
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("maincpu", INT_9995_INT1))
MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(cortex_state, vdp_int_w))
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_SCREEN_ADD_PAL( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
MCFG_SCREEN_UPDATE_DEVICE( "crtc", tms9928a_device, screen_update )
MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0)
MCFG_GENERIC_KEYBOARD_CB(PUT(cortex_state, kbd_put))
//MCFG_DEVICE_ADD("uart1", TMS9902, XTAL_12MHz / 4)
//MCFG_DEVICE_ADD("uart2", TMS9902, XTAL_12MHz / 4)
/* Sound */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("beeper", BEEP, 950) // guess
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.05)
MACHINE_CONFIG_END
/* ROM definition */
ROM_START( cortex )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF )
ROM_SYSTEM_BIOS(0, "basic", "Cortex Bios")
ROMX_LOAD( "cortex.ic47", 0x0000, 0x2000, CRC(bdb8c7bd) SHA1(340829dcb7a65f2e830fd5aff82a312e3ed7918f), ROM_BIOS(1))
ROMX_LOAD( "cortex.ic46", 0x2000, 0x2000, CRC(4de459ea) SHA1(00a42fe556d4ffe1f85b2ce369f544b07fbd06d9), ROM_BIOS(1))
ROMX_LOAD( "cortex.ic45", 0x4000, 0x2000, CRC(b0c9b6e8) SHA1(4e20c3f0b7546b803da4805cd3b8616f96c3d923), ROM_BIOS(1))
ROMX_LOAD( "cortex.ic47", 0x10000, 0x2000, CRC(bdb8c7bd) SHA1(340829dcb7a65f2e830fd5aff82a312e3ed7918f), ROM_BIOS(1))
ROMX_LOAD( "cortex.ic46", 0x12000, 0x2000, CRC(4de459ea) SHA1(00a42fe556d4ffe1f85b2ce369f544b07fbd06d9), ROM_BIOS(1))
ROMX_LOAD( "cortex.ic45", 0x14000, 0x2000, CRC(b0c9b6e8) SHA1(4e20c3f0b7546b803da4805cd3b8616f96c3d923), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "forth", "FIG-Forth")
ROMX_LOAD( "forth.ic47", 0x0000, 0x2000, CRC(999034be) SHA1(0dcc7404c38aa0ae913101eb0aa98da82104b5d4), ROM_BIOS(2))
ROMX_LOAD( "forth.ic46", 0x2000, 0x2000, CRC(8eca54cc) SHA1(0f1680e941ef60bb9bde9a4b843b78f30dff3202), ROM_BIOS(2))
ROMX_LOAD( "forth.ic47", 0x10000, 0x2000, CRC(999034be) SHA1(0dcc7404c38aa0ae913101eb0aa98da82104b5d4), ROM_BIOS(2))
ROMX_LOAD( "forth.ic46", 0x12000, 0x2000, CRC(8eca54cc) SHA1(0f1680e941ef60bb9bde9a4b843b78f30dff3202), ROM_BIOS(2))
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
COMP( 1982, cortex, 0, 0, cortex, cortex, cortex_state, 0, "Powertran Cybernetics", "Cortex", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
COMP( 1982, cortex, 0, 0, cortex, cortex, cortex_state, init, "Powertran Cybernetics", "Cortex", MACHINE_NOT_WORKING )

View File

@ -57,6 +57,7 @@ TODO:
- Keyboard
- Analog filters and VCA on the back end of the 5503
- SQ-80 support (additional banking, FDC)
SQ-80 is totally broken now, jumping into unmapped memory
NOTES:
Commands from KPC are all 2 bytes

View File

@ -1500,8 +1500,8 @@ GAME( 1996, gticlub, 0, gticlub, gticlub, gticlub_state, gticlub, R
GAME( 1996, gticlubu, gticlub, gticlub, gticlub, gticlub_state, gticlub, ROT0, "Konami", "GTI Club (ver UAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1996, gticluba, gticlub, gticlub, gticlub, gticlub_state, gticlub, ROT0, "Konami", "GTI Club (ver AAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1996, gticlubj, gticlub, gticlub, gticlub, gticlub_state, gticlub, ROT0, "Konami", "GTI Club (ver JAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1996, thunderh, 0, thunderh, thunderh, gticlub_state, gticlub, ROT0, "Konami", "Operation Thunder Hurricane (ver EAA)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
GAME( 1996, thunderhu, thunderh, thunderh, thunderh, gticlub_state, gticlub, ROT0, "Konami", "Operation Thunder Hurricane (ver UAA)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
GAME( 1997, thunderh, 0, thunderh, thunderh, gticlub_state, gticlub, ROT0, "Konami", "Operation Thunder Hurricane (ver EAA)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
GAME( 1997, thunderhu, thunderh, thunderh, thunderh, gticlub_state, gticlub, ROT0, "Konami", "Operation Thunder Hurricane (ver UAA)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
GAME( 1997, slrasslt, 0, slrasslt, slrasslt, gticlub_state, gticlub, ROT0, "Konami", "Solar Assault (ver UAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Based on Revised code
GAME( 1997, slrassltj, slrasslt, slrasslt, slrasslt, gticlub_state, gticlub, ROT0, "Konami", "Solar Assault Revised (ver JAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1997, slrassltj1, slrasslt, slrasslt, slrasslt, gticlub_state, gticlub, ROT0, "Konami", "Solar Assault (ver JAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )

View File

@ -368,7 +368,9 @@ M6809E runs at 1.532mhz ( NOT 3.072mhz)
Vsync is 61hz
These clocks make the emulation run too fast. Real hardware video: http://d.hatena.ne.jp/video/niconico/sm3842410
Hsync is 15,56khz
These clocks make the emulation run too fast.
*/
static MACHINE_CONFIG_START( ironhors )

View File

@ -1106,6 +1106,49 @@ static INPUT_PORTS_START( kazan )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( inyourfa )
PORT_INCLUDE( megasys1_generic )
PORT_START("DSW")
PORT_DIPNAME( 0x0003, 0x0003, "Game Time" ) PORT_DIPLOCATION("SW1:1,2")
PORT_DIPSETTING( 0x0002, "00:50" )
PORT_DIPSETTING( 0x0001, "01:00" )
PORT_DIPSETTING( 0x0003, "01:10" )
PORT_DIPSETTING( 0x0000, "01:20" )
PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW1:3" )
PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW1:4" )
PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW1:5" )
PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW1:6" )
PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW1:7" )
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2,3")
PORT_DIPSETTING( 0x0400, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0200, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0700, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0300, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0500, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x0100, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0600, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
PORT_DIPNAME( 0x3800, 0x3800, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:4,5,6")
PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x2000, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x1000, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x3800, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x1800, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x2800, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x0800, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x3000, DEF_STR( 1C_5C ) )
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x4000, DEF_STR( On ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPNAME( 0x8000, 0x8000, "Freeze Screen (Cheat)") PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( jitsupro )
PORT_INCLUDE( hachoo )
@ -2989,6 +3032,52 @@ ROM_START( iganinju )
ROM_LOAD( "iga.131", 0x0000, 0x0200, CRC(1d877538) SHA1(a5be0dc65dcfc36fbba10d1fddbe155e24b6122f) )
ROM_END
ROM_START( inyourfa )
ROM_REGION( 0x60000, "maincpu", 0 ) /* Main CPU Code */
ROM_LOAD16_BYTE( "02.27C1001", 0x000000, 0x020000, CRC(ae77e5b7) SHA1(222e1f4c3d82cdedb88ec524ea11500145bc8c87) )
ROM_LOAD16_BYTE( "01.27C1001", 0x000001, 0x020000, CRC(e5ea92ef) SHA1(0afcaa1451572aee7486b76c21bdd4617d2b25d2) )
ROM_LOAD16_BYTE( "03.27C512", 0x040000, 0x010000, CRC(a1efe9be) SHA1(3f49c337f0cd8634d0049c80631e32ea887d8fef) )
ROM_LOAD16_BYTE( "04.27C512", 0x040001, 0x010000, CRC(f786cf3e) SHA1(83de4e679e34bbd2bdad62f2c3b707cf032942b5) )
ROM_REGION( 0x20000, "audiocpu", 0 ) /* Sound CPU Code */
ROM_LOAD16_BYTE( "05.27C512", 0x000000, 0x010000, CRC(1737ed64) SHA1(20be59c43d7975fcc5048f1ee9ed5af893bdef85) )
ROM_LOAD16_BYTE( "06.27C512", 0x000001, 0x010000, CRC(9f12bcb9) SHA1(7c5faf6a295b2124e16823f50e57b234b6127a38) )
ROM_REGION( 0x1000, "mcu", 0 ) /* M50747 MCU Code */
ROM_LOAD( "m50747", 0x0000, 0x1000, NO_DUMP )
ROM_REGION( 0x080000, "scroll0", 0 ) /* Scroll 0 */
ROM_LOAD( "11.27C1001", 0x000000, 0x020000, CRC(451a1428) SHA1(c017ef4dd3dffd26a93f5b926d80fd5e7bd7dea1) )
ROM_LOAD( "12.27C1001", 0x020000, 0x020000, CRC(9ead7432) SHA1(0690b640ebe9d1461f44040a33236705a303dc7e) )
ROM_LOAD( "13.27C1001", 0x040000, 0x020000, CRC(7e39842a) SHA1(00a4c86e8ef6e8e20d8f01eccd7d37f46be5f904) )
ROM_LOAD( "14.27C1001", 0x060000, 0x020000, CRC(a91a3569) SHA1(0e530cdc0cf5ff0db589fb644c2181d35701fb2e) )
ROM_REGION( 0x080000, "scroll1", 0 ) /* Scroll 1 */
ROM_LOAD( "15.27C1001", 0x000000, 0x020000, CRC(420081b6) SHA1(02fedf7bc18a1b8f12b4e549a910801c0e315a32) )
ROM_LOAD( "16.27C1001", 0x020000, 0x020000, CRC(87b1a582) SHA1(75a8762041cbd72fad821083ce9ea65474e4b2c8) )
ROM_LOAD( "17.27C1001", 0x040000, 0x020000, CRC(00857146) SHA1(1a2e6ac6efbec4a825525933b92de933233ad3b2) )
ROM_FILL ( 0x60000, 0x20000, 0xff )// 18? not populated?
ROM_REGION( 0x020000, "scroll2", 0 ) /* Scroll 2 */
ROM_LOAD( "19.27C1001", 0x000000, 0x020000, CRC(b82c94ec) SHA1(cf83355fb8941cf4332b764bb7de01d4c2aead21) )
ROM_REGION( 0x080000, "sprites", 0 ) /* Sprites */
ROM_LOAD( "20.27C1001", 0x000000, 0x020000, CRC(4a322d18) SHA1(17a514e50da13bbcbecfbe186bc99c5383eefd38) )
ROM_LOAD( "21.27C1001", 0x020000, 0x020000, CRC(7bb4b35d) SHA1(001ef590a5245126182ab7af54bc1c56012ab218) )
ROM_LOAD( "22.27C1001", 0x040000, 0x020000, CRC(1dc040d2) SHA1(bda3a441a20f253b67ca646d71d3703a8c59e210) )
ROM_LOAD( "23.27C1001", 0x060000, 0x020000, CRC(50478530) SHA1(a17b8fdba4fbcbb2d0b715d5cfb2192edbf5a457) )
ROM_REGION( 0x040000, "oki1", 0 ) /* Samples */
ROM_LOAD( "09.27C1001", 0x000000, 0x020000, CRC(27f4bfb4) SHA1(36c8c8b73f26d812711403135a8210af520efb66) )
ROM_LOAD( "10.27C1001", 0x020000, 0x020000, CRC(cf5430ff) SHA1(8d0b1ab9c25312a65fa534a758f7f3ab01b3b593) )
ROM_REGION( 0x040000, "oki2", 0 ) /* Samples */
ROM_LOAD( "07.27C1001", 0x000000, 0x020000, CRC(dc254c7c) SHA1(4daed57c5603bd021f9effb228a4d40b569f72d4) )
ROM_LOAD( "08.27C1001", 0x020000, 0x020000, CRC(cadd4731) SHA1(1c4e7ea7064b9c6b2dfdf01fd64f37de6d50bdfa) ) // 11xxxxxxxxxxxxxxx = 0xFF
ROM_REGION( 0x0200, "proms", 0 ) /* Priority PROM */
ROM_LOAD( "kazan.14m", 0x0000, 0x0200, BAD_DUMP CRC(85b30ac4) SHA1(b03f577ceb0f26b67453ffa52ef61fea76a93184) ) // wasn't dumped, this is wrong, might need to be handcrafted
ROM_END
/***************************************************************************
@ -4734,6 +4823,7 @@ GAME( 1990, rittam, rodland, system_A, rodland, megasys1_state, rit
GAME( 1990, rodlandjb,rodland, system_A, rodland, megasys1_state, rodlandjb,ROT0, "bootleg","Rod-Land (Japan bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1990, phantasm, avspirit, system_A, phantasm, megasys1_state, phantasm, ROT0, "Jaleco", "Phantasm (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, edfp, edf, system_A, edfp, megasys1_state, edfp, ROT0, "Jaleco", "E.D.F. : Earth Defense Force (Japan, prototype)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, inyourfa, 0, system_A, inyourfa, megasys1_state, iganinju, ROT0, "Jaleco", "In Your Face (World, prototype)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // priorities aren't correct
GAME( 1992, soldam, 0, system_A_soldam, soldam, megasys1_state, soldam, ROT0, "Jaleco", "Soldam", MACHINE_SUPPORTS_SAVE )
GAME( 1992, soldamj, soldam, system_A_soldam, soldam, megasys1_state, soldamj, ROT0, "Jaleco", "Soldam (Japan)", MACHINE_SUPPORTS_SAVE )

View File

@ -180,21 +180,22 @@ ADDRESS_MAP_END
WRITE_LINE_MEMBER(mermaid_state::rougien_sample_rom_lo_w)
{
m_adpcm_rom_sel = state | (m_adpcm_rom_sel & 2);
m_adpcm_counter->set_rom_bank(m_adpcm_rom_sel);
}
WRITE_LINE_MEMBER(mermaid_state::rougien_sample_rom_hi_w)
{
m_adpcm_rom_sel = (state <<1) | (m_adpcm_rom_sel & 1);
m_adpcm_counter->set_rom_bank(m_adpcm_rom_sel);
}
WRITE_LINE_MEMBER(mermaid_state::rougien_sample_playback_w)
{
if (state)
{
m_adpcm_pos = m_adpcm_rom_sel*0x1000;
m_adpcm_end = m_adpcm_pos+0x1000;
m_adpcm_idle = 0;
m_adpcm->reset_w(0);
m_adpcm_counter->reset_w(0);
}
}
@ -366,13 +367,10 @@ void mermaid_state::machine_start()
save_item(NAME(m_rougien_gfxbank2));
save_item(NAME(m_ay8910_enable));
save_item(NAME(m_adpcm_pos));
save_item(NAME(m_adpcm_end));
save_item(NAME(m_adpcm_idle));
save_item(NAME(m_adpcm_data));
save_item(NAME(m_adpcm_trigger));
save_item(NAME(m_adpcm_rom_sel));
save_item(NAME(m_adpcm_play_reg));
}
void mermaid_state::machine_reset()
@ -387,33 +385,32 @@ void mermaid_state::machine_reset()
m_adpcm_idle = 1;
m_adpcm_rom_sel = 0;
m_adpcm_play_reg = 0;
m_adpcm->reset_w(1);
m_adpcm_counter->reset_w(1);
m_adpcm_trigger = 0;
m_adpcm_data = 0;
}
/* Similar to Jantotsu, apparently the HW has three ports that controls what kind of sample should be played. Every sample size is 0x1000. */
WRITE8_MEMBER(mermaid_state::adpcm_data_w)
{
m_adpcm_data = data;
m_adpcm->data_w(m_adpcm_trigger ? (data & 0x0f) : (data & 0xf0) >> 4);
}
WRITE_LINE_MEMBER(mermaid_state::rougien_adpcm_int)
{
// popmessage("%08x",m_adpcm_pos);
if (!state)
return;
if (m_adpcm_pos >= m_adpcm_end || m_adpcm_idle)
m_adpcm_trigger ^= 1;
m_adpcm->data_w(m_adpcm_trigger ? (m_adpcm_data & 0x0f) : (m_adpcm_data & 0xf0) >> 4);
m_adpcm_counter->clock_w(m_adpcm_trigger);
if (m_adpcm_trigger == 0 && m_adpcm_counter->count() == 0)
{
//m_adpcm_idle = 1;
m_adpcm_idle = 1;
m_adpcm->reset_w(1);
m_adpcm_trigger = 0;
}
else
{
uint8_t *ROM = memregion("adpcm")->base();
m_adpcm_data = ((m_adpcm_trigger ? (ROM[m_adpcm_pos] & 0x0f) : (ROM[m_adpcm_pos] & 0xf0) >> 4));
m_adpcm->data_w(m_adpcm_data & 0xf);
m_adpcm_trigger ^= 1;
if (m_adpcm_trigger == 0)
{
m_adpcm_pos++;
//if ((ROM[m_adpcm_pos] & 0xff) == 0x70)
// m_adpcm_idle = 1;
}
m_adpcm_counter->reset_w(1);
}
}
@ -483,9 +480,14 @@ static MACHINE_CONFIG_DERIVED( rougien, mermaid )
MCFG_PALETTE_INIT_OWNER(mermaid_state,rougien)
MCFG_SOUND_ADD("adpcm", MSM5205, 384000)
MCFG_MSM5205_VCLK_CB(WRITELINE(mermaid_state, rougien_adpcm_int)) /* interrupt function */
MCFG_MSM5205_VCK_CALLBACK(WRITELINE(mermaid_state, rougien_adpcm_int))
MCFG_MSM5205_PRESCALER_SELECTOR(S96_4B)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
MCFG_DEVICE_ADD("adpcm_counter", RIPPLE_COUNTER, 0)
MCFG_DEVICE_ROM("adpcm")
MCFG_RIPPLE_COUNTER_STAGES(12)
MCFG_RIPPLE_COUNTER_ROM_OUT_CB(WRITE8(mermaid_state, adpcm_data_w))
MACHINE_CONFIG_END
/* ROMs */

View File

@ -124,28 +124,62 @@ INTERRUPT_GEN_MEMBER(pgm2_state::igs_interrupt)
m_arm_aic->set_irq(0x47);
}
WRITE16_MEMBER(pgm2_state::share_bank_w)
{
COMBINE_DATA(&m_share_bank);
}
READ8_MEMBER(pgm2_state::shareram_r)
{
return m_shareram[offset + (m_share_bank & 1) * 128];
}
WRITE8_MEMBER(pgm2_state::shareram_w)
{
m_shareram[offset + (m_share_bank & 1) * 128] = data;
}
TIMER_DEVICE_CALLBACK_MEMBER(pgm2_state::igs_interrupt2)
{
m_arm_aic->set_irq(0x46);
}
static const uint8_t orleg2_china_card[32] = {
0xA2, 0x13, 0x10, 0x91, 0x05, 0x0C, 0x81, 0x15, 0x10, 0x00, 0x00, 0x03, 0x00, 0x49, 0x47, 0x53,
0x00, 0x00, 0x00, 0x00, 0x00, 0xD2, 0x76, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
#ifdef UNUSED_DEFINITION
static const uint8_t kov2nl_china_card[32] = {
0xA2, 0x13, 0x10, 0x91, 0x05, 0x0C, 0x81, 0x15, 0x06, 0x00, 0x00, 0x04, 0x00, 0x49, 0x47, 0x53,
0x00, 0x00, 0x00, 0x00, 0x00, 0xD2, 0x76, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
#endif
// "MPU" MCU HLE starts here
// TODO: make data cards using image_interface
// command delays is far not correct, might not work in other games
// command results probably either incorrect (except for explicit checked bytes)
void pgm2_state::mcu_command(bool is_command)
{
uint8_t cmd = m_mcu_regs[0] & 0xff;
if (is_command && cmd != 0xf6)
logerror("MCU command %08x %08x\n", m_mcu_regs[0], m_mcu_regs[1]);
// if (is_command && cmd != 0xf6)
// logerror("MCU command %08x %08x\n", m_mcu_regs[0], m_mcu_regs[1]);
if (is_command)
{
m_mcu_last_cmd = cmd;
uint8_t status = 0xf7; // "command accepted" status
int delay = 1;
uint8_t arg1 = m_mcu_regs[0] >> 8;
uint8_t arg2 = m_mcu_regs[0] >> 16;
uint8_t arg3 = m_mcu_regs[0] >> 24;
switch (cmd)
{
case 0xf6: // get result
m_mcu_regs[3] = m_mcu_result0;
m_mcu_regs[4] = m_mcu_result1;
m_mcu_last_cmd = 0;
break;
case 0xe0: // command port test
m_mcu_result0 = m_mcu_regs[0];
@ -155,28 +189,48 @@ void pgm2_state::mcu_command(bool is_command)
case 0xe1: // shared ram access (unimplemented)
{
// MCU access to RAM shared at 0x30100000, 2x banks, in the same time CPU and MCU access different banks
// where is offset ?
// uint8_t mode = m_mcu_regs[0] >> 16; // 0 - ???, 1 - read, 2 - write
// uint8_t data = m_mcu_regs[0] >> 24;
uint8_t mode = m_mcu_regs[0] >> 16; // 0 - ???, 1 - read, 2 - write
uint8_t data = m_mcu_regs[0] >> 24;
if (mode == 2)
{
// where is offset ? so far assume this command fill whole page
memset(&m_shareram[(~m_share_bank & 1) * 128], data, 128);
}
m_mcu_result0 = cmd;
m_mcu_result1 = 0;
}
break;
// unknown / unimplemented, all C0-C9 commands is IC Card RW related
// (m_mcu_regs[0] >> 8) & 0xff - target RW unit (player) #
// (m_mcu_regs[0] >> 8) & 0xff - target RW unit (player)
case 0xc0: // insert card or/and check card presence. result: F7 - ok, F4 - no card
status = 0xf4;
case 0xc1:
case 0xc2:
case 0xc3:
case 0xc4:
case 0xc5:
case 0xc6:
case 0xc7:
case 0xc8:
case 0xc9:
if (!m_have_card[arg1])
status = 0xf4;
m_mcu_result0 = cmd;
break;
case 0xc1: // check ready/busy ?
m_mcu_result0 = cmd;
break;
case 0xc2: // read data to shared ram, args - offset, len
memcpy(&m_shareram[(~m_share_bank & 1) * 128], &m_card_data[arg1][arg2], arg3);
m_mcu_result0 = cmd;
break;
case 0xc3: // save data from shared ram, args - offset, len
memcpy(&m_card_data[arg1][arg2], &m_shareram[(~m_share_bank & 1) * 128], arg3);
m_mcu_result0 = cmd;
break;
case 0xc7: // get card ID?, no args, result1 expected to be fixed value for new card
m_mcu_result1 = 0xf81f0000;
m_mcu_result0 = cmd;
break;
case 0xc8: // write byte, args - offset, data byte
m_card_data[arg1][arg2] = arg3;
m_mcu_result0 = cmd;
break;
case 0xc4: // not used
case 0xc5: // set new password?, args - offset, data byte (offs 0 - always 7, 1-3 password)
case 0xc6: // not used
case 0xc9: // card authentication, args - 3 byte password, ('I','G','S' for new cards)
m_mcu_result0 = cmd;
m_mcu_result1 = 0;
break;
default:
logerror("MCU unknown command %08x %08x\n", m_mcu_regs[0], m_mcu_regs[1]);
@ -188,10 +242,11 @@ void pgm2_state::mcu_command(bool is_command)
}
else // next step
{
if (m_mcu_last_cmd && m_mcu_last_cmd != 0xf6)
if (m_mcu_last_cmd)
{
m_mcu_regs[3] = (m_mcu_regs[3] & 0xff00ffff) | 0x00F20000; // set "command done and return data" status
m_mcu_timer->adjust(attotime::from_msec(1));
m_mcu_timer->adjust(attotime::from_usec(100));
m_mcu_last_cmd = 0;
}
}
}
@ -244,9 +299,10 @@ static ADDRESS_MAP_START( pgm2_map, AS_PROGRAM, 32, pgm2_state )
what is the real size? */
AM_RANGE(0x300e0000, 0x300e03ff) AM_RAM AM_SHARE("lineram") AM_MIRROR(0x000fc00)
AM_RANGE(0x30100000, 0x301000ff) AM_RAM // MCU shared RAM, access at even bytes only (8bit device at 16bit bus?), 2x banks switched via 0x30120032 register (16bit)
AM_RANGE(0x30100000, 0x301000ff) AM_READWRITE8(shareram_r, shareram_w, 0x00ff00ff)
AM_RANGE(0x30120000, 0x30120003) AM_RAM AM_SHARE("bgscroll") // scroll
AM_RANGE(0x30120030, 0x30120033) AM_WRITE16(share_bank_w, 0xffff0000)
AM_RANGE(0x30120038, 0x3012003b) AM_WRITE(sprite_encryption_w)
// there are other 0x301200xx regs
@ -370,6 +426,8 @@ void pgm2_state::machine_start()
save_item(NAME(m_mcu_result0));
save_item(NAME(m_mcu_result1));
save_item(NAME(m_mcu_last_cmd));
save_item(NAME(m_shareram));
save_item(NAME(m_share_bank));
}
void pgm2_state::machine_reset()
@ -377,6 +435,12 @@ void pgm2_state::machine_reset()
m_spritekey = 0;
m_realspritekey = 0;
m_mcu_last_cmd = 0;
m_share_bank = 0;
m_have_card[0] = true;
m_have_card[1] = m_have_card[2] = m_have_card[3] = false;
memcpy(m_card_data[0], orleg2_china_card, sizeof(orleg2_china_card));
// memcpy(m_card_data[0], kov2nl_china_card, sizeof(kov2nl_china_card));
}
static const gfx_layout tiles8x8_layout =

View File

@ -279,7 +279,8 @@ public:
m_cage(*this, "cage"),
m_dcs(*this, "dcs"),
m_ethernet(*this, "ethernet"),
m_ioasic(*this, "ioasic")
m_ioasic(*this, "ioasic"),
m_io_analog(*this, "AN%u", 0)
{}
required_device<nvram_device> m_nvram;
@ -288,6 +289,7 @@ public:
optional_device<dcs_audio_device> m_dcs;
optional_device<smc91c94_device> m_ethernet;
required_device<midway_ioasic_device> m_ioasic;
optional_ioport_array<8> m_io_analog;
widget_data m_widget;
uint32_t m_interrupt_enable;
@ -306,6 +308,9 @@ public:
uint32_t m_output;
uint8_t m_output_mode;
uint32_t m_gear;
int8_t m_wheel_force;
int m_wheel_offset;
bool m_wheel_calibrated;
DECLARE_READ32_MEMBER(interrupt_state_r);
DECLARE_READ32_MEMBER(interrupt_state2_r);
DECLARE_READ32_MEMBER(interrupt_config_r);
@ -399,6 +404,7 @@ void seattle_state::machine_start()
save_item(NAME(m_output));
save_item(NAME(m_output_mode));
save_item(NAME(m_gear));
save_item(NAME(m_wheel_calibrated));
}
@ -409,6 +415,9 @@ void seattle_state::machine_reset()
m_interrupt_config = 0;
m_interrupt_enable = 0;
m_gear = 1;
m_wheel_force = 0;
m_wheel_offset = 0;
m_wheel_calibrated = false;
/* reset either the DCS2 board or the CAGE board */
if (machine().device("dcs") != nullptr)
{
@ -602,11 +611,31 @@ READ32_MEMBER(seattle_state::analog_port_r)
WRITE32_MEMBER(seattle_state::analog_port_w)
{
static const char *const portnames[] = { "AN0", "AN1", "AN2", "AN3", "AN4", "AN5", "AN6", "AN7" };
if (data < 8 || data > 15)
logerror("%08X:Unexpected analog port select = %08X\n", space.device().safe_pc(), data);
m_pending_analog_read = ioport(portnames[data & 7])->read();
int index = data & 7;
uint8_t currValue = m_io_analog[index].read_safe(0);
if (!m_wheel_calibrated && ((m_wheel_force > 20) || (m_wheel_force < -20))) {
if (m_wheel_force > 0 && m_wheel_offset < 128)
m_wheel_offset++;
else if (m_wheel_offset > -128)
m_wheel_offset--;
int tmpVal = int(currValue) + m_wheel_offset;
if (tmpVal < m_io_analog[index]->field(0xff)->minval())
m_pending_analog_read = m_io_analog[index]->field(0xff)->minval();
else if (tmpVal > m_io_analog[index]->field(0xff)->maxval())
m_pending_analog_read = m_io_analog[index]->field(0xff)->maxval();
else
m_pending_analog_read = tmpVal;
}
else {
m_pending_analog_read = currValue;
}
// Declare calibration finished as soon as non-middle value is detected, ie the user has turned the wheel
if (!m_wheel_calibrated && currValue != 0 && (currValue > (0x80 + 0x10) || currValue < (0x80 - 0x10))) {
m_wheel_calibrated = true;
//osd_printf_info("wheel calibration comlete wheel: %02x\n", currValue);
}
}
/*************************************
@ -628,6 +657,8 @@ WRITE32_MEMBER(seattle_state::wheel_board_w)
{
case 0x0:
machine().output().set_value("wheel", arg); // target wheel angle. signed byte.
m_wheel_force = int8_t(arg);
//logerror("wheel_board_w: data = %08x op: %02x arg: %02x\n", data, op, arg);
break;
case 0x4:
@ -725,15 +756,19 @@ WRITE32_MEMBER(seattle_state::carnevil_gun_w)
READ32_MEMBER(seattle_state::ethernet_r)
{
uint32_t data = 0;
if (!(offset & 8))
return m_ethernet->read(space, offset & 7, mem_mask & 0xffff);
data = m_ethernet->read(space, offset & 7, mem_mask & 0xffff);
else
return m_ethernet->read(space, offset & 7, mem_mask & 0x00ff);
data = m_ethernet->read(space, offset & 7, mem_mask & 0x00ff);
//logerror("ethernet_r: @%08x=%08x mask: %08x\n", offset, data, mem_mask);
return data;
}
WRITE32_MEMBER(seattle_state::ethernet_w)
{
//logerror("ethernet_w: @%08x=%08x mask: %08x\n", offset, data, mem_mask);
if (!(offset & 8))
m_ethernet->write(space, offset & 7, data & 0xffff, mem_mask | 0xffff);
else
@ -798,6 +833,8 @@ WRITE32_MEMBER(seattle_state::output_w)
case 0x04:
output().set_value("wheel", arg); // wheel motor delta. signed byte.
m_wheel_force = int8_t(~arg);
//logerror("wheel_board_w: data = %08x op: %02x arg: %02x\n", data, op, arg);
break;
case 0x05:

View File

@ -2308,7 +2308,7 @@ ROM_START( afighterc )
ROM_LOAD( "epr-10284.12", 0x00000, 0x8000, CRC(8ff09116) SHA1(8b99b6d2499897cfbd037a7e7cf5bc53bce8a63a) )
ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key
ROM_LOAD( "317-unknown.key", 0x0000, 0x2000, NO_DUMP )
ROM_LOAD( "317-unknown.key", 0x0000, 0x2000, CRC(fee04be8) SHA1(c58d78299ef4cede517be823a8a8a90e46c6ba0d) )
ROM_END
ROM_START( afighterd )
@ -2339,7 +2339,7 @@ ROM_START( afighterd )
ROM_LOAD( "epr-10284.12", 0x00000, 0x8000, CRC(8ff09116) SHA1(8b99b6d2499897cfbd037a7e7cf5bc53bce8a63a) )
ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key
ROM_LOAD( "317-unknown.key", 0x0000, 0x2000, NO_DUMP )
ROM_LOAD( "317-unknown.key", 0x0000, 0x2000, CRC(fee04be8) SHA1(c58d78299ef4cede517be823a8a8a90e46c6ba0d) )
ROM_END
//*************************************************************************************************************************
@ -3933,8 +3933,8 @@ GAME( 1988, aceattaca, aceattac, aceattaca_fd1094, aceattaca, segas16a
GAME( 1986, afighter, 0, system16a_fd1089a_no7751, afighter, segas16a_state, generic, ROT270, "Sega", "Action Fighter (FD1089A 317-0018)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, afightera, afighter, system16a_no7751, afighter, segas16a_state, generic, ROT270, "Sega", "Action Fighter (unprotected)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, afighterb, afighter, system16a_no7751, afighter_analog, afighter_16a_analog_state,generic, ROT270, "Sega", "Action Fighter (unprotected, analog controls)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, afighterc, afighter, system16a_fd1089a_no7751, afighter, segas16a_state, generic, ROT270, "Sega", "Action Fighter (FD1089A 317-unknown)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // encrypted version of afightera
GAME( 1986, afighterd, afighter, system16a_fd1089a_no7751, afighter_analog, afighter_16a_analog_state,generic, ROT270, "Sega", "Action Fighter (FD1089A 317-unknown, analog controls)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // encrypted version of afighterb
GAME( 1986, afighterc, afighter, system16a_fd1089b_no7751, afighter, segas16a_state, generic, ROT270, "Sega", "Action Fighter (FD1089B 317-unknown)", MACHINE_SUPPORTS_SAVE ) // encrypted version of afightera (maybe 317-0017)
GAME( 1986, afighterd, afighter, system16a_fd1089b_no7751, afighter_analog, afighter_16a_analog_state,generic, ROT270, "Sega", "Action Fighter (FD1089B 317-unknown, analog controls)", MACHINE_SUPPORTS_SAVE ) // encrypted version of afighterb
GAME( 1986, alexkidd, 0, system16a, alexkidd, segas16a_state,generic, ROT0, "Sega", "Alex Kidd: The Lost Stars (set 2, unprotected)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, alexkidd1, alexkidd, system16a_fd1089a, alexkidd, segas16a_state,generic, ROT0, "Sega", "Alex Kidd: The Lost Stars (set 1, FD1089A 317-0021)", MACHINE_SUPPORTS_SAVE )

View File

@ -4226,11 +4226,11 @@ ROM_START( afighterf )
ROM_LOAD( "epr10039.bin", 0x00000, 0x8000, CRC(b04757b0) SHA1(24bface5a23ed658675f414c9937bf9d7f7ed5ec) )
ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key
ROM_LOAD( "317-unknown.key", 0x0000, 0x2000, NO_DUMP )
ROM_LOAD( "317-unknown.key", 0x0000, 0x2000, CRC(fee04be8) SHA1(c58d78299ef4cede517be823a8a8a90e46c6ba0d) )
ROM_END
ROM_START( afighterg ) // could be 16A
ROM_START( afighterg )
ROM_REGION( 0x30000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "epr10160.bin", 0x00001, 0x08000, CRC(86f020da) SHA1(e7ac4b70dc375d9e2491f1a90ae154699e7627a2) ) // == encrypted 10169 (not perfect match) (same rev as 10354)
ROM_LOAD16_BYTE( "epr10163.bin", 0x00000, 0x08000, CRC(6d62eccd) SHA1(a400850f717a71a3e0059173d77f0bd067f1b520) )
@ -4258,7 +4258,7 @@ ROM_START( afighterg ) // could be 16A
ROM_LOAD( "epr10039.bin", 0x00000, 0x8000, CRC(b04757b0) SHA1(24bface5a23ed658675f414c9937bf9d7f7ed5ec) )
ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key
ROM_LOAD( "317-unknown.key", 0x0000, 0x2000, NO_DUMP )
ROM_LOAD( "317-unknown.key", 0x0000, 0x2000, CRC(fee04be8) SHA1(c58d78299ef4cede517be823a8a8a90e46c6ba0d) )
ROM_END
@ -9090,8 +9090,8 @@ GAME( 1987, aliensyn3, aliensyn, system16b_fd1089a, aliensyn, segas16b_state,
GAME( 1987, aliensynj, aliensyn, system16b_fd1089a, aliensynj,segas16b_state,generic_5358_small, ROT0, "Sega", "Alien Syndrome (set 6, Japan, new, System 16B, FD1089A 317-0033)", 0 )
GAME( 1986, afightere, afighter, system16b, afighter_analog,afighter_16b_analog_state,generic_5358_small, ROT270, "Sega", "Action Fighter (System 16B, unprotected, analog controls)", 0 )
GAME( 1986, afighterf, afighter, system16b_fd1089a, afighter_analog,afighter_16b_analog_state,generic_5358_small, ROT270, "Sega", "Action Fighter (System 16B, FD1089A 317-unknown, analog controls)", MACHINE_NOT_WORKING ) // encrypted version of afightere
GAME( 1986, afighterg, afighter, system16b_fd1089a, afighter, segas16b_state, generic_5358_small, ROT270, "Sega", "Action Fighter (System 16B, FD1089A 317-unknown)", MACHINE_NOT_WORKING ) // same encryption as afighterf
GAME( 1986, afighterf, afighter, system16b_fd1089b, afighter_analog,afighter_16b_analog_state,generic_5358_small, ROT270, "Sega", "Action Fighter (System 16B, FD1089B 317-unknown, analog controls)", 0 ) // encrypted version of afightere
GAME( 1986, afighterg, afighter, system16b_fd1089b, afighter, segas16b_state, generic_5358_small, ROT270, "Sega", "Action Fighter (System 16B, FD1089B 317-unknown)", 0 ) // same encryption as afighterf
GAME( 1986, afighterh, afighter, system16b_fd1089a, afighter, segas16b_state, generic_5358_small, ROT270, "Sega", "Action Fighter (System 16B, FD1089A 317-0018)", 0 ) // same rev as afighterg
GAME( 1988, altbeast, 0, system16b_i8751, altbeast, segas16b_state,generic_5521, ROT0, "Sega", "Altered Beast (set 8) (8751 317-0078)", 0 )

View File

@ -1392,6 +1392,40 @@ ROM_START( fantasyg )
ROM_LOAD( "fs_f_11.bin", 0x5000, 0x0800, CRC(3a352e1f) SHA1(af880ce3daed0877d454421bd08c86ff71f6bf72) )
ROM_END
// SK-7A and SK-6 PCBs
ROM_START( fantasyg2 )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "ts5.bin", 0x3000, 0x1000, CRC(6edca14e) SHA1(d9152e212f2b3cdb6e7968e4e7638454ea02c4a5) )
ROM_LOAD( "fs1.bin", 0x4000, 0x1000, CRC(d99656e8) SHA1(6f5febaeca2ec167523f48361ae2395772bcef53) )
ROM_LOAD( "ts2.bin", 0x5000, 0x1000, CRC(2db6ce28) SHA1(18cced543f27664b3eaddf103a41580a905ffae1) )
ROM_LOAD( "ts3.bin", 0x6000, 0x1000, CRC(1a0aa7c5) SHA1(c8f34618ffc98c73db7067851de24f245b8988ad) )
ROM_LOAD( "fs4.bin", 0x7000, 0x1000, CRC(c02ad442) SHA1(a90b2d04fc2e8b2dda634c18eafb88007eaedc67) )
ROM_LOAD( "fs6.bin", 0x8000, 0x1000, CRC(e5b91bc2) SHA1(85515eb57c8040fc95a9c62706e1a504e6749f66) )
ROM_RELOAD( 0xf000, 0x1000 ) /* for the reset and interrupt vectors */
ROM_LOAD( "fs7.bin", 0x9000, 0x1000, CRC(cc18428e) SHA1(c7c0a031434cf9ce3c450b0c5dc2b154b08d19cf) )
ROM_LOAD( "fs8.bin", 0xa000, 0x1000, CRC(371129fe) SHA1(c21759222aebcc9ea1292e367a41ac43a4dd3554) )
ROM_LOAD( "fs9.bin", 0xb000, 0x1000, CRC(49574d4a) SHA1(37cae0df7e8705c300f684b3351b5bdba5e44ea2) )
ROM_REGION( 0x2000, "gfx1", 0 )
ROM_LOAD( "fs10.bin", 0x0000, 0x1000, CRC(86a801c3) SHA1(c040b5807c25823072f7e8ceab57b95d4bed89fe) )
ROM_LOAD( "fs11.bin", 0x1000, 0x1000, CRC(9dfff71c) SHA1(7a7c017170f2ea903a730a4e5ab69db379a4fc61) )
ROM_REGION( 0x0040, "proms", 0 )
ROM_LOAD( "fantasy.ic7", 0x0000, 0x0020, CRC(361a5e99) SHA1(b9777ce658549c03971bd476482d5cc0be27d3a9) ) /* foreground colors */
ROM_LOAD( "fantasy.ic6", 0x0020, 0x0020, CRC(33d974f7) SHA1(a6f6a531dec3f454b477bfdda8e213e9cad42748) ) /* background colors */
ROM_REGION( 0x1800, "snk6502", 0 ) /* sound ROMs */
ROM_LOAD( "fs_b_51.bin", 0x0000, 0x0800, CRC(48094ec5) SHA1(7d6118133bc1eb8ebc5d8a95d10ef842daffef89) )
ROM_LOAD( "fs_a_52.bin", 0x0800, 0x0800, CRC(1d0316e8) SHA1(6a3ab289b5fefef8663514bd1d5817c70fe58882) )
ROM_LOAD( "fs_c_53.bin", 0x1000, 0x0800, CRC(49fd4ae8) SHA1(96ff1267c0ffab1e8a0769fa869516e2546ab640) )
ROM_REGION( 0x5800, "speech", 0 ) /* space for the speech ROMs (not supported) */
//ROM_LOAD( "hd38882.bin", 0x0000, 0x4000, NO_DUMP ) /* HD38882 internal ROM */
ROM_LOAD( "fs_d_7.bin", 0x4000, 0x0800, CRC(a7ef4cc6) SHA1(8df71cb18fcfe9a2f592f83bc01cf2314ae30e32) )
ROM_LOAD( "fs_e_8.bin", 0x4800, 0x0800, CRC(19b8fb3e) SHA1(271c76f68866c28bc6755238a71970d5f7c81ecb) )
ROM_LOAD( "fs_f_11.bin", 0x5000, 0x0800, CRC(3a352e1f) SHA1(af880ce3daed0877d454421bd08c86ff71f6bf72) )
ROM_END
ROM_START( fantasyj )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "fs5jic12.bin", 0x3000, 0x1000, CRC(dd1eac89) SHA1(d63078d4666e3c6db0c9b3f8b45ef81606ed5a4f) )
@ -1673,8 +1707,9 @@ GAME( 1981, satansatind, satansat, satansat, satansat, snk6502_state, 0, ROT90,
GAME( 1981, vanguard, 0, vanguard, vanguard, snk6502_state, 0, ROT90, "SNK", "Vanguard (SNK)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1981, vanguardc, vanguard, vanguard, vanguard, snk6502_state, 0, ROT90, "SNK (Centuri license)", "Vanguard (Centuri)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1981, vanguardj, vanguard, vanguard, vanguard, snk6502_state, 0, ROT90, "SNK", "Vanguard (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1981, fantasyg, fantasyu, fantasy, fantasy, snk6502_state, 0, ROT90, "SNK", "Fantasy (Germany)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // bootleg?
GAME( 1981, fantasyu, 0, fantasy, fantasyu, snk6502_state, 0, ROT90, "SNK (Rock-Ola license)", "Fantasy (US)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1981, fantasyg, fantasyu, fantasy, fantasy, snk6502_state, 0, ROT90, "SNK", "Fantasy (Germany, set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // bootleg?
GAME( 1981, fantasyg2, fantasyu, fantasy, fantasy, snk6502_state, 0, ROT90, "SNK", "Fantasy (Germany, set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // bootleg?
GAME( 1981, fantasyj, fantasyu, fantasy, fantasyu, snk6502_state, 0, ROT90, "SNK", "Fantasy (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1982, pballoon, 0, pballoon, pballoon, snk6502_state, 0, ROT90, "SNK", "Pioneer Balloon", MACHINE_SUPPORTS_SAVE )
GAME( 1982, pballoonr, pballoon, pballoon, pballoon, snk6502_state, 0, ROT90, "SNK (Rock-Ola license)", "Pioneer Balloon (Rock-Ola license)", MACHINE_SUPPORTS_SAVE )

View File

@ -1509,10 +1509,10 @@ ROM_END
ROM_START( sidebs2ja ) /* Side by Side 2 Evoluzione Ver 2.4 J */
ROM_REGION(0x200000, "maincpu", 0) /* 68040 code */
ROM_LOAD32_BYTE( "e38-23+.ic36", 0x000000, 0x80000, CRC(b3d8e2d9) SHA1(6de6a51c3d9ace532fa03517bab93101b5a3eaae) ) /* Actual label E38-23* */
ROM_LOAD32_BYTE( "e38-24+.ic37", 0x000001, 0x80000, CRC(2a47d80d) SHA1(41b889e4a1397c7f0d4f6ef136ed8abfd7e1ed86) ) /* Actual label E38-24* */
ROM_LOAD32_BYTE( "e38-25+.ic38", 0x000002, 0x80000, CRC(f1a8a4df) SHA1(e4cf75969fb0503df2290522194b097f5cb983a3) ) /* Actual label E38-25* */
ROM_LOAD32_BYTE( "e38-26+.ic39", 0x000003, 0x80000, CRC(b550fbf2) SHA1(a0a461af7e71c6ad6468cfdee2bc7161ae31bbfb) ) /* Actual label E38-26* */
ROM_LOAD32_BYTE( "e38-23+.ic36", 0x000000, 0x80000, CRC(b3d8e2d9) SHA1(6de6a51c3d9ace532fa03517bab93101b5a3eaae) ) /* Actually labeled E38-23* */
ROM_LOAD32_BYTE( "e38-24+.ic37", 0x000001, 0x80000, CRC(2a47d80d) SHA1(41b889e4a1397c7f0d4f6ef136ed8abfd7e1ed86) ) /* Actually labeled E38-24* */
ROM_LOAD32_BYTE( "e38-25+.ic38", 0x000002, 0x80000, CRC(f1a8a4df) SHA1(e4cf75969fb0503df2290522194b097f5cb983a3) ) /* Actually labeled E38-25* */
ROM_LOAD32_BYTE( "e38-26+.ic39", 0x000003, 0x80000, CRC(b550fbf2) SHA1(a0a461af7e71c6ad6468cfdee2bc7161ae31bbfb) ) /* Actually labeled E38-26* */
ROM_REGION( 0x180000, "taito_en:audiocpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e38-19.ic30", 0x100001, 0x040000, CRC(3f50cb7b) SHA1(76af65c9b74ede843a3182f79cecda8c3e3febe6) )
@ -1991,7 +1991,64 @@ ROM_START( landgearja ) /* Landing Gear Ver 3.0 J, is there an alternate set wit
ROM_LOAD( "e17-32.ic96", 0x0000, 0x0bac, CRC(1d590ca3) SHA1(733e9e34642c1e03fd880fda198b98927c1bb81d) )
ROM_END
ROM_START( dangcurv )
ROM_START( dangcurv ) /* Dangerous Curves Ver 2.9 O */
ROM_REGION( 0x200000, "maincpu", 0 ) /* 68040 code */
ROM_LOAD32_BYTE( "e09-32-1+.ic36", 0x000000, 0x80000, CRC(82c0af83) SHA1(307e2dd441116ffaad0d5783cd139bde8fc23460) ) /* Actually labeled E09 32-1* */
ROM_LOAD32_BYTE( "e09-33-1+.ic37", 0x000001, 0x80000, CRC(be6eca0b) SHA1(edb4ad0d379132e64c1238191ab17bd4400f3322) ) /* Actually labeled E09 33-1* */
ROM_LOAD32_BYTE( "e09-34-1+.ic38", 0x000002, 0x80000, CRC(553de745) SHA1(474e96c810fee8097059e201b95810b3235c6cad) ) /* Actually labeled E09 34-1* */
ROM_LOAD32_BYTE( "e09-35-1+.ic39", 0x000003, 0x80000, CRC(a60273fd) SHA1(511191506f04320775787e294a59a94c07364006) ) /* Actually labeled E09 35-1* */
ROM_REGION( 0x180000, "taito_en:audiocpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e09-27.ic30", 0x100001, 0x40000, CRC(6d54839c) SHA1(a28c9b0727128b82bb0fa71dc951e3f03ee45e1b) )
ROM_LOAD16_BYTE( "e09-28.ic31", 0x100000, 0x40000, CRC(566d7d83) SHA1(92661ccb631f843bf704c50d54fae28f6b5b272b) )
ROM_REGION( 0x4000, "dsp", ROMREGION_ERASE00 ) /* TMS320C51 internal rom */
ROM_LOAD16_WORD( "e07-11.ic29", 0x0000, 0x4000, NO_DUMP )
ROM_REGION( 0x010000, "sub", 0 ) /* MC68HC11M0 code */
ROM_LOAD( "e09-29.ic65", 0x000000, 0x010000, CRC(80ac1428) SHA1(5a2a1e60a11ecdb8743c20ddacfb61f9fd00f01c) )
ROM_REGION( 0x1800000, "gfx1", 0 )
ROM_LOAD32_WORD( "e09-05.ic9", 0x0800002, 0x200000, CRC(a948782f) SHA1(2a2b0d2955e036ddf424c54131435a20dbba3dd4) )
ROM_LOAD32_WORD( "e09-13.ic22", 0x0800000, 0x200000, CRC(985859e2) SHA1(8af9a73eba2151a5ef60799682fe667663a42743) )
ROM_LOAD32_WORD( "e09-06.ic10", 0x0c00002, 0x200000, CRC(218dcb5b) SHA1(72aedd2890e076540195d738c76ba446769c8e89) )
ROM_LOAD32_WORD( "e09-14.ic23", 0x0c00000, 0x200000, CRC(6d123616) SHA1(01ac1e920f7c4a03adf365c8a7831b8385f0b78b) )
ROM_LOAD32_WORD( "e09-07.ic11", 0x1000002, 0x200000, CRC(37fd7efc) SHA1(24a275d302ec8940479d15f1aeb96a288868bd41) )
ROM_LOAD32_WORD( "e09-15.ic24", 0x1000000, 0x200000, CRC(0d773f3b) SHA1(f867a4d5956c2ebfa9858499d9716b4dc723d76b) )
ROM_LOAD32_WORD( "e09-08.ic12", 0x1400002, 0x200000, CRC(5c080485) SHA1(c950cd00df5b6d2d0a119ba318fa8b0a3f471b29) )
ROM_LOAD32_WORD( "e09-16.ic25", 0x1400000, 0x200000, CRC(35cb8346) SHA1(c2ecedd3c2a28213ef83e776f3007c974128189b) )
ROM_REGION( 0x1000000, "gfx2", 0 ) /* only accessible to the TMS */
ROM_LOAD( "e09-01.ic5", 0x0000000, 0x200000, CRC(22a6a53d) SHA1(6efa89151cd5ec43ab9bfa9b92694eb0018dd227) )
ROM_LOAD( "e09-02.ic6", 0x0200000, 0x200000, CRC(405e2969) SHA1(376b9dd548d876af6798553a6da5deed4de00b76) )
ROM_LOAD( "e09-03.ic7", 0x0400000, 0x200000, CRC(15327754) SHA1(bf08ab80875b400700241a66715e229dae6752d1) )
ROM_LOAD( "e09-04.ic8", 0x0600000, 0x200000, CRC(fd598d6e) SHA1(679d9d64a0cd031a6c8cb5e170b77fc5811b6d73) )
ROM_LOAD( "e09-09.ic18", 0x0800000, 0x200000, CRC(a527b387) SHA1(790240b4dfcdf2bf70edb943ec7aeb2f0d8cdfa9) )
ROM_LOAD( "e09-10.ic19", 0x0a00000, 0x200000, CRC(4de6253c) SHA1(33517c0895b7ee04f4a84074d0b7bf42b53d5816) )
ROM_LOAD( "e09-11.ic20", 0x0c00000, 0x200000, CRC(18cc0ba7) SHA1(626929a501def6f1b8bd6a468786efb0b0dda9fa) )
ROM_LOAD( "e09-12.ic21", 0x0e00000, 0x200000, CRC(3273e438) SHA1(e9581d52f5db1c1924a860464579332a2f23e713) )
ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00 )
ROM_LOAD16_BYTE( "e09-17.ic32", 0x000000, 0x200000, CRC(a8a6512e) SHA1(71bd3ccd65b731270b92da334b9fb99c28e267fe) )
ROM_LOAD16_BYTE( "e09-18.ic33", 0x400000, 0x200000, CRC(bdf1f5eb) SHA1(a568a99a90e0afbcd26ddd320f515ed62cf0db1a) )
ROM_LOAD16_BYTE( "e09-19.ic34", 0x800000, 0x200000, CRC(3626c7ed) SHA1(7535f0457b3d9fe1d54712a26322d6144b9e7de6) )
ROM_LOAD16_BYTE( "e09-20.ic35", 0xc00000, 0x200000, CRC(9652a5c4) SHA1(2933e4e8e57ff618ce21721036d96347471c5539) )
ROM_REGION( 0x1000, "pals", 0 ) /* PALCE 16V8 (unused now) */
ROM_LOAD( "e07-02.ic4", 0x0000, 0x0117, CRC(21b3b349) SHA1(2c468a355caeb541fc649842f228fdc14b01afad) )
ROM_LOAD( "e07-03.ic50", 0x0000, 0x0117, CRC(af68d73a) SHA1(11c9a6eee715066dc06766cc89774081ffedab3b) )
ROM_LOAD( "e07-04.ic115", 0x0000, 0x0117, CRC(98383e84) SHA1(446e7a38f933b55706de71884f764c512912f571) )
ROM_LOAD( "e07-05.ic22", 0x0000, 0x0117, CRC(3fe21bb8) SHA1(744dcfef2b2dbb2aa4b69d47e03cec7881e4cd4b) )
ROM_LOAD( "e07-06.ic37", 0x0000, 0x0117, CRC(5cbeb11c) SHA1(e8cb4898d1285b72ae7ce003bfac33897417bb91) )
ROM_LOAD( "e07-07.ic49", 0x0000, 0x0117, CRC(8914317b) SHA1(8b782ff4f2783d8531d0d9abe0215ecc10cd1f49) )
ROM_LOAD( "e07-08.ic65", 0x0000, 0x0117, CRC(1831ddf3) SHA1(96bc0eb4b49c6d646e91630bb174f75c5d29337a) )
ROM_LOAD( "e07-09.ic82", 0x0000, 0x0117, CRC(6ab127fb) SHA1(9beb74436968854fedacea915587e8fdffaec6c8) )
ROM_LOAD( "e07-10.ic116", 0x0000, 0x0117, CRC(24d7939c) SHA1(fd3d87471252805de01c7c0abd60e55669885de0) )
ROM_LOAD( "e09-21.ic69", 0x0000, 0x0117, CRC(ab2c7402) SHA1(df8b63a67bf693f9023794ad4e787e3248d10b7e) )
ROM_LOAD( "e09-22.ic73", 0x0000, 0x0117, CRC(d43972cc) SHA1(ed9454d1a225a5fb6fefc0ae1aebe2b439ed460f) )
ROM_END
ROM_START( dangcurvj ) /* Dangerous Curves Ver 2.2 J */
ROM_REGION( 0x200000, "maincpu", 0 ) /* 68040 code */
ROM_LOAD32_BYTE( "e09-23.ic36", 0x000000, 0x80000, CRC(b4cdadd6) SHA1(84bd1d055ff15afb5438cd5151abf78b0000cebc) )
ROM_LOAD32_BYTE( "e09-24.ic37", 0x000001, 0x80000, CRC(fb2fc795) SHA1(2f58d043ab9fc0269a5b6827009777cd7ab832fc) )
@ -2036,7 +2093,8 @@ ROM_START( dangcurv )
ROM_END
GAME( 1995, dangcurv, 0, taitojc, dangcurv, taitojc_state, dangcurv, ROT0, "Taito", "Dangerous Curves (Ver 2.2 J)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_TIMING ) // DANGEROUS CURVES VER 2.2 J 1995.07.20 17:45
GAME( 1995, dangcurv, 0, taitojc, dangcurv, taitojc_state, dangcurv, ROT0, "Taito", "Dangerous Curves (Ver 2.9 O)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_TIMING ) // DANGEROUS CURVES VER 2.9 O 1995.08.24 17:45
GAME( 1995, dangcurvj, dangcurv, taitojc, dangcurv, taitojc_state, dangcurv, ROT0, "Taito", "Dangerous Curves (Ver 2.2 J)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_TIMING ) // DANGEROUS CURVES VER 2.2 J 1995.07.20 17:45
GAME( 1995, landgear, 0, taitojc, landgear, taitojc_state, taitojc, ROT0, "Taito", "Landing Gear (Ver 4.2 O)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_TIMING ) // LANDING GEAR VER 4.2 O Feb 8 1996 09:46:22
GAME( 1995, landgearj, landgear, taitojc, landgear, taitojc_state, taitojc, ROT0, "Taito", "Landing Gear (Ver 4.2 J)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_TIMING ) // LANDING GEAR VER 4.2 J Feb 8 1996 09:46:22
GAME( 1995, landgeara, landgear, taitojc, landgear, taitojc_state, taitojc, ROT0, "Taito", "Landing Gear (Ver 3.1 O)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_TIMING ) // LANDING GEAR VER 3.1 O Feb 8 1996 09:46:22

View File

@ -344,6 +344,9 @@ public:
optional_device<ns16550_device> m_uart2;
optional_ioport_array<8> m_io_analog;
int m_a2d_shift;
int8_t m_wheel_force;
int m_wheel_offset;
bool m_wheel_calibrated;
uint8_t m_vblank_state;
uint8_t m_cpuio_data[4];
uint8_t m_sio_reset_ctrl;
@ -402,6 +405,7 @@ public:
DECLARE_READ32_MEMBER(unknown_r);
DECLARE_READ8_MEMBER(parallel_r);
DECLARE_WRITE8_MEMBER(parallel_w);
DECLARE_WRITE8_MEMBER(mpsreset_w);
DECLARE_WRITE32_MEMBER(i40_w);
DECLARE_CUSTOM_INPUT_MEMBER(i40_r);
DECLARE_CUSTOM_INPUT_MEMBER(keypad_r);
@ -453,6 +457,7 @@ void vegas_state::machine_start()
save_item(NAME(m_i40_data));
save_item(NAME(m_keypad_select));
save_item(NAME(m_gear));
save_item(NAME(m_wheel_calibrated));
}
@ -472,6 +477,9 @@ void vegas_state::machine_reset()
m_i40_data = 0;
m_keypad_select = 0;
m_gear = 1;
m_wheel_force = 0;
m_wheel_offset = 0;
m_wheel_calibrated = false;
}
/*************************************
@ -876,13 +884,34 @@ WRITE32_MEMBER( vegas_state::analog_port_w )
{
uint32_t shift_data = data >> m_a2d_shift;
int index = shift_data & 0x7;
m_pending_analog_read = (m_io_analog[index].read_safe(0));
uint8_t currValue = m_io_analog[index].read_safe(0);
if (!m_wheel_calibrated && ((m_wheel_force > 20) || (m_wheel_force < -20))) {
if (m_wheel_force > 0 && m_wheel_offset < 128)
m_wheel_offset++;
else if (m_wheel_offset > -128)
m_wheel_offset--;
int tmpVal = int(currValue) + m_wheel_offset;
if (tmpVal < m_io_analog[index]->field(0xff)->minval())
m_pending_analog_read = m_io_analog[index]->field(0xff)->minval();
else if (tmpVal > m_io_analog[index]->field(0xff)->maxval())
m_pending_analog_read = m_io_analog[index]->field(0xff)->maxval();
else
m_pending_analog_read = tmpVal;
}
else {
m_pending_analog_read = currValue;
}
// Declare calibration finished as soon as non-middle value is detected, ie the user has turned the wheel
if (!m_wheel_calibrated && currValue != 0 && (currValue > (0x80 + 0x10) || currValue < (0x80 - 0x10))) {
m_wheel_calibrated = true;
//osd_printf_info("wheel calibration comlete wheel: %02x\n", currValue);
}
//logerror("analog_port_w: wheel_force: %i read: %i\n", m_wheel_force, m_pending_analog_read);
//logerror("%08X: analog_port_w = %08X & %08X index = %d\n", machine().device("maincpu")->safe_pc(), data, mem_mask, index);
if (m_sio_irq_enable & 0x02) {
m_sio_irq_state |= 0x02;
update_sio_irqs();
}
}
@ -948,6 +977,14 @@ WRITE8_MEMBER(vegas_state::parallel_w)
logerror("%06X: parallel_w %08x = %02x\n", machine().device("maincpu")->safe_pc(), offset, data);
}
/*************************************
* MPS Reset
*************************************/
WRITE8_MEMBER(vegas_state::mpsreset_w)
{
logerror("%06X: mpsreset_w %08x = %02x\n", machine().device("maincpu")->safe_pc(), offset, data);
}
/*************************************
* Optical 49 Way Joystick I40 Board
*************************************/
@ -1008,19 +1045,21 @@ CUSTOM_INPUT_MEMBER(vegas_state::i40_r)
*************************************/
WRITE32_MEMBER(vegas_state::wheel_board_w)
{
//logerror("wheel_board_w: data = %08x\n", data);
/* two writes in pairs. bit 11 high, bit 10 flag, flag off first, on second. arg remains the same. */
bool valid = (data & (1 << 11));
bool flag = (data & (1 << 10));
uint8_t op = (data >> 8) & 0x3;
uint8_t arg = data & 0xff;
//logerror("wheel_board_w: data = %08x op: %02x arg: %02x\n", data, op, arg);
if (valid && flag)
{
switch (op)
{
case 0x0:
machine().output().set_value("wheel", arg); // target wheel angle. signed byte.
m_wheel_force = int8_t(~arg);
break;
case 0x1:
@ -1628,7 +1667,7 @@ static ADDRESS_MAP_START(vegas_cs8_map, AS_PROGRAM, 32, vegas_state)
AM_RANGE(0x01000000, 0x0100001f) AM_DEVREADWRITE8("uart1", ns16550_device, ins8250_r, ins8250_w, 0xff) // Serial ttyS01 (TL16C552 CS0)
AM_RANGE(0x01400000, 0x0140001f) AM_DEVREADWRITE8("uart2", ns16550_device, ins8250_r, ins8250_w, 0xff) // Serial ttyS02 (TL16C552 CS1)
AM_RANGE(0x01800000, 0x0180001f) AM_READWRITE8(parallel_r, parallel_w, 0xff) // Parallel UART (TL16C552 CS2)
//AM_RANGE(0x01c00000, 0x0180001f) AM_READWRITE8(parallel_r, parallel_w, 0xff) // MPS Reset
AM_RANGE(0x01c00000, 0x01c00003) AM_WRITE8(mpsreset_w, 0xff) // MPS Reset
ADDRESS_MAP_END
/*************************************

View File

@ -5,6 +5,8 @@
Mermaid
*************************************************************************/
#include "machine/ripple_counter.h"
#include "sound/msm5205.h"
#include "sound/ay8910.h"
#include "screen.h"
@ -22,6 +24,7 @@ public:
m_colorram(*this, "colorram"),
m_maincpu(*this, "maincpu"),
m_adpcm(*this, "adpcm"),
m_adpcm_counter(*this, "adpcm_counter"),
m_ay8910(*this, "ay%u", 1),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
@ -51,18 +54,16 @@ public:
int m_rougien_gfxbank2;
/* sound-related */
uint32_t m_adpcm_pos;
uint32_t m_adpcm_end;
uint8_t m_adpcm_idle;
int m_adpcm_data;
uint8_t m_adpcm_trigger;
uint8_t m_adpcm_rom_sel;
uint8_t m_adpcm_play_reg;
bool m_ay8910_enable[2];
/* devices */
required_device<cpu_device> m_maincpu;
optional_device<msm5205_device> m_adpcm;
optional_device<ripple_counter_device> m_adpcm_counter;
required_device_array<ay8910_device, 2> m_ay8910;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
@ -77,6 +78,7 @@ public:
DECLARE_WRITE_LINE_MEMBER(rougien_sample_rom_lo_w);
DECLARE_WRITE_LINE_MEMBER(rougien_sample_rom_hi_w);
DECLARE_WRITE_LINE_MEMBER(rougien_sample_playback_w);
DECLARE_WRITE8_MEMBER(adpcm_data_w);
DECLARE_WRITE8_MEMBER(mermaid_videoram2_w);
DECLARE_WRITE8_MEMBER(mermaid_videoram_w);
DECLARE_WRITE8_MEMBER(mermaid_colorram_w);

View File

@ -48,6 +48,9 @@ public:
DECLARE_WRITE32_MEMBER(fg_videoram_w);
DECLARE_WRITE32_MEMBER(bg_videoram_w);
DECLARE_WRITE32_MEMBER(mcu_w);
DECLARE_WRITE16_MEMBER(share_bank_w);
DECLARE_READ8_MEMBER(shareram_r);
DECLARE_WRITE8_MEMBER(shareram_w);
DECLARE_READ32_MEMBER(orleg2_speedup_r);
DECLARE_READ32_MEMBER(kov2nl_speedup_r);
@ -107,11 +110,15 @@ private:
uint32_t m_realspritekey;
int m_sprite_predecrypted;
uint8_t m_shareram[0x100];
uint16_t m_share_bank;
uint32_t m_mcu_regs[8];
uint32_t m_mcu_result0;
uint32_t m_mcu_result1;
uint8_t m_mcu_last_cmd;
void mcu_command(bool is_command);
uint8_t m_card_data[4][0x100];
bool m_have_card[4];
// devices
required_device<cpu_device> m_maincpu;

View File

@ -20445,6 +20445,7 @@ edfp // (c) 1991 (Japan, Prototype)
hachoo // (c) 1989
hayaosi1 // (c) 1993
iganinju // (c) 1988 (Japan)
inyourfa // (c) 1988 (Japan)
jitsupro // (c) 1989 (Japan)
kazan // (c) 1988 (World)
kickoff // (c) 1988 (Japan)
@ -34690,6 +34691,7 @@ worldwar // A6004 'WW' (c) 1987
@source:snk6502.cpp
fantasyg // (c) 1981 SNK
fantasyg2 // (c) 1981 SNK
fantasyj // (c) 1981 SNK
fantasyu // (c) 1981 Rock-Ola
nibbler // (c) 1982 Rock-ola (version 9)
@ -36119,6 +36121,7 @@ zooo // 2004.05 Zooo
@source:taitojc.cpp
dangcurv // 1995.?? E09 (c) 1995 Taito Corporation
dangcurvj // 1995.?? E09 (c) 1995 Taito Corporation
dendego // 1997.03 E35 (c) 1996 Taito Corporation (Japan) - Ver 2.2 J
dendego2 // 1998.03 E52 (c) 1998 Taito Corporation (Japan) - Ver 2.5 J
dendego23k // 1998.08 E52 (c) 1998 Taito Corporation (Japan) - Ver 2.20 J

View File

@ -91,7 +91,7 @@ WRITE8_MEMBER(vectrex_state::vectrex_via_w)
case 9:
m_via_timer2 = (m_via_timer2 & 0x00ff) | (data << 8);
period = (attotime::from_hz(m_maincpu->unscaled_clock()) * m_via_timer2);
period = m_maincpu->cycles_to_attotime(m_via_timer2);
if (m_reset_refresh)
m_refresh->adjust(period, 0, period);
@ -206,7 +206,7 @@ TIMER_CALLBACK_MEMBER(vectrex_state::update_signal)
if (!m_ramp)
{
length = m_maincpu->unscaled_clock() * INT_PER_CLOCK
length = m_maincpu->clocks_to_cycles(m_maincpu->clock()) * INT_PER_CLOCK
* (machine().time() - m_vector_start_time).as_double();
m_x_int += length * (m_analog[A_X] + m_analog[A_ZR]);
@ -309,7 +309,7 @@ WRITE8_MEMBER(vectrex_state::v_via_pb_w)
+(double)(m_pen_y - m_y_int) * (m_pen_y - m_y_int);
d2 = b2 - ab * ab / a2;
if (d2 < 2e10 && m_analog[A_Z] * m_blank > 0)
m_lp_t->adjust(attotime::from_double(ab / a2 / (m_maincpu->unscaled_clock() * INT_PER_CLOCK)));
m_lp_t->adjust(attotime::from_double(ab / a2 / (m_maincpu->clocks_to_cycles(m_maincpu->clock()) * INT_PER_CLOCK)));
}
}
}