+ enabled compilation of the 'fv' package for i8086-msdos

git-svn-id: trunk@37744 -
This commit is contained in:
nickysn 2017-12-16 01:04:15 +00:00
parent a82740d7a7
commit aebc0a74f7
2 changed files with 104 additions and 40 deletions

View File

@ -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;

View File

@ -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 }