Menu
    &Версия софта,sw_ver,5,F1
EndMenu


Window(C="Test - parameters";w=300;h=150;a=h)
{
    Button(C="Запись";proc=write;left=5;top=20;w=100;h=25)    
    Button(C="Проверка";proc=verify;left=5;top=50;w=100;h=25)    
    Button(C="Блок туда - сюда";proc=block;left=5;top=80;w=100;h=25)    
}        


Editor
{
 (C="%HIDE%";size=65536;mode=8;bytes=16)
}

$HOST

emem ee = 0,
     smem = 4;  // обявление внутреннего скрытого буфера, название может быть любое, число только 4.
                // внутреннй буфер всегда имеет размер 65536 байт
                // работает с версии 2.60


proc sw_ver()
{
	var a;

	a = SW_VERSION;
	mbox("Версия софта "+#i.a,0);
}

// копируем содержимое редактора во внутренний буфер
proc write()
{
    var a;
    for(a = 0; a < 65536;a++)
    {
        smem[a] = ee[a];
    }
    print("\nГотово");
}

// сравниваем содержимое редактора с внутренним буфером
proc Verify()
{
    var a,errors;
    errors = 0;
    for(a = 0; a < 65536;a++)
    {
        if(smem[a] != ee[a]) errors++;
    }
    print("\nГотово. Ошибок: "+#i.errors);
}


// заполняем первые 256 байт внутреннего буфера случайными значениями
// копируем первых 256 байт в программатор
// читаем обратно из программатора по адресу 256
// Сравниваем 256 байт с адресов 0 и 256 - все должны совападать.
proc block()
{
    var a,errors,x;

    // сначала заполняем 256 первых байт случайными значениями
    for(a = 0; a < 256;a++)
    {
        smem[a] = device.get_random();              // получаем из программатора случайное число
        ee[a] = smem[a];                            // копируем в редактор, что бы видеть
    }

    memcopy(device.array = smem[0],256);        // блок в устройство
    for(a = 0; a < 65535; a +=256)
    {    
        memcopy(smem[a] = device.array,256);      // Обратно со смещением на 256 байт
    }
    for(a = 0; a < 65536;a++)
    {
        ee[a] = smem[a];
    }

    // сравниваем переданное и полученное
    errors = 0;
    for(a = 0; a < 256;a++)
    {
        if(smem[a] != smem[a+256]) 
        {
            x = smem[a]; print("\nsmem[a] = 0x"+#h2.x);
            x = smem[a+256]; print("\nsmem[a+256] = 0x"+#h2.x);
            errors++;
        }    
    }
    print("\nГотово. Ошибок: "+#i.errors);
    for(a = 0; a < 256;a++)
    {
        smem[a+256] = device.get_random();              // получаем из программатора случайное число
    }
    memcopy(device.array = smem[256],256);        // блок в устройство
    memcopy(smem[0] = device.array,256);      // Обратно со смещением на 256 байт
    for(a = 0; a < 256;a++)
    {
        if(smem[a] != smem[a+256]) 
        {
            x = smem[a]; print("\nsmem[a] = 0x"+#h2.x);
            x = smem[a+256]; print("\nsmem[a+256] = 0x"+#h2.x);
            errors++;
        }    
    }
    print("\nГотово. Ошибок: "+#i.errors);

}

$DEVICE

byte array[256];

proc get_random()
{
    return(RANDOM);
}
