c64: Emulated the PPP Speakeasy 64 (Votrax SC-01-A) cartridge. [Curt Coder]

This commit is contained in:
Curt Coder 2017-02-01 21:58:56 +02:00
parent 67d17b01af
commit f626cefe85
9 changed files with 194 additions and 5 deletions

View File

@ -430,6 +430,19 @@
</part>
</software>
<software name="speakez">
<description>SpeakEasy</description>
<year>1983</year>
<publisher>Personal Peripheral Products</publisher>
<sharedfeat name="compatibility" value="NTSC,PAL"/>
<sharedfeat name="requirement" value="c64_cart:speakez"/>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="174848">
<rom name="speakeasy.d64" size="174848" crc="702cc20c" sha1="d9a19213809e2b51ee55fac9687b55bddaa86871" offset="0" />
</dataarea>
</part>
</software>
<!-- Educational -->
<software name="kats1">

View File

@ -58,4 +58,17 @@
</part>
</software>
<software name="speakez">
<description>SpeakEasy</description>
<year>1983</year>
<publisher>Personal Peripheral Products</publisher>
<sharedfeat name="compatibility" value="NTSC,PAL"/>
<sharedfeat name="requirement" value="vic1001_cart:speakez"/>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="174848">
<rom name="speakeasy.d64" size="174848" crc="bfd060ca" sha1="d2c5b5c2b6c5ef01891e3256a4aad8ec2bbbbfe5" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -428,6 +428,8 @@ if (BUSES["C64"]~=null) then
MAME_DIR .. "src/devices/bus/c64/silverrock.h",
MAME_DIR .. "src/devices/bus/c64/simons_basic.cpp",
MAME_DIR .. "src/devices/bus/c64/simons_basic.h",
MAME_DIR .. "src/devices/bus/c64/speakeasy.cpp",
MAME_DIR .. "src/devices/bus/c64/speakeasy.h",
MAME_DIR .. "src/devices/bus/c64/stardos.cpp",
MAME_DIR .. "src/devices/bus/c64/stardos.h",
MAME_DIR .. "src/devices/bus/c64/std.cpp",

View File

@ -339,6 +339,7 @@ int c64_expansion_slot_device::exrom_r(offs_t offset, int sphi2, int ba, int rw,
#include "sfx_sound_expander.h"
#include "silverrock.h"
#include "simons_basic.h"
#include "speakeasy.h"
#include "stardos.h"
#include "std.h"
#include "structured_basic.h"
@ -375,6 +376,7 @@ SLOT_INTERFACE_START( c64_expansion_cards )
SLOT_INTERFACE("reu1750", C64_REU1750)
SLOT_INTERFACE("reu1764", C64_REU1764)
SLOT_INTERFACE("sfxse", C64_SFX_SOUND_EXPANDER)
SLOT_INTERFACE("speakez", C64_SPEAKEASY)
SLOT_INTERFACE("supercpu", C64_SUPERCPU)
SLOT_INTERFACE("swiftlink", C64_SWIFTLINK)
SLOT_INTERFACE("turbo232", C64_TURBO232)

View File

@ -0,0 +1,103 @@
// license:BSD-3-Clause
// copyright-holders:smf
/**********************************************************************
Personal Peripheral Products Speakeasy 64 cartridge emulation
**********************************************************************/
#include "speakeasy.h"
//**************************************************************************
// MACROS/CONSTANTS
//**************************************************************************
#define SC01A_TAG "sc01a"
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
const device_type C64_SPEAKEASY = &device_creator<c64_speakeasy_t>;
//-------------------------------------------------
// MACHINE_DRIVER( speakeasy )
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( speakeasy )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD(SC01A_TAG, VOTRAX_SC01, 720000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.85)
MACHINE_CONFIG_END
//-------------------------------------------------
// machine_config_additions - device-specific
// machine configurations
//-------------------------------------------------
machine_config_constructor c64_speakeasy_t::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( speakeasy );
}
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// c64_speakeasy_t - constructor
//-------------------------------------------------
c64_speakeasy_t::c64_speakeasy_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, C64_SPEAKEASY, "Speakeasy 64", tag, owner, clock, "speakeasy64", __FILE__),
device_c64_expansion_card_interface(mconfig, *this),
m_votrax(*this, SC01A_TAG)
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void c64_speakeasy_t::device_start()
{
}
//-------------------------------------------------
// c64_cd_r - cartridge data read
//-------------------------------------------------
uint8_t c64_speakeasy_t::c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
return m_votrax->request() << 7;
}
return data;
}
//-------------------------------------------------
// c64_cd_w - cartridge data write
//-------------------------------------------------
void c64_speakeasy_t::c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
{
if (!io1)
{
m_votrax->write(space, 0, data & 0x3f);
m_votrax->inflection_w(space, 0, data >> 6);
}
}

