summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/exorterm.h
diff options
context:
space:
mode:
author 68bit <53298758+68bit@users.noreply.github.com>2020-07-11 05:41:52 +1000
committer GitHub <noreply@github.com>2020-07-10 15:41:52 -0400
commit5972474a21b12728fa9703c1fec8f94c0562f825 (patch)
tree7aac9747023765e0fa47dac55d66ae736d552125 /src/devices/machine/exorterm.h
parent47e32437cd308ece08629e1909cb6d6990ea0d85 (diff)
New machines added as WORKING
New machines added as WORKING --- Motorola EXORterm 155 [68bit]
Diffstat (limited to 'src/devices/machine/exorterm.h')
-rw-r--r--src/devices/machine/exorterm.h154
1 files changed, 154 insertions, 0 deletions
diff --git a/src/devices/machine/exorterm.h b/src/devices/machine/exorterm.h
new file mode 100644
index 00000000000..ee41cab4422
--- /dev/null
+++ b/src/devices/machine/exorterm.h
@@ -0,0 +1,154 @@
+// 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(); }
+ 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, u32 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;
+ u8 m_ring;
+
+ 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);
+ DECLARE_READ_LINE_MEMBER(pia_disp_ca2_r);
+
+ 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_repeat();
+ 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