summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/cedar_magnet_board.cpp
blob: 8eeffb690dc3e0199b181db78a7fb746e80c1c48 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// 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);
}

uint8_t 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));
}