Программирование на Ассемблере
Приведем пример программы, использующей таймер для измерения времени работы
некоторой подпрограммы: test:
bsr.s gettime ;получить текущее значение счетчика
;таймера
move.l D7,D6 ;сохранить результат в D6
bsr.s routine ;вызов тестовой подпрограммы
bsr.s gettime ;снова получить значение счетчика
sub D6,D7 ;вычислить время работы подпрограммы
;routine в 1/60 долях секунды
illegal ;для отладки routine: move #500,D0 ;счетчик задержки
loop:
dbra D0,loop ;задержка
rts ;и возврат gettime: ;получение текущего значения таймера
move.b $BFEA01,D7 ;старший байт - в D7
lsl.l #8,D7 ;сдвиг D7 на 1 байт влево
move.b $BFE901,D7 ;добавляем средний байт
lsl.l #8,D7 ;опять сдвигаем
move.b $BFE801,D7 ;последний (младший) байт счетчика
rts ;все На самом деле область применения таймеров Amiga гораздо шире (например,
операционная система использует таймеры для организации многозадачности и
для других служебных целей). Таймеры могут вызывать прерывание программы
по определенным событиям (например при переполнении счетчика), что
позволяет синхронизировать различные действия по времени. Информацию о том,
как программировать таймерные прерывания, можно найти в технической
документации Amiga. 5.3. Работа с мышью и джойстиком. Amiga имеет два регистра, в которых отображается статус мыши и джойстика.
Как ни странно, оба эти устройства используют один и тот же порт, хотя
принципы их работы сильно различаются.
Джойстик генерирует стабильный сигнал на выходе, соответствующем его
положению, в то время как мышь выдает множество коротких импульсов - два
при горизонтальном и два при вертикальном перемещении.
|