{ u_crt.pas } { Unit pre krychle.pas } { } { Author: } { Datum:02.02.2008 http://www.trsek.com } {$D-,E-,G+,I-,L-,N-,P+,Q-,R-,S-,T-,V-,Y- exe} Unit U_CRT; Interface Var {cas} Time : Longint ABSOLUTE $0:$046c; {div 27.2?} Function KeyPressed:Boolean; Function ReadKey:Char; Procedure Delay27(MSdiv27: Word); Procedure Pause; Implementation Const ScanCode:Byte=0; Procedure Pause; Begin While KeyPressed do ReadKey; Repeat Until KeyPressed; While KeyPressed do ReadKey; End; Function KeyPressed:Boolean; Assembler; Asm CMP ScanCode,0 {ZF := ((ScanCode AND 0) = 0)} JNE @@1 {IF Not ZF 0 Then GOTO 1} MOV AH,1 {AH := 1, INT 16h cte ale nevyjme z bufferu} INT 16H {AL := ASCII kod znaku; AH := SCAN kod znaku; ZF = NeniStisk} MOV AL,0 {AL := 0} JE @@2 {IF ZF THEN GOTO 2} @@1:MOV AL,1 {AL := 1} @@2: {KeyPressed := AL} End; Function ReadKey:Char; Assembler; Asm MOV AL,ScanCode {AL := ScanCode} MOV ScanCode,0 {ScanCode := 0} OR AL,AL {ZF := ((AL OR AL) = 0)} JNE @@1 {IF Not ZF THEN GOTO 1 Byla stisknuta klavesa s kodem 0, napr. F1} XOR AH,AH {AH := 0, INT 16h pak cte znak z klavesnice} INT 16H {AL := ASCII kod znaku; AH := SCAN kod znaku} OR AL,AL {ZF := ((AL OR AL) = 0)} JNE @@1 {IF Not ZF Then GOTO 1} MOV ScanCode,AH {ScanCode := AH ulozeno pro pristi pouziti} OR AH,AH {ZF := ((AH OR AH) = 0)} JNE @@1 {IF Not ZF Then GOTO 1} MOV AL,'C'-64 {AL := 3} @@1: {ReadKey := AL} End; Procedure Delay27(MSdiv27:Word); Var T:LongInt; Begin While MSdiv27 > 0 Do Begin T := Time; While T = Time Do; MSdiv27 := MSdiv27 - 1; End; End; End.