1 // license:BSD-3-Clause 2 // copyright-holders:Miodrag Milanovic,Karl-Ludwig Deisenhofer 3 /********************************************************************** 4 5 DEC VT Terminal video emulation 6 [ DC012 and DC011 emulation ] 7 8 01/05/2009 Initial implementation [Miodrag Milanovic] 9 10 **********************************************************************/ 11 12 #ifndef MAME_VIDEO_VTVIDEO_H 13 #define MAME_VIDEO_VTVIDEO_H 14 15 #pragma once 16 17 #include "emupal.h" 18 19 20 class vt100_video_device : public device_t, 21 public device_video_interface 22 { 23 public: 24 vt100_video_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 25 ram_rd_callback()26 auto ram_rd_callback() { return m_read_ram.bind(); } vert_freq_intr_wr_callback()27 auto vert_freq_intr_wr_callback() { return m_write_vert_freq_intr.bind(); } lba3_lba4_wr_callback()28 auto lba3_lba4_wr_callback() { return m_write_lba3_lba4.bind(); } lba7_wr_callback()29 auto lba7_wr_callback() { return m_write_lba7.bind(); } 30 set_chargen(T && tag)31 template <typename T> void set_chargen(T &&tag) { m_char_rom.set_tag(std::forward<T>(tag)); } 32 33 DECLARE_READ_LINE_MEMBER(lba7_r); 34 void dc012_w(offs_t offset, uint8_t data); 35 void dc011_w(uint8_t data); 36 void brightness_w(uint8_t data); 37 38 virtual void video_update(bitmap_ind16 &bitmap, const rectangle &cliprect); 39 40 protected: 41 vt100_video_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); 42 43 // device-level overrides 44 virtual void device_start() override; 45 virtual void device_reset() override; 46 virtual void device_add_mconfig(machine_config &config) override; 47 48 // internal state 49 void recompute_parameters(); 50 void vblank_callback(screen_device &screen, bool state); 51 void display_char(bitmap_ind16 &bitmap, uint8_t code, int x, int y, uint8_t scroll_region, uint8_t display_type, bool invert, bool bold, bool blink, bool underline, bool blank); 52 TIMER_CALLBACK_MEMBER(lba3_change); 53 TIMER_CALLBACK_MEMBER(lba7_change); notify_vblank(bool choice)54 virtual void notify_vblank(bool choice) { } 55 56 devcb_read8 m_read_ram; 57 devcb_write_line m_write_vert_freq_intr; 58 devcb_write8 m_write_lba3_lba4; 59 devcb_write_line m_write_lba7; 60 61 int m_lba7; 62 63 bool MHFU_FLAG; 64 int MHFU_counter; 65 66 // dc012 attributes 67 uint8_t m_scroll_latch; 68 bool m_scroll_latch_valid; 69 uint8_t m_blink_flip_flop; 70 uint8_t m_reverse_field; 71 uint8_t m_basic_attribute; 72 // dc011 attributes 73 uint8_t m_columns; 74 uint8_t m_height; 75 uint8_t m_height_MAX; 76 uint8_t m_fill_lines; 77 bool m_is_50hz; 78 bool m_interlaced; 79 emu_timer *m_lba3_change_timer; 80 emu_timer *m_lba7_change_timer; 81 82 required_region_ptr<uint8_t> m_char_rom; /* character rom region */ 83 required_device<palette_device> m_palette; 84 85 bool m_notify_vblank; 86 int m_last_scroll; 87 88 bool m_linedoubler; 89 }; 90 91 92 class rainbow_video_device : public vt100_video_device 93 { 94 public: 95 rainbow_video_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 96 97 virtual void video_update(bitmap_ind16 &bitmap, const rectangle &cliprect) override; 98 virtual void video_blanking(bitmap_ind16 &bitmap, const rectangle &cliprect); 99 100 int MHFU(int); 101 void palette_select(int choice); 102 103 protected: 104 virtual void notify_vblank(bool choice) override; 105 virtual void device_reset() override; 106 }; 107 108 DECLARE_DEVICE_TYPE(VT100_VIDEO, vt100_video_device) 109 DECLARE_DEVICE_TYPE(RAINBOW_VIDEO, rainbow_video_device) 110 111 112 #endif // MAME_VIDEO_VTVIDEO_H 113