mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-19 16:49:17 +02:00
* Updated to current compiler & rtl.
This commit is contained in:
parent
d98d32acc5
commit
3a5a4d2509
@ -102,14 +102,15 @@ const UnusedHandle=$ffff;
|
||||
|
||||
implementation
|
||||
|
||||
{ die betriebssystemunabhangigen Implementationen einfuegen: }
|
||||
|
||||
{$I SYSTEM.INC}
|
||||
|
||||
procedure dosgetinfoblocks(var Atib:Pthreadinfoblock;
|
||||
var Apib:Pprocessinfoblock);
|
||||
external 'DOSCALLS' index 312;
|
||||
|
||||
{This is the correct way to call external assembler procedures.}
|
||||
procedure syscall;external name '___SYSCALL';
|
||||
|
||||
{***************************************************************************
|
||||
|
||||
Runtime error checking related routines.
|
||||
@ -129,22 +130,22 @@ begin
|
||||
{$ifdef SYSTEMDEBUG}
|
||||
movl U_SYSOS2_LOWESTSTACK,%ebx
|
||||
cmpl %eax,%ebx
|
||||
jb _is_not_lowest
|
||||
jb .Lis_not_lowest
|
||||
movl %eax,U_SYSOS2_LOWESTSTACK
|
||||
_is_not_lowest:
|
||||
.Lis_not_lowest:
|
||||
{$endif SYSTEMDEBUG}
|
||||
cmpb $2,U_SYSOS2_OS_MODE
|
||||
jne _running_in_dos
|
||||
jne .Lrunning_in_dos
|
||||
movl U_SYSOS2_STACKBOTTOM,%ebx
|
||||
jmp _running_in_os2
|
||||
_running_in_dos:
|
||||
jmp .Lrunning_in_os2
|
||||
.Lrunning_in_dos:
|
||||
movl __heap_brk,%ebx
|
||||
_running_in_os2:
|
||||
.Lrunning_in_os2:
|
||||
cmpl %eax,%ebx
|
||||
jae __short_on_stack
|
||||
jae .Lshort_on_stack
|
||||
leave
|
||||
ret $4
|
||||
__short_on_stack:
|
||||
.Lshort_on_stack:
|
||||
end ['EAX','EBX'];
|
||||
{ this needs a local variable }
|
||||
{ so the function called itself !! }
|
||||
@ -165,7 +166,7 @@ begin
|
||||
asm
|
||||
movb $0x4c,%ah
|
||||
movb errnum,%al
|
||||
call ___SYSCALL
|
||||
call syscall
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -210,7 +211,7 @@ var hl:longint;
|
||||
begin
|
||||
asm
|
||||
movb $0x2c,%ah
|
||||
call ___SYSCALL
|
||||
call syscall
|
||||
movw %cx,-4(%ebp)
|
||||
movw %dx,-2(%ebp)
|
||||
end;
|
||||
@ -233,7 +234,7 @@ begin
|
||||
asm
|
||||
movl size,%edx
|
||||
movw $0x7f00,%ax
|
||||
call ___SYSCALL
|
||||
call syscall
|
||||
movl %eax,__RESULT
|
||||
end;
|
||||
end;
|
||||
@ -273,7 +274,7 @@ begin
|
||||
asm
|
||||
movb $0x3e,%ah
|
||||
mov h,%ebx
|
||||
call ___SYSCALL
|
||||
call syscall
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -284,10 +285,10 @@ begin
|
||||
asm
|
||||
movl 8(%ebp),%edx
|
||||
movb $0x41,%ah
|
||||
call ___SYSCALL
|
||||
jnc LERASE1
|
||||
movw %ax,U_SYSOS2_INOUTRES;
|
||||
LERASE1:
|
||||
call syscall
|
||||
jnc .LERASE1
|
||||
movw %ax,inoutres;
|
||||
.LERASE1:
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -300,10 +301,10 @@ begin
|
||||
movl 8(%ebp),%edx
|
||||
movl 12(%ebp),%edi
|
||||
movb $0x56,%ah
|
||||
call ___SYSCALL
|
||||
jnc LRENAME1
|
||||
movw %ax,U_SYSOS2_INOUTRES;
|
||||
LRENAME1:
|
||||
call syscall
|
||||
jnc .LRENAME1
|
||||
movw %ax,inoutres;
|
||||
.LRENAME1:
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -315,11 +316,11 @@ begin
|
||||
movl 12(%ebp),%edx
|
||||
movl 8(%ebp),%ebx
|
||||
movb $0x3f,%ah
|
||||
call ___SYSCALL
|
||||
jnc LDOSREAD1
|
||||
movw %ax,U_SYSOS2_INOUTRES;
|
||||
call syscall
|
||||
jnc .LDOSREAD1
|
||||
movw %ax,inoutres;
|
||||
xorl %eax,%eax
|
||||
LDOSREAD1:
|
||||
.LDOSREAD1:
|
||||
leave
|
||||
ret $12
|
||||
end;
|
||||
@ -333,10 +334,10 @@ begin
|
||||
movl 12(%ebp),%edx
|
||||
movl 8(%ebp),%ebx
|
||||
movb $0x40,%ah
|
||||
call ___SYSCALL
|
||||
jnc LDOSWRITE1
|
||||
movw %ax,U_SYSOS2_INOUTRES;
|
||||
LDOSWRITE1:
|
||||
call syscall
|
||||
jnc .LDOSWRITE1
|
||||
movw %ax,inoutres;
|
||||
.LDOSWRITE1:
|
||||
movl %eax,-4(%ebp)
|
||||
end;
|
||||
end;
|
||||
@ -348,11 +349,11 @@ begin
|
||||
movw $0x4201,%ax
|
||||
movl 8(%ebp),%ebx
|
||||
xorl %edx,%edx
|
||||
call ___SYSCALL
|
||||
jnc LDOSFILEPOS
|
||||
movw %ax,U_SYSOS2_INOUTRES;
|
||||
call syscall
|
||||
jnc .LDOSFILEPOS
|
||||
movw %ax,inoutres;
|
||||
xorl %eax,%eax
|
||||
LDOSFILEPOS:
|
||||
.LDOSFILEPOS:
|
||||
leave
|
||||
ret $4
|
||||
end;
|
||||
@ -365,9 +366,9 @@ begin
|
||||
movw $0x4200,%ax
|
||||
movl 8(%ebp),%ebx
|
||||
movl 12(%ebp),%edx
|
||||
call ___SYSCALL
|
||||
call syscall
|
||||
jnc .LDOSSEEK1
|
||||
movw %ax,U_SYSOS2_INOUTRES;
|
||||
movw %ax,inoutres;
|
||||
.LDOSSEEK1:
|
||||
leave
|
||||
ret $8
|
||||
@ -381,9 +382,9 @@ begin
|
||||
movw $0x4202,%ax
|
||||
movl 8(%ebp),%ebx
|
||||
xorl %edx,%edx
|
||||
call ___SYSCALL
|
||||
call syscall
|
||||
jnc .Lset_at_end1
|
||||
movw %ax,U_SYSOS2_INOUTRES;
|
||||
movw %ax,inoutres;
|
||||
xorl %eax,%eax
|
||||
.Lset_at_end1:
|
||||
leave
|
||||
@ -408,17 +409,17 @@ begin
|
||||
movl $0x4200,%eax
|
||||
movl 8(%ebp),%ebx
|
||||
movl 12(%ebp),%edx
|
||||
call ___SYSCALL
|
||||
call syscall
|
||||
jc .LTruncate1
|
||||
movl 8(%ebp),%ebx
|
||||
movl 12(%ebp),%edx
|
||||
movl %ebp,%edx
|
||||
xorl %ecx,%ecx
|
||||
movb $0x40,%ah
|
||||
call ___SYSCALL
|
||||
call syscall
|
||||
jnc .LTruncate2
|
||||
.LTruncate1:
|
||||
movw %ax,U_SYSOS2_INOUTRES;
|
||||
movw %ax,inoutres;
|
||||
.LTruncate2:
|
||||
leave
|
||||
ret $8
|
||||
@ -493,11 +494,11 @@ begin
|
||||
movb $0x3c,%ah
|
||||
movl p,%edx
|
||||
xorw %cx,%cx
|
||||
call ___SYSCALL
|
||||
jnc LOPEN1
|
||||
movw %ax,U_SYSOS2_INOUTRES;
|
||||
call syscall
|
||||
jnc .LOPEN1
|
||||
movw %ax,inoutres;
|
||||
movw $0xffff,%ax
|
||||
LOPEN1:
|
||||
.LOPEN1:
|
||||
movl f,%edx
|
||||
movw %ax,(%edx)
|
||||
end
|
||||
@ -507,11 +508,11 @@ begin
|
||||
movb $0x3d,%ah
|
||||
movb oflags,%al
|
||||
movl p,%edx
|
||||
call ___SYSCALL
|
||||
jnc LOPEN2
|
||||
movw %ax,U_SYSOS2_INOUTRES;
|
||||
call syscall
|
||||
jnc .LOPEN2
|
||||
movw %ax,inoutres;
|
||||
movw $0xffff,%ax
|
||||
LOPEN2:
|
||||
.LOPEN2:
|
||||
movl f,%edx
|
||||
movw %ax,(%edx)
|
||||
end;
|
||||
@ -560,9 +561,9 @@ begin
|
||||
asm
|
||||
leal buffer,%edx
|
||||
movb 8(%ebp),%ah
|
||||
call ___SYSCALL
|
||||
call syscall
|
||||
jnc .LDOS_DIRS1
|
||||
movw %ax,U_SYSOS2_INOUTRES;
|
||||
movw %ax,inoutres;
|
||||
.LDOS_DIRS1:
|
||||
end;
|
||||
end;
|
||||
@ -605,7 +606,7 @@ begin
|
||||
movb drivenr,%dl
|
||||
movl sof,%esi
|
||||
mov $0x47,%ah
|
||||
call ___SYSCALL
|
||||
call syscall
|
||||
end;
|
||||
{ Now Dir should be filled with directory in ASCIIZ, }
|
||||
{ starting from dir[4] }
|
||||
@ -632,7 +633,7 @@ begin
|
||||
{ because the drive was the default, which can be unknown }
|
||||
asm
|
||||
movb $0x19,%ah
|
||||
call ___SYSCALL
|
||||
call syscall
|
||||
addb $65,%al
|
||||
movb %al,i
|
||||
end;
|
||||
@ -666,38 +667,40 @@ begin
|
||||
{Determine the operating system we are running on.}
|
||||
asm
|
||||
movw $0x7f0a,%ax
|
||||
call ___SYSCALL
|
||||
test $512,%bx {Bit 9 is OS/2 flag.}
|
||||
setnzb U_SYSOS2_OS_MODE
|
||||
test $4096,%bx
|
||||
jz _noRSX
|
||||
movb $2,U_SYSOS2_OS_MODE
|
||||
_noRSX:
|
||||
call syscall
|
||||
testw $512,%bx {Bit 9 is OS/2 flag.}
|
||||
setnzl os_mode
|
||||
testw $4096,%bx
|
||||
jz .LnoRSX
|
||||
movl $2,os_mode
|
||||
.LnoRSX:
|
||||
end;
|
||||
|
||||
{$ASMMODE DIRECT}
|
||||
{Enable the brk area by initializing it with the initial heap size.}
|
||||
asm
|
||||
mov $0x7f01,%ax
|
||||
movw $0x7f01,%ax
|
||||
movl HEAPSIZE,%edx
|
||||
addl __heap_base,%edx
|
||||
call ___SYSCALL
|
||||
cmpl $-1,%eax
|
||||
jnz _heapok
|
||||
jnz Lheapok
|
||||
pushl $204
|
||||
call _SYSOS2$$_RUNERROR$WORD
|
||||
_heapok:
|
||||
{call RUNERROR$$WORD}
|
||||
Lheapok:
|
||||
end;
|
||||
{$ASMMODE ATT}
|
||||
|
||||
{Now request, if we are running under DOS,
|
||||
read-access to the first meg. of memory.}
|
||||
if os_mode in [osDOS,osDPMI] then
|
||||
asm
|
||||
mov $0x7f13,%ax
|
||||
xor %ebx,%ebx
|
||||
mov $0xfff,%ecx
|
||||
xor %edx,%edx
|
||||
call ___SYSCALL
|
||||
mov %eax,U_SYSOS2_FIRST_MEG
|
||||
movw $0x7f13,%ax
|
||||
xorl %ebx,%ebx
|
||||
movl $0xfff,%ecx
|
||||
xorl %edx,%edx
|
||||
call syscall
|
||||
movl %eax,first_meg
|
||||
end
|
||||
else
|
||||
first_meg:=nil;
|
||||
|
Loading…
Reference in New Issue
Block a user