[Dashboard\All Rovers\Freelander HC912D60]

Size(280,250); 

Form 
{
    Group("Пробег",5,10,110,50)
    {
        Digit(Distance," ",5,18,50);
        Label(lbkm,"КМ",80,20);
       
    }
    Group("Информация",5,65,270,45) 
    {
        Label(Message," ",0,18);
    }    
    Group("Описание",5,115,270,90) 
    {
        Label(lb1,"Калькулятор пробега для Freelander.",0,20);
        Label(lb2,"68HC912D60 Internal EEPROM.",0,35);
        Label(lb3,"Введите нужное значение в окне <Пробег>.",0,50);
        Label(lb4,"Нажмите кнопку <Применить>.",0,65);
    }
    Picture(Logo,"Lrover.bmp",155,15,0,0);
}

OnShow

{
    // разделяем алгоритм до 255 км включительно и от 256 км

        Var0=((@0x7E<<8)|(@0x7F));
        if(Var0=0xFFFF) // работа по алгоритму до 255 км включительно
        {
	    Var4=0; // точное вычисление пробега
		Var5=0; // точное вычисление пробега, смещение
		while(Var5!=0x80)
			{
			Var6=(@(Var5)<<8)|(@(Var5+1));
			if(Var6=0) {Var4=Var4+1;}
			Var5 = Var5+2;
			}
		Distance=Var4*4;
        }
       	else
        {
		//работа по алгоритму от 256 км
		Var3=0; // точное вычисление пробега, добавка
		Var5=0; // точное вычисление пробега, смещение
			while(Var5!=0x80)
			{
			Var6=(@(Var5)<<8)|(@(Var5+1));
			if(Var6>Var0) {Var3=Var3+1;}
			Var5 = Var5+2;
			}
		Distance=(((Var0*64)+Var3)*4)+256;
    	}
}

OnApply

{
	Var1=Distance;
	   	if(Var1>999999) {message.Color=0x0000FF; Message = "Пробег должен не более 999999 км.";}
    	else	

	{ 	// разделяем алгоритм до 255 км включительно и от 256 км
		if(Var1<256) //работа по алгоритму до 255 км включительно	
		{	Var2=0;
			Var1=Var1/2;
			while(Var2<Var1) 
				{	
				@Var2=0x00;
				Var2=Var2+1;
				@Var2=0x00;
				Var2=Var2+1;
				}
			while(Var2<0x80) 
				{	
				@Var2=0xFF;
				Var2=Var2+1;
				@Var2=0xFF;
				Var2=Var2+1;
				}
		}
		else
		{	
			//работа по алгоритму от 256 км
			Var0=(Var1-256)/256;
        	Var3=(Var1%256)/2; // Вычисление добавки
        	Var2=0;
			//запись старшей группы
			while(Var2<Var3) 
				{
				@Var2=Var0>>8;
				Var2=Var2+1;
		        @Var2=Var0+1;
				Var2=Var2+1; 
				}
			//запись младшей группы
			while(Var2<0x80) 
				{
				@Var2=Var0>>8;
				Var2=Var2+1;
		        @Var2=Var0;
				Var2=Var2+1; 
				}
		}
	  	message.Color=0xFF0000;
		message="Дамп ОК. Новый пробег записан.";
	}
}




