summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2017-04-02 15:40:03 -0700
committerKeith Packard <keithp@keithp.com>2017-04-02 15:40:03 -0700
commit54c76d48924fecc2aeabbc352c553822a87f9d19 (patch)
treeee7b94cb02b306d33e2a81beadb6152afb53f05d
parent7b031d5a86213364196b67f7e3f92865da8adbf9 (diff)
cortexelf-v1: Use new memory map to access all flash and ram. Add fat.
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/cortexelf-v1/Makefile5
-rw-r--r--src/cortexelf-v1/ao_cortexelf.c2
-rw-r--r--src/stm/altos-512.ld98
3 files changed, 104 insertions, 1 deletions
diff --git a/src/cortexelf-v1/Makefile b/src/cortexelf-v1/Makefile
index c74b0cce..02ef817e 100644
--- a/src/cortexelf-v1/Makefile
+++ b/src/cortexelf-v1/Makefile
@@ -4,6 +4,7 @@
#
include ../stm/Makefile.defs
+LDFLAGS=-L../stm -Wl,-Taltos-512.ld
INC = \
ao.h \
@@ -61,6 +62,8 @@ ALTOS_SRC = \
ao_ps2.c \
ao_console.c \
ao_sdcard.c \
+ ao_bufio.c \
+ ao_fat.c \
$(PROFILE) \
$(SAMPLE_PROFILE) \
$(STACK_GUARD)
@@ -80,7 +83,7 @@ OBJ=$(SRC:.c=.o)
all: $(PROG) $(HEX)
-$(PROG): Makefile $(OBJ) altos.ld
+$(PROG): Makefile $(OBJ) altos-512.ld
$(call quiet,CC) $(LDFLAGS) $(CFLAGS) -o $(PROG) $(OBJ) $(LIBS)
../altitude-pa.h: make-altitude-pa
diff --git a/src/cortexelf-v1/ao_cortexelf.c b/src/cortexelf-v1/ao_cortexelf.c
index 67062c85..0c6852d9 100644
--- a/src/cortexelf-v1/ao_cortexelf.c
+++ b/src/cortexelf-v1/ao_cortexelf.c
@@ -26,6 +26,7 @@
#include <ao_vga.h>
#include <ao_console.h>
#include <ao_sdcard.h>
+#include <ao_fat.h>
struct ao_task ball_task;
@@ -207,6 +208,7 @@ main(void)
ao_exti_init();
ao_sdcard_init();
+ ao_fat_init();
ao_ps2_init();
ao_vga_init();
diff --git a/src/stm/altos-512.ld b/src/stm/altos-512.ld
new file mode 100644
index 00000000..78c41685
--- /dev/null
+++ b/src/stm/altos-512.ld
@@ -0,0 +1,98 @@
+/*
+ * Copyright © 2017 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+MEMORY {
+ rom (rx) : ORIGIN = 0x08001000, LENGTH = 508K
+ ram (!w) : ORIGIN = 0x20000000, LENGTH = 81408
+ stack (!w) : ORIGIN = 0x20013e00, LENGTH = 512
+}
+
+INCLUDE registers.ld
+
+EXTERN (stm_interrupt_vector)
+
+SECTIONS {
+ /*
+ * Rom contents
+ */
+
+ .text ORIGIN(rom) : {
+ __text_start__ = .;
+ *(.interrupt) /* Interrupt vectors */
+
+ . = ORIGIN(rom) + 0x100;
+
+
+ /* Ick. What I want is to specify the
+ * addresses of some global constants so
+ * that I can find them across versions
+ * of the application. I can't figure out
+ * how to make gnu ld do that, so instead
+ * we just load the two files that include
+ * these defines in the right order here and
+ * expect things to 'just work'. Don't change
+ * the contents of those files, ok?
+ */
+ ao_romconfig.o(.romconfig*)
+ ao_product.o(.romconfig*)
+ *(.text*) /* Executable code */
+ *(.rodata*) /* Constants */
+
+ } > rom
+
+ .ARM.exidx : {
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ } > rom
+ __text_end__ = .;
+
+ /* Boot data which must live at the start of ram so that
+ * the application and bootloader share the same addresses.
+ * This must be all uninitialized data
+ */
+ .boot (NOLOAD) : {
+ __boot_start__ = .;
+ *(.boot)
+ . = ALIGN(4);
+ __boot_end__ = .;
+ } >ram
+
+ /* Data -- relocated to RAM, but written to ROM
+ */
+ .data : {
+ __data_start__ = .;
+ *(.data) /* initialized data */
+ . = ALIGN(4);
+ __data_end__ = .;
+ } >ram AT>rom
+
+ .bss : {
+ __bss_start__ = .;
+ *(.bss)
+ *(COMMON)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ } >ram
+
+ PROVIDE(end = .);
+
+ PROVIDE(__stack__ = ORIGIN(stack) + LENGTH(stack));
+}
+
+ENTRY(start);
+
+