diff options
Diffstat (limited to 'src/devices/video/crt9028.h')
-rw-r--r-- | src/devices/video/crt9028.h | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/src/devices/video/crt9028.h b/src/devices/video/crt9028.h new file mode 100644 index 00000000000..f0696519ed9 --- /dev/null +++ b/src/devices/video/crt9028.h @@ -0,0 +1,142 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/********************************************************************** + + Standard Microsystems CRT9028/9128 Video Terminal Logic Controller + +*********************************************************************** + _____ _____ + DA8 1 |* \__/ | 40 DA7 + DA9 2 | | 39 DA6 + DA10 3 | | 38 DA5 + GND 4 | | 37 DA4 + XTAL2 5 | | 36 DA3 + XTAL1 6 | | 35 DA2 + /VIDEO 7 | | 34 DA1 + INTOUT 8 | | 33 DA0 + /DWR 9 | | 32 DB7 + DD0 10 | CRT 9028 | 31 DB6 + DD1 11 | CRT 9128 | 30 DB5 + DD2 12 | | 29 DB4 + DD3 13 | | 28 DB3 + DD4 14 | | 27 DB2 + DD5 15 | | 26 DB1 + DD6 16 | | 25 DB0 + DD7 17 | | 24 A/D + HSYNC 18 | | 23 /RD or /DS + VSYNC 19 | | 22 /WR or R/W + CSYNC 20 |______________| 21 VCC + +**********************************************************************/ + +#ifndef MAME_VIDEO_CRT9028_H +#define MAME_VIDEO_CRT9028_H + +#pragma once + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> crt9028_device + +class crt9028_device : public device_t, public device_memory_interface, public device_video_interface +{ +public: + // device configuration + auto hsync_callback() { return m_hsync_callback.bind(); } + auto vsync_callback() { return m_hsync_callback.bind(); } + + // read/write handlers + u8 read(offs_t offset); + void write(offs_t offset, u8 data); + + // screen update method + u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + +protected: + // base type constructor + crt9028_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, + int dots_per_char, int chars_per_row, int horiz_blanking, int hsync_delay, int hsync_width, bool hsync_active, + int char_rows, int scans_per_char, bool vsync_active, + int vert_blanking, int vsync_delay, bool vsync_width, + int alt_vert_blanking, int alt_vsync_delay, bool alt_vsync_width, + int csync_delay, int csync_width, int underline, + u16 wide_gfx_seg1_4, u16 wide_gfx_seg2_5, u16 wide_gfx_seg3_6, u8 wide_gfx_pattern, + u16 thin_gfx_seg1, u16 thin_gfx_seg2, u16 thin_gfx_seg3, u16 thin_gfx_seg4, + u8 thin_gfx_dots1, u8 thin_gfx_dots2, u8 thin_gfx_dots3, u8 thin_gfx_dots4); + + // device-specific overrides + virtual void device_config_complete() override; + virtual void device_resolve_objects() override; + virtual void device_start() override; + + // device_memory_interface overrides + virtual space_config_vector memory_space_config() const override; + +private: + // register helpers + void chip_reset(); + u8 status_r(); + void filadd_w(u8 data); + void tosadd_w(u8 data); + void curlo_w(u8 data); + void curhi_w(u8 data); + void attdat_w(u8 data); + void mode_w(u8 data); + u8 character_r(); + void character_w(u8 data); + + // address space for display memory + const address_space_config m_space_config; + address_space *m_space; + + // internal character set + required_region_ptr<u8> m_charset; + + // timing callbacks + devcb_write_line m_hsync_callback; + devcb_write_line m_vsync_callback; + + // mask parameters + const int m_dots_per_char; + const int m_chars_per_row; + const int m_horiz_blanking; + const int m_hsync_delay; + const int m_hsync_width; + const bool m_hsync_active; + const int m_char_rows; + const int m_scans_per_char; + const bool m_vsync_active; + const int m_vert_blanking[2]; + const int m_vsync_delay[2]; + const int m_vsync_width[2]; + const int m_csync_delay; + const int m_csync_width; + const int m_underline; + const u16 m_wide_gfx_seg[3]; + const u8 m_wide_gfx_pattern; + const u16 m_thin_gfx_seg[4]; + const u8 m_thin_gfx_dots[4]; + + // internal state + u8 m_address_register; +}; + +// ======================> crt9028_000_device + +class crt9028_000_device : public crt9028_device +{ +public: + // device constructor + crt9028_000_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + // device-specific overrides + virtual const tiny_rom_entry *device_rom_region() const override; +}; + +// device type declarations +DECLARE_DEVICE_TYPE(CRT9028_000, crt9028_000_device) + +#endif // MAME_VIDEO_CRT9028_H |