mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-21 19:21:37 +02:00
+ enabled compilation of the 'fv' package for i8086-msdos
git-svn-id: trunk@37744 -
This commit is contained in:
parent
a82740d7a7
commit
aebc0a74f7
@ -20,7 +20,7 @@ begin
|
||||
P.Author := 'Leon De Boer and Pierre Mueller';
|
||||
P.License := 'LGPL with modification, ';
|
||||
P.HomepageURL := 'www.freepascal.org';
|
||||
P.OSes := [beos,haiku,freebsd,darwin,iphonesim,solaris,netbsd,openbsd,linux,win16,win32,win64,os2,emx,netware,netwlibc,go32v2,aix,dragonfly]+AllAmigaLikeOSes;
|
||||
P.OSes := [beos,haiku,freebsd,darwin,iphonesim,solaris,netbsd,openbsd,linux,win16,win32,win64,os2,emx,netware,netwlibc,go32v2,msdos,aix,dragonfly]+AllAmigaLikeOSes;
|
||||
P.Email := '';
|
||||
P.Description := 'Free Vision, a portable Turbo Vision clone.';
|
||||
P.NeedLibC:= false;
|
||||
|
@ -264,18 +264,32 @@ PROCEDURE SetTime (Hour, Minute, Second, Sec100: Word);
|
||||
END;
|
||||
{$ENDIF}
|
||||
{$IFDEF ASM_FPC} { FPC COMPATABLE ASM }
|
||||
BEGIN
|
||||
ASM
|
||||
MOVB Hour, %CH; { Fetch hour }
|
||||
MOVB Minute, %CL; { Fetch minute }
|
||||
MOVB Second, %DH; { Fetch second }
|
||||
MOVB Sec100, %DL; { Fetch hundredths }
|
||||
MOVW $0x2D00, %AX; { Set function id }
|
||||
PUSHL %EBP; { Save register }
|
||||
INT $0x21; { BIOS set time }
|
||||
POPL %EBP; { Restore register }
|
||||
END;
|
||||
END;
|
||||
{$IFDEF BIT_16}
|
||||
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;
|
||||
{$ELSE}
|
||||
BEGIN
|
||||
ASM
|
||||
MOVB Hour, %CH; { Fetch hour }
|
||||
MOVB Minute, %CL; { Fetch minute }
|
||||
MOVB Second, %DH; { Fetch second }
|
||||
MOVB Sec100, %DL; { Fetch hundredths }
|
||||
MOVW $0x2D00, %AX; { Set function id }
|
||||
PUSHL %EBP; { Save register }
|
||||
INT $0x21; { BIOS set time }
|
||||
POPL %EBP; { Restore register }
|
||||
END;
|
||||
END;
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
{$IFDEF OS_WIN16} { 16 BIT WINDOWS CODE }
|
||||
@ -377,33 +391,83 @@ PROCEDURE GetTime (Var Hour, Minute, Second, Sec100: Word);
|
||||
STOSW; { Return hours }
|
||||
END;
|
||||
{$ENDIF}
|
||||
{$IFDEF OS_GO32} { FPC COMPATABLE ASM }
|
||||
BEGIN
|
||||
(* ASM
|
||||
MOVW $0x2C00, %AX; { Set function id }
|
||||
PUSHL %EBP; { Save register }
|
||||
INT $0x21; { System get time }
|
||||
POPL %EBP; { Restore register }
|
||||
XORB %AH, %AH; { Clear register }
|
||||
MOVB %DL, %AL; { Transfer register }
|
||||
MOVL Sec100, %EDI; { EDI -> Sec100 }
|
||||
MOVW %AX, (%EDI); { Return Sec100 }
|
||||
MOVB %DH, %AL; { Transfer register }
|
||||
MOVL Second, %EDI; { EDI -> Second }
|
||||
MOVW %AX, (%EDI); { Return Second }
|
||||
MOVB %CL, %AL; { Transfer register }
|
||||
MOVL Minute, %EDI; { EDI -> Minute }
|
||||
MOVW %AX, (%EDI); { Return minute }
|
||||
MOVB %CH, %AL; { Transfer register }
|
||||
MOVL Hour, %EDI; { EDI -> Hour }
|
||||
MOVW %AX, (%EDI); { Return hour }
|
||||
END; *)
|
||||
{ direct call of real interrupt seems to render the system
|
||||
unstable on Win2000 because some registers are not properly
|
||||
restored if a mouse interrupt is generated while the Dos
|
||||
interrupt is called... PM }
|
||||
Dos.GetTime(Hour,Minute,Second,Sec100);
|
||||
END;
|
||||
{$IFDEF ASM_FPC} { FPC COMPATABLE ASM }
|
||||
{$IFDEF BIT_16}
|
||||
{$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}
|
||||
{$ELSE}
|
||||
BEGIN
|
||||
(* ASM
|
||||
MOVW $0x2C00, %AX; { Set function id }
|
||||
PUSHL %EBP; { Save register }
|
||||
INT $0x21; { System get time }
|
||||
POPL %EBP; { Restore register }
|
||||
XORB %AH, %AH; { Clear register }
|
||||
MOVB %DL, %AL; { Transfer register }
|
||||
MOVL Sec100, %EDI; { EDI -> Sec100 }
|
||||
MOVW %AX, (%EDI); { Return Sec100 }
|
||||
MOVB %DH, %AL; { Transfer register }
|
||||
MOVL Second, %EDI; { EDI -> Second }
|
||||
MOVW %AX, (%EDI); { Return Second }
|
||||
MOVB %CL, %AL; { Transfer register }
|
||||
MOVL Minute, %EDI; { EDI -> Minute }
|
||||
MOVW %AX, (%EDI); { Return minute }
|
||||
MOVB %CH, %AL; { Transfer register }
|
||||
MOVL Hour, %EDI; { EDI -> Hour }
|
||||
MOVW %AX, (%EDI); { Return hour }
|
||||
END; *)
|
||||
{ direct call of real interrupt seems to render the system
|
||||
unstable on Win2000 because some registers are not properly
|
||||
restored if a mouse interrupt is generated while the Dos
|
||||
interrupt is called... PM }
|
||||
Dos.GetTime(Hour,Minute,Second,Sec100);
|
||||
END;
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
{$IFDEF OS_WIN16} { 16 BIT WINDOWS CODE }
|
||||
|
Loading…
Reference in New Issue
Block a user