[Dashboard\Motobikes\Yamaha\XT660R 24C02]

Size(320,280); // ширина и высота

Form 

{   Group("Пробег",5,5,170,80)
 	{
	Digit(Distance," ",15,18,110);
	}
	   	Group("Информация",5,88,310,45)
    	{Label(message," ",0,18);}
    	Group("Описание",5,135,310,100) 
    	{
	Label(lb4,"Калькулятор пробега для Yamaha XT660R",0,20);
        Label(lb5,"EEPROM 24C02",0,35);
        Label(lb2,"Введите нужное значение в окне ПРОБЕГ",0,50);
        Label(lb3,"и нажмите кнопку <Применить>.",0,65);
    	}
	Picture(Picture1,"Yamaha.bmp",210,15,0,0);	
}

Var Address, TempDist, MaxDist, Error, CRCFile, TempCRC, Counter;
 
OnShow
{
	Message.Bold = 1;
	Message.Alignment = 1;
    
    // --------------- проверяем правильность дампа
    Address = @0x28;
	MaxDist = 0;
	Error = 0;
	while(Address < 0x80)
	{
		TempCRC = 0;
		Counter = 0;
		TempDist = (@(Address + 2) << 16) | (@(Address + 1) << 8) | (@Address);
		TempDist = TempDist / 10;
		while(Counter < 7) {
			TempCRC = TempCRC ^ (@Address);
			Address = Address + 1;
			Counter = Counter + 1;
		}
		CRCFile = @Address;
		if(CRCFile != TempCRC) {Error = 1; Address = 0x80;}
		if(MaxDist < TempDist) {MaxDist = TempDist;}
	}
	if(Error != 0) 
	{ 
		message.Color = 0x0000FF;
		Message = "Неверный дамп!";
	}
	else
	{
		message.Color = 0xFF0000;
		message = "Дамп ОК, нажмите кнопку <Применить>";
		Distance = MaxDist;
	}
}

OnApply
{
	Var4=Distance;
    	if(Var4>999999)
    	{
        message.Color=0x0000FF;
        Message="Пробег должен быть не более 999999 км.";
    	}
    	else
	{
        Var1=(Distance%5)*2; // вычисление добавки
	// запись добавки
		Var5=0; // смещение
			while(Var5<Var1)
				{  	
				@Var5=0x80;
				Var5=Var5+2;
				}
			while(Var5<0x07)
				{  	
				@Var5=0xFF;
				Var5=Var5+2;
				}		
	
        
	// запись основной части	 
	// переводим из двоично-десятичного в двоичный вид
        Var0=Distance-(Distance%5);
	Var2=Var0%10; Var0=Var0/10;
	Var2=Var2|((Var0%10)<<4); Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<8); Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<12);Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<16);Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<20);Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<24);Var0=Var0/10;  
	Var2=Var2|((Var0%10)<<28);  

	Var2=Var2^0xFFFFFFFF;
	// заполняем дамп
        Var0=0x0b;
        
	@Var0=Var2>>24;Var0=Var0-1;
	@Var0=Var2>>16;Var0=Var0-1;
	@Var0=Var2>>8 ;Var0=Var0-1;
	@Var0=Var2&255;Var0=Var0-1;

        Var0=0x0F;
        
	@Var0=Var2>>24;Var0=Var0-1;
	@Var0=Var2>>16;Var0=Var0-1;
	@Var0=Var2>>8 ;Var0=Var0-1;
	@Var0=Var2&255;Var0=Var0-1;

        Var0=0x13;
        
	@Var0=Var2>>24;Var0=Var0-1;
	@Var0=Var2>>16;Var0=Var0-1;
	@Var0=Var2>>8 ;Var0=Var0-1;
	@Var0=Var2&255;Var0=Var0-1;
    
	message.Color=0xFF0000;
        message="Дамп ОК. Новый пробег записан.";
	}
}

