Browse Source

+ fixed compilation of unit 'time' on win16

git-svn-id: trunk@37652 -
nickysn 7 years ago
parent
commit
7af8cb4015
1 changed files with 62 additions and 0 deletions
  1. 62 0
      packages/fv/src/time.pas

+ 62 - 0
packages/fv/src/time.pas

@@ -278,6 +278,19 @@ PROCEDURE SetTime (Hour, Minute, Second, Sec100: Word);
    END;
    {$ENDIF}
 {$ENDIF}
+{$IFDEF OS_WIN16}                                     { 16 BIT WINDOWS CODE }
+   ASSEMBLER;
+   ASM
+     MOV CH, BYTE PTR Hour;                           { Fetch hour }
+     MOV CL, BYTE PTR Minute;                         { Fetch minute }
+     MOV DH, BYTE PTR Second;                         { Fetch second }
+     MOV DL, BYTE PTR Sec100;                         { Fetch hundredths }
+     MOV AX, $2D00;                                   { Set function id }
+     PUSH BP;                                         { Safety save register }
+     INT $21;                                         { Set the time }
+     POP BP;                                          { Restore register }
+   END;
+{$ENDIF}
 {$IFDEF OS_WINDOWS}                                   { WIN/NT CODE }
    {$IFDEF BIT_16}                                    { 16 BIT WINDOWS CODE }
    ASSEMBLER;
@@ -393,6 +406,55 @@ PROCEDURE GetTime (Var Hour, Minute, Second, Sec100: Word);
    END;
    {$ENDIF}
 {$ENDIF}
+{$IFDEF OS_WIN16}                                     { 16 BIT WINDOWS CODE }
+   {$IFDEF FPC_X86_DATA_NEAR}
+   ASSEMBLER;
+   ASM
+     MOV AX, $2C00;                                   { Set function id }
+     PUSH BP;                                         { Safety save register }
+     INT $21;                                         { System get time }
+     POP BP;                                          { Restore register }
+     XOR AH, AH;                                      { Clear register }
+     CLD;                                             { Strings go forward }
+     MOV AL, DL;                                      { Transfer register }
+     PUSH DS
+     POP ES
+     MOV DI, Sec100;                                  { ES:DI -> hundredths }
+     STOSW;                                           { Return hundredths }
+     MOV AL, DH;                                      { Transfer register }
+     MOV DI, Second;                                  { ES:DI -> seconds }
+     STOSW;                                           { Return seconds }
+     MOV AL, CL;                                      { Transfer register }
+     MOV DI, Minute;                                  { ES:DI -> minutes }
+     STOSW;                                           { Return minutes }
+     MOV AL, CH;                                      { Transfer register }
+     MOV DI, Hour;                                    { ES:DI -> hours }
+     STOSW;                                           { Return hours }
+   END;
+   {$ELSE FPC_X86_DATA_NEAR}
+   ASSEMBLER;
+   ASM
+     MOV AX, $2C00;                                   { Set function id }
+     PUSH BP;                                         { Safety save register }
+     INT $21;                                         { System get time }
+     POP BP;                                          { Restore register }
+     XOR AH, AH;                                      { Clear register }
+     CLD;                                             { Strings go forward }
+     MOV AL, DL;                                      { Transfer register }
+     LES DI, Sec100;                                  { ES:DI -> hundredths }
+     STOSW;                                           { Return hundredths }
+     MOV AL, DH;                                      { Transfer register }
+     LES DI, Second;                                  { ES:DI -> seconds }
+     STOSW;                                           { Return seconds }
+     MOV AL, CL;                                      { Transfer register }
+     LES DI, Minute;                                  { ES:DI -> minutes }
+     STOSW;                                           { Return minutes }
+     MOV AL, CH;                                      { Transfer register }
+     LES DI, Hour;                                    { ES:DI -> hours }
+     STOSW;                                           { Return hours }
+   END;
+   {$ENDIF}
+{$ENDIF}
 {$IFDEF OS_WINDOWS}                                   { WIN/NT CODE }
    {$IFDEF BIT_16}                                    { 16 BIT WINDOWS CODE }
    ASSEMBLER;