summaryrefslogtreecommitdiffstats
path: root/firmware/crt1.S
diff options
context:
space:
mode:
authorcpldcpu <cpldcpu@gmail.com>2013-12-06 15:46:47 +0100
committercpldcpu <cpldcpu@gmail.com>2013-12-06 15:46:47 +0100
commit5eec4f6815221e78c06cc132df258f38d5b46cd8 (patch)
tree6d889eb28478fce751f75ec96edfd4f2b666d840 /firmware/crt1.S
parent598ca1ed69747777b2df560f37529eb242b23c43 (diff)
downloadmicronucleus-5eec4f6815221e78c06cc132df258f38d5b46cd8.tar.gz
micronucleus-5eec4f6815221e78c06cc132df258f38d5b46cd8.tar.bz2
micronucleus-5eec4f6815221e78c06cc132df258f38d5b46cd8.zip
custom crt, remove tiny85flashinit, UNTESTED
Diffstat (limited to 'firmware/crt1.S')
-rw-r--r--firmware/crt1.S102
1 files changed, 102 insertions, 0 deletions
diff --git a/firmware/crt1.S b/firmware/crt1.S
new file mode 100644
index 0000000..bb7b8e0
--- /dev/null
+++ b/firmware/crt1.S
@@ -0,0 +1,102 @@
+
+/* Copyright (c) 2002, Marek Michalkiewicz <marekm@amelek.gda.pl>
+ Copyright (c) 2007, 2008 Eric B. Weddington
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ * Neither the name of the copyright holders nor the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE. */
+
+/* $Id$ */
+
+#if (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
+#error "GCC version >= 3.3 required"
+#endif
+/*
+#include IOSYMFILE
+
+#include "macros.inc"
+*/
+
+ #define XJMP rjmp
+ #define XCALL rcall
+
+ .macro vector name
+ .weak \name
+ .set \name, __init
+ XJMP \name
+ .endm
+
+ .section .vectors,"ax",@progbits
+ .global __vectors
+ .global __bad_interrupt
+ .func __vectors
+__bad_interrupt:
+__vectors:
+ XJMP __init
+ vector __vector_1
+ vector __vector_2
+ vector __vector_3
+ .endfunc
+
+ /* Handle unexpected interrupts (enabled and no handler), which
+ usually indicate a bug. Jump to the __vector_default function
+ if defined by the user, otherwise jump to the reset address.
+
+ This must be in a different section, otherwise the assembler
+ will resolve "rjmp" offsets and there will be no relocs. */
+
+ .section .init0,"ax",@progbits
+ .weak __init
+; .func __init
+__init:
+
+ .weak __stack
+
+ /* By default, malloc() uses the current value of the stack pointer
+ minus __malloc_margin as the highest available address.
+
+ In some applications with external SRAM, the stack can be below
+ the data section (in the internal SRAM - faster), and __heap_end
+ should be set to the highest address available for malloc(). */
+ .weak __heap_end
+ .set __heap_end, 0
+
+ .section .init2,"ax",@progbits
+ clr R1
+ out 0x3f,r1
+
+ .section .init9,"ax",@progbits
+ XJMP main
+; .endfunc
+
+
+ .section .zerotable,"ax",@progbits
+zerovectors:
+ XJMP __init
+ XJMP __vector_1
+ XJMP __vector_2
+ XJMP __vector_3