?? cstartup_s3cc410.s
字號:
;--------------------------------------------------------
; Description : This is startup file for calmRISC16
; History :
; 2001.3.29 change sp initialization
; 2000.11.24 ld ...$$SIZE at A-register
; 2000.3.7 change interrupt number => 1fh
; 1999.11.8 init SP = FFF0h , Call stack
; 1999.10.08 first edited
; BY : Han Sung Hui
;--------------------------------------------------------
;-------------------------------------------------------
; Vector and Option area (0x0 ~ 0xFE)
; - This area might be modified by user
;-------------------------------------------------------
vector 0,Reset_handler ;Reset vector address
vector 2,FIQ_handler
vector 4,IRQ_handler
ResetSec SECTION CODE
ResetSec
EXTERN _main
EXTERN _MK_IRQHandler
EXTERN _MK_FIQHandler
EXTERN |IMAGE$$IDATALOAD$$BASE|
EXTERN |IMAGE$$IDATA$$BASE|
EXTERN |IMAGE$$IDATA$$SIZE|
EXTERN |IMAGE$$ZDATA$$BASE|
EXTERN |IMAGE$$ZDATA$$SIZE|
EXTERN |IMAGE$$UDATA$$BASE|
EXTERN |IMAGE$$STACK$$LIMIT|
;JSY added 00-11-03
EXTERN |IMAGE$$DM$$BASE|
Reset_handler
;Disable all interrupt
CLRSR FE ;FRQ disalble
CLRSR IE ;IRQ disalble
CLRSR TE ;TRQ disalble
;--------------------------------------------------------
; Initialize memory required by C code
;--------------------------------------------------------
; 1. Copy ROM's IDATA block to RAM(Data Memory)'s IDATA block
; Get IDATA size
LD A9, #|IMAGE$$IDATA$$SIZE|
; Check that they are different
CMP EQ, A9,#0
BRT _a
_CopyIDATA
LD R6,E9 ;high byte of |IMAGE$$IDATA$$SIZE|
; Get from_startaddress to from_pointer
LD A11, #|IMAGE$$IDATALOAD$$BASE|
; Get to_startaddress to to_pointer
LD A8,#|IMAGE$$IDATA$$BASE|
; index for data memory A8
_b
; LDC(Load @[IL] in PM(Program Memory) to [0..1] addr in DM(Data Memory) )
LDC R2,@A11
LDW @[A8],R2
ADD A11,#2 ;byte code memory
ADD A8,#2
;-------------------------------------------------------------------------
; => Notice : following block can be modified as compiler data alignment.
;-------------------------------------------------------------------------
SUB R9,#2
SBC R6,#0
CMPU GT,R6,#0
BRT _b
CMPU GT,R9,#0
BRT _b
; 2. Initialize RAM's ZDATA block with zero
_a
; Get ZDATA size
LD A9, #|IMAGE$$ZDATA$$SIZE|
; Check that they are different
CMP EQ,A9,#0
BRT _e
_InitZDATA
LD R6,E9 ;high byte of |IMAGE$$ZDATA$$SIZE|
LD R4,#0 ;Zero data
LD A8,#|IMAGE$$ZDATA$$BASE|
_d
LDW @[A8],R4 ; Zero init
ADD A8,#2
SUB R9,#2
SBC R6,#0
CMPU GT,R6,#0
BRT _d
CMPU GT,R9,#0
BRT _d
;--------------------------------------------------------
; Initialize special register
;--------------------------------------------------------
_e
; stack sp initialization
.ifdef ___CALLSTACKSIZE
LD SP, #|IMAGE$$STACK$$LIMIT|-4*32 ;
; Callstack sp initialization
LD A8,#|IMAGE$$STACK$$LIMIT|-8
LD R0,E8
LDW @[A8+4],R0 ;high
LDW @[A8+6],R8 ;low
.else
LD SP, #|IMAGE$$STACK$$LIMIT|;
.endif
; Initialize global data head pointer
LD A9,#0
LD A8,#0x3F0000
;--------------------------------------------------------
; call the main() function
;--------------------------------------------------------
;JSY added 00-11-03
LD R1,#<|IMAGE$$IDATA$$BASE|
LD E9,R1
;end
JSR _main
;--------------------------------------------------------
; termination
;--------------------------------------------------------
; BREAK + SYS #SWI_num
LD R10,#3
DL #0x9E999E3F ;SWI_num: 0x1F, Halt interrupt
SWISEC2 SECTION CODE,abs 0x8
SWISEC2
jmp $__pushregs_swi
SWISEC3 SECTION CODE,abs 0xc
SWISEC3
jmp $__popregs_swi
FIQ_handler
JMP _MK_FIQHandler
IRQ_handler
JMP _MK_IRQHandler
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -