|
;*******************************************************************************
|
|
;
|
|
; C COMPILER for M16C/80
|
|
; Copyright (C) 1999 (2000 - 2010) Renesas Electronics Corporation.
|
|
; and Renesas Solutions Corporation. All rights reserved.
|
|
;
|
|
;
|
|
; ncrt0.a30 : NC308 startup program
|
|
;
|
|
; This program is applicable when using the basic I/O library
|
|
;
|
|
; $Date: 2005/10/12 11:03:05 $
|
|
; $Revision: 1.30 $
|
|
;
|
|
;*******************************************************************************
|
|
|
|
;---------------------------------------------------------------------
|
|
; HEEP SIZE definition
|
|
;---------------------------------------------------------------------
|
|
.if __HEAP__ == 1 ; for HEW
|
|
|
|
HEAPSIZE .equ 0h
|
|
|
|
.else
|
|
.if __HEAPSIZE__ == 0
|
|
|
|
HEAPSIZE .equ 300h
|
|
|
|
.else ; for HEW
|
|
|
|
HEAPSIZE .equ __HEAPSIZE__
|
|
|
|
.endif
|
|
.endif
|
|
|
|
;---------------------------------------------------------------------
|
|
; STACK SIZE definition
|
|
;---------------------------------------------------------------------
|
|
.if __USTACKSIZE__ == 0
|
|
|
|
STACKSIZE .equ 300h
|
|
|
|
.else ; for HEW
|
|
|
|
STACKSIZE .equ __USTACKSIZE__
|
|
|
|
.endif
|
|
|
|
;---------------------------------------------------------------------
|
|
; INTERRUPT STACK SIZE definition
|
|
;---------------------------------------------------------------------
|
|
.if __ISTACKSIZE__ == 0
|
|
|
|
ISTACKSIZE .equ 300h
|
|
|
|
.else ; for HEW
|
|
|
|
ISTACKSIZE .equ __ISTACKSIZE__
|
|
|
|
.endif
|
|
|
|
;---------------------------------------------------------------------
|
|
; INTERRUPT VECTOR ADDRESS definition
|
|
;---------------------------------------------------------------------
|
|
VECTOR_ADR .equ 0fffd00h
|
|
SVECTOR_ADR .equ 0fffe00h
|
|
|
|
;---------------------------------------------------------------
|
|
; special page definition
|
|
;---------------------------------------------------------------
|
|
; macro define for special page
|
|
;
|
|
;Format:
|
|
; SPECIAL number
|
|
;
|
|
|
|
SPECIAL .macro NUM
|
|
.org 0FFFFFEH-(NUM*2)
|
|
.glb __SPECIAL_@NUM
|
|
.word __SPECIAL_@NUM & 0FFFFH
|
|
.endm
|
|
;---------------------------------------------------------------------
|
|
; Section allocation
|
|
;---------------------------------------------------------------------
|
|
.list OFF
|
|
.include sect308.inc
|
|
.list ON
|
|
|
|
;---------------------------------------------------------------------
|
|
; SBDATA area definition
|
|
;---------------------------------------------------------------------
|
|
.glb __SB__
|
|
__SB__ .equ data_SE_top
|
|
|
|
;====================================================================
|
|
; Initialize Macro declaration
|
|
;---------------------------------------------------------------------
|
|
;
|
|
; when copy less 64K byte
|
|
BZERO .macro TOP_ ,SECT_
|
|
mov.b #00H, R0L
|
|
mov.l #TOP_, A1
|
|
mov.w #sizeof SECT_ , R3
|
|
sstr.b
|
|
.endm
|
|
|
|
BCOPY .macro FROM_,TO_,SECT_
|
|
mov.l #FROM_ ,A0
|
|
mov.l #TO_ ,A1
|
|
mov.w #sizeof SECT_ , R3
|
|
smovf.b
|
|
.endm
|
|
|
|
; when copy over 64K byte
|
|
;BZEROL .macro TOP_,SECT_
|
|
; push.w #sizeof SECT_ >> 16
|
|
; push.w #sizeof SECT_ & 0ffffh
|
|
; pusha TOP_
|
|
; .stk 8
|
|
;
|
|
; .glb _bzero
|
|
; .call _bzero,G
|
|
; jsr.a _bzero
|
|
; .endm
|
|
;
|
|
;
|
|
;BCOPYL .macro FROM_ ,TO_ ,SECT_
|
|
; push.w #sizeof SECT_ >> 16
|
|
; push.w #sizeof SECT_ & 0ffffh
|
|
; pusha TO_
|
|
; pusha FROM_
|
|
; .stk 12
|
|
;
|
|
; .glb _bcopy
|
|
; .call _bcopy,G
|
|
; jsr.a _bcopy
|
|
; .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
|
|
|
|
fset b ;switch to bank 1
|
|
ldc #data_SE_top, sb ;set sb register
|
|
fclr b ;switch to bank 0
|
|
|
|
ldc #VECTOR_ADR,intb
|
|
|
|
;====================================================================
|
|
; NEAR area initialize.
|
|
;--------------------------------------------------------------------
|
|
; bss zero clear
|
|
;--------------------------------------------------------------------
|
|
BZERO bss_SE_top,bss_SE
|
|
BZERO bss_SO_top,bss_SO
|
|
BZERO bss_NE_top,bss_NE
|
|
BZERO bss_NO_top,bss_NO
|
|
|
|
; for NSD
|
|
BZERO bss_MON1_SE_top,bss_MON1_SE
|
|
BZERO bss_MON2_SE_top,bss_MON2_SE
|
|
BZERO bss_MON3_SE_top,bss_MON3_SE
|
|
BZERO bss_MON4_SE_top,bss_MON4_SE
|
|
|
|
BZERO bss_MON1_SO_top,bss_MON1_SO
|
|
BZERO bss_MON2_SO_top,bss_MON2_SO
|
|
BZERO bss_MON3_SO_top,bss_MON3_SO
|
|
BZERO bss_MON4_SO_top,bss_MON4_SO
|
|
|
|
BZERO bss_MON1_E_top,bss_MON1_E
|
|
BZERO bss_MON2_E_top,bss_MON2_E
|
|
BZERO bss_MON3_E_top,bss_MON3_E
|
|
BZERO bss_MON4_E_top,bss_MON4_E
|
|
|
|
BZERO bss_MON1_O_top,bss_MON1_O
|
|
BZERO bss_MON2_O_top,bss_MON2_O
|
|
BZERO bss_MON3_O_top,bss_MON3_O
|
|
BZERO bss_MON4_O_top,bss_MON4_O
|
|
|
|
|
|
|
|
;---------------------------------------------------------------------
|
|
; initialize data section
|
|
;---------------------------------------------------------------------
|
|
BCOPY data_SEI_top,data_SE_top,data_SE
|
|
BCOPY data_SOI_top,data_SO_top,data_SO
|
|
BCOPY data_NEI_top,data_NE_top,data_NE
|
|
BCOPY data_NOI_top,data_NO_top,data_NO
|
|
|
|
; for NSD
|
|
BCOPY data_MON1_SEI_top,data_MON1_SE_top,data_MON1_SE
|
|
BCOPY data_MON2_SEI_top,data_MON2_SE_top,data_MON2_SE
|
|
BCOPY data_MON3_SEI_top,data_MON3_SE_top,data_MON3_SE
|
|
BCOPY data_MON4_SEI_top,data_MON4_SE_top,data_MON4_SE
|
|
|
|
BCOPY data_MON1_SOI_top,data_MON1_SO_top,data_MON1_SO
|
|
BCOPY data_MON2_SOI_top,data_MON2_SO_top,data_MON2_SO
|
|
BCOPY data_MON3_SOI_top,data_MON3_SO_top,data_MON3_SO
|
|
BCOPY data_MON4_SOI_top,data_MON4_SO_top,data_MON4_SO
|
|
|
|
BCOPY data_MON1_EI_top,data_MON1_E_top,data_MON1_E
|
|
BCOPY data_MON2_EI_top,data_MON2_E_top,data_MON2_E
|
|
BCOPY data_MON3_EI_top,data_MON3_E_top,data_MON3_E
|
|
BCOPY data_MON4_EI_top,data_MON4_E_top,data_MON4_E
|
|
|
|
BCOPY data_MON1_OI_top,data_MON1_O_top,data_MON1_O
|
|
BCOPY data_MON2_OI_top,data_MON2_O_top,data_MON2_O
|
|
BCOPY data_MON3_OI_top,data_MON3_O_top,data_MON3_O
|
|
BCOPY data_MON4_OI_top,data_MON4_O_top,data_MON4_O
|
|
|
|
|
|
;====================================================================
|
|
; FAR area initialize.
|
|
;---------------------------------------------------------------------
|
|
; bss zero clear
|
|
;---------------------------------------------------------------------
|
|
; BZERO bss_SE_top,bss_SE
|
|
; BZERO bss_SO_top,bss_SO
|
|
; BZERO bss_6E_top,bss_6E
|
|
; BZERO bss_6O_top,bss_6O
|
|
BZERO bss_FE_top,bss_FE
|
|
BZERO bss_FO_top,bss_FO
|
|
|
|
; for NSD
|
|
; BZERO bss_MON1_SE_top,bss_MON1_SE
|
|
; BZERO bss_MON2_SE_top,bss_MON2_SE
|
|
; BZERO bss_MON3_SE_top,bss_MON3_SE
|
|
; BZERO bss_MON4_SE_top,bss_MON4_SE
|
|
;
|
|
; BZERO bss_MON1_SO_top,bss_MON1_SO
|
|
; BZERO bss_MON2_SO_top,bss_MON2_SO
|
|
; BZERO bss_MON3_SO_top,bss_MON3_SO
|
|
; BZERO bss_MON4_SO_top,bss_MON4_SO
|
|
;
|
|
; BZERO bss_MON1_6E_top,bss_MON1_6E
|
|
; BZERO bss_MON2_6E_top,bss_MON2_6E
|
|
; BZERO bss_MON3_6E_top,bss_MON3_6E
|
|
; BZERO bss_MON4_6E_top,bss_MON4_6E
|
|
;
|
|
; BZERO bss_MON1_6O_top,bss_MON1_6O
|
|
; BZERO bss_MON2_6O_top,bss_MON2_6O
|
|
; BZERO bss_MON3_6O_top,bss_MON3_6O
|
|
; BZERO bss_MON4_6O_top,bss_MON4_6O
|
|
;
|
|
; BZERO bss_MON1_E_top,bss_MON1_E
|
|
; BZERO bss_MON2_E_top,bss_MON2_E
|
|
; BZERO bss_MON3_E_top,bss_MON3_E
|
|
; BZERO bss_MON4_E_top,bss_MON4_E
|
|
;
|
|
; BZERO bss_MON1_O_top,bss_MON1_O
|
|
; BZERO bss_MON2_O_top,bss_MON2_O
|
|
; BZERO bss_MON3_O_top,bss_MON3_O
|
|
; BZERO bss_MON4_O_top,bss_MON4_O
|
|
|
|
|
|
;---------------------------------------------------------------------
|
|
; Copy edata_E(O) section from edata_EI(OI) section
|
|
;---------------------------------------------------------------------
|
|
; BCOPY data_SEI_top,data_SE_top,data_SE
|
|
; BCOPY data_SOI_top,data_SO_top,data_SO
|
|
; BCOPY data_6EI_top,data_6E_top,data_6E
|
|
; BCOPY data_6OI_top,data_6O_top,data_6O
|
|
BCOPY data_FEI_top,data_FE_top,data_FE
|
|
BCOPY data_FOI_top,data_FO_top,data_FO
|
|
|
|
; for NSD
|
|
; BCOPY data_MON1_SEI_top,data_MON1_SE_top,data_MON1_SE
|
|
; BCOPY data_MON2_SEI_top,data_MON2_SE_top,data_MON2_SE
|
|
; BCOPY data_MON3_SEI_top,data_MON3_SE_top,data_MON3_SE
|
|
; BCOPY data_MON4_SEI_top,data_MON4_SE_top,data_MON4_SE
|
|
;
|
|
; BCOPY data_MON1_SOI_top,data_MON1_SO_top,data_MON1_SO
|
|
; BCOPY data_MON2_SOI_top,data_MON2_SO_top,data_MON2_SO
|
|
; BCOPY data_MON3_SOI_top,data_MON3_SO_top,data_MON3_SO
|
|
; BCOPY data_MON4_SOI_top,data_MON4_SO_top,data_MON4_SO
|
|
;
|
|
; BCOPY data_MON1_6EI_top,data_MON1_6E_top,data_MON1_6E
|
|
; BCOPY data_MON2_6EI_top,data_MON2_6E_top,data_MON2_6E
|
|
; BCOPY data_MON3_6EI_top,data_MON3_6E_top,data_MON3_6E
|
|
; BCOPY data_MON4_6EI_top,data_MON4_6E_top,data_MON4_6E
|
|
;
|
|
; BCOPY data_MON1_6OI_top,data_MON1_6O_top,data_MON1_6O
|
|
; BCOPY data_MON2_6OI_top,data_MON2_6O_top,data_MON2_6O
|
|
; BCOPY data_MON3_6OI_top,data_MON3_6O_top,data_MON3_6O
|
|
; BCOPY data_MON4_6OI_top,data_MON4_6O_top,data_MON4_6O
|
|
;
|
|
; BCOPY data_MON1_EI_top,data_MON1_E_top,data_MON1_E
|
|
; BCOPY data_MON2_EI_top,data_MON2_E_top,data_MON2_E
|
|
; BCOPY data_MON3_EI_top,data_MON3_E_top,data_MON3_E
|
|
; BCOPY data_MON4_EI_top,data_MON4_E_top,data_MON4_E
|
|
;
|
|
; BCOPY data_MON1_OI_top,data_MON1_O_top,data_MON1_O
|
|
; BCOPY data_MON2_OI_top,data_MON2_O_top,data_MON2_O
|
|
; BCOPY data_MON3_OI_top,data_MON3_O_top,data_MON3_O
|
|
; BCOPY data_MON4_OI_top,data_MON4_O_top,data_MON4_O
|
|
|
|
|
|
ldc #stack_top,sp
|
|
|
|
; .stk -?? ; Validate this when use BZEROL,BCOPYL
|
|
|
|
;====================================================================
|
|
; heap area initialize
|
|
;---------------------------------------------------------------------
|
|
.if __HEAP__ != 1
|
|
.glb __mnext
|
|
.glb __msize
|
|
mov.l #(heap_top&0FFFFFFH), __mnext
|
|
mov.l #(HEAPSIZE&0FFFFFFH), __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
|
|
|
|
;====================================================================
|
|
; 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 M16C/80
|
|
; Copyright (C) 1999 (2000 - 2010) Renesas Electronics Corporation.
|
|
; and Renesas Solutions Corporation. All rights reserved.
|
|
;
|
|
;
|
|
;*******************************************************************************
|