// =====================================================
// Просмотр слова состояния и содержимого
// счетчиков таймера
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW:    http://www.glasnet.ru/~frolov
//            или
//         http://www.dials.ccas.ru/frolov
// =====================================================
#include <stdio.h>
#include <conio.h>

int main() 
{
  unsigned i;

  printf("\n\nКанал 0\n-------\n");

  // Читаем слово состояния канала,
  // команда 0xe2 = 11100010B
  outp(0x43, 0xe2);

  printf("\nСлово состояния канала: %02.2X",
    inp(0x40));

  // Читаем текущее состояние регистра счетчика
  // канала. Для этого вначале выдаем команду CLC
  // для канала 0. Код этой команды - 0x00
  outp(0x43, 0x00);

  // Вводим младший и старший байты счетчика
  // и отображаем его.
  i = inp(0x40);
  i = (inp(0x40) << 8) + i;

  printf("\nРегистр счетчика:       %04.4X",i);

  // Повторяем те же действия для 1 и 2 каналов.
  printf("\n\nКанал 1\n-------\n");
  	
  outp(0x43, 0xe4);
  printf("\nСлово состояния канала: %02.2X",inp(0x41));

  outp(0x43, 0x40);

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

  printf("\nРегистр счетчика:       %04.4X",i);

  printf("\n\nКанал 2\n-------\n");

  outp(0x43, 0xe8);
  printf("\nСлово состояния канала: %02.2X",inp(0x42));

  outp(0x43, 0x80);

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

  printf("\nРегистр счетчика:       %04.4X",i);

  return 0;
}
