summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/bob85.cpp40
1 files changed, 33 insertions, 7 deletions
diff --git a/src/mame/drivers/bob85.cpp b/src/mame/drivers/bob85.cpp
index 59d3b0ebeb4..52bd4c007a0 100644
--- a/src/mame/drivers/bob85.cpp
+++ b/src/mame/drivers/bob85.cpp
@@ -2,11 +2,12 @@
// copyright-holders:Miodrag Milanovic
/***************************************************************************
- BOB85 driver by Miodrag Milanovic
+BOB85 driver by Miodrag Milanovic
- 2008-05-24 Preliminary driver.
- 2009-05-12 Skeleton driver.
- 2013-06-02 Working driver.
+2008-05-24 Preliminary driver.
+2009-05-12 Skeleton driver.
+2013-06-02 Working driver.
+2019-07-14 Fixed cassette load - it loads correctly then says EEEE
Pasting:
0-F : as is
@@ -23,6 +24,7 @@ Test Paste:
#include "emu.h"
#include "cpu/i8085/i8085.h"
+#include "machine/timer.h"
#include "imagedev/cassette.h"
#include "speaker.h"
#include "bob85.lh"
@@ -42,16 +44,19 @@ public:
{ }
void bob85(machine_config &config);
+
+private:
void bob85_io(address_map &map);
void bob85_mem(address_map &map);
DECLARE_READ8_MEMBER(bob85_keyboard_r);
DECLARE_WRITE8_MEMBER(bob85_7seg_w);
DECLARE_WRITE_LINE_MEMBER(sod_w);
DECLARE_READ_LINE_MEMBER(sid_r);
-
-private:
+ TIMER_DEVICE_CALLBACK_MEMBER(kansas_r);
uint8_t m_prev_key;
uint8_t m_count_key;
+ u16 m_casscnt;
+ bool m_cassold, m_cassbit;
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<i8085a_cpu_device> m_maincpu;
@@ -190,6 +195,26 @@ void bob85_state::machine_reset()
{
}
+TIMER_DEVICE_CALLBACK_MEMBER( bob85_state::kansas_r )
+{
+ /* cassette - turn pulses into a bit */
+ bool cass_ws = (m_cass->input() > +0.04) ? 1 : 0;
+ m_casscnt++;
+
+ if (cass_ws != m_cassold)
+ {
+ m_cassold = cass_ws;
+ m_cassbit = (m_casscnt < 12) ? 1 : 0;
+ m_casscnt = 0;
+ }
+ else
+ if (m_casscnt > 32)
+ {
+ m_casscnt = 32;
+ m_cassbit = 0;
+ }
+}
+
WRITE_LINE_MEMBER( bob85_state::sod_w )
{
m_cass->output(state ? +1.0 : -1.0);
@@ -197,7 +222,7 @@ WRITE_LINE_MEMBER( bob85_state::sod_w )
READ_LINE_MEMBER( bob85_state::sid_r )
{
- return (m_cass->input() > 0.04) ? 1 : 0;
+ return m_cassbit;
}
void bob85_state::bob85(machine_config &config)
@@ -217,6 +242,7 @@ void bob85_state::bob85(machine_config &config)
// devices
CASSETTE(config, m_cass).set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
m_cass->add_route(ALL_OUTPUTS, "mono", 0.05);
+ TIMER(config, "kansas_r").configure_periodic(FUNC(bob85_state::kansas_r), attotime::from_hz(40000));
}
/* ROM definition */