1 // license:BSD-3-Clause 2 // copyright-holders:Sandro Ronco 3 /**************************************************************************** 4 5 pce220_ser.h 6 7 Sharp PC-E220/PC-G850V Serial I/O 8 9 ****************************************************************************/ 10 11 #ifndef MAME_MACHINE_PCE220_SER_H 12 #define MAME_MACHINE_PCE220_SER_H 13 14 #pragma once 15 16 17 /*************************************************************************** 18 TYPE DEFINITIONS 19 ***************************************************************************/ 20 21 // ======================> pce220_serial_device 22 23 class pce220_serial_device : public device_t, 24 public device_image_interface 25 { 26 public: 27 // construction/destruction 28 pce220_serial_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 29 virtual ~pce220_serial_device(); 30 31 // image-level overrides 32 virtual image_init_result call_load() override; 33 virtual void call_unload() override; 34 virtual image_init_result call_create(int format_type, util::option_resolution *format_options) override; 35 image_type()36 virtual iodevice_t image_type() const noexcept override { return IO_SERIAL; } 37 is_readable()38 virtual bool is_readable() const noexcept override { return true; } is_writeable()39 virtual bool is_writeable() const noexcept override { return true; } is_creatable()40 virtual bool is_creatable() const noexcept override { return true; } must_be_loaded()41 virtual bool must_be_loaded() const noexcept override { return false; } is_reset_on_load()42 virtual bool is_reset_on_load() const noexcept override { return false; } file_extensions()43 virtual const char *file_extensions() const noexcept override { return "txt,ihx"; } 44 45 // specific implementation in_xin(void)46 uint8_t in_xin(void) { return m_xin & 0x01; } in_din(void)47 uint8_t in_din(void) { return m_din & 0x01; } in_ack(void)48 uint8_t in_ack(void) { return m_ack & 0x01; } out_busy(uint8_t state)49 void out_busy(uint8_t state) { m_busy = state & 0x01; } out_dout(uint8_t state)50 void out_dout(uint8_t state) { m_dout = state & 0x01; } out_xout(uint8_t state)51 void out_xout(uint8_t state) { m_xout = state & 0x01; } enable_interface(uint8_t state)52 void enable_interface(uint8_t state) { m_enabled = state & 0x01; } 53 54 protected: 55 // internal helpers 56 int calc_parity(uint8_t data); 57 int get_next_state(); 58 59 // device-level overrides 60 virtual void device_start() override; 61 virtual void device_reset() override; 62 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 63 64 private: 65 // internal device state 66 static const device_timer_id TIMER_SEND = 0; 67 static const device_timer_id TIMER_RECEIVE = 1; 68 69 emu_timer* m_send_timer; // timer for send data 70 emu_timer* m_receive_timer; // timer for receive data 71 uint8_t m_state; // transfer status 72 uint32_t m_bytes_count; // number of bytes transferred 73 uint8_t m_current_byte; // byte in transfer 74 uint8_t m_enabled; // enable/disable 75 76 uint8_t m_busy; // CTS 77 uint8_t m_dout; // DTR 78 uint8_t m_xout; // TXD 79 uint8_t m_xin; // RXD 80 uint8_t m_din; // DSR 81 uint8_t m_ack; // RTS 82 }; 83 84 // device type definition 85 DECLARE_DEVICE_TYPE(PCE220SERIAL, pce220_serial_device) 86 87 /*************************************************************************** 88 DEVICE CONFIGURATION MACROS 89 ***************************************************************************/ 90 #define PCE220SERIAL_TAG "serial" 91 92 #endif // MAME_MACHINE_PCE220_SER_H 93