Аппаратное обеспечение персонального компьютера


           

Эта функция получает случайное число


*

*.Params       int bound - верхняя граница для генерируемых

*                          случайных чисел.

**/

void rnd_set(int bound)

{

  // Устанавливаем режим 3 для второго канала таймера

  outp(0x43, 0xb6);

  // Загружаем регистр счетчика таймера - сначала

  // младший, затем старший байты

  outp(0x42, bound & 0x00ff);

  outp(0x42, (bound &0xff00) >> 8);

  // Разрешаем работу канала

  outp(0x61, inp(0x61) | 1);

}

/**

*.Name         rnd_get

*.Title        Получение от таймера случайного числа

*

*.Descr        Эта функция получает случайное число от

*              таймера, который был предварительно

*              проинициализирован функцией rnd_set

*

*.Proto        int rnd_get(void)

*

*.Params       Отсутствуют.

*

*.Return       Случайное число в диапазоне от 0, до

*              уменьшенного на 1 значения, заданного в

*              качестве параметра функции rnd_set().

**/

int rnd_get(void)

{

  int i;

 

  // Выдаем команду CLC для фиксирования

  // текущего значения регистра канала 2 таймера

  outp(0x43, 0x86);

  // Вводим младший и старший байты счетчика

  i = inp(0x42);

  i = (inp(0x42) << 8) + i;

 

  return(i);

}


Содержание  Назад  Вперед