Comments 21
out 83h,al
mov al,0
out 84h,al ; подсказка свыше
впоследствии это место оформили так:
out 83h,al
mov al,0
out 84h,al; подсказка свыше
Что то сомневаюсь, скорее всего так:
out 83h,al; запись первого байта — мл. часть адреса
mov al,0
out 83h,al; запись второго байта — ст. часть адреса
Цитата из даташита:
Собственно out dx,ax мог сработать если система была на 8088, там шина данных восьмибитная и ввод/вывод 16-ти бит шел в два захода.
1) эта запись вызывала задержку на шине, которая для чего то была необходима — проверка — записать в какой-то другой порт.
2) это мало документированная фича для работы с адресами выше 16МБ, где адрес 24-бита уже недостаточно.
docs.freebsd.org/doc/3.4-RELEASE/usr/share/doc/handbook/dma.html
A new implementation of the 8237, called the 82374, allows 16 bits of page register to be specified, allows access to the entire 32 bit address space, without the use of bounce buffers.
wiki.osdev.org/DMA
aodfaq.wikidot.com/pc-dma-addressing
и книжки Mindshare «ISA System archeticture» и «EISA System architecture» в помощь.
А почему это DMA устаревшая технология? Живее всех живых.
Пракически любые задачи предполагающие асинхронный обмен данными с IO, например, компилируютсятся в инструкции с использованием этой технологии.
То есть большая часть всех callbacks или случаев использования async/await в коде
Лично лицом к лицу — не встречаю. У меня производительности не хватает на осцилографе отслеживать всё, что по PCI-E летает.
А внутри компьютера — практически всё. И вне компьютера тоже (RDMA).
Теперь, в эпоху Интернета, доступа к электронным библиотекам и компьютерным форумам, наверное, несложно докопаться, что именно делала запись нуля в неведомый мне порт 84Н. Но это уже неинтересно
действительно, кому на хабре могут быть интересны технические подробности
А откуда вдруг вообще взялся порт 84h?
Обе команды — что out 83h, al, что out 83h, ax — выводят в один и тот же порт 83h, только первая выводит байт, а вторая — слово. Что находится в верхнем байте на шине данных, когда выводится один байт — надо смотреть в документацию (но судя по тому, что явный вывод целого AX дал рабочий вариант, а без него — нет) — там явно какой-то мусор (может, защёлкнутый байт от предыдущей команды)
Программистское везение