Так добавлю еще одну ссылку:
http://www.vcl.ru/html/dos/appar/ch5.htmВажные выдержки оттуда:
Цитата
Кроме часов реального времени, любой компьютер (даже простейший IBM PC) содержит устройство, называемое системным таймером. Это устройство подключено к линии запроса на прерывание IRQ0 и вырабатывает прерывание INT 8h приблизительно 18,2 раза в секунду (точное значение - 1193180/65536 раз в секунду). 
При инициализации BIOS устанавливает свой обработчик для прерывания таймера. Этот обработчик каждый раз увеличивает на 1 текущее значение четырехбайтовой переменной, располагающейся в области данных BIOS по адресу 0000:046Ch - счетчик тиков таймера. Если этот счетчик переполняется (прошло более 24 часов с момента запуска таймера), в ячейку 0000:0470h заносится 1. 
Другое действие, выполняемое стандартным обработчиком прерывания таймера - контроль за работой двигателей НГМД. Если после последнего обращения к НГМД прошло более 2 секунд, обработчик прерывания выключает двигатель. Ячейка с адресом 0000:0440h содержит время, оставшееся до выключения двигателя. Это время постоянно уменьшается обработчиком прерывания таймера. Когда оно становится равно 0, обработчик выключает двигатель НГМД. 
Цитата
Таймеру соответствуют четыре порта ввода/вывода со следующими адресами: 
40h - канал 0; 
41h - канал 1; 
42h - канал 2; 
43h - управляющий регистр. 
Приведем формат управляющего регистра: 
7 6 5 4 3 2 1 0
T-T-T-T-T-T-T-¬
¦   ¦   ¦     ¦ ¦
LT+T+T+T+T+-+T+T-
LT- LT- L=T=- L= BCD: 0 - двоичный счет;
  ¦   ¦    ¦           1 - двоично-десятичный счет.
  ¦   ¦    ¦
  ¦   ¦    L===== M:   000 - режим 0;
  ¦   ¦                001 - режим 1;
  ¦   ¦                X10 - режим 2;
  ¦   ¦                X11 - режим 3;
  ¦   ¦                100 - режим 4;
  ¦   ¦                101 - режим 5.
  ¦   ¦
  ¦   L========== RW:  00 - код команды CLC (запомнить CE);
  ¦                    01 - чтение/запись старшего байта;
  ¦                    10 - чтение/запись младшего байта;
  ¦                    11 - чтение/запись младшего, затем
  ¦                         старшего байта.
  ¦              
L============== SC:  00 - канал 0;
01 -    канал 1;
10 -    канал 2;
11 -    код команды RBC (чтение состояния канала).
Поле BCD определяет формат константы, использующейся для счета - двоичный или двоично-десятичный. В двоично-десятичном режиме константа задается в диапазоне 1-9999. 
Поле M определяет режимы работы микросхемы 8254: 
0 - прерывание от таймера; 
1 - программируемый ждущий мультивибратор; 
2 - программируемый генератор импульсов; 
3 - генератор меандра; 
4 - программно-запускаемый одновибратор; 
5 - аппаратно-запускаемый одновибратор. 
Мы будем рассматривать только режим 3, так как именно он используется в каналах 0 и 2. 
Поле RW определяет способ загрузки констант через однобайтовый порт. Если в этом поле задано значение 00, это управляющее слово будет использоваться для фиксации текущего содержимого регистров счетчика CE в буферном регистре OL с целью чтения программой. Это код команды CLC - фиксация регистров. Код канала, для которого будет выполняться фиксация, должен быть указан в поле SC. Поля M и BCD при этом не используются. 
Поле SC определяет номер канала, для которого предназначено управляющее слово. Если в этом поле задано значение 11, будет выполняться чтение состояния канала. 
Приведем формат команды RBC чтения слова состояния канала: 
7 6 5 4 3 2 1 0
T-T-T-T-T-T-T-¬
¦   ¦ ¦ ¦ ¦ ¦ ¦ ¦
LT+T+T+T+T+T+T+T-
LT- ¦ ¦ ¦ ¦ ¦ L= равно 0.
  ¦  ¦ ¦ ¦ ¦ ¦
  ¦  ¦ ¦ ¦ ¦ L=== 1 - выбор канала 0. 
  ¦  ¦ ¦ ¦ L===== 1 - выбор канала 1.
  ¦  ¦ ¦ L======= 1 - выбор канала 2.
  ¦  ¦ ¦
  ¦  ¦ L========= STAT: 0 - читать состояние каналов;
  ¦  ¦                  1 - не читать состояние каналов.
  ¦  ¦
  ¦  L=========== CNT:  0 - запомнить текущее содержимое CE;
  ¦                     1 - не запоминать содержимое CE.
  ¦
  L============== код команды RBC - 11.
