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

📄 cstartup_s3cc410.s

📁 samsung 9908DVD源代码,
💻 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 + -