📄 ncrt0.a30
字号:
;*************************************************************************** ;
; C COMPILER for R8C/Tiny, M16C/60,30,20,10
; Copyright(C) 1999(2000-2004). Renesas Technology Corp.
; and Renesas Solutions Corp., All rights reserved.
;
;
; ncrt0.a30 : NC30 startup program
;
; This program is applicable when using the basic I/O library
;
; $Date: 2005/11/08 11:25:56 $
; $Revision: 1.35 $
;***************************************************************************
;--------------------------------------------------------------------
; set size of monitor area for FoUSB
;--------------------------------------------------------------------
.if _KD_
.if _Firmware_space == 0
FoUSB_MON .equ 600H ; for default
.else
FoUSB_MON .equ _Firmware_space
.endif
.endif
;---------------------------------------------------------------------
; HEEP SIZE definition
;---------------------------------------------------------------------
.if __HEAP__ == 1
HEAPSIZE .equ 0H
.else
.if __HEAPSIZE__ == 0
HEAPSIZE .equ 300H
.else
HEAPSIZE .equ __HEAPSIZE__
.endif
.endif
;---------------------------------------------------------------------
; STACK SIZE definition
;---------------------------------------------------------------------
.if __USTACKSIZE__ == 0
.if __R8C__ != 1
STACKSIZE .equ 300h
.else
STACKSIZE .equ 80h
.endif
.else
STACKSIZE .equ __USTACKSIZE__
.endif
;---------------------------------------------------------------------
; INTERRUPT STACK SIZE definition
;---------------------------------------------------------------------
.if __ISTACKSIZE__ == 0
.if __R8C__ != 1
ISTACKSIZE .equ 300h
.else
ISTACKSIZE .equ 80h
.endif
.else
ISTACKSIZE .equ __ISTACKSIZE__
.endif
;---------------------------------------------------------------------
; INTERRUPT VECTOR ADDRESS definition
;---------------------------------------------------------------------
.if __R8C__ != 1
.if _KD_ == 1
; for FoUSB's monitor area
; 64 is variable vector's number
; 4 is each vector's size
VECTOR_ADR .equ 0ff900h - (64*4)
SVECTOR_ADR .equ 0ffe00h
.else
VECTOR_ADR .equ 0ffd00h
SVECTOR_ADR .equ 0ffe00h
.endif // _KD_
.else
VECTOR_ADR .equ 0fedch
.endif
;---------------------------------------------------------------------
; Section allocation
;---------------------------------------------------------------------
.list OFF
.include sect30.inc
.list ON
;---------------------------------------------------------------------
; SBDATA area definition
;---------------------------------------------------------------------
.glb __SB__
__SB__ .equ data_SE_top
;====================================================================
; Initialize Macro declaration
;---------------------------------------------------------------------
N_BZERO .macro TOP_ ,SECT_
mov.b #00H, R0L
mov.w #(TOP_ & 0FFFFH), A1
mov.w #sizeof SECT_ , R3
sstr.b
.endm
N_BCOPY .macro FROM_,TO_,SECT_
mov.w #(FROM_ & 0FFFFH),A0
mov.b #(FROM_ >>16),R1H
mov.w #TO_ ,A1
mov.w #sizeof SECT_ , R3
smovf.b
.endm
BZERO .macro TOP_,SECT_
push.w #sizeof SECT_ >> 16
push.w #sizeof SECT_ & 0ffffh
pusha TOP_ >>16
pusha TOP_ & 0ffffh
.stk 8
.glb _bzero
.call _bzero,G
jsr.a _bzero
.endm
BCOPY .macro FROM_ ,TO_ ,SECT_
push.w #sizeof SECT_ >> 16
push.w #sizeof SECT_ & 0ffffh
pusha TO_ >>16
pusha TO_ & 0ffffh
pusha FROM_ >>16
pusha FROM_ & 0ffffh
.stk 12
.glb _bcopy
.call _bcopy,G
jsr.a _bcopy
.endm
.if __R8C__ != 1
;
; for M16C/60,30,20,10 series
;
; .glb __BankSelect
;__BankSelect .equ 0BH
;---------------------------------------------------------------
; special page definition
;---------------------------------------------------------------
; macro define for special page
;
;Format:
; SPECIAL number
;
SPECIAL .macro NUM
.org 0FFFFEH-(NUM*2)
.glb __SPECIAL_@NUM
.word __SPECIAL_@NUM & 0FFFFH
.endm
;====================================================================
; Interrupt section start
;---------------------------------------------------------------------
.insf start,S,0
.glb start
.section interrupt
start:
;---------------------------------------------------------------------
; after reset,this program will start
;---------------------------------------------------------------------
ldc #istack_top, isp ;set istack pointer
mov.b #02h,0ah
mov.b #00h,04h ;set processer mode
mov.b #00h,0ah
ldc #0080h, flg
ldc #stack_top, sp ;set stack pointer
ldc #data_SE_top, sb ;set sb register
ldintb #VECTOR_ADR
;====================================================================
; 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 #stack_top,sp
.stk -40
;====================================================================
; heap area initialize
;---------------------------------------------------------------------
.if __HEAP__ != 1
.glb __mnext
.glb __msize
mov.w #(heap_top&0FFFFH), __mnext
mov.w #(heap_top>>16), __mnext+2
mov.w #(HEAPSIZE&0FFFFH), __msize
mov.w #(HEAPSIZE>>16), __msize+2
.endif
;====================================================================
; Initialize standard I/O
;---------------------------------------------------------------------
.if __STANDARD_IO__ == 1
.glb __init
.call __init,G
jsr.a __init
.endif
;====================================================================
; Call main() function
;---------------------------------------------------------------------
ldc #0h,fb ; for debuger
.glb _main
jsr.a _main
.else ; __R8C__
;---------------------------------------------------------------------
; for R8C/Tiny
;---------------------------------------------------------------------
;====================================================================
; Interrupt section start
;---------------------------------------------------------------------
.insf start,S,0
.glb start
.section interrupt
start:
;---------------------------------------------------------------------
; after reset,this program will start
;---------------------------------------------------------------------
ldc #istack_top, isp ;set istack pointer
mov.b #02h,0ah
mov.b #00h,04h ;set processer mode
mov.b #00h,0ah
ldc #0080h, flg
ldc #stack_top, sp ;set stack pointer
ldc #data_SE_top, sb ;set sb register
ldintb #VECTOR_ADR
;====================================================================
; 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 #stack_top,sp
; .stk -40
;====================================================================
; heap area initialize
;---------------------------------------------------------------------
.if __HEAP__ != 1
.glb __mnext
.glb __msize
mov.w #(heap_top&0FFFFH), __mnext
mov.w #(HEAPSIZE&0FFFFH), __msize
.endif
;====================================================================
; Initialize standard I/O
;---------------------------------------------------------------------
.if __STANDARD_IO__ == 1
.glb __init
.call __init,G
jsr.a __init
.endif
;====================================================================
; Call main() function
;---------------------------------------------------------------------
ldc #0h,fb ; for debuger
.glb _main
jsr.a _main
.endif ; __R8C__
;====================================================================
; exit() function
;---------------------------------------------------------------------
.glb _exit
.glb $exit
_exit: ; End program
$exit:
jmp _exit
.einsf
;====================================================================
; dummy interrupt function
;---------------------------------------------------------------------
.glb dummy_int
dummy_int:
reit
.end
;***************************************************************************
;
; C COMPILER for R8C/Tiny, M16C/60,30,20,10
; Copyright(C) 1999(2000-2004). Renesas Technology Corp.
; and Renesas Solutions Corp., All rights reserved.
;
;***************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -