[Dashboard\Acura\CL\Acura CL 93C56]

Size(280,250); 

Form
{
    Picture(Picture1,"Acura.bmp",150,10,0,0);
    Group("Пробег",5,5,140,50)
    {
        Digit(Distance," ",5,18,90);
        Label(lb1,"",110,20);
    }
    Group("Информация",5,58,270,45)
    {
        Label(message," ",0,18);
    }
    Group("Описание",5,105,270,100) 
    {
        Label(lb2," Введите нужное значение в окне ПРОБЕГ ",0,55);
        Label(lb3,"и нажмите кнопку <Применить>.",0,70);
        Label(lb4,"Калькулятор пробега для Acura CL.",0,20);
        Label(lb5,"EEPROM: 93C56",0,35);
    }
}


OnShow

{     //разделяем алгоритм до 15 км включительно и от 16 км
        Var0=(@(0x61)<<8)|(@(0x60));
        if(Var0=0) // работа по алгоритму до 15 км включительно
        {
		Var4=0; // счетчик отличий от нулевого дампа
		Var5=0x60; // точное вычисление пробега, смещение
			while(Var5!=0x80)
				{
				Var2=(@(Var5+1)<<8)|(@Var5);
				if(Var2=0x0000) {Var4=Var4+1;}
				Var5=Var5+2;
				Var2=(@(Var5+1)<<8)|(@Var5);
				if(Var2=0xFFFF) {Var4=Var4+1;}
				Var5=Var5+2;
				}
	Distance=Var4-1;
     	}
	else 
	{// работа по алгоритму от 16 км
		Var6=((@(0x7F)<<8)|(@0x7E))^0xFFFF; // старшая часть пробега

			// табличный пересчет из дампа продвигающихся значений
			Var1=Var6&0x000F; // маскируем все нибблы, кроме младшего
			if(Var1=0x0) {Var2=0x0;}   
			if(Var1=0x7) {Var2=0x1;}   
			if(Var1=0xC) {Var2=0x2;}   
			if(Var1=0xB) {Var2=0x3;}   
			if(Var1=0x6) {Var2=0x4;}   
			if(Var1=0x1) {Var2=0x5;}   	
			if(Var1=0xA) {Var2=0x6;}   
			if(Var1=0xD) {Var2=0x7;}   
			if(Var1=0x3) {Var2=0x8;}   
			if(Var1=0x4) {Var2=0x9;}   
			if(Var1=0xF) {Var2=0xA;}   
			if(Var1=0x8) {Var2=0xB;}   
			if(Var1=0x5) {Var2=0xC;}   
			if(Var1=0x2) {Var2=0xD;}   
			if(Var1=0x9) {Var2=0xE;}   
			if(Var1=0xE) {Var2=0xF;}   
			Var7=(Var6&0xFFF0)+Var2; // перекодировка в линейный вид старшей части пробега

			// расчет добавки

			Var3=15; 
			Var5=0x60; // точное вычисление пробега, смещение	
			while(Var5!=0x80)
				{
				Var1=(@(Var5+1)<<8)|(@Var5);
					Var9=(Var5/2)&0x0001; //вычисление знака слова
						if (Var9=0) 	{Var6=Var1; Var1=Var6&0x000F;} // маскируем все нибблы, кроме младшего
						else        	{Var6=Var1^0xFFFF; Var1=Var6&0x000F;} // инвертируем, маскируем все нибблы, кроме младшего
		
					// табличный пересчет из дампа продвигающихся значений
					if(Var1=0x0) {Var2=0x0;}   
					if(Var1=0x7) {Var2=0x1;}   
					if(Var1=0xC) {Var2=0x2;}   
					if(Var1=0xB) {Var2=0x3;}   
					if(Var1=0x6) {Var2=0x4;}   
					if(Var1=0x1) {Var2=0x5;}   	
					if(Var1=0xA) {Var2=0x6;}   
					if(Var1=0xD) {Var2=0x7;}   
					if(Var1=0x3) {Var2=0x8;}   
					if(Var1=0x4) {Var2=0x9;}   
					if(Var1=0xF) {Var2=0xA;}   
					if(Var1=0x8) {Var2=0xB;}   
					if(Var1=0x5) {Var2=0xC;}   
					if(Var1=0x2) {Var2=0xD;}   
					if(Var1=0x9) {Var2=0xE;}   
					if(Var1=0xE) {Var2=0xF;}      
					Var8=(Var6&0xFFF0)+Var2; // перекодировка в линейный вид младшей части пробега
				if(Var8>Var7) {Var3=Var3+1;}
				Var5=Var5+2;

		}	
			Distance=(Var7*16)+Var3;
	}
			message.Bold = 1;
    			message.Color = 0xFF0000;
    			message = " Дамп ОК. Введите пробег. ";
			
} 

OnApply

