1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- {
- This file is part of the Free Pascal run time library.
- Copyright (c) 2016 by the Free Pascal development team
- System Entry point for Atari/TOS
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- unit si_prc;
- interface
- implementation
- {$i gemdos.inc}
- var
- procdesc: PPD; public name '__base';
- tpasize: longint;
- stacktop: pointer;
- stklen: longint; external name '__stklen';
- procedure PascalMain; external name 'PASCALMAIN';
- { this function must be the first in this unit which contains code }
- {$OPTIMIZATION OFF}
- procedure _FPC_proc_start(pd: PPD); cdecl; public name '_start';
- begin
- procdesc:=pd;
- tpasize:=align(sizeof(pd^) + pd^.p_tlen + pd^.p_dlen + pd^.p_blen + stklen, sizeof(pointer));
- if gemdos_mshrink(0, pd, tpasize) < 0 then
- begin
- gemdos_cconws('Not enough memory.'#13#10);
- gemdos_pterm(-39);
- end
- else
- begin
- stacktop:=pd^.p_lowtpa + tpasize;
- asm
- move.l stacktop, sp
- end;
- PascalMain;
- { this should be unreachable... }
- gemdos_pterm(-1);
- end;
- end;
- procedure _FPC_proc_halt(_ExitCode: longint); cdecl; public name '_haltproc';
- begin
- gemdos_pterm(_ExitCode);
- end;
- end.
|