|
; ****************************************************************
|
|
;
|
|
; 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:
|
|
t LDC #__Sys_Sp,ISP ; set initial ISP
|
|
|
|
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
|
|
; ****************************************************************
|