Для роботи з ПВВ в мікроасемблері передбачено дві директиви.
ACCEPT DEV – директива задання параметрів ПВВ
Загальний вигляд директиви:
ACCEPT DEV[номер ПВВ]: <тип пристрою>, <адреса РС>,
<адреса РД>, <затримка формування RDD>,
<затримка встановлення біта готовності>
де <тип пристрою> може бути IN – пристрій введення інформації в аккумулятор, або OUT – пристрій виведення інформації з акумулятора (один і той самий фізичний пристрій може в один момент часу бути пристроєм введення, а в інший – пристроєм виведення);
<затримка формування RDD> - величина в тактах, яка задає швидкодію ПВВ. Зовнішній пристрій формує сигнал RDD=0 (ReaDy Device – готовність пристрою), якщо ПВВ закінчив цикл й готовий до обміну;
<затримка встановлення біта готовності> - величина в тактах, що є інтервалом часу, через який після звертання до РД в ньому можуть поновлюватись дані.
Ці параметри дозволяють моделювати роботу ПВВ з різними часовими затримками.
Приклад директиви:
accept dev[3]: in, \ пристрій введення в процесор (акумулятор)
|
|
30h, \ адреса регістра стану
32h, \ адреса регістра даних
3, \ затримка формування сигналу RDD
2 \ затримка встановлення біта готовності в РС
\ після звертання до РД
Рис. 19. Зв‘язок пристроїв введення-виведення з процесором
|
Рис. 20. Структура регістра стану
Рис. 21. Структура пристрою введення-виведення
ACCEPT DEV_BUF – директива задання значень у буфері даних ПВВ
Для моделювання роботи з ПВВ вважатимемо, що ПВВ має внутрішній буфер ємністю 16 слів, звідки можна почергово зчитувати слова під час введення інформації в процесор або куди можна почергово записувати слова під час виведення інформації з процесора.
Приклад директиви:
accept dev_buf[2]: 1234h, 5678h, 9abch, 0deffh \ ці дані вводяться
\ в процесор почергово при кожному звертанні до РД даного
\ пристрою введення
Задача. Організувати введення слова із ПВВ 2 в акумулятор процесора.
Розв‘язування:
accept dev[2]: in, 30h, 32h, 3, 2
accept dev_buf[2]: 1234h, 5678h \ дані, які будуть вводитися по черзі в
\ акумулятор з РД
\ читання РС з простору пам‘яті
m2 ld_ha \ RgA[19…16]:=0000
ld_la 30h \ RgA[15…0]:=30h – адреса РС
m1 { cjp rdm, m1; r; add r0, z, bus_d; } \ R0:= (PC)
{ cjp zo, m2; and r0, r0, 8000h; } \ повторити читання РС, якщо біт
\ готовності дорівнює 0
\ читання даних
{ cjp rdd; i; add r15, z, bus_d; } \ R15:=1234h
6. ОБРОБКА ПРІОРИТЕТНИХ ПЕРЕРИВАНЬ