59 lines
		
	
	
		
			844 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			844 B
		
	
	
	
		
			C
		
	
	
	
| extern char _start_bss;
 | |
| extern char _end_bss;
 | |
| extern int main(int argc, char **argv, char **environ);
 | |
| void __main();
 | |
| 
 | |
| static void
 | |
| enter()
 | |
| {
 | |
| #if defined(__Z8002__)
 | |
|   __main();
 | |
| #endif
 | |
|   exit(main(0,0,0));
 | |
| }
 | |
| start()
 | |
| {
 | |
|   char *p;
 | |
| #if defined(__Z8002__)
 | |
|   asm("ld	r15,#__stack_top");
 | |
|   asm("ld	r10,r15");
 | |
| #endif
 | |
| #if defined(__Z8001__)
 | |
|   asm("ldl	rr14,#__stack_top");
 | |
|   asm("ldl	rr10,rr14");
 | |
| #endif
 | |
| 
 | |
| 
 | |
|   /* zero bss */
 | |
|   p = &_start_bss;
 | |
|   while (p < & _end_bss) 
 | |
|   {
 | |
|     *p++ = 0;
 | |
|   }
 | |
|   enter();
 | |
| }
 | |
| 
 | |
| #if defined(__Z8002__)
 | |
| void __do_global_ctors ()
 | |
| {
 | |
|   typedef void (*pfunc)();
 | |
|   extern pfunc __ctors[];
 | |
|   extern pfunc __ctors_end[];
 | |
|   pfunc *p;
 | |
|   for (p = __ctors_end; p > __ctors; )
 | |
|     {
 | |
|       (*--p)();
 | |
|     }
 | |
| }
 | |
| 
 | |
| void __main()
 | |
| {
 | |
|   static int initialized;
 | |
|   if (! initialized)
 | |
|     {
 | |
|       initialized = 1;
 | |
|       __do_global_ctors ();
 | |
|     }
 | |
| }
 | |
| #endif
 |