summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/video/crt9028.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/video/crt9028.h')
-rw-r--r--src/devices/video/crt9028.h142
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