1 // license:BSD-3-Clause
2 // copyright-holders:Sandro Ronco
3 /***************************************************************************
4 
5         Hitachi HD44352 LCD controller
6 
7 ***************************************************************************/
8 
9 #ifndef MAME_VIDEO_HD44352_H
10 #define MAME_VIDEO_HD44352_H
11 
12 #pragma once
13 
14 //**************************************************************************
15 //  TYPE DEFINITIONS
16 //**************************************************************************
17 
18 // ======================> hd44352_device
19 
20 class hd44352_device : public device_t
21 {
22 public:
23 	// construction/destruction
24 	hd44352_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
25 
on_cb()26 	auto on_cb() { return m_on_cb.bind(); }
27 
28 	// device interface
29 	uint8_t data_read();
30 	void data_write(uint8_t data);
31 	void control_write(uint8_t data);
32 
33 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
34 
35 protected:
36 	// device-level overrides
37 	virtual void device_start() override;
38 	virtual void device_reset() override;
39 	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
40 	virtual void device_validity_check(validity_checker &valid) const override;
41 
42 private:
43 	uint8_t compute_newval(uint8_t type, uint8_t oldval, uint8_t newval);
44 	uint8_t get_char(uint16_t pos);
45 
46 	static const device_timer_id ON_TIMER = 1;
47 	emu_timer *m_on_timer;
48 
49 	uint8_t m_video_ram[2][0x180];
50 	uint8_t m_control_lines;
51 	uint8_t m_data_bus;
52 	uint8_t m_par[3];
53 	uint8_t m_state;
54 	uint16_t m_bank;
55 	uint16_t m_offset;
56 	uint8_t m_char_width;
57 	uint8_t m_lcd_on;
58 	uint8_t m_scroll;
59 	uint32_t m_contrast;
60 
61 	uint8_t m_custom_char[4][8];      // 4 chars * 8 bytes
62 	uint8_t m_byte_count;
63 	uint8_t m_cursor_status;
64 	uint8_t m_cursor[8];
65 	uint8_t m_cursor_x;
66 	uint8_t m_cursor_y;
67 	uint8_t m_cursor_lcd;
68 
69 	devcb_write_line    m_on_cb;        // ON line callback
70 	required_region_ptr<uint8_t> m_char_rom;
71 };
72 
73 // device type definition
74 DECLARE_DEVICE_TYPE(HD44352, hd44352_device)
75 
76 #endif // MAME_VIDEO_HD44352_H
77