summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Robbbert <robbbert@users.noreply.github.com>2013-11-03 11:23:56 +0000
committer Robbbert <robbbert@users.noreply.github.com>2013-11-03 11:23:56 +0000
commit98d013264fc5064be1d698032355da6d1ecd5206 (patch)
tree3eca8f178fb7e4cee5427cd4857ae9c7900b6ab0
parenta802f7a99ebe65befdbb0cecff3da5233f51c126 (diff)
(MESS) dolphunk : added cassette (nw)
-rw-r--r--src/mess/drivers/dolphunk.c50
1 files changed, 44 insertions, 6 deletions
diff --git a/src/mess/drivers/dolphunk.c b/src/mess/drivers/dolphunk.c
index 29bc09bd9ac..96445db5f20 100644
--- a/src/mess/drivers/dolphunk.c
+++ b/src/mess/drivers/dolphunk.c
@@ -4,8 +4,9 @@
Dolphin
- 08/04/2010 Skeleton driver.
- 20/05/2012 Fixed keyboard, added notes & speaker [Robbbert]
+ 2010-04-08 Skeleton driver.
+ 2012-05-20 Fixed keyboard, added notes & speaker [Robbbert]
+ 2013-11-03 Added cassette [Robbbert]
Minimal Setup:
0000-00FF ROM "MO" (74S471)
@@ -72,6 +73,7 @@
TODO:
- Find missing roms
- Add optional hardware listed above
+ - Cassette is added, but no idea how to operate it.
Thanks to Amigan site for various documents.
@@ -81,6 +83,8 @@
#include "emu.h"
#include "cpu/s2650/s2650.h"
#include "sound/speaker.h"
+#include "imagedev/cassette.h"
+#include "sound/wave.h"
#include "dolphunk.lh"
@@ -88,20 +92,38 @@ class dolphunk_state : public driver_device
{
public:
dolphunk_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_speaker(*this, "speaker")
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_speaker(*this, "speaker")
+ , m_cass(*this, "cassette")
{ }
+ DECLARE_READ8_MEMBER(cass_r);
+ DECLARE_WRITE8_MEMBER(cass_w);
DECLARE_READ8_MEMBER(port07_r);
DECLARE_WRITE8_MEMBER(port00_w);
DECLARE_WRITE8_MEMBER(port06_w);
+ TIMER_DEVICE_CALLBACK_MEMBER(dolphin_c);
+private:
+ UINT8 m_cass_data;
UINT8 m_last_key;
+ bool m_cass_state;
bool m_speaker_state;
required_device<cpu_device> m_maincpu;
required_device<speaker_sound_device> m_speaker;
+ required_device<cassette_image_device> m_cass;
};
+READ8_MEMBER( dolphunk_state::cass_r )
+{
+ return (m_cass->input() > 0.03) ? 1 : 0;
+}
+
+WRITE8_MEMBER( dolphunk_state::cass_w )
+{
+ m_cass_state = BIT(data, 0); // get flag bit
+}
+
WRITE8_MEMBER( dolphunk_state::port00_w )
{
output_set_digit_value(offset, data);
@@ -139,6 +161,16 @@ READ8_MEMBER( dolphunk_state::port07_r )
return data;
}
+TIMER_DEVICE_CALLBACK_MEMBER(dolphunk_state::dolphin_c)
+{
+ m_cass_data++;
+
+ if (m_cass_state)
+ m_cass->output(BIT(m_cass_data, 1) ? -1.0 : +1.0); // 1000Hz
+ else
+ m_cass->output(BIT(m_cass_data, 0) ? -1.0 : +1.0); // 2000Hz
+}
+
static ADDRESS_MAP_START( dolphunk_mem, AS_PROGRAM, 8, dolphunk_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE( 0x0000, 0x01ff) AM_ROM
@@ -151,7 +183,7 @@ static ADDRESS_MAP_START( dolphunk_io, AS_IO, 8, dolphunk_state )
AM_RANGE(0x00, 0x03) AM_WRITE(port00_w) // 4-led display
AM_RANGE(0x06, 0x06) AM_WRITE(port06_w) // speaker (NOT a keyclick)
AM_RANGE(0x07, 0x07) AM_READ(port07_r) // pushbuttons
- //AM_RANGE(S2650_SENSE_PORT, S2650_FO_PORT) AM_READWRITE(dolphunk_cass_in,dolphunk_cass_out)
+ AM_RANGE(S2650_SENSE_PORT, S2650_FO_PORT) AM_READWRITE(cass_r,cass_w)
AM_RANGE(0x102, 0x103) AM_NOP // stops error log filling up while using debug
ADDRESS_MAP_END
@@ -196,6 +228,12 @@ static MACHINE_CONFIG_START( dolphunk, dolphunk_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
+
+ /* cassette */
+ MCFG_CASSETTE_ADD( "cassette", default_cassette_interface )
+ MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("dolphin_c", dolphunk_state, dolphin_c, attotime::from_hz(4000))
MACHINE_CONFIG_END
/* ROM definition */