{		
	Var4=Distance;
    	if(Var4>999999)
    	{
        message.Color=0x0000FF;
        Message="Пробег должен быть не более 999999 км.";
    	}
	else
	{ //разделяем алгоритм до 15 км включительно и от 16 км 
		if(Var4<=15)
		{
			@0x60=0x0; @0x61=0x0;  // запись первых двух ячеек
			Var7=Var4*2;
			Var5=0; // смещение
			while(Var5!=Var7) 
			{
				Var9=(Var5/2)&0x0001; //вычисление знака слова
				Var6=0x62+Var5;
 				if (Var9=1) 	{@Var6=0x00;Var6=Var6+1;@Var6=0x00;}
				else		{@Var6=0xFF;Var6=Var6+1;@Var6=0xFF;}
				Var5=Var5+2;
			}
			while(Var5!=30) 
			{
				Var9=(Var5/2)&0x0001; //вычисление знака слова
				Var6=0x62+Var5;
				if (Var9=1) 	{@Var6=0xFE;Var6=Var6+1;@Var6=0xFF;}
				else		{@Var6=0x01;Var6=Var6+1;@Var6=0x00;}
				Var5=Var5+2;
			}		
		}
		else
		{
		Var11=((Distance-15)%16)*2;	// Вычисление добавки
		Var10=((Distance-15)/16); 	// значение младшей части пробега
		Var15=Var10+1;			// значение старшей части пробега

			// табличный пересчет в дамп младшего ниббла младшей части пробега
			Var1=Var10&0x000F; // маскируем все нибблы, кроме младшего				
			if(Var1=0x0) {Var2=0x0;}   
			if(Var1=0x1) {Var2=0x7;}   
			if(Var1=0x2) {Var2=0xC;}   
			if(Var1=0x3) {Var2=0xB;}   
			if(Var1=0x4) {Var2=0x6;}   
			if(Var1=0x5) {Var2=0x1;}   	
			if(Var1=0x6) {Var2=0xA;}   
			if(Var1=0x7) {Var2=0xD;}   
			if(Var1=0x8) {Var2=0x3;}   
			if(Var1=0x9) {Var2=0x4;}   
			if(Var1=0xA) {Var2=0xF;}   
			if(Var1=0xB) {Var2=0x8;}   
			if(Var1=0xC) {Var2=0x5;}   
			if(Var1=0xD) {Var2=0x2;}   
			if(Var1=0xE) {Var2=0x9;}   
			if(Var1=0xF) {Var2=0xE;}      
			Var10=(Var10&0xFFF0)+Var2; // перекодировка в линейный вид младшей части пробега

			// табличный пересчет в дамп младшего ниббла старшей части пробега
			Var1=Var15&0x000F; // маскируем все нибблы, кроме младшего				
			if(Var1=0x0) {Var2=0x0;}   
			if(Var1=0x1) {Var2=0x7;}   
			if(Var1=0x2) {Var2=0xC;}   
			if(Var1=0x3) {Var2=0xB;}   
			if(Var1=0x4) {Var2=0x6;}   
			if(Var1=0x5) {Var2=0x1;}   	
			if(Var1=0x6) {Var2=0xA;}   
			if(Var1=0x7) {Var2=0xD;}   
			if(Var1=0x8) {Var2=0x3;}   
			if(Var1=0x9) {Var2=0x4;}   
			if(Var1=0xA) {Var2=0xF;}   
			if(Var1=0xB) {Var2=0x8;}   
			if(Var1=0xC) {Var2=0x5;}   
			if(Var1=0xD) {Var2=0x2;}   
			if(Var1=0xE) {Var2=0x9;}   
			if(Var1=0xF) {Var2=0xE;}      
			Var15=(Var15&0xFFF0)+Var2; // перекодировка в линейный вид младшей части пробега		
		 		
			Var12=0; // смещение
			while(Var12!=Var11) 
			{
				Var9=(Var12/2)&0x0001; //вычисление знака слова
				Var6=0x60+Var12;
 				if (Var9=0) 	{@Var6=Var15;	   Var6=Var6+1;	@Var6=Var15>>8;		}
				else		{@Var6=Var15^0xFF; Var6=Var6+1;	@Var6=(Var15>>8)^0xFF;	}	
				Var12=Var12+2;
			}
			while(Var12!=32) 
			{
				Var9=(Var12/2)&0x0001; //вычисление знака слова
				Var6=0x60+Var12;
	 			if (Var9=0) 	{@Var6=Var10;	   Var6=Var6+1;	@Var6=Var10>>8;		}
				else		{@Var6=Var10^0xFF; Var6=Var6+1;	@Var6=(Var10>>8)^0xFF;	}	
				Var12=Var12+2;
			}
		}
	message.Bold = 1;
	message.Color=0xFF0000;
	message="Дамп ОК. Новый пробег записан.";
	}
}
