#include <p18f45k20.h>
#include <delays.h>
#include <stdio.h>
#pragma config FOSC = HSPLL, FCMEN = OFF, IESO = OFF	//16 MHz-es a qvarc, így 64 MHz clk.
#pragma config WDTEN = OFF
#pragma config LVP = OFF
#pragma config MCLRE = OFF

#define WRITE_REG LATD			//írás	 
//#define RE_REG PORTD			//olvasás							
//#define PDATA_PIN TRISD		//irány 

#define RD LATCbits.LATC0		//Olvasás az adatbuszról.
#define WR LATCbits.LATC1		//Írás az adatbuszra.
#define CE LATCbits.LATC2 	    //L csip engedély, H csip tiltás.
#define RS LATCbits.LATC3       //L adatreiszterre, H indexregiszterre ír.

#define	READY PORTCbits.RC4		//L RAM írás/olvasás folyamatban van, H RAM művelet kész.
#define	BUSY  PORTCbits.RC5		//L Grafikai művelet kész, H Grafikai művelet folyamatban.
#define	gomb  PORTCbits.RC5
#define	IRQ	  PORTCbits.RC6		//DSO mintatárolás végén jelzés a CPU felé.
#define	RESETT POTRCbits.RC7	//H mormál működés, L regiszterek alaphelyzetben.


#define LED0 LATAbits.LATA2
#define LED1 LATAbits.LATA3		//próba led
#define LED2 LATAbits.LATA4
#define LED3 LATAbits,LATA5

#define NYG0 PORTAbits.RA2
#define NYG1 PORTAbits.RA3
#define NYG2 PORTAbits.RA4
#define NYG3 PORTAbits.RA5

void REG_DATA(int x);
void REG_SELECT(int x);		
unsigned int i;


void REG_DATA(int x)			// Regiszterbe írás.
{
	if(BUSY==0)
		{
		RS=0;
		WRITE_REG=x;
		RD=1;
		WR=0;
		WR=1;
		}
}

void REG_SELECT(int x)			// Regiszter választás.
{
	if(BUSY==0)
		{
		RS=1;
		WRITE_REG=x;
		RD=1;
		WR=0;
		WR=1;
		}
}

void main ()
{
TRISC=0b11110000;
TRISA=0b00000000;
TRISD=0b00000000;
ANSEL =  0b00000000;   // Az összes analóg bemenet ki, digire
ANSELH = 0b00000000; 

CE=0;
RD=1;
WR=1;
for(i=5;i>0;i--)
{Delay10KTCYx(100);}

REG_SELECT(250);		
REG_DATA(0b00000001);	//Autómatikus regiszter léptetést bekapcsolja.

REG_SELECT(0);
	for(i=2400;i>0;i--)
{REG_DATA(0);}			//RAM törlés

REG_SELECT(1);
	for(i=65535;i>0;i--)
{REG_DATA(0);}			//RAM törlés
REG_SELECT(2);
	for(i=65535;i>0;i--)
{REG_DATA(0);}			//RAM törlés


for(i=5;i>0;i--)
{Delay10KTCYx(100);}

while(1)
{

//  Szöveg kiítása - ezt a részt nem értem:

REG_SELECT(4);		
REG_DATA(0b10001111);
REG_SELECT(21);			//Text mode
REG_DATA(0b00000001);
REG_SELECT(22);
REG_DATA(0);		
REG_SELECT(23);
REG_DATA(0);			
REG_SELECT(37);
REG_DATA(0b00000011);


// kört rajzol:

REG_SELECT(6);
REG_DATA(0b00000011);
REG_SELECT(30);
REG_DATA(0b01000000);
REG_DATA(0);
REG_DATA(160);	
REG_DATA(120);
REG_DATA(0);
REG_DATA(116);
REG_DATA(0b11111111);	// 1/8-ad körcikkek-ből, így teljes a kör.
REG_SELECT(39);
REG_DATA(0b00000011);

LED1=1;		// Ez egy próba led.
	}
}