blob: 1cbde37672ff5e7a190b61250ad0a19b2ca1c1b6 (
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
|
// 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, u32 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(); }
void rs232_conn_dcd_w(int state);
void rs232_conn_dsr_w(int state);
void rs232_conn_ri_w(int state);
void rs232_conn_cts_w(int state);
void rs232_conn_rxd_w(int state);
protected:
exorterm155_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
virtual ioport_constructor device_input_ports() const override ATTR_COLD;
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
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) ATTR_COLD;
void acia_txd_w(int state);
void acia_rts_w(int state);
// Clocks
void write_f1_clock(int state);
void write_f3_clock(int state);
void write_f5_clock(int state);
void write_f6_clock(int state);
void write_f7_clock(int state);
void write_f8_clock(int state);
void write_f9_clock(int state);
void write_f11_clock(int state);
void write_f13_clock(int state);
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;
void sys_timer_w(int state);
u8 m_sys_timer_count;
void pia_cfg_cb2_w(int state);
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
|