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

📄 programmer_crt0.s

📁 一个非常有用的nand_flash的boot程序代码
💻 S
字号:
#
# Low-level startup code for C programs.
# Also provides alot of common low-level utilities
# to facilitate C code.
#

#define zero	$0
#define v0		$2
#define v1		$3
#define a0		$4
#define a1		$5
#define a2		$6
#define a3		$7
#define t0		$8
#define t1		$9
#define t2		$10
#define t3		$11
#define t4		$12
#define t5		$13
#define t6		$14
#define t7		$15
#define s0		$16
#define s1		$17
#define s2		$18
#define s3		$19
#define s4		$20
#define s5		$21
#define s6		$22
#define s7		$23
#define t8		$24
#define t9		$25
#define k0		$26
#define k1		$27
#define gp		$28
#define sp		$29
#define fp		$30
#define s8		$30
#define ra		$31

#define CP0_Index		$0
#define CP0_Random		$1
#define CP0_EntryLo0	$2
#define CP0_EntryLo1	$3
#define CP0_Context		$4
#define CP0_PageMask	$5
#define CP0_Wired		$6
#define CP0_BadVAddr	$8
#define CP0_Count		$9
#define CP0_EntryHi		$10
#define CP0_Compare		$11
#define CP0_Status		$12
#define CP0_Cause		$13
#define CP0_EPC			$14
#define CP0_PRId		$15
#define CP0_Config		$16
#define CP0_Config0		$16
#define CP0_Config1		$16,1
#define CP0_LLAddr		$17
#define CP0_WatchLo		$18
#define CP0_IWatchLo	$18,1
#define CP0_WatchHi		$19
#define CP0_IWatchHi	$19,1
#define CP0_Scratch		$22
#define CP0_Debug		$23
#define CP0_DEPC		$24
#define CP0_PerfCnt		$25
#define CP0_PerfCtrl	$25,1
#define CP0_DTag		$28
#define CP0_DData		$28,1
#define CP0_ITag		$29
#define CP0_IData		$29,1
#define CP0_ErrorEPC	$30
#define CP0_DESave		$31

		.section ".programmer"
		.extern	program_booter
		.extern commonInit
		.extern platformInit
		.extern startupStackFrame
		.extern exitToYamon


		.global	programmer
programmer:		
		#
		# Save SP for exitToYamon()
		#
		la		t0,startupStackFrame
		sw		sp,0(t0)

		#
		# Initialize Stack Pointer
		#
		la		sp,__stacktop

		addiu		sp,sp,-24

		# Preserve a0,a1,a2,a3 from YAMON (argc, argv, envp)
		sw		a0,0(sp)
		sw		a1,4(sp)
		sw		a2,8(sp)
		sw		a3,12(sp)
		# Preserve return address into YAMON
		sw		ra,16(sp)

		#
		# Initialize GP (needed by prebuilt libs)
		#
		la		gp,_gp


		/* turn off mem_stcfg0[PM], it interferes */

		li		t2,0xB4001000
		lw		t0,0(t2)
		li		t1,~0x00000010
		and		t0,t0,t1
		sw		t0,0(t2)
		sync

		/* Execute From Cachable Space */
		la		t0, executeCache
		jr		t0
		nop
	executeCache:

		#
		# zero out bss
		#
		jal		initialize_bss
		nop

		#
		# Copy data segment if it needs to be relocated
		#
		jal		copy_data_segment
		nop

		#
		# Initialize infrastructure
		#
		jal		commonInit
		nop
		jal		platformInit
		nop

		# Restore a0,a1,a2,a3 from YAMON for args to main()
		lw		a0,0(sp)
		lw		a1,4(sp)
		lw		a2,8(sp)
		lw		a3,12(sp)

		# Call booter()
		jal		program_booter
		nop

		# Call booter()
		jal		exitToYamon
		nop

########################################################################

⌨️ 快捷键说明

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