[Back to KEYBOARD SWAG index]  [Back to Main SWAG index]  [Original]

$F+,O+}
Unit KeyServ;
Interface
{$IFNDEF VIRTUALPASCAL}
 Function GetKey(Var Key: Word): Boolean;
 Function ReadKey: Char;
 Function KeyPressed: Boolean;
 Procedure ClearKBD;
{$ENDIF}
Implementation
{$IFNDEF VIRTUALPASCAL}
Const
  MCh: Byte=0;

Function GetKey; Assembler;
Asm
  mov  ah,01h
  int  16h
  mov  al,00h
  je   @@1
  xor  ah,ah
  int  16h
  les  di,Key
  mov  word ptr es:[di],ax
  mov  al,01h
@@1:
End;

Function ReadKey; Assembler;
Asm
  mov  al,MCh
  mov  byte ptr MCh,00
  or   al,al { ??? }
  jne  @0338
  xor  ah,ah
  int  16h
  or   al,al
  jne  @0338
  mov  MCh,ah
  or   ah,ah { ??? }
  jne  @0338
  mov  al,03h
@0338:
End;

Function KeyPressed; Assembler;
Asm
  cmp  byte ptr MCh,00
  jne  @0317
  mov  ah,01h
  int  16h
  mov  al,00h
  je   @0319
@0317:
  mov  al,01h
@0319:
End;

Procedure ClearKBD; Assembler;
Asm
@@Begin:
  mov  ah,01h
  int  16h
  je   @@Exit
  xor  ah,ah
  int  16h
  jmp  @@Begin
@@Exit:
End;
{$ENDIF}
End.

[Back to KEYBOARD SWAG index]  [Back to Main SWAG index]  [Original]