1 // license:BSD-3-Clause
2 // copyright-holders:Curt Coder
3 /**********************************************************************
4 
5     RCA CDP1862 COS/MOS Color Generator Controller emulation
6 
7 **********************************************************************
8                             _____   _____
9                     RD   1 |*    \_/     | 24  Vdd
10                 _RESET   2 |             | 23  R LUM
11                   _CON   3 |             | 22  G LUM
12                  B CHR   4 |             | 21  GD
13                  B LUM   5 |             | 20  BKG LUM
14                    BKG   6 |   CDP1862   | 19  G CHR
15                _LD CLK   7 |             | 18  R CHR
16                    STP   8 |             | 17  BKG CHR
17                CLK OUT   9 |             | 16  BD
18                  _SYNC  10 |             | 15  BURST
19                 LUM IN  11 |             | 14  _XTAL
20                    Vss  12 |_____________| 13  XTAL
21 
22 **********************************************************************/
23 
24 #ifndef MAME_VIDEO_CDP1862_H
25 #define MAME_VIDEO_CDP1862_H
26 
27 #pragma once
28 
29 
30 
31 
32 //**************************************************************************
33 //  TYPE DEFINITIONS
34 //**************************************************************************
35 
36 // ======================> cdp1862_device
37 
38 class cdp1862_device :  public device_t,
39 						public device_video_interface
40 {
41 public:
42 	// construction/destruction
43 	cdp1862_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
44 
rdata_cb()45 	auto rdata_cb() { return m_read_rd.bind(); }
bdata_cb()46 	auto bdata_cb() { return m_read_bd.bind(); }
gdata_cb()47 	auto gdata_cb() { return m_read_gd.bind(); }
48 
set_luminance(double r,double b,double g,double bkg)49 	void set_luminance(double r, double b, double g, double bkg) { m_lum_r = r; m_lum_b = b; m_lum_g = g; m_lum_bkg = bkg; }
set_chrominance(double r,double b,double g,double bkg)50 	void set_chrominance(double r, double b, double g, double bkg) { m_chr_r = r; m_chr_b = b; m_chr_g = g; m_chr_bkg = bkg; }
51 
52 	void dma_w(uint8_t data);
53 	void bkg_w(int state);
54 	void con_w(int state);
55 
56 	uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
57 
58 protected:
59 	// device-level overrides
60 	virtual void device_start() override;
61 	virtual void device_reset() override;
62 
63 private:
64 	inline void initialize_palette();
65 
66 	devcb_read_line m_read_rd;
67 	devcb_read_line m_read_bd;
68 	devcb_read_line m_read_gd;
69 
70 	bitmap_rgb32 m_bitmap;          // bitmap
71 
72 	double m_lum_r;             // red luminance resistor value
73 	double m_lum_b;             // blue luminance resistor value
74 	double m_lum_g;             // green luminance resistor value
75 	double m_lum_bkg;           // background luminance resistor value
76 
77 	double m_chr_r;             // red chrominance resistor value
78 	double m_chr_b;             // blue chrominance resistor value
79 	double m_chr_g;             // green chrominance resistor value
80 	double m_chr_bkg;           // background chrominance resistor value
81 
82 	rgb_t m_palette[16];
83 	int m_bgcolor;                  // background color
84 	int m_con;                      // color on
85 };
86 
87 
88 // device type definition
89 DECLARE_DEVICE_TYPE(CDP1862, cdp1862_device)
90 
91 #endif // MAME_VIDEO_CDP1862_H
92