[Dashboard\All Rovers\Freelander 2 CJB 95320]

Size(280,270);

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

OnShow 
{
      Var0 = 0; Var1 = 0; Var2 = 0; Var3 = 0;
      Var0 = (@0x120 ^ @0xF80) | ((@0x121 ^ @0xF81) << 8) | ((@0x122 ^ @0xF82) << 16) | ((@0x123 ^ @0xF83) << 24);  
           
      msg.Color = 0xFF0000;
      msg.Bold = 1;
      msg = "Дамп ОК. Введите пробег.";
      Distance = Var0; 
}

OnApply {
    Var5 = 0;
    Var2 = Distance;
    
    if(Var2 > 999999) {Var5 = 1;}
    if(Var5 != 0)
    {
        msg.Color = 0x0000FF;
        msg.Bold = 1;
        msg = "Пробег должен быть до 999999 км";
    }
    else
    {
       //определение маски криптования 4х байт пробега и запись в регистры Var10 - Var13; 
       Var10 = 0; Var11 = 0; Var12 = 0; Var13 = 0; // Обнуляем регистры;
       Var10 = @0xF80; Var11 = @0xF81; Var12 = @0xF82; Var13 = @0xF83;
       // Раскладываем значение нового пробега и заносим в регистры Var6 - Var9;
       Var6 = 0; Var7 = 0; Var8 = 0; Var9 = 0; // Обнуляем регистры;
       Var6 = Var2 & 0xFF; Var7 = (Var2 >> 8) & 0xFF; Var8 = (Var2 >> 16) & 0xFF; Var9 = (Var2 >> 24) & 0xFF;
       // накладываем маску на значение регистров;
       Var10 = Var10 ^ Var6; Var11 = Var11 ^ Var7; Var12 = Var12 ^ Var8; Var13 = Var13 ^ Var9;
       // Заносим значение регистров по адресам пробега в дампе;
       Var3 = 0x120;
       while(Var3 != 0x124)
        {
         @Var3 = Var10; Var3 = Var3 + 1;
         @Var3 = Var11; Var3 = Var3 + 1;
         @Var3 = Var12; Var3 = Var3 + 1;
         @Var3 = Var13; Var3 = Var3 + 1;
        }
        //определяем маску для второй области пробега;
        Var10 = 0; Var11 = 0; Var12 = 0; Var13 = 0; // Обнуляем регистры;
        Var10 = @0xF86; Var11 = @0xF87; Var12 = @0xF88; Var13 = @0xF89;
        // накладываем маску на значение регистров пробега;
        Var10 = Var10 ^ Var6; Var11 = Var11 ^ Var7; Var12 = Var12 ^ Var8; Var13 = Var13 ^ Var9;
        // Заносим значение регистров по адресам пробега в дампе;
       Var3 = 0x126;
       while(Var3 != 0x12A)
        {
         @Var3 = Var10; Var3 = Var3 + 1;
         @Var3 = Var11; Var3 = Var3 + 1;
         @Var3 = Var12; Var3 = Var3 + 1;
         @Var3 = Var13; Var3 = Var3 + 1;
        }
            msg.Color = 0xFF0000;
            msg.Bold = 1;
            msg = "Новый пробег записан.";
        
        }
    }
}
