Added startup code, updated ldscript.
This commit is contained in:
parent
2826b89248
commit
ca588dca3c
|
@ -1,16 +1,21 @@
|
|||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
enable_language(ASM)
|
||||
|
||||
project(hello)
|
||||
|
||||
set(TARGET_SRCS
|
||||
set(TARGET_LDSCRIPT "${CMAKE_SOURCE_DIR}/stx7105.ld")
|
||||
|
||||
set(TARGET_SOURCES
|
||||
"src/main.c"
|
||||
"startup_stx7105.S"
|
||||
)
|
||||
|
||||
set(TARGET_INCLUDES
|
||||
"include"
|
||||
)
|
||||
|
||||
set(TARGET_FLAGS_HARDWARE "-m4")
|
||||
set(TARGET_FLAGS_HARDWARE "-m4-300 -ml")
|
||||
|
||||
set(CMAKE_C_FLAGS_DEBUG "-DDEBUG -g -O0")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-DDEBUG -g -O0")
|
||||
|
@ -22,4 +27,13 @@ set(CMAKE_EXE_LINKER_FLAGS_RELEASE "-flto")
|
|||
|
||||
set(CMAKE_C_FLAGS "${TARGET_FLAGS_HARDWARE} -Wall")
|
||||
set(CMAKE_CXX_FLAGS "${TARGET_FLAGS_HARDWARE} -Wall")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${TARGET_FLAGS_HARDWARE} -Wall")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${TARGET_FLAGS_HARDWARE} -Wall -lc -lm -nostartfiles -Wl,--print-memory-usage")
|
||||
|
||||
add_compile_definitions(TARGET_DEFS)
|
||||
include_directories(TARGET_INCLUDES)
|
||||
|
||||
add_executable(${CMAKE_PROJECT_NAME}.elf ${TARGET_SOURCES})
|
||||
target_link_options(${CMAKE_PROJECT_NAME}.elf
|
||||
PRIVATE "-T${TARGET_LDSCRIPT}"
|
||||
PRIVATE "-Wl,-Map=${CMAKE_PROJECT_NAME}.map"
|
||||
)
|
|
@ -1,5 +1,67 @@
|
|||
.global _start
|
||||
.section .text.init, "ax"
|
||||
.global _start
|
||||
|
||||
_start:
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
mov.l stack_k, sp /* Setup R15(SP) */
|
||||
|
||||
|
||||
copy_data:
|
||||
mov.l sidata_k, r0
|
||||
mov.l sdata_k, r1
|
||||
mov.l edata_k, r2
|
||||
|
||||
loop_copy_data:
|
||||
mov.l @r0+, r3 /* Load a word to r3 from [sidata], with post-increment of 4 */
|
||||
mov.l r3, @r1 /* Store the word in r3 to [sdata] */
|
||||
add #4, r1 /* Increment sdata pointer */
|
||||
cmp/ge r1, r2
|
||||
bt loop_copy_data
|
||||
|
||||
zero_bss:
|
||||
mov.l edata_k, r0
|
||||
mov.l end_k, r1
|
||||
mov #0, r2
|
||||
|
||||
loop_zero_bss:
|
||||
mov.l r2, @r0
|
||||
add #4, r0
|
||||
cmp/ge r0, r1
|
||||
bt loop_zero_bss
|
||||
|
||||
setup_fpu:
|
||||
mov.l set_fpscr_k, r1
|
||||
jsr @r1
|
||||
mov #0, r4
|
||||
lds r3, fpscr
|
||||
|
||||
|
||||
mov.l main_k,r0
|
||||
jsr @r0
|
||||
or r0, r0
|
||||
|
||||
mov r0, r4
|
||||
mov.l exit_k, r0
|
||||
jsr @r0
|
||||
or r0, r0
|
||||
|
||||
/* It would be more efficient by using indirect addressing instead of 8 instructions... */
|
||||
|
||||
.align 2
|
||||
set_fpscr_k:
|
||||
.long ___set_fpscr
|
||||
stack_k:
|
||||
.long _stack
|
||||
sidata_k:
|
||||
.long _sidata
|
||||
sdata_k:
|
||||
.long _sdata
|
||||
edata_k:
|
||||
.long _edata
|
||||
end_k:
|
||||
.long _end
|
||||
main_k:
|
||||
.long _main /* Same address as main */
|
||||
exit_k:
|
||||
.long _exit
|
||||
|
|
53
stx7105.ld
53
stx7105.ld
|
@ -1,7 +1,56 @@
|
|||
MEMORY {
|
||||
|
||||
HEAP_SIZE = 0x10000;
|
||||
STACK_SIZE = 0x10000;
|
||||
|
||||
ENTRY(_start)
|
||||
|
||||
/* For bare-metal applications, we use 29-bit addressing mode. */
|
||||
|
||||
MEMORY {
|
||||
EMI (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 /* EMI physical address: 0x0000_0000 */
|
||||
LMI (rwx) : ORIGIN = 0x0C000000, LENGTH = 0x10000000 /* LMI physical address: 0x0C00_0000 */
|
||||
}
|
||||
|
||||
SECTIONS {
|
||||
|
||||
.text : {
|
||||
. = ALIGN(4);
|
||||
*(.text.init)
|
||||
*(.text)
|
||||
*(.text*)
|
||||
*(.rodata)
|
||||
*(.rodata*)
|
||||
} >EMI
|
||||
|
||||
.data : {
|
||||
. = ALIGN(4);
|
||||
_sdata = .;
|
||||
*(.data)
|
||||
*(.data*)
|
||||
_edata = .;
|
||||
} >LMI AT >EMI
|
||||
|
||||
_sidata = LOADADDR(.data);
|
||||
|
||||
.bss : {
|
||||
. = ALIGN(4);
|
||||
__bss_start = .;
|
||||
*(.bss)
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
_end = ALIGN(8);
|
||||
__end = _end;
|
||||
} >LMI
|
||||
|
||||
.heap : {
|
||||
. = ALIGN(8);
|
||||
. += HEAP_SIZE;
|
||||
}
|
||||
|
||||
.stack : {
|
||||
. = ALIGN(8);
|
||||
. += STACK_SIZE;
|
||||
}
|
||||
|
||||
_stack = ORIGIN(LMI) + LENGTH(LMI);
|
||||
PROVIDE(__stack = _stack);
|
||||
}
|
Loading…
Reference in New Issue