From 76cbda0983f61cfd131b64825b27f5fd6fcece6b Mon Sep 17 00:00:00 2001 From: nickysn Date: Mon, 9 Sep 2013 20:55:08 +0000 Subject: [PATCH] + 83/84-key keyboard support added to unit crt git-svn-id: trunk@25445 - --- rtl/msdos/crt.pp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/rtl/msdos/crt.pp b/rtl/msdos/crt.pp index 4807592e97..94d99b9f73 100644 --- a/rtl/msdos/crt.pp +++ b/rtl/msdos/crt.pp @@ -348,9 +348,24 @@ End; *************************************************************************} var + keyboard_type: byte; { 0=83/84-key keyboard, $10=101/102+ keyboard } is_last : boolean; last : char; +procedure DetectKeyboard; +var + regs: registers; +begin + keyboard_type:=0; + if (Mem[$40:$96] and $10)<>0 then + begin + regs.ax:=$1200; + intr($16,regs); + if regs.ax<>$1200 then + keyboard_type:=$10; + end; +end; + function readkey : char; var char2 : char; @@ -364,7 +379,7 @@ begin end else begin - regs.ah:=$10; + regs.ah:=keyboard_type; intr($16,regs); if (regs.al=$e0) and (regs.ah<>0) then regs.al:=0; @@ -391,7 +406,7 @@ begin end else begin - regs.ah:=$11; + regs.ah:=keyboard_type+1; intr($16,regs); keypressed:=((regs.flags and fZero) = 0); end; @@ -780,6 +795,8 @@ end; var x,y : longint; begin +{ Detect keyboard type } + DetectKeyboard; { Load startup values } ScreenWidth:=GetScreenWidth; ScreenHeight:=GetScreenHeight;