Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > KBD


Автор: Конус 3.5.2004, 14:57
Вот хочу чтобы у клавы загорелись три индикатора, но ничего не работает.

BEGIN
ASM
@M1: IN AL,64h
AND AL,00000010b
JNZ @M1

MOV AL,0EDh
OUT 60h,AL

@M2: IN AL,64h
AND AL,00000001b
JZ @M2

MOV AL,00000111
OUT 60h,AL
END;
END.

Помогите!

Автор: Jin X 3.5.2004, 17:23
1. Под NT-шки (в т.ч. 2K/XP) работать не будет.
2. Почему во втором цикле ты проверяешь уже 1-й бит? Там должно быть то же самое. Вообще говоря, лучше сделать timeout (loopnz):
Код
{$S-,G+}
Procedure SendKbdPort(Val: Byte); assembler;
Asm
  cli
  mov cx,2000h
@:in al,64h
  test al,2
  loopnz @
  mov al,Val
  out 60h,al
  sti
End;

Procedure SetKbdLEDs(Mask: Word); assembler;
Asm
  push 0EDh
  call SendKbdPort
  push Mask
  call SendKbdPort
End;

Begin
 SetKbdLEDs(7)
End.

Автор: Конус 3.5.2004, 17:45
это чтобы проц успел прочитать команду, а уж потом параметр hmmm.gif

Автор: Jin X 3.5.2004, 17:53
Как это? smile.gif

Автор: Guest 3.5.2004, 17:59
А почему работать не будет и нельзя ли попроще это написать.
(насчет первой единицы: рызные тактовые частоты, поэтому надо глянуть RG Status) wink.gif

Автор: Конус 4.5.2004, 10:01
Хоть кто-нибудь может помочь, очень надо thumbs-up.gif

Автор: Jin X 6.5.2004, 18:12
Проще можно, но лучше так smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)