diff options
author | 2019-07-14 00:35:09 +1000 | |
---|---|---|
committer | 2019-07-14 00:35:09 +1000 | |
commit | d735f19cdea5ab895fcdab90b5c325b55908387c (patch) | |
tree | 434d20bff1d3e3b98fb2947a66354cd882aaf386 /src | |
parent | 484aff20bc795f018504dcd302d42d452f916252 (diff) |
(nw) bob85: fixed cassette load (ignore EEEE error - it loads correctly)
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/drivers/bob85.cpp | 40 |
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 */ |