blob: a20426ae39dff3e1e31a4016dd68a7ea69e3a63a (
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
// license:BSD-3-Clause
// copyright-holders:F. Ulivi
#ifndef MAME_MACHINE_IMDS2IOC_H
#define MAME_MACHINE_IMDS2IOC_H
#include "cpu/i8085/i8085.h"
#include "cpu/mcs48/mcs48.h"
#include "machine/i8257.h"
#include "video/i8275.h"
#include "sound/beep.h"
#include "machine/pit8253.h"
#include "machine/i8271.h"
#include "imagedev/floppy.h"
#include "bus/centronics/ctronics.h"
#include "emupal.h"
class imds2ioc_device : public device_t
{
public:
imds2ioc_device(const machine_config &mconfig, const char *tag, device_t *owner, const XTAL &clock = XTAL());
auto master_intr_cb() { return m_master_intr_cb.bind(); }
auto parallel_int_cb() { return m_parallel_int_cb.bind(); }
uint8_t dbb_master_r(offs_t offset);
void dbb_master_w(offs_t offset, uint8_t data);
uint8_t pio_master_r(offs_t offset);
void pio_master_w(offs_t offset, uint8_t data);
protected:
virtual ioport_constructor device_input_ports() const override;
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_resolve_objects() override;
virtual void device_start() override;
virtual void device_reset() override;
private:
void miscout_w(uint8_t data);
uint8_t miscin_r();
DECLARE_WRITE_LINE_MEMBER(beep_timer_w);
void start_timer_w(uint8_t data);
uint8_t kb_read(offs_t offset);
uint8_t kb_port_p2_r();
void kb_port_p1_w(uint8_t data);
DECLARE_READ_LINE_MEMBER(kb_port_t0_r);
DECLARE_READ_LINE_MEMBER(kb_port_t1_r);
void ioc_dbbout_w(offs_t offset, uint8_t data);
void ioc_f0_w(offs_t offset, uint8_t data);
void ioc_set_f1_w(uint8_t data);
void ioc_reset_f1_w(uint8_t data);
uint8_t ioc_status_r();
uint8_t ioc_dbbin_r();
DECLARE_WRITE_LINE_MEMBER(hrq_w);
uint8_t ioc_mem_r(offs_t offset);
void ioc_mem_w(offs_t offset, uint8_t data);
uint8_t pio_port_p1_r();
void pio_port_p1_w(uint8_t data);
uint8_t pio_port_p2_r();
void pio_port_p2_w(uint8_t data);
DECLARE_WRITE_LINE_MEMBER(pio_lpt_ack_w);
DECLARE_WRITE_LINE_MEMBER(pio_lpt_busy_w);
I8275_DRAW_CHARACTER_MEMBER(crtc_display_pixels);
void io_map(address_map &map);
void mem_map(address_map &map);
void update_beeper();
void update_printer();
required_device<i8080a_cpu_device> m_ioccpu;
required_device<i8257_device> m_iocdma;
required_device<i8275_device> m_ioccrtc;
required_device<beep_device> m_iocbeep;
required_device<pit8253_device> m_ioctimer;
required_device<i8271_device> m_iocfdc;
required_device<floppy_connector> m_flop0;
required_device<i8041a_device> m_iocpio;
required_device<i8741a_device> m_kbcpu;
required_device<palette_device> m_palette;
required_device<gfxdecode_device> m_gfxdecode;
required_device<centronics_device> m_centronics;
required_ioport_array<8> m_io_key;
required_ioport m_ioc_options;
devcb_write_line m_master_intr_cb;
devcb_write_line m_parallel_int_cb;
// Character generator
required_region_ptr<uint8_t> m_chargen;
// MISCOUT state
uint8_t m_miscout;
// Beeper timer line
int m_beeper_timer;
// Keyboard state
uint8_t m_kb_p1;
// IPC to IOC buffer
uint8_t m_ioc_ibf;
// IOC to IPC buffer
uint8_t m_ioc_obf;
// IPC/IOC status
uint8_t m_ipc_ioc_status;
// PIO port 1
uint8_t m_pio_port1;
// PIO port 2
uint8_t m_pio_port2;
// PIO device status byte
uint8_t m_device_status_byte;
};
DECLARE_DEVICE_TYPE(IMDS2IOC, imds2ioc_device)
#endif // MAME_MACHINE_IMDS2IOC_H
|