blob: ef91f42a87bf74042545a0a2f31967ec8eb8597f [file] [log] [blame]
// Rowley C Compiler, runtime support.
//
// Copyright (c) 2001, 2002, 2003 Rowley Associates Limited.
//
// This file may be distributed under the terms of the License Agreement
// provided with this software.
//
// THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
; Create sections
.data
.bss
; Go to code section.
.code
; Executed upon reset
__reset proc
; Turn off watchdog. You can enable it in main() if required.
mov.w #0x5a80, &0x120
; Set up stack.
mov.w #RAM_Start_Address+RAM_Size, sp
; Copy from initialised data section to data section.
mov.w #SFB(IDATA0), r15
mov.w #data_init_begin, r14
mov.w #data_init_end-data_init_begin, r13
call #_memcpy
; Zero the bss. Ensure the stack is not allocated in the bss!
mov.w #SFB(UDATA0), r15
mov.w #0, r14
mov.w #SFE(UDATA0)-SFB(UDATA0), r13
call #_memset
; Call user entry point void main(void).
call #_main
; If main() returns, kick off again.
jmp __reset
endproc
; Heap data structures; removed by the linker if the heap isn't used.
.break
.data
align WORD
___heap_start__::
DW 0
DW heap_size
DS heap_size-4
; Reset vector
.vectors
.keep
org 0x1e
dw __reset
; Initialise the IDATA0 section by duplicating the contents into the
; CONST section and copying them on startup.
.const
data_init_begin:
.init "IDATA0"
data_init_end: