В табл. 6.4 приводятся состояния сигналов шины ISA для различных вариантов записи в порты ввода-вывода, проверенные экспериментальным путем. Вывод 16-разрядных данных выполнялся командой OUT DX, AX
(в DX
— адрес порта, в АХ
— данные; AL
содержит младший байт, АН
— старший), вывод 8-разрядных — командой OUT DX, AL
. Несколько неожиданные (для автора) варианты 3 и 6 с декрементом адреса, возможно, будут иметь место не на всех системных платах, но их следует иметь в виду при проектировании устройств, претендующих на глобальную совместимость. Правда на практике 16-битных передач по нечетным адресам обычно избегают (даже чисто подсознательно), и побочные эффекты от такого порядка маловероятны.
Таблица 6.4. Состояние сигналов при 8- и 16-битных обращениях к устройству ISA
Сигнал (шина) | 1 цикл | 2 цикл |
---|---|---|
1. Вывод 16-разрядных данных в 16-битное устройство по четному адресу | ||
SBHE# | L | - |
SA | DX(A0=0) | - |
D[15:8] | АН | - |
D[7:0] | AL | - |
IOCS16# | L | - |
2. Вывод 16-разрядных данных в 16-битное устройство по нечетному адресу ххх1, ххх5, xxx9, xxxD | ||
SBHE# | L | H |
SA | DX(A0=1) | DX+1 (A0=0) |
D[15:8] | AL | 0 |
D[7:0] | AL | AH |
IOCS16# | L | L |
3. Вывод 16-разрядных данных в 16-битное устройство | ||
SBHE# | H | L |
SA | DX+1 (A0=0) | DX (A0=1) |
D[15:8] | 0 | AL |
D[7:0] | AH | 0 |
IOCS16# | L | L |
4. Вывод 16-разрядных данных в 8-битное устройство по четному адресу | ||
SBHE# | L | L |
SA[1:0] | DX(A0=0) | DX+1 (A0=1) |
D[15:8] | AH | AH |
D[7:0] | AL | AH |
IOCS16# | H | H |
5. Вывод 16-разрядных данных в 8-битное устройство по нечетному адресу ххх1, ххх5, xxx9, xxxD | ||
SBHE# | L | H |
SA[1:0] | DX(A0=1) | DX+1 (A0=0) |
D[15:8] | AL | 0 |
D[7:0] | AL | AH |
IOCS16# | H | H |
6. Вывод 16-разрядных данных в 8-битное устройство по нечетному адресу xxx3, ххх7, xxxB, xxxF | ||
SBHE# | H | L |
SA[1:0] | DX+1(A0=0) | DX(A0=1) |
D[15:8] | 0 | AL |
D[7:0] | AH | AL |
IOCS16# | H | H |
7. Вывод 8-разрядных данных в 16-битное устройство по четному адресу | ||
SBHE# | H | - |
SA[1:0] | DX(A0=0) | - |
D[15:8] | 0 | - |
D[7:0] | AL | - |
IOCS16# | L | - |
8. Вывод 8-разрядных данных в 16-битное устройство по нечетному адресу | ||
SBHE# | L | - |
SA[1:0] | DX(A0=1) | - |
D[15:8] | AL | - |
D[7:0] | 0(AL?) | - |
IOCS16# | L | - |