// license:BSD-3-Clause
// copyright-holders:David Haywood
#include "emu.h"
#include "cedar_magnet_board.h"
cedar_magnet_board_interface::cedar_magnet_board_interface(const machine_config &mconfig, device_t &device, const char *cputag, const char *ramtag)
: device_interface(device, "cedmag_board"),
m_cpu(device, cputag),
m_ram(device, ramtag)
{
}
void cedar_magnet_board_interface::write_cpu_bus(int offset, u8 data)
{
address_space &ap = m_cpu->space(AS_PROGRAM);
ap.write_byte(offset, data);
}
u8 cedar_magnet_board_interface::read_cpu_bus(int offset)
{
address_space &ap = m_cpu->space(AS_PROGRAM);
return ap.read_byte(offset);
}
bool cedar_magnet_board_interface::is_running() const
{
return m_is_running;
}
TIMER_CALLBACK_MEMBER(cedar_magnet_board_interface::reset_assert_callback)
{
m_cpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
}
TIMER_CALLBACK_MEMBER(cedar_magnet_board_interface::reset_clear_callback)
{
m_cpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
}
TIMER_CALLBACK_MEMBER(cedar_magnet_board_interface::halt_assert_callback)
{
m_cpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
m_is_running = false;
}
TIMER_CALLBACK_MEMBER(cedar_magnet_board_interface::halt_clear_callback)
{
m_cpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
m_is_running = true;
}
void cedar_magnet_board_interface::irq_hold()
{
m_cpu->set_input_line(INPUT_LINE_IRQ0, HOLD_LINE);
}
void cedar_magnet_board_interface::halt_assert()
{
m_halt_assert_timer->adjust(attotime::from_usec(2));
}
void cedar_magnet_board_interface::halt_clear()
{
m_halt_clear_timer->adjust(attotime::from_usec(2));
}
void cedar_magnet_board_interface::reset_assert()
{
m_reset_assert_timer->adjust(attotime::from_usec(1));
}
void cedar_magnet_board_interface::reset_clear()
{
m_reset_clear_timer->adjust(attotime::from_usec(1));
}
void cedar_magnet_board_interface::interface_pre_reset()
{
halt_assert();
}
void cedar_magnet_board_interface::interface_pre_start()
{
m_halt_assert_timer = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cedar_magnet_board_interface::halt_assert_callback), this));
m_halt_clear_timer = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cedar_magnet_board_interface::halt_clear_callback), this));
m_reset_assert_timer = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cedar_magnet_board_interface::reset_assert_callback), this));
m_reset_clear_timer = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cedar_magnet_board_interface::reset_clear_callback), this));
}