Home | History | Annotate | Line # | Download | only in common
execkern.S revision 1.1.26.1
      1       1.1    itohy |
      2       1.1    itohy |	execute NetBSD kernel
      3       1.1    itohy |
      4       1.1    itohy |	written by Yasha (ITOH Yasufumi)
      5       1.1    itohy |	public domain
      6       1.1    itohy |
      7  1.1.26.1  nathanw |	$NetBSD: execkern.S,v 1.1.26.1 2001/06/21 19:58:31 nathanw Exp $
      8       1.1    itohy 
      9       1.1    itohy /* XXX this value is from <machine/exec_aout.h> */
     10       1.1    itohy #define __LDPGSZ	8192
     11       1.1    itohy 
     12       1.1    itohy #define MFP		0x00E88000	/* MFP */
     13       1.1    itohy #define MFP_IERA	(MFP+0x07)	/* (B) interrupt enable reg A */
     14       1.1    itohy #define MFP_IERB	(MFP+0x09)	/* (B) interrupt enable reg B */
     15       1.1    itohy #define MFP_RSR		(MFP+0x2B)	/* (B) USART receiver status reg */
     16       1.1    itohy 
     17       1.1    itohy #ifndef SRAM_MEMSZ
     18       1.1    itohy #define SRAM		0x00ED0000	/* SRAM start addr */
     19       1.1    itohy #define SRAM_MEMSZ	(SRAM + 8)	/* (L) size of main memory */
     20       1.1    itohy #endif
     21       1.1    itohy 
     22  1.1.26.1  nathanw |	%a3+0	kernel image top address (a.out header is excluded)
     23  1.1.26.1  nathanw |	%a3+4	load address
     24  1.1.26.1  nathanw |	%a3+8	text size
     25  1.1.26.1  nathanw |	%a3+12	data size
     26  1.1.26.1  nathanw |	%a3+16	bss size
     27  1.1.26.1  nathanw |	%a3+20	symbol size
     28  1.1.26.1  nathanw |	%a3+24	(reserved) (%d5)
     29  1.1.26.1  nathanw |	%a3+28	bootdev (%d6)
     30  1.1.26.1  nathanw |	%a3+32	boothowto (%d7)
     31  1.1.26.1  nathanw |	%a3+36	entry address (absolute address)
     32       1.1    itohy 
     33       1.1    itohy #ifndef XK_NO_C_INTERFACE
     34       1.1    itohy 	.text
     35       1.1    itohy 	.even
     36  1.1.26.1  nathanw ENTRY_NOPROFILE(exec_kernel)
     37  1.1.26.1  nathanw 	addql	#4,%sp
     38  1.1.26.1  nathanw 	moveal	%sp@+,%a3		| struct execkern_arg *
     39       1.1    itohy #endif
     40       1.1    itohy 
     41  1.1.26.1  nathanw 	moveal	%a3@+,%a0		| image address
     42  1.1.26.1  nathanw 	moveal	%a3@+,%a1		| load address
     43  1.1.26.1  nathanw 	movel	%a1,%d3
     44       1.1    itohy 
     45       1.1    itohy 	|
     46       1.1    itohy 	| copy image
     47       1.1    itohy 	|
     48       1.1    itohy 
     49       1.1    itohy 	| copy text segment
     50  1.1.26.1  nathanw 	movel	%a3@+,%d0		| text size
     51  1.1.26.1  nathanw 	movel	%d0,%d1
     52       1.1    itohy 	jbsr	copy
     53       1.1    itohy 
     54       1.1    itohy 	| clear gap between text and data
     55  1.1.26.1  nathanw 	negl	%d1
     56  1.1.26.1  nathanw 	andil	#__LDPGSZ-1,%d1
     57  1.1.26.1  nathanw 	movel	%d1,%d0			| gap size between text and data
     58       1.1    itohy 	jbsr	clear
     59       1.1    itohy 
     60       1.1    itohy 	| copy data segment
     61  1.1.26.1  nathanw 	movel	%a3@+,%d0		| data size
     62       1.1    itohy 	jbsr	copy
     63       1.1    itohy 
     64       1.1    itohy 	| clear bss
     65  1.1.26.1  nathanw 	movel	%a3@+,%d0		| bss size
     66       1.1    itohy 	jbsr	clear
     67       1.1    itohy 
     68       1.1    itohy 	| copy symbol table
     69  1.1.26.1  nathanw 	movel	%a3@+,%d0		| symbol table size
     70  1.1.26.1  nathanw 	movel	%d0,%a1@+
     71       1.1    itohy 	beqs	Lnotable
     72       1.1    itohy 	jbsr	copy
     73       1.1    itohy 
     74       1.1    itohy 	| copy string table size
     75  1.1.26.1  nathanw 	movel	%a0@+,%d0
     76  1.1.26.1  nathanw 	movel	%d0,%a1@+
     77       1.1    itohy 	beqs	Lnotable
     78       1.1    itohy 
     79       1.1    itohy 	| copy string table
     80  1.1.26.1  nathanw 	subql	#4,%d0			| table size is already copied
     81       1.1    itohy 	jbsr	copy
     82       1.1    itohy 
     83       1.1    itohy Lnotable:
     84       1.1    itohy 
     85       1.1    itohy 	| stop MFP interrupts (for compatibility)
     86       1.1    itohy 	clrb	MFP_IERA
     87       1.1    itohy 	clrb	MFP_IERB
     88       1.1    itohy 	clrb	MFP_RSR
     89       1.1    itohy 
     90       1.1    itohy 	|
     91       1.1    itohy 	| execute kernel
     92       1.1    itohy 	| start(load_addr, mem_max, kernel_end)
     93       1.1    itohy 	|
     94  1.1.26.1  nathanw 	movel	%a1,%d0
     95  1.1.26.1  nathanw 	addql	#3,%d0
     96  1.1.26.1  nathanw 	andib	#0xFC,%d0
     97  1.1.26.1  nathanw 	subl	%d3,%d0
     98  1.1.26.1  nathanw 	movel	%d0,%sp@-		| arg #3 (kernel size)
     99  1.1.26.1  nathanw 	movel	SRAM_MEMSZ,%sp@-	| arg #2 (RAM size from SRAM)
    100  1.1.26.1  nathanw 	movel	%d3,%sp@-		| arg #1 (load address)
    101       1.1    itohy 
    102       1.1    itohy #if 0
    103  1.1.26.1  nathanw 	movel	%a3@+,%d5		| (reserved)
    104  1.1.26.1  nathanw 	movel	%a3@+,%d6		| boot device
    105  1.1.26.1  nathanw 	movel	%a3@+,%d7		| boot howto
    106       1.1    itohy 
    107  1.1.26.1  nathanw 	movel	%a3@+,%a0		| entry address
    108       1.1    itohy #else	/* optimized */
    109  1.1.26.1  nathanw 	moveml	%a3@+,%d5-%d7/%a0
    110       1.1    itohy #endif
    111       1.1    itohy 
    112       1.1    itohy 	| clear unused registers
    113  1.1.26.1  nathanw 	moveq	#0,%d0
    114  1.1.26.1  nathanw 	moveq	#0,%d1
    115  1.1.26.1  nathanw 	moveq	#0,%d2
    116  1.1.26.1  nathanw 	moveq	#0,%d3
    117  1.1.26.1  nathanw 	moveq	#0,%d4
    118  1.1.26.1  nathanw 	moveal	%d0,%a1
    119  1.1.26.1  nathanw 	moveal	%d0,%a2
    120  1.1.26.1  nathanw 	moveal	%d0,%a3
    121  1.1.26.1  nathanw 	moveal	%d0,%a4
    122  1.1.26.1  nathanw 	moveal	%d0,%a5
    123  1.1.26.1  nathanw 	moveal	%d0,%a6
    124       1.1    itohy 
    125  1.1.26.1  nathanw 	jsr	%a0@			| execute NetBSD kernel
    126       1.1    itohy 	| NOTREACHED
    127       1.1    itohy 
    128       1.1    itohy 	| ??? returned from kernel -- issue software reset
    129  1.1.26.1  nathanw 	subal	%a1,%a1
    130  1.1.26.1  nathanw 	moveml	0x00ff0000,#0x0101	| get RESET vectors (%d0: ssp, %a0: pc)
    131  1.1.26.1  nathanw 	moveml	#0x0101,%a1@		| put them at 0x00000000 (for Xellent)
    132  1.1.26.1  nathanw 	.long	0x4E7B9801		| movec	%a1,%vbr
    133  1.1.26.1  nathanw 	jmp	%a0@			| go to reset address
    134       1.1    itohy 
    135       1.1    itohy 
    136       1.1    itohy |
    137       1.1    itohy | utility routines
    138       1.1    itohy |
    139       1.1    itohy 
    140  1.1.26.1  nathanw | copy %d0 bytes from higher (%a0) to lower (%a1) address
    141  1.1.26.1  nathanw 1:	moveb	%a0@+,%a1@+
    142  1.1.26.1  nathanw copy:	subql	#1,%d0
    143       1.1    itohy 	bpls	1b
    144       1.1    itohy 	rts
    145       1.1    itohy 
    146  1.1.26.1  nathanw | clear %d0 bytes at %a1
    147  1.1.26.1  nathanw | do nothing if %d0 is zero
    148  1.1.26.1  nathanw 1:	clrb	%a1@+
    149  1.1.26.1  nathanw clear:	subql	#1,%d0
    150       1.1    itohy 	bpls	1b
    151       1.1    itohy 	rts
    152