diff options
Diffstat (limited to 'src/devices/machine/ie15.h')
-rw-r--r-- | src/devices/machine/ie15.h | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/src/devices/machine/ie15.h b/src/devices/machine/ie15.h new file mode 100644 index 00000000000..55615004418 --- /dev/null +++ b/src/devices/machine/ie15.h @@ -0,0 +1,133 @@ +// license:BSD-3-Clause +// copyright-holders:Sergey Svishchev + +#ifndef MAME_MACHINE_IE15_H_ +#define MAME_MACHINE_IE15_H_ + +#include "emu.h" + +#include "bus/rs232/rs232.h" +#include "cpu/ie15/ie15.h" +#include "machine/ie15_kbd.h" +#include "sound/beep.h" + +#include "screen.h" +#include "speaker.h" + + +#define SCREEN_PAGE (80*48) + +#define IE_TRUE 0x80 +#define IE_FALSE 0 + +#define IE15_TOTAL_HORZ 1000 +#define IE15_DISP_HORZ 800 +#define IE15_HORZ_START 200 + +#define IE15_TOTAL_VERT (28*11) +#define IE15_DISP_VERT (25*11) +#define IE15_VERT_START (2*11) +#define IE15_STATUSLINE 11 + + +INPUT_PORTS_EXTERN(ie15); + + +class ie15_device : public device_t, public device_serial_interface +{ +public: + ie15_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source); + ie15_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + DECLARE_WRITE8_MEMBER(write) { term_write(data); } + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + virtual machine_config_constructor device_mconfig_additions() const override; + virtual ioport_constructor device_input_ports() const override; + virtual const tiny_rom_entry *device_rom_region() const override; + +protected: + 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 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; } + +public: + DECLARE_WRITE16_MEMBER(kbd_put); + DECLARE_WRITE_LINE_MEMBER(serial_rx_callback); + 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); + TIMER_CALLBACK_MEMBER(ie15_beepoff); + +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); + std::unique_ptr<uint32_t[]> m_tmpbmp; + + emu_timer *m_hblank_timer; + + 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; + + struct + { + uint8_t cursor; + uint8_t enable; + uint8_t line25; + uint32_t ptr1; + uint32_t ptr2; + } 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; + + 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; +}; + +extern const device_type IE15; + +#endif /* MAME_MACHINE_IE15_H_ */ |