PCIe-карта с LPT и COM портами.
Как туда что-то записать?
может пригодится
in/out?
Забыл дописать, что под WIn11 :)
О, тогда ещё легче.
эм, вообще не понял. изначально же для отправки post команд нужен был
У меня есть PCIe-LPT и есть postcard, которая в этот PCIe втыкается. Она работает при записи в LPT-порт (к сожалению, через 80-й порт не работает). Под DOS всё ок. Пытаюсь под VMware, добавил LPT-порт, он его видит (в загруженной DOS отображается как порт 378h), но при записи в порт значение не прокидывается. Я хочу попробовать прямо из винды что-то туда записать.
Я только знаю о https://habr.com/ru/articles/727468/
Это я читал только что. WinIo у меня тупо не запускается. Не заводится драйвер.
Не знаю как помочь и в чём проблема.
а для этих целей разве не пишут отдельно драйвера?
CreateFile/WriteFile/CloseHandle В Windows порты читаются через \\ хэндлы. Пример: CreateFile("\\\\PCI\\VEN_1204&DEV_EC30&SUBSYS_30101204&REV_00", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); Узнать хэндл можно в диспетчере устройств.
Ну надо взять какой-нибудь CPU-Z, сдампить BAR у устройства и увидеть, что оно вешается на IO-порт. Скорее всего.
может лучше через acpi
Ой, тьфу, перепутал. Вот так. Но суть та же, через CreateFile/WriteFile/CloseHandle.
Так оно же, вроде.
Сделал вот так: #include <iostream> #include <windows.h> using namespace std; int main() { HANDLE h = CreateFile(L"\\\\.\\LPT1", GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0); cout << h << endl; unsigned char buf = 12; DWORD count = 0; bool writefile = WriteFile(h, &buf, 1, &count, 0); DWORD error = GetLastError(); cout << boolalpha << writefile << ':' << count << ':' << error; CloseHandle(h); } Тупо зависает почему-то. Сейчас попробую как ты говоришь.
root complex это грубо говоря хост контроллер шины PCIe, там находятся управление DMA, прерываниями, что-то со встроенными железками(видюха амд радеон хд7290 там какие-то регистры оставляет) и тд
А CreateFile что возвращает?
Нормальный хэндл. Что из этого использовать? Путь к экземпляру: MF\PCI#VEN_9710&DEV_9912&SUBSYS_2000A000&REV_00\5&2E0AF72A&2&02E4#CHILD0000 ID: MCS9950MF\STN_CASCADE_LPT
Вот ид: MCS9950MF\STN_CASCADE_LPT
Первое больше похоже на полный путь.
Путь к экземпляру устройства
Зависает наверно потому что порт реализует какое-то управление потоком и нужен драйвер устройства на этом порту. А просто читать/ставить биты - IOCTL_PAR_QUERY_INFORMATION, IOCTL_PAR_SET_INFORMATION
А вообще, вот этот вариант работает, скорее всего. Думаю, Евгений прав. У меня это возвращает вообще FILE_NOT_FOUND.
Поправьте ту часть которая перехватывает инициализацию драйвера
input32 попроще будет.
Да я уже сделал через InpOutp, сейчас вопрос в установке драйвера VMparport.sys для VMware. Надо только до компа добраться. Мне интересно, почему int 17h в чистом ДОС зависает (конкретно ax=90FEh/int 15h)?
Твой? https://www.cyberforum.ru/assembler-windows/thread3144163.html
Демосценю. Сейчас мне интересно прокинуть out dx,al из VMware на реальное железо, например, чтобы можно было подключить Covox какой-нибудь. И тестить его из-под VMware. Но вообще для нормального звука, конечно, нужно HD Audio юзать. Есть sbemu-x, который нормально эмулирует SB и вроде PCSpk (и товарищ допилил, чтоб Covox тоже эмулировал). Но есть проблема: он работает через перехват портов из-под JEMMX или JEMM386, то есть нельзя написать прогу, которая будет переходить в защищённый режим сама (без DPMI), т.к. EMM-менеджеры запускают DOS через V86.
Понял только первый абзац. А мне просто перехват портов и замену значений.
А сейчас демосценеры пошли такие, что на Go и Rust демосцены пишут)
Это демки, я пишу интро, 256-512 байт и меньше, но внедряю "новые" технологии (они не новые, но из никто не юзает), типа AVX, MP, HPET... Хочется ещё драйвер звука написать под DOS для HD Audio. В 256 байт его инициализацию не впехнёшь.
Короче, тупо переустановка VMware решила все вопросы 😂
Обсуждают сегодня