[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Здесь нужно отделить дешифрацию, которая нужна для того, чтобы выставить DEVSEL# - в этом случае в дешифрацию не вовлекаются все младшие биты, принадлежащие к пространству карты. Например, если имеем пространство 256 байт, в дешифрации участвуют AD[31:8]. Пространство меньше двойного слова запросить нельзя, из этого нужно исходить даже если нет конф. пространства. Так что AD[1:0] в любом случае для I/O не дешифрируются (опять же, оговорюсь, речь о “подтверждении транзакции” – DEVSEL#). В этом случае всё едино – 340h, 341h, 342h, 343h. А вот уже 344h вам может и не принадлежать.
Другой вопрос – адресация байта внутри двойного слова. Обращаемся к таблице в спецификации (PCI2.2, Table 3-1, Byte Enables and AD[1:0] Encodings, стр. 28/48 в PDF). Я сам не смотрел, что происходит на остальных байтах при выполнении восьмиразрядного обращения по outportb – но какая разница, будет ли 0 или что-то другое... Но передаваемый байт будет на своем месте.
При чтении (так же, как и при записи) комп указывает вам, на каком месте должен быть байт, – тот же механизм AD[1:0] и BE[3:0]# - см. таблицу 3-1.
P.S. По поводу того, что адреса принадлежат ISA. Это не совсем верно. Транзакция возникает сначала на PCI, и если ее никто не подтвердит, то она переходит на ISA. У меня были PCI-карты с адресами 300-31F и 320-33F.
E-mail: info@telesys.ru