Practice more and More

Start up code

유용한정보2011. 1. 7. 15:36

GET 2440addr.inc ; 2410addr.inc 파일에는 S3C2410의 레지스터 주소가 정의되어있는데,

 ; GET 명령은 C에서 include처럼 작용하여 2410addr.inc 파일을 include 시킨다.


; PSR(Program Status Register)에 사용될 상수 값 정의

USERMODE    EQU  0x10       ; User 모드 값
FIQMODE     EQU  0x11         ; FIQ 모드 값
IRQMODE     EQU  0x12         ; IRQ 모드 값
SVCMODE     EQU  0x13        ; Supervisor 모드 값
ABORTMODE   EQU  0x17      ; Abort 모드 값
UNDEFMODE   EQU  0x1b      ; Undefined 모드 값
MODEMASK    EQU  0x1f       ; 모든 마스크 값
NOINT       EQU  0xc0           ; IRQ, FIQ disable


_STACK_BASEADDRESS EQU 0x33ff8000    ; Stack base address


; 모드별 Stack base address
; 모드별 스텍 베이스 주소를 Descendign Stack 방식으로 사용한다.
; 스택 주소의 증가 방향이 어드래스가 감소하는 방향으로 된다.

UserStack EQU (_STACK_BASEADDRESS-0x3800)   ;0x33ff4800 ~ 
SVCStack EQU (_STACK_BASEADDRESS-0x2800)   ;0x33ff5800 ~
UndefStack EQU (_STACK_BASEADDRESS-0x2400) ;0x33ff5c00 ~
AbortStack EQU (_STACK_BASEADDRESS-0x2000)  ;0x33ff6000 ~
IRQStack EQU (_STACK_BASEADDRESS-0x1000)   ;0x33ff7000 ~
FIQStack EQU (_STACK_BASEADDRESS-0x0)        ;0x33ff8000 ~


; IMPORT는 외부로 링크된 함수와 변수를 참조하기 위해 사용하는 명령어.
; RO(Read Only) =상수로 선언된 변수들의 영역, ROM에 존재
; RW(Read Write) = 초기값을 가지는 변수들의 영역, RAM에 존재
; ZI(Zero initialize) = 초기화 하지 않은 변수들의 영역

IMPORT |Image$$RO$$Base|
IMPORT |Image$$RO$$Limit|     ; End of ROM code
IMPORT |Image$$RW$$Base|    ; Base of RAM to initialize
IMPORT |Image$$RW$$Limit|    
IMPORT |Image$$ZI$$Base|     ; Base and limit of area
IMPORT |Image$$ZI$$Limit|      ; to zero initialize



; AREA = 새로운 데이터 영역이나 코드 영역을 어셈블하게 한다.
; AREA 이름 init, code 영역, 읽기 전용

AREA Init.CODE,READONLY



;ENTRY = 다음 줄에 첫 실행코드가 있음을 알려준다.
ENTRY


b ResetHandler
b.
b.
b.
b.
nop
b A_IRQHandler
b A_FIQHandler