Projet

Général

Profil

1 jalaffon
; ****************************************************************
;
; MR308 start up program for C language
; COPYRIGHT(C) 2003 RENESAS TECHNOLOGY CORPORATION
; AND RENESAS SOLUTIONS CORPORATION ALL RIGHTS RESERVED
; MR308 V.1.10 Release 1
;
; ****************************************************************
; "$Id: crt0mr.a30 318 2006-07-26 07:54:55Z inui $"
;*A1* 2005-02-28 for ES
;
.LIST OFF
.INCLUDE c_sec.inc
.INCLUDE mr308.inc
.INCLUDE sys_rom.inc
.INCLUDE sys_ram.inc
.LIST ON

.GLB __SYS_INITIAL
.GLB __END_INIT
.GLB __init_sys,__init_tsk

.IF M16C70!=0
regoffset .EQU -0220H
.ELSE
regoffset .EQU 0
.ENDIF

;-----------------------------------------------------------------
; SBDATA area definition
;-----------------------------------------------------------------
.GLB __SB__
.SB __SB__

;=================================================================
; Initialize Macro declaration
;-----------------------------------------------------------------
N_BZERO .MACRO TOP_,SECT_
MOV.B #00H, R0L
MOV.L #TOP_, A1
MOV.W #sizeof SECT_, R3
SSTR.B
.ENDM

N_BCOPY .MACRO FROM_,TO_,SECT_
MOV.L #FROM_,A0
MOV.L #TO_,A1
MOV.W #sizeof SECT_, R3
SMOVF.B
.ENDM

BZERO .MACRO TOP_,SECT_
.local _end, _loop

MOV.L #TOP_, A1
MOV.B #00H, R0L
MOV.L #(sizeof SECT_ & 0FFFFFFH), R3R1
XCHG.W R1,R3
_loop:
SSTR.B
CMP.W #0,R1
JEQ _end
MOV.B R0L,[A1]
ADD.L #1,A1
MOV.W #0FFFFH,R3
SUB.W #1,R1
JMP _loop
_end:
.ENDM

BCOPY .MACRO FROM_,TO_,SECT_
.local _end, _loop

MOV.L #FROM_,A0
MOV.L #TO_,A1
MOV.L #(sizeof SECT_ & 0FFFFFFH), R3R1
XCHG.W R1,R3
_loop:
SMOVF.B
CMP.W #0,R1
JEQ _end
MOV.B [A0],[A1]
ADD.L #1,A1
ADD.L #1,A0
MOV.W #0FFFFH,R3
SUB.W #1,R1
JMP _loop
_end:
.ENDM

;=================================================================
; Interrupt section start
;-----------------------------------------------------------------
.SECTION MR_KERNEL,CODE,ALIGN

;-----------------------------------------------------------------
; after reset,this program will start
;-----------------------------------------------------------------
__SYS_INITIAL:
326 rococcallo
LDC #__Sys_Sp,ISP ; set initial ISP
1 jalaffon
MOV.B #2,0AH
MOV.B #00,PMOD ; Set Processor Mode Register
MOV.B #0,0AH
LDC #0010H,FLG
LDC #__SB__,SB
LDC #0000H,FLG
LDC #__Sys_Sp,FB
LDC #__SB__,SB

; +-----------------------------------------------------+
; | ISSUE SYSTEM CALL DATA INITIALIZE |
; +-----------------------------------------------------+
; For PD308
__INIT_ISSUE_SYSCALL

;=================================================================
; MR_RAM zero clear
;--------------------------------------------------------
N_BZERO MR_RAM_NE_top,MR_RAM_NE
N_BZERO MR_RAM_NO_top,MR_RAM_NO
BZERO MR_RAM_top,MR_RAM

;=================================================================
; NEAR area initialize.
;--------------------------------------------------------
; bss zero clear
;--------------------------------------------------------
N_BZERO bss_SE_top,bss_SE
N_BZERO bss_SO_top,bss_SO

N_BZERO bss_NE_top,bss_NE
N_BZERO bss_NO_top,bss_NO

;--------------------------------------------------------
; initialize data section
;--------------------------------------------------------
N_BCOPY data_SEI_top,data_SE_top,data_SE
N_BCOPY data_SOI_top,data_SO_top,data_SO
N_BCOPY data_NEI_top,data_NE_top,data_NE
N_BCOPY data_NOI_top,data_NO_top,data_NO

