mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 07:43:04 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			ActionScript
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			ActionScript
		
	
	
	
	
	
/ prt0.s (emx+fpc) -- Made from crt0.s,
 | 
						|
/                     Copyright (c) 1990-1999-2001 by Eberhard Mattes.
 | 
						|
/                     Changed for Free Pascal in 1997 Daniel Mantione.
 | 
						|
/                     This code is _not_ under the Library GNU Public
 | 
						|
/                     License, because the original is not. See copying.emx
 | 
						|
/                     for details. You should have received it with this
 | 
						|
/                     product, write the author if you haven't.
 | 
						|
 | 
						|
        .globl  __text
 | 
						|
        .globl  ___SYSCALL
 | 
						|
        .globl  __data
 | 
						|
        .globl  __init
 | 
						|
        .globl  __dos_init
 | 
						|
        .globl  __dos_syscall
 | 
						|
        .comm _excptregptr, 4
 | 
						|
 | 
						|
        .text
 | 
						|
 | 
						|
__text:
 | 
						|
        push    $__data
 | 
						|
        call    __dos_init
 | 
						|
        jmp     __init
 | 
						|
 | 
						|
___SYSCALL:
 | 
						|
        call    __dos_syscall
 | 
						|
        ret
 | 
						|
 | 
						|
        .space  6, 0x90
 | 
						|
 | 
						|
__init: cld
 | 
						|
        pushl %eax
 | 
						|
        pushl %eax
 | 
						|
        pushl %eax
 | 
						|
        movl %esp,%eax
 | 
						|
        addl $4,%eax
 | 
						|
        movl %eax, _excptregptr
 | 
						|
        popl %eax
 | 
						|
 | 
						|
        call    _main
 | 
						|
 | 
						|
        movb    $0x4c,%ah
 | 
						|
        call    ___SYSCALL
 | 
						|
2:      jmp     2b
 | 
						|
 | 
						|
/ In executables created with emxbind, the call to _dos_init will
 | 
						|
/ be fixed up at load time to _emx_init of emx.dll.  Under DOS,
 | 
						|
/ this dummy is called instead as there is no fixup.  This module
 | 
						|
/ must be linked statically to avoid having two fixups for the
 | 
						|
/ same location.
 | 
						|
 | 
						|
__dos_init:
 | 
						|
        ret     $4
 | 
						|
 | 
						|
        .align  2, 0x90
 | 
						|
 | 
						|
__dos_syscall:
 | 
						|
        int     $0x21
 | 
						|
        ret
 | 
						|
 | 
						|
        .data
 | 
						|
 | 
						|
/ The data segment starts with a table containing the start and end
 | 
						|
/ addresses of the text, data and bss segments
 | 
						|
 | 
						|
__data:
 | 
						|
        .long   __text
 | 
						|
        .long   __etext
 | 
						|
        .long   __data
 | 
						|
        .long   __edata
 | 
						|
        .long   __edata
 | 
						|
        .long   __end
 | 
						|
__heap_base:
 | 
						|
        .long   0
 | 
						|
__heap_end:
 | 
						|
        .long   0
 | 
						|
__heap_brk:
 | 
						|
        .long   0
 | 
						|
        .long   0
 | 
						|
        .long   __os2dll
 | 
						|
        .long   0
 | 
						|
        .long   0
 | 
						|
        .long   0x02000000
 | 
						|
        .long   0
 | 
						|
        .long   0
 | 
						|
        .byte   0
 | 
						|
        .space  63, 0
 | 
						|
 | 
						|
/ Don't touch this. It's EMX vodoo. In short, this causes the __os2dll symbol
 | 
						|
/ point to table of DLL data that the linker includes in the executable.
 | 
						|
 | 
						|
        .stabs  "__os2dll", 21, 0, 0, 0xffffffff
 | 
						|
        .stabs  "___CTOR_LIST__", 21, 0, 0, 0xffffffff
 | 
						|
        .stabs  "___DTOR_LIST__", 21, 0, 0, 0xffffffff
 | 
						|
        .stabs  "___crtinit1__", 21, 0, 0, 0xffffffff
 | 
						|
        .stabs  "___crtexit1__", 21, 0, 0, 0xffffffff
 | 
						|
        .stabs  "___eh_frame__", 21, 0, 0, 0xffffffff
 |