#ifndef __graf_lcd_h__
#define __graf_lcd_h__

//void writeCGRAM (const unsigned char address, const unsigned char pattern, const unsigned char CG_number)
//void madeCharacter (const unsigned char pattern_address, unsigned char *reader);

/************************
 LCD Module commands:- *
************************/
#define GRAPHIC_HOME	0x0000
#define	GRAPHIC_AREA	0x32
#define	TEXT_HOME		0x0c00
#define	TEXT_AREA		0x32

#define OFFSET_REG		2

// Register set commands:
#define SET_CURSOR_PTR	0x21   // Cursor Pointer Set: Data = X,Y
#define SET_OFFSET_REG	0x22   // Offset Register Set: Data = data,
#define SET_ADDR_PTR	0x24   // Address Pointer Set: Data = low, high addr

// Control Word Set commands:
#define	SET_TEXT_HOME	0x40   // Text Home Address Set: Data = low, high addr
#define	SET_TEXT_AREA 	0x41   // Text Area Set: Data = columns, 0
#define	SET_GRAPH_HOME	0x42   // Graphics Home address Set: Data = low, high addr
#define	SET_GRAPH_AREA	0x43   // Graphics Area Set: Data = columns, 0

// Mode Set commands (OR with CG rom commands):
#define	OR_MODE			0x80   // OR mode
#define	XOR_MODE		0x81   // XOR mode
#define	AND_MODE		0x83   // AND mode
#define	TEXT_ATTR_MODE	0x84   // Text Attribute mode
#define INT_CG_MODE		0x80   // Internal CG ROM mode
#define EXT_CG_MODE		0x88   // External CG ROM mode

#define MODE_SET_AND	0x82
#define	DISPLAY_MODE	0x9c	// 9c: text and graphic

// Display Mode commands (OR together required bits):
#define	DISPLAY_OFF		0x90   // Display off
#define	BLINK_ON		0x91
#define	CURSOR_ON		0x92
#define	TEXT_ON			0x94
#define	GRAPHIC_ON		0x98

// Cursor Pattern Select:
#define	CURSOR_1LINE	0xA0
#define	CURSOR_2LINE	0xA1
#define	CURSOR_3LINE	0xA2
#define CURSOR_4LINE	0xA3
#define CURSOR_5LINE	0xA4
#define CURSOR_6LINE	0xA5
#define CURSOR_7LINE	0xA6
#define CURSOR_8LINE	0xA7

// Data Auto Read/Write:
#define DATA_AUTO_WR	0xB0
#define DATA_AUTO_RD	0xB1
#define AUTO_DATA_RESET	0xB2

// Data Read/Write:
#define DATA_WR_INC		0xC0   // Data write and increment addr: Data = data
#define DATA_RD_INC		0xC1   // Data read and increment addr
#define DATA_WR_DEC		0xC2   // Data write and decrement addr: Data = data
#define DATA_RD_DEC		0xC3   // Data read and decrement addr
#define DATA_WR			0xC4   // Data write - no addr change: Data = data
#define DATA_RD			0xC5   // Data read - no addr change

// Screen Peek:
#define	SCREEN_PEEK		0xE0

// Screen Copy:
#define	SCREEN_COPY		0xE8

// Bit Set/Reset (OR with bit number 0-7):
#define	BIT_RESET		0xF0
#define	BIT_SET			0xF8

#define	STA0			0xF0		// command excution status
#define	STA1			0xF1       // data read/write status
#define	STA2			0xF2       // auto data read status
#define	STA3			0xF3       // auto data write status
#define	STA4			0xF4       // n.u.
#define	STA5			0xF5       // controller status
#define	STA6			0xF6       // peek/copy error flag
#define	STA7			0xF7       // blink? or blank? status


// Lábak
#define LCD_WR			RB1
#define	LCD_RD			RB2
#define LCD_CE			RB3
#define LCD_CD			RB4
#define LCD_RST			RB5
#define	LCD_FS			RB7
#define LCD_DATA		PORTD

#endif