mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-07-11 23:56:15 +02:00
+ Add RL78G14 specific linker script. + Move the call to the function that sets up the clocks to before the code that sets up the .data and .bss sections.
121 lines
3.1 KiB
NASM
121 lines
3.1 KiB
NASM
/***********************************************************************/
|
|
/* */
|
|
/* PROJECT NAME : RTOSDemo */
|
|
/* FILE : reset_program.asm */
|
|
/* DESCRIPTION : Reset Program */
|
|
/* CPU SERIES : RL78 - G14 */
|
|
/* CPU TYPE : R5F104PJ */
|
|
/* */
|
|
/* This file is generated by e2studio. */
|
|
/* */
|
|
/***********************************************************************/
|
|
|
|
|
|
|
|
/*reset_program.asm*/
|
|
|
|
.list
|
|
|
|
.global _PowerON_Reset /*! global Start routine */
|
|
.short _PowerON_Reset
|
|
|
|
#ifdef CPPAPP
|
|
___dso_handle:
|
|
.global ___dso_handle
|
|
#endif
|
|
|
|
|
|
.extern _HardwareSetup /*! external Sub-routine to initialise Hardware*/
|
|
.extern _data
|
|
.extern _mdata
|
|
.extern _ebss
|
|
.extern _bss
|
|
|
|
.extern _edata
|
|
.extern _main
|
|
.extern _stack
|
|
.extern _exit
|
|
|
|
/* ;; HL = start of list
|
|
;; DE = end of list
|
|
;; BC = step direction (+2 or -2)
|
|
*/
|
|
|
|
.text
|
|
|
|
/* call to _PowerON_Reset */
|
|
_PowerON_Reset:
|
|
/* initialise user stack pointer */
|
|
movw sp,#_stack /* Set stack pointer */
|
|
|
|
/* call the hardware initialiser */
|
|
call !!_HardwareSetup
|
|
nop
|
|
|
|
/* load data section from ROM to RAM */
|
|
;; block move to initialize .data
|
|
|
|
;; we're copying from 00:[_romdatastart] to 0F:[_datastart]
|
|
;; and our data is not in the mirrored area.
|
|
mov es, #0
|
|
sel rb0 /* ;;bank 0 */
|
|
movw de, #_mdata /* src ROM address of data section in de */
|
|
movw hl, #_data /* dest start RAM address of data section in hl */
|
|
|
|
sel rb1 /* bank 1 */
|
|
movw hl, #_data /* dest start RAM address of data section in hl */
|
|
movw ax, #_edata /* ;; size of romdata section in ax */
|
|
subw ax,hl /* store data size */
|
|
shrw ax,1
|
|
1:
|
|
cmpw ax, #0 /* check if end of data */
|
|
bz $1f
|
|
decw ax
|
|
sel rb0 /* bank 0 */
|
|
movw ax, es:[de]
|
|
movw [hl], ax
|
|
incw de
|
|
incw de
|
|
incw hl
|
|
incw hl
|
|
sel rb1 /* bank 1 - compare and decrement*/
|
|
br $1b
|
|
1:
|
|
|
|
|
|
/* bss initialisation : zero out bss */
|
|
sel rb0 /* bank 0 */
|
|
movw hl, #_bss /* store the start address of bss in hl */
|
|
movw ax, #0 /* load AX reg with zero */
|
|
sel rb1 /* bank 1 */
|
|
movw ax, #_ebss /* store the end address (size of) bss section in ax */
|
|
subw ax,hl ;; store data size
|
|
shrw ax,1
|
|
1:
|
|
cmpw ax, #0
|
|
bz $1f
|
|
decw ax
|
|
sel rb0 /* bank 0 */
|
|
movw [hl], ax
|
|
incw hl
|
|
incw hl
|
|
sel rb1
|
|
br $1b
|
|
1:
|
|
sel rb0 /* bank 0 */
|
|
|
|
/* start user program */
|
|
|
|
movw ax, #0
|
|
push ax /* envp */
|
|
push ax /* argv */
|
|
push ax /* argc */
|
|
call !!_main
|
|
|
|
|
|
/* call to exit*/
|
|
_exit:
|
|
br $_exit
|
|
|
|
.end
|