Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.119.148] |
|
Сообщ.
#1
,
|
|
|
Решил научиться работать с портами, возникло недоразумение. Я работал
под голым досом и очень долго мучался почему не работает этот простой код. Потом случайно запустил программу под виндой и она заработала. В чём может быть дело ? CLI MOV AL, 0EDh ;управление зажиганием CapsLock,Num,Scroll OUT 60h, AL JMP delay delay: MOV AL, 00000111b ;зачечь все три OUT 60h, AL STI Я не понимаю в чём дело ! Раньше я не понимал отличий между режимом ДОС и его эмуляцией, теперь понимаю и вообще-то я думал, что подобные программы не работать должны именно под виндой (ведь она вроде защищённая ОС и сама выбирает куда допустить приложение, а куда нет), а выходит у меня наоборот. |
Сообщ.
#2
,
|
|
|
И тишина....
Неужели никто не знает в чём может быть дело ? ??? |
Сообщ.
#3
,
|
|
|
Попробуй так.........
cli mov cx,2000h @1:in al,64h test al,2 loopnz @1 mov al,0EDh out 60h,al mov cx,2000h @2:in al,64h test al,2 loopnz @2 mov al,00000111b out 60h,al sti Т.е. перед отправкой байта сделай...... mov cx,2000h @x:in al,64h test al,2 loopnz @ .....а JMP убери...... |
Сообщ.
#4
,
|
|
|
Под виндой работает, так же как и моя, под голым Досом не смотрел, надо перезагружаться... Но мне интересно, _почему_ так происходит, что некоторые проги,
работающие с портами, в эмуляции пашут, а так - нет. Странно. Хотя бы было бы наоборот, было бы хотя бы менее странно... |
Сообщ.
#5
,
|
|
|
Сейчас нашёл интересную деталь
Оказывается, что если использовать порт 64, а не 60, то программа будет работать правильно как под Досом, так и под эмуляцией, а если использовать только порт 60, то она будет работать корректно только в режиме эмуляции. Но почему так... я так и не понял. |
Сообщ.
#6
,
|
|
|
Цитата Оказывается, что если использовать порт 64, а не 60, то программа будет работать правильно как под Досом, так и под эмуляцией, а если использовать только порт 60, то она будет работать корректно только в режиме эмуляции. Управление клавиатурой AT производится обращением к порту 64h, для совместимости с XT допустимо использование порта 60h. То есть использование порта 64h однозначно корректней. Цитата Под виндой работает, так же как и моя, под голым Досом не смотрел, надо перезагружаться... Но мне интересно, _почему_ так происходит, что некоторые проги, работающие с портами, в эмуляции пашут, а так - нет. Странно. Хотя бы было бы наоборот, было бы хотя бы менее странно... У меня только одна версия. Все дело в программировании контроллера клавиатуры. При работе в Windows он перепрограммируется и работает несколько по-другому нежели чем в DOS |