blob: c5f9552d3edd7a296750f99af34f3545eca3e0fa (
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
// license:BSD-3-Clause
// copyright-holders: 68bit
/****************************************************************************
Motorola EXORterm 155 (M68SDS)
****************************************************************************/
#ifndef MAME_MACHINE_EXORTERM_H
#define MAME_MACHINE_EXORTERM_H
#pragma once
#include "cpu/m6800/m6800.h"
#include "machine/clock.h"
#include "machine/input_merger.h"
#include "machine/mc14411.h"
#include "machine/6850acia.h"
#include "machine/6821pia.h"
#include "sound/spkrdev.h"
#include "bus/rs232/rs232.h"
#include "emupal.h"
#include "screen.h"
#include "machine/terminal.h"
INPUT_PORTS_EXTERN(exorterm155);
class exorterm155_device : public device_t
{
public:
exorterm155_device(const machine_config &mconfig, const char *tag, device_t *owner, const XTAL &clock);
// Interface to a RS232 connection.
auto rs232_conn_txd_handler() { return m_rs232_conn_txd_handler.bind(); }
auto rs232_conn_dtr_handler() { return m_rs232_conn_dtr_handler.bind(); }
auto rs232_conn_rts_handler() { return m_rs232_conn_rts_handler.bind(); }
DECLARE_WRITE_LINE_MEMBER(rs232_conn_dcd_w);
DECLARE_WRITE_LINE_MEMBER(rs232_conn_dsr_w);
DECLARE_WRITE_LINE_MEMBER(rs232_conn_ri_w);
DECLARE_WRITE_LINE_MEMBER(rs232_conn_cts_w);
DECLARE_WRITE_LINE_MEMBER(rs232_conn_rxd_w);
protected:
exorterm155_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, const XTAL &clock);
virtual void device_resolve_objects() override;
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
virtual ioport_constructor device_input_ports() const override;
virtual const tiny_rom_entry *device_rom_region() const override;
private:
required_device<m6800_cpu_device> m_maincpu;
required_device<input_merger_device> m_irqs;
required_device<acia6850_device> m_acia;
required_device<mc14411_device> m_brg;
required_ioport m_rs232_baud;
required_ioport m_disable_fac;
required_ioport m_display_fac;
required_device<pia6821_device> m_pia_kbd;
required_device<pia6821_device> m_pia_cfg;
required_device<pia6821_device> m_pia_disp;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_device<clock_device> m_sys_timer_clock;
required_shared_ptr<u8> m_vram;
required_region_ptr<u8> m_chargen;
required_device<beep_device> m_beeper;
output_finder<> m_online_led;
output_finder<> m_auto_lf_led;
output_finder<> m_page_mode_led;
output_finder<> m_insert_char_led;
void mem_map(address_map &map);
DECLARE_WRITE_LINE_MEMBER(acia_txd_w);
DECLARE_WRITE_LINE_MEMBER(acia_rts_w);
// Clocks
DECLARE_WRITE_LINE_MEMBER(write_f1_clock);
DECLARE_WRITE_LINE_MEMBER(write_f3_clock);
DECLARE_WRITE_LINE_MEMBER(write_f5_clock);
DECLARE_WRITE_LINE_MEMBER(write_f6_clock);
DECLARE_WRITE_LINE_MEMBER(write_f7_clock);
DECLARE_WRITE_LINE_MEMBER(write_f8_clock);
DECLARE_WRITE_LINE_MEMBER(write_f9_clock);
DECLARE_WRITE_LINE_MEMBER(write_f11_clock);
DECLARE_WRITE_LINE_MEMBER(write_f13_clock);
u8 m_dsr;
devcb_write_line m_rs232_conn_txd_handler;
devcb_write_line m_rs232_conn_dtr_handler;
devcb_write_line m_rs232_conn_rts_handler;
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
u8 m_framecnt;
u16 m_cursor_addr;
u8 m_inv_video;
u8 m_special_char_disp;
DECLARE_WRITE_LINE_MEMBER(sys_timer_w);
u8 m_sys_timer_count;
DECLARE_WRITE_LINE_MEMBER(pia_cfg_cb2_w);
u8 pia_kbd_pa_r();
u8 pia_kbd_pb_r();
void pia_kbd_pb_w(u8 data);
u8 m_term_data;
u8 pia_disp_pb_r();
void pia_disp_pa_w(u8 data);
void pia_disp_pb_w(u8 data);
u8 m_kbd_start_holdoff;
// Keyboard
static u8 const translation_table[][5][17];
static bool const caps_table[5][17];
void kbd_start_processing();
void kbd_reset_state();
void kbd_repeat_start(u8 row, u8 column);
void kbd_repeat_restart();
void kbd_repeat_stop();
void kbd_send_translated(u8 code);
TIMER_CALLBACK_MEMBER(kbd_scan_row);
TIMER_CALLBACK_MEMBER(kbd_repeat);
emu_timer *m_kbd_scan_timer;
emu_timer *m_kbd_repeat_timer;
required_ioport m_kbd_modifiers;
required_ioport_array<5> m_kbd_rows;
ioport_value m_kbd_states[5];
u8 m_kbd_next_row;
u8 m_kbd_processing;
u8 m_kbd_repeat_row;
u8 m_kbd_repeat_column;
u16 m_kbd_last_modifiers;
};
DECLARE_DEVICE_TYPE(EXORTERM155, exorterm155_device)
#endif // MAME_MACHINE_EXORTERM_H
|