View File

@ -0,0 +1,54 @@
// license:BSD-3-Clause
// copyright-holders:Curt Coder
/**********************************************************************
Personal Peripheral Products Speakeasy 64 cartridge emulation
**********************************************************************/
#pragma once
#ifndef __C64_SPEAKEASY__
#define __C64_SPEAKEASY__
#include "emu.h"
#include "exp.h"
#include "sound/votrax.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// ======================> c64_speakeasy_t
class c64_speakeasy_t : public device_t,
public device_c64_expansion_card_interface
{
public:
// construction/destruction
c64_speakeasy_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// optional information overrides
virtual machine_config_constructor device_mconfig_additions() const override;
protected:
// device-level overrides
virtual void device_start() override;
// device_c64_expansion_card_interface overrides
virtual uint8_t c64_cd_r(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
virtual void c64_cd_w(address_space &space, offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override;
private:
required_device<votrax_sc01_device> m_votrax;
};
// device type definition
extern const device_type C64_SPEAKEASY;
#endif

View File

@ -210,7 +210,7 @@ SLOT_INTERFACE_START( vic20_expansion_cards )
SLOT_INTERFACE("8k", VIC1110)
SLOT_INTERFACE("16k", VIC1111)
SLOT_INTERFACE("fe3", VIC20_FE3)
SLOT_INTERFACE("speakeasy", VIC20_SPEAKEASY)
SLOT_INTERFACE("speakez", VIC20_SPEAKEASY)
// the following need ROMs from the software list
SLOT_INTERFACE_INTERNAL("standard", VIC20_STD)

View File

@ -2,7 +2,8 @@
// copyright-holders:smf
/**********************************************************************
Personal Peripheral Products SpeakEasy cartridge emulation
Personal Peripheral Products Speakeasy cartridge emulation
(aka Protecto Enterprizes VIC-20 Voice Synthesizer)
**********************************************************************/
@ -30,7 +31,7 @@ const device_type VIC20_SPEAKEASY = &device_creator<vic20_speakeasy_t>;
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( speakeasy )
MCFG_SPEAKER_ADD("mono", 0.0, 0.0, 1.0)
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD(SC01A_TAG, VOTRAX_SC01, 720000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.85)
@ -58,7 +59,7 @@ machine_config_constructor vic20_speakeasy_t::device_mconfig_additions() const
//-------------------------------------------------
vic20_speakeasy_t::vic20_speakeasy_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, VIC20_SPEAKEASY, "SpeakEasy", tag, owner, clock, "speakeasy", __FILE__),
device_t(mconfig, VIC20_SPEAKEASY, "Speakeasy", tag, owner, clock, "speakeasy", __FILE__),
device_vic20_expansion_card_interface(mconfig, *this),
m_votrax(*this, SC01A_TAG)
{

View File

@ -2,7 +2,8 @@
// copyright-holders:Curt Coder
/**********************************************************************
Personal Peripheral Products SpeakEasy cartridge emulation
Personal Peripheral Products Speakeasy cartridge emulation
(aka Protecto Enterprizes VIC-20 Voice Synthesizer)
**********************************************************************/