📄 programmer_crt0.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 + -