;=================================================================
; FAR area initialize.
;--------------------------------------------------------
; bss zero clear
;--------------------------------------------------------
BZERO bss_FE_top,bss_FE
BZERO bss_FO_top,bss_FO

;--------------------------------------------------------
; Copy edata_E(O) section from edata_EI(OI) section
;--------------------------------------------------------
BCOPY data_FEI_top,data_FE_top,data_FE
BCOPY data_FOI_top,data_FO_top,data_FO

LDC #__Sys_Sp,SP
LDC #__Sys_Sp,FB


;-----------------------------------------------------------------
; Set System IPL and Set Interrupt Vector
;-----------------------------------------------------------------
MOV.B #0,R0L
MOV.B #__SYS_IPL,R0H
LDC R0,FLG
LDC #__INT_VECTOR,INTB

; +-----------------------------------------------------+
; | System timer interrupt setting |
; +-----------------------------------------------------+
.IF USE_TIMER
MOV.B #stmr_mod_val,stmr_mod_reg+regoffset ; set timer mode
MOV.W #stmr_cnt,stmr_ctr_reg+regoffset ; set interval count
MOV.B #stmr_int_IPL,stmr_int_reg ; set timer IPL
OR.B #stmr_bit+1,stmr_start+regoffset ; system timer start
.ENDIF

; +-----------------------------------------------------+
; | System timer initialize |
; +-----------------------------------------------------+
.IF USE_SYSTEM_TIME
MOV.W #__D_Sys_TIME_L,__Sys_time+4
MOV.W #__D_Sys_TIME_M,__Sys_time+2
MOV.W #__D_Sys_TIME_H,__Sys_time
.ENDIF

; +-----------------------------------------------------+
; | User Initial Routine ( if there are ) |
; +-----------------------------------------------------+
; Initialize standard I/O
.GLB __init
; JSR.A __init

; +-----------------------------------------------------+
; | Initalization of System Data Area |
; +-----------------------------------------------------+
JSR.W __init_sys
JSR.W __init_tsk

.IF __MR_TIMEOUT
.GLB __init_tout
JSR.W __init_tout
.ENDIF

.IF __NUM_FLG
.GLB __init_flg
JSR.W __init_flg
.ENDIF

.IF __NUM_SEM
.GLB __init_sem
JSR.W __init_sem
.ENDIF

.IF __NUM_DTQ
.GLB __init_dtq
JSR.W __init_dtq
.ENDIF

.IF __NUM_VDTQ ;*A1*
.GLB __init_vdtq
JSR.W __init_vdtq
.ENDIF

.IF __NUM_MBX
.GLB __init_mbx
JSR.W __init_mbx
.ENDIF

.IF ALARM_HANDLER
.GLB __init_alh
JSR.W __init_alh
.ENDIF

.IF CYCLIC_HANDLER
.GLB __init_cyh
JSR.W __init_cyh
.ENDIF

.IF __NUM_MPF ;*A1*
; Fixed Memory Pool
.GLB __init_mpf
JSR.W __init_mpf
.ENDIF

.IF __NUM_MPL ;*A1*
; Variable Memory Pool
.GLB __init_mpl
JSR.W __init_mpl
.ENDIF


; For PD308
__LAST_INITIAL

__END_INIT:

; +-----------------------------------------------------+
; | Start initial active task |
; +-----------------------------------------------------+
__START_TASK

.GLB __rdyq_search
JMP.W __rdyq_search

; +---------------------------------------------+
; | Define Dummy |
; +---------------------------------------------+
.GLB __SYS_DMY_INH
__SYS_DMY_INH:
REIT

.IF CUSTOM_SYS_END
; +---------------------------------------------+
; | Syscall exit rouitne to customize
; +---------------------------------------------+
.GLB __sys_end
__sys_end:
; Customize here.
REIT
.ENDIF

; +---------------------------------------------+
; | exit() function |
; +---------------------------------------------+
.GLB _exit,$exit
_exit:
$exit:
JMP _exit

.IF USE_TIMER
; +---------------------------------------------+
; | System clock interrupt handler |
; +---------------------------------------------+
.GLB __SYS_STMR_INH
.ALIGN
__SYS_STMR_INH:
; process issue system call
; For PD308
__ISSUE_SYSCALL

; System timer interrupt handler
_STMR_hdr

ret_int
.ENDIF

.END

; ****************************************************************
; COPYRIGHT(C) 2003 RENESAS TECHNOLOGY CORPORATION
; AND RENESAS SOLUTIONS CORPORATION ALL RIGHTS RESERVED
; ****************************************************************