(nw) bob85: fixed cassette load (ignore EEEE error - it loads correctly)

This commit is contained in:
Robbbert 2019-07-14 00:35:09 +10:00
parent 484aff20bc
commit d735f19cde

View File

@ -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 */