С помощью этой команды вы можете выполнять операции чтения состояния каналов либо запоминание регистра счетчика CE каналов. Можно выполнять эти операции как для отдельных каналов, так и для всех каналов одновременно, если установить соответствующие биты (1, 2, 3) в 1. 
Формат слова состояния канала напоминает формат регистра управляющего слова, за исключением двух старших разрядов 7 и 6: 
7 6 5 4 3 2 1 0
T-T-T-T-T-T-T-¬
¦ ¦ ¦   ¦     ¦ ¦
LT+T+T+T+T+-+T+T-
¦ ¦ LT- L=T=- L= BCD: 0 - двоичный счет;
 ¦ ¦  ¦    ¦           1 - двоично-десятичный счет.
 ¦ ¦  ¦    ¦
 ¦ ¦  ¦    L===== M:   000 - режим 0;
 ¦ ¦  ¦                001 - режим 1;
 ¦ ¦  ¦                X10 - режим 2;
 ¦ ¦  ¦                X11 - режим 3;
 ¦ ¦  ¦                100 - режим 4;
 ¦ ¦  ¦                101 - режим 5.
 ¦ ¦  ¦
 ¦ ¦  L========== RW:  00 - код команды CLC (запомнить CE);
 ¦ ¦                   01 - чтение/запись старшего байта;
 ¦ ¦                   10 - чтение/запись младшего байта;
 ¦ ¦                   11 - чтение/запись младшего, затем
 ¦ ¦                        старшего байта.
 ¦ ¦             
 ¦ L============= FN:  флаг перезагрузки констант;
 L=============== OUT: состояние выхода OUT.
Разряд FN используется, в основном, в режимах 1 и 5 для определения, произошла ли загрузка константы из регистра CR в регистр счетчика CE. 
Разряд OUT позволяет определить состояние выходной линии канала OUT в момент выполнения команды RBC. 
Для программирования канала таймера необходимо выполнить следующую последовательность действий: 
вывести в порт управляющего регистра с адресом 43h управляющее слово; 
требуемое значение счетчика посылается в порт канала (адреса 40h...42h), причем вначале выводится младший, а затем старший байты значения счетчика. 
Сразу после этого канал таймера начнет выполнять требуемую функцию. 
Для чтения текущего содержимого счетчика CE необходимо выполнить следующее: 
вывести в порт управляющего регистра код команды CLC (команда запоминания содержимого регистра CE); 
вывести в порт управляющего регистра код команды запроса на чтение/запись в регистры канала (поле RW должно содержать 11); 
двумя последовательными командами ввода из порта нужного канала ввести младший и старший байты текущего сосотояния счетчика CE. 
Для чего вам может понадобиться перепрограммирование каналов таймера? 
Если вам надо повысить точность измерения времени, выполняемого с помощью канала 0 таймера, вы можете увеличить частоту генерируемых этим каналом импульсов (стандартно 18,2 Гц). По окончании измерений режим работы канала необходимо восстановить для правильного функционирования системы.
Попробую поковыряться.
ЗЫ Попойму у Vesper'a так же опечатка в примере програмы:
Цитата
time:=meml[0:6C];
proces;
time:=meml[0:6C]-time;
if time<0 then time:=time+00B0;
writeln(time/18.2:6:2);