⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 locore.s

📁 LEON3 SOC environment, PCI bridges.
💻 S
字号:
#define CONSOLE 0x80000100#define FREQ 80000000#define BAUD 38400/* locore.S for LEON3 */ /* Entry for traps which jump to a programmer-specified trap handler.  */#define TRAP(H)  mov %psr, %l0; sethi %hi(H), %l4; jmp %l4+%lo(H); nop;#define TRAPL(H) mov %g0,  %l0; sethi %hi(H), %l4; jmp %l4+%lo(H); nop;/* Unexcpected trap will halt the processor by forcing it to error state */#define BAD_TRAP ta 0; nop; nop; nop;/* Software trap. Treat as BAD_TRAP by default */#define SOFT_TRAP BAD_TRAP	.seg    "text"	.global _trap_table, start, _start, _sysinit  /* Hardware traps */start:_trap_table:  TRAPL(_hardreset);			! 00 reset trap   BAD_TRAP;			! 01 instruction_access_exception  BAD_TRAP;			! 02 illegal_instruction  BAD_TRAP;			! 03 priveleged_instruction  TRAP(_fpdis);			! 04 fp_disabled  TRAP(_window_overflow);	! 05 window_overflow  TRAP(_window_underflow);	! 06 window_underflow  BAD_TRAP;			! 07 memory_address_not_aligned  BAD_TRAP;			! 08 fp_exception  BAD_TRAP;			! 09 data_access_exception  BAD_TRAP;			! 0A tag_overflow  BAD_TRAP;			! 0B undefined  BAD_TRAP;			! 0C undefined  BAD_TRAP;			! 0D undefined  BAD_TRAP;			! 0E undefined  BAD_TRAP;			! 0F undefined  BAD_TRAP;			! 10 undefined  /* Interrupt entries */  TRAP(irqtrap);		! 11 interrupt level 1  TRAP(irqtrap);		! 12 interrupt level 2  TRAP(irqtrap);		! 13 interrupt level 3  TRAP(irqtrap);		! 14 interrupt level 4  TRAP(irqtrap);		! 15 interrupt level 5  TRAP(irqtrap);		! 16 interrupt level 6  TRAP(irqtrap);		! 17 interrupt level 7  TRAP(irqtrap);		! 18 interrupt level 8  TRAP(irqtrap);		! 19 interrupt level 9  TRAP(irqtrap);		! 1A interrupt level 1  TRAP(irqtrap);		! 1B interrupt level 11  TRAP(irqtrap);		! 1C interrupt level 12  TRAP(irqtrap);		! 1D interrupt level 13  TRAP(irqtrap);		! 1E interrupt level 14  TRAP(irqtrap);		! 1F interrupt level 15  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 20 - 23 undefined  BAD_TRAP;					! 24 cp_disabled	    BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 25 - 27 undefined  BAD_TRAP;					! 28 cp_exception	    BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 29 - 2B undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 2C - 2F undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 30 - 33 undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 34 - 37 undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 38 - 3B undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 3C - 3F undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 40 - 43 undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 44 - 47 undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 48 - 4B undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 4C - 4F undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 50 - 53 undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 54 - 57 undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 58 - 5B undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 5C - 5F undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 60 - 63 undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 64 - 67 undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 68 - 6B undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 6C - 6F undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 70 - 73 undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 74 - 77 undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 78 - 7B undefined  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;	! 7C - 7F undefined  /* Software traps */  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP	! 80 - 83  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! 84 - 87  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! 88 - 8B  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! 8C - 8F  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! 90 - 93  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! 94 - 97  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! 98 - 9B  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! 9C - 9F  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! A0 - A3  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! A4 - A7  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! A8 - AB  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! AC - AF  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! B0 - B3  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! B4 - B7  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! B8 - BB  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! BC - BF  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! C0 - C3  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! C4 - C7  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! C8 - CB  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! CC - CF  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! D0 - D3  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! D4 - D7  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! D8 - DB  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! DC - DF  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! E0 - E3  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! E4 - E7  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! E8 - EB  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! EC - EF  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! F0 - F3  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! F4 - F7  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! F8 - FB   SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;	! FC - FF!! Startup code for standalone system. Wash IU and FPU (if present) registers.! The registers have to be written to initiate the parity bits.!_hardreset:	set     _trap_table, %g1       	! Initialize TBR	mov     %g1, %tbr	ba	_sysinit	nop	call	_start        sub     %sp, 0x40, %sp  	! room for main to save args        nop	mov	1, %g1	ta 	0			! Halt if _main would return ...	nop/* Number of register windows */#define NWINDOWS 	8  	 		!Window overflow trap handler.  	.global _window_overflow_window_overflow:  	mov  %wim, %l3       		! Calculate next WIM  	mov  %g1, %l7             	srl  %l3, 1, %g1          	sll  %l3, NWINDOWS-1 , %l4  	or   %l4, %g1, %g1  	save                              ! Get into window to be saved.  	mov  %g1, %wim  	nop; nop; nop        std   %l0, [%sp + 0];        std   %l2, [%sp + 8];        std   %l4, [%sp + 16];         std   %l6, [%sp + 24];         std   %i0, [%sp + 32];         std   %i2, [%sp + 40];         std   %i4, [%sp + 48];         std   %i6, [%sp + 56];   	restore				! Go back to trap window.  	mov  %l7, %g1  	jmp  %l1			! Re-execute save.  	rett %l2  /* Window underflow trap handler.  */  	.global  _window_underflow_window_underflow:	mov  %wim, %l3			! Calculate next WIM	sll  %l3, 1, %l4  	srl  %l3, NWINDOWS-1, %l5  	or   %l5, %l4, %l5  	mov  %l5, %wim  	nop; nop; nop  	restore				! Two restores to get into the  	restore				! window to restore        ldd   [%sp + 0], %l0; 		! Restore window from the stack        ldd   [%sp + 8], %l2;         ldd   [%sp + 16], %l4;         ldd   [%sp + 24], %l6;         ldd   [%sp + 32], %i0;         ldd   [%sp + 40], %i2;         ldd   [%sp + 48], %i4;         ldd   [%sp + 56], %i6;   	save				! Get back to the trap window.  	save  	jmp  %l1			! Re-execute restore.  	rett  %l2	.global	_fpdis	_fpdis:	set	0x1000, %l4	andcc	%l0, %l4, %l3	bne,a	1f	andn	%l0, %l4, %l0	ta	01:	mov      %l0, %psr		! restore %psr	nop; nop; nop  	jmp  %l2			! Jump to nPC  	rett  %l2 + 4	.global _irqtblirqtrap:			mov	%l1, %l5	mov	%l2, %l6	restore				! enter previous frame (cannot trap)	mov	%psr, %g5	or	%g5, 0x0f00, %g5        wr      %g5, %psr		! disable interrupts        wr      %g5, 0x20, %psr		! enable traps, disable interrupts	mov	%tbr, %g6	nop; nop	save	%sp, -64, %sp		! save to flush window	mov	%psr, %g5		srl	%g6, 2, %g6	and	%g6, 0x3c, %l7	srl	%l7, 2, %o0	set	_irqtbl, %l4	ld	[%l4 + %l7], %l7	mov	%g1, %l1	mov	%g2, %l2	mov	%g3, %l3	mov	%g4, %l4	jmpl	%l7, %o7	mov	%y,  %g7	restore	save	mov	%l1, %g1	mov	%l2, %g2	mov	%l3, %g3	mov	%l4, %g4	mov	%g7, %y        wr      %g5, 0x20, %psr		! disable traps	andn	%g5, 0x0f00, %l4        wr      %l4, 0x20, %psr		! disable traps, enable interrupts	nop; nop; nop  	jmp  %l5			! Jump to PC  	rett  %l6

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -