summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2021-08-31 18:54:09 +1000
committer Robbbert <Robbbert@users.noreply.github.com>2021-08-31 18:54:09 +1000
commit0030d9a9dc49bf7abca14542f45fe5c9a226700a (patch)
treedbadbe2932bd8b20db4e8d59dc8ea550fcafb687
parent86e762ada6345d1b3208743970e381d36d26478a (diff)
db32016: Added cassette interface
-rw-r--r--src/mame/drivers/ns32kdb.cpp26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/mame/drivers/ns32kdb.cpp b/src/mame/drivers/ns32kdb.cpp
index 073a53fff38..ffb2a1e4849 100644
--- a/src/mame/drivers/ns32kdb.cpp
+++ b/src/mame/drivers/ns32kdb.cpp
@@ -9,7 +9,6 @@
*
* TODO:
* - clock/timer routing
- * - cassette interface
* - nmi/reset switches, layout
* - multibus interface
*/
@@ -33,6 +32,8 @@
// busses and connectors
#include "bus/rs232/rs232.h"
+#include "speaker.h"
+#include "imagedev/cassette.h"
#define VERBOSE 0
#include "logmacro.h"
@@ -52,6 +53,7 @@ public:
, m_ppi(*this, "ppi")
, m_pit(*this, "pit")
, m_sdm(*this, "sdm%u", 0U)
+ , m_cass(*this, "cassette")
, m_cfg(*this, "S3")
, m_led(*this, "DS%u", 0U)
{
@@ -81,9 +83,13 @@ protected:
// serial port diagnostic multiplexers
required_device_array<ls157_device, 2> m_sdm;
+ required_device<cassette_image_device> m_cass;
required_ioport m_cfg;
output_finder<4> m_led;
+private:
+ u8 pa_r();
+ void pb_w(u8);
};
void ns32kdb_state::machine_start()
@@ -160,6 +166,16 @@ static INPUT_PORTS_START(db32016)
PORT_DIPSETTING(0x0f, "50")
INPUT_PORTS_END
+void ns32kdb_state::pb_w(u8 data)
+{
+ m_cass->output(BIT(data, 0) ? 1.0 : -1.0);
+}
+
+u8 ns32kdb_state::pa_r()
+{
+ return (m_cass->input() > 0.03) ? 0xfe : 0xff;
+}
+
void ns32kdb_state::db32016(machine_config &config)
{
NS32016(config, m_cpu, 10_MHz_XTAL);
@@ -176,6 +192,8 @@ void ns32kdb_state::db32016(machine_config &config)
m_icu->out_int().set_inputline(m_cpu, INPUT_LINE_IRQ0).invert();
I8255(config, m_ppi);
+ m_ppi->in_pa_callback().set(FUNC(ns32kdb_state::pa_r));
+ m_ppi->out_pb_callback().set(FUNC(ns32kdb_state::pb_w));
PIT8253(config, m_pit);
m_pit->set_clk<0>(18.432_MHz_XTAL / 150);
@@ -225,6 +243,12 @@ void ns32kdb_state::db32016(machine_config &config)
m_sdm[1]->out_callback().append(m_pci[1], FUNC(i8251_device::write_rxd)).bit(1);
//m_sdm[1]->out_callback().append(m_pci[1], FUNC(i8251_device::write_txc)).bit(2);
//m_sdm[1]->out_callback().append(m_pci[1], FUNC(i8251_device::write_rxc)).bit(3);
+
+ /* Cassette */
+ SPEAKER(config, "mono").front_center();
+ CASSETTE(config, m_cass);
+ m_cass->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
+ m_cass->add_route(ALL_OUTPUTS, "mono", 0.05);
}
ROM_START(db32016)