229 lines
5.6 KiB
NASM
229 lines
5.6 KiB
NASM
|
; Copyright (C) 2014 Renesas Electronics Corporation
|
||
|
; RENESAS ELECTRONICS CONFIDENTIAL AND PROPRIETARY.
|
||
|
; This program must be used solely for the purpose for which
|
||
|
; it was furnished by Renesas Electronics Corporation. No part of this
|
||
|
; program may be reproduced or disclosed to others, in any
|
||
|
; form, without the prior written permission of Renesas Electronics
|
||
|
; Corporation.
|
||
|
|
||
|
; NOTE : THIS IS A TYPICAL EXAMPLE.
|
||
|
|
||
|
$IFNDEF __RENESAS_VERSION__
|
||
|
__RENESAS_VERSION__ .EQU 0x01000000
|
||
|
$ENDIF
|
||
|
|
||
|
.public _start
|
||
|
.public _exit
|
||
|
|
||
|
;-----------------------------------------------------------------------------
|
||
|
; RAM section
|
||
|
;-----------------------------------------------------------------------------
|
||
|
.SECTION .dataR, DATA
|
||
|
.SECTION .sdataR, DATA
|
||
|
; .SECTION .datafR, DATAF
|
||
|
; .SECTION .textfR, TEXTF
|
||
|
|
||
|
$IF (__RENESAS_VERSION__ < 0x01010000) ; for CC-RL V1.00
|
||
|
;-----------------------------------------------------------------------------
|
||
|
; stack area
|
||
|
;-----------------------------------------------------------------------------
|
||
|
; !!! [CAUTION] !!!
|
||
|
; Set up stack size suitable for a project.
|
||
|
.SECTION .stack_bss, BSS
|
||
|
_stackend:
|
||
|
.DS 0x200
|
||
|
_stacktop:
|
||
|
$ENDIF
|
||
|
|
||
|
|
||
|
;-----------------------------------------------------------------------------
|
||
|
; RESET vector
|
||
|
;-----------------------------------------------------------------------------
|
||
|
_start .VECTOR 0
|
||
|
|
||
|
;-----------------------------------------------------------------------------
|
||
|
; startup
|
||
|
;-----------------------------------------------------------------------------
|
||
|
.SECTION .text, TEXT
|
||
|
_start:
|
||
|
;--------------------------------------------------
|
||
|
; setting register bank
|
||
|
;--------------------------------------------------
|
||
|
; SEL RB0
|
||
|
|
||
|
;--------------------------------------------------
|
||
|
; setting mirror area
|
||
|
;--------------------------------------------------
|
||
|
; ONEB !PMC ; mirror area = 10000-1FFFFH
|
||
|
|
||
|
;--------------------------------------------------
|
||
|
; setting the stack pointer
|
||
|
;--------------------------------------------------
|
||
|
$IF (__RENESAS_VERSION__ >= 0x01010000)
|
||
|
MOVW SP,#LOWW(__STACK_ADDR_START)
|
||
|
$ELSE ; for CC-RL V1.00
|
||
|
MOVW SP,#LOWW(_stacktop)
|
||
|
$ENDIF
|
||
|
|
||
|
;--------------------------------------------------
|
||
|
; initializing stack area
|
||
|
;--------------------------------------------------
|
||
|
;$IF (__RENESAS_VERSION__ >= 0x01010000)
|
||
|
; MOVW AX,#LOWW(__STACK_ADDR_END)
|
||
|
;$ELSE ; for CC-RL V1.00
|
||
|
; MOVW AX,#LOWW(_stackend)
|
||
|
;$ENDIF
|
||
|
; CALL !!_stkinit
|
||
|
|
||
|
;--------------------------------------------------
|
||
|
; hardware initialization
|
||
|
;--------------------------------------------------
|
||
|
CALL !!_hdwinit
|
||
|
|
||
|
;--------------------------------------------------
|
||
|
; initializing BSS
|
||
|
;--------------------------------------------------
|
||
|
; clear external variables which doesn't have initial value (near)
|
||
|
MOVW HL,#LOWW(STARTOF(.bss))
|
||
|
MOVW AX,#LOWW(STARTOF(.bss) + SIZEOF(.bss))
|
||
|
BR $.L2_BSS
|
||
|
.L1_BSS:
|
||
|
MOV [HL+0],#0
|
||
|
INCW HL
|
||
|
.L2_BSS:
|
||
|
CMPW AX,HL
|
||
|
BNZ $.L1_BSS
|
||
|
|
||
|
; clear saddr variables which doesn't have initial value
|
||
|
MOVW HL,#LOWW(STARTOF(.sbss))
|
||
|
MOVW AX,#LOWW(STARTOF(.sbss) + SIZEOF(.sbss))
|
||
|
BR $.L2_SBSS
|
||
|
.L1_SBSS:
|
||
|
MOV [HL+0],#0
|
||
|
INCW HL
|
||
|
.L2_SBSS:
|
||
|
CMPW AX,HL
|
||
|
BNZ $.L1_SBSS
|
||
|
|
||
|
; clear external variables which doesn't have initial value (far)
|
||
|
; MOV ES,#HIGHW(STARTOF(.bssf))
|
||
|
; MOVW HL,#LOWW(STARTOF(.bssf))
|
||
|
; MOVW AX,#LOWW(STARTOF(.bssf) + SIZEOF(.bssf))
|
||
|
; BR $.L2_BSSF
|
||
|
;.L1_BSSF:
|
||
|
; MOV ES:[HL+0],#0
|
||
|
; INCW HL
|
||
|
;.L2_BSSF:
|
||
|
; CMPW AX,HL
|
||
|
; BNZ $.L1_BSSF
|
||
|
|
||
|
;--------------------------------------------------
|
||
|
; ROM data copy
|
||
|
;--------------------------------------------------
|
||
|
; copy external variables having initial value (near)
|
||
|
MOV ES,#HIGHW(STARTOF(.data))
|
||
|
MOVW BC,#LOWW(SIZEOF(.data))
|
||
|
BR $.L2_DATA
|
||
|
.L1_DATA:
|
||
|
DECW BC
|
||
|
MOV A,ES:LOWW(STARTOF(.data))[BC]
|
||
|
MOV LOWW(STARTOF(.dataR))[BC],A
|
||
|
.L2_DATA:
|
||
|
CLRW AX
|
||
|
CMPW AX,BC
|
||
|
BNZ $.L1_DATA
|
||
|
|
||
|
; copy saddr variables having initial value
|
||
|
MOV ES,#HIGHW(STARTOF(.sdata))
|
||
|
MOVW BC,#LOWW(SIZEOF(.sdata))
|
||
|
BR $.L2_SDATA
|
||
|
.L1_SDATA:
|
||
|
DECW BC
|
||
|
MOV A,ES:LOWW(STARTOF(.sdata))[BC]
|
||
|
MOV LOWW(STARTOF(.sdataR))[BC],A
|
||
|
.L2_SDATA:
|
||
|
CLRW AX
|
||
|
CMPW AX,BC
|
||
|
BNZ $.L1_SDATA
|
||
|
|
||
|
; copy external variables having initial value (far)
|
||
|
; MOVW BC,#LOWW(SIZEOF(.dataf))
|
||
|
; BR $.L2_DATAF
|
||
|
;.L1_DATAF:
|
||
|
; DECW BC
|
||
|
; MOV ES,#HIGHW(STARTOF(.dataf))
|
||
|
; MOV A,ES:LOWW(STARTOF(.dataf))[BC]
|
||
|
; MOV ES,#HIGHW(STARTOF(.datafR))
|
||
|
; MOV ES:LOWW(STARTOF(.datafR))[BC],A
|
||
|
;.L2_DATAF:
|
||
|
; CLRW AX
|
||
|
; CMPW AX,BC
|
||
|
; BNZ $.L1_DATAF
|
||
|
|
||
|
; copy .text to RAM
|
||
|
; MOV C,#HIGHW(STARTOF(.textf))
|
||
|
; MOVW HL,#LOWW(STARTOF(.textf))
|
||
|
; MOVW DE,#LOWW(STARTOF(.textfR))
|
||
|
; BR $.L2_TEXT
|
||
|
;.L1_TEXT:
|
||
|
; MOV A,C
|
||
|
; MOV ES,A
|
||
|
; MOV A,ES:[HL]
|
||
|
; MOV [DE],A
|
||
|
; INCW DE
|
||
|
; INCW HL
|
||
|
; CLRW AX
|
||
|
; CMPW AX,HL
|
||
|
; SKNZ
|
||
|
; INC C
|
||
|
;.L2_TEXT:
|
||
|
; MOVW AX,HL
|
||
|
; CMPW AX,#LOWW(STARTOF(.text) + SIZEOF(.text))
|
||
|
; BNZ $.L1_TEXT
|
||
|
|
||
|
;--------------------------------------------------
|
||
|
; call main function
|
||
|
;--------------------------------------------------
|
||
|
CALL !!_main ; main();
|
||
|
|
||
|
;--------------------------------------------------
|
||
|
; call exit function
|
||
|
;--------------------------------------------------
|
||
|
CLRW AX ; exit(0)
|
||
|
_exit:
|
||
|
BR $_exit
|
||
|
|
||
|
;-----------------------------------------------------------------------------
|
||
|
; section
|
||
|
;-----------------------------------------------------------------------------
|
||
|
$IF (__RENESAS_VERSION__ >= 0x01010000)
|
||
|
.SECTION .RLIB, TEXTF
|
||
|
.L_section_RLIB:
|
||
|
.SECTION .SLIB, TEXTF
|
||
|
.L_section_SLIB:
|
||
|
$ENDIF
|
||
|
.SECTION .textf, TEXTF
|
||
|
.L_section_textf:
|
||
|
.SECTION .const, CONST
|
||
|
.L_section_const:
|
||
|
.SECTION .constf, CONSTF
|
||
|
.L_section_constf:
|
||
|
.SECTION .data, DATA
|
||
|
.L_section_data:
|
||
|
;.SECTION .dataf, DATAF
|
||
|
;.L_section_dataf:
|
||
|
.SECTION .sdata, SDATA
|
||
|
.L_section_sdata:
|
||
|
.SECTION .bss, BSS
|
||
|
.L_section_bss:
|
||
|
;.SECTION .bssf, BSSF
|
||
|
;.L_section_bssf:
|
||
|
.SECTION .sbss, SBSS
|
||
|
.L_section_sbss:
|
||
|
|
||
|
.SECTION User_Data, CONSTF
|
||
|
.ORG 0x19ff0
|
||
|
|
||
|
.DB4 0xAA5555AA
|
||
|
|