summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/ie15.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/ie15.h')
-rw-r--r--src/devices/machine/ie15.h141
1 files changed, 84 insertions, 57 deletions
diff --git a/src/devices/machine/ie15.h b/src/devices/machine/ie15.h
index 7390fb5fea5..feeaadc86a0 100644
--- a/src/devices/machine/ie15.h
+++ b/src/devices/machine/ie15.h
@@ -6,7 +6,6 @@
#pragma once
-#include "bus/rs232/rs232.h"
#include "cpu/ie15/ie15.h"
#include "machine/ie15_kbd.h"
#include "sound/beep.h"
@@ -39,29 +38,35 @@ class ie15_device : public device_t, public device_serial_interface
public:
ie15_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_WRITE8_MEMBER(write) { term_write(data); }
+ // 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);
- DECLARE_WRITE_LINE_MEMBER(serial_rx_callback);
+ void update_serial(int state);
protected:
ie15_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
- virtual void device_start() override;
- virtual void device_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+ virtual void device_start() override ATTR_COLD;
+ virtual void device_reset() override ATTR_COLD;
- 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;
+ 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;
+
+ TIMER_CALLBACK_MEMBER(hblank_onoff_tick);
virtual void rcv_complete() override;
virtual void tra_callback() override;
virtual void tra_complete() override;
- void term_write(uint8_t data) { m_serial_rx_char = data; m_serial_rx_ready = IE_FALSE; }
-
private:
- static const device_timer_id TIMER_HBLANK = 0;
void scanline_callback();
void update_leds();
void draw_scanline(uint32_t *p, uint16_t offset, uint8_t scanline);
@@ -69,70 +74,92 @@ private:
void ie15core(machine_config &config);
- DECLARE_WRITE16_MEMBER(kbd_put);
- DECLARE_WRITE8_MEMBER(mem_w);
- DECLARE_READ8_MEMBER(mem_r);
- DECLARE_WRITE8_MEMBER(mem_addr_lo_w);
- DECLARE_WRITE8_MEMBER(mem_addr_hi_w);
- DECLARE_WRITE8_MEMBER(mem_addr_inc_w);
- DECLARE_WRITE8_MEMBER(mem_addr_dec_w);
- DECLARE_READ8_MEMBER(flag_r);
- DECLARE_WRITE8_MEMBER(flag_w);
- DECLARE_WRITE8_MEMBER(beep_w);
- DECLARE_READ8_MEMBER(kb_r);
- DECLARE_READ8_MEMBER(kb_ready_r);
- DECLARE_READ8_MEMBER(kb_s_red_r);
- DECLARE_READ8_MEMBER(kb_s_sdv_r);
- DECLARE_READ8_MEMBER(kb_s_dk_r);
- DECLARE_READ8_MEMBER(kb_s_dupl_r);
- DECLARE_READ8_MEMBER(kb_s_lin_r);
- DECLARE_WRITE8_MEMBER(kb_ready_w);
- DECLARE_READ8_MEMBER(serial_tx_ready_r);
- DECLARE_WRITE8_MEMBER(serial_w);
- DECLARE_READ8_MEMBER(serial_rx_ready_r);
- DECLARE_READ8_MEMBER(serial_r);
- DECLARE_WRITE8_MEMBER(serial_speed_w);
+ void kbd_put(uint16_t data);
+ void kbd_sdv(int state);
+ void mem_w(uint8_t data);
+ uint8_t mem_r();
+ void mem_addr_lo_w(uint8_t data);
+ void mem_addr_hi_w(uint8_t data);
+ void mem_addr_inc_w(uint8_t data);
+ void mem_addr_dec_w(uint8_t data);
+ uint8_t flag_r(offs_t offset);
+ void flag_w(offs_t offset, uint8_t data);
+ void beep_w(uint8_t data);
+ uint8_t kb_r();
+ uint8_t kb_ready_r();
+ uint8_t kb_s_red_r();
+ uint8_t kb_s_sdv_r();
+ uint8_t kb_s_dk_r();
+ uint8_t kb_s_dupl_r();
+ uint8_t kb_s_lin_r();
+ void kb_ready_w(uint8_t data);
+ uint8_t serial_tx_ready_r();
+ void serial_w(uint8_t data);
+ uint8_t serial_rx_ready_r();
+ uint8_t serial_r();
+ void serial_speed_w(uint8_t data);
TIMER_CALLBACK_MEMBER(ie15_beepoff);
- void ie15_io(address_map &map);
- void ie15_mem(address_map &map);
+ void ie15_io(address_map &map) ATTR_COLD;
+ void ie15_mem(address_map &map) ATTR_COLD;
std::unique_ptr<uint32_t[]> m_tmpbmp;
- emu_timer *m_hblank_timer;
+ emu_timer *m_hblank_timer = nullptr;
+ emu_timer *m_beepoff_timer = nullptr;
- uint8_t m_long_beep;
- uint8_t m_kb_control;
- uint8_t m_kb_data;
- uint8_t m_kb_flag0;
- uint8_t m_kb_flag;
- uint8_t m_kb_ruslat;
- uint8_t m_latch;
+ uint8_t m_long_beep = 0;
+ uint8_t m_kb_control = 0;
+ uint8_t m_kb_data = 0;
+ uint8_t m_kb_flag0 = 0;
+ uint8_t m_kb_flag = 0;
+ uint8_t m_kb_ruslat = 0;
+ uint8_t m_latch = 0;
struct
{
- uint8_t cursor;
- uint8_t enable;
- uint8_t line25;
- uint32_t ptr1;
- uint32_t ptr2;
+ uint8_t cursor = 0;
+ uint8_t enable = 0;
+ uint8_t line25 = 0;
+ uint32_t ptr1 = 0;
+ uint32_t ptr2 = 0;
} m_video;
- uint8_t m_serial_rx_ready;
- uint8_t m_serial_rx_char;
- uint8_t m_serial_tx_ready;
- int m_hblank;
- int m_vpos;
- int m_marker_scanline;
+ uint8_t m_serial_rx_ready = 0;
+ uint8_t m_serial_rx_char = 0;
+ uint8_t m_serial_tx_ready = 0;
+ int m_hblank = 0;
+ int m_vpos = 0;
+ int m_marker_scanline = 0;
+ bool m_kbd_sdv = 0;
required_device<cpu_device> m_maincpu;
required_region_ptr<u8> m_p_videoram;
required_region_ptr<u8> m_p_chargen;
required_device<beep_device> m_beeper;
- required_device<rs232_port_device> m_rs232;
required_device<screen_device> m_screen;
required_device<ie15_keyboard_device> m_keyboard;
required_ioport m_io_keyboard;
+
+ output_finder<> m_lat_led;
+ output_finder<> m_nr_led;
+ output_finder<> m_pch_led;
+ output_finder<> m_dup_led;
+ output_finder<> m_lin_led;
+ output_finder<> m_red_led;
+ output_finder<> m_sdv_led;
+ output_finder<> m_prd_led;
+
+ devcb_write_line m_rs232_conn_txd_handler;
+ devcb_write_line m_rs232_conn_dtr_handler;
+ devcb_write_line m_rs232_conn_rts_handler;
+
+ // Until the UART is implemented
+ required_ioport m_rs232_txbaud;
+ required_ioport m_rs232_rxbaud;
+ required_ioport m_rs232_databits;
+ required_ioport m_rs232_parity;
+ required_ioport m_rs232_stopbits;
};
DECLARE_DEVICE_TYPE(IE15, ie